summaryrefslogtreecommitdiff
path: root/sc/inc/dpoutput.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'sc/inc/dpoutput.hxx')
-rw-r--r--sc/inc/dpoutput.hxx176
1 files changed, 176 insertions, 0 deletions
diff --git a/sc/inc/dpoutput.hxx b/sc/inc/dpoutput.hxx
new file mode 100644
index 000000000000..d1d07e2c42cb
--- /dev/null
+++ b/sc/inc/dpoutput.hxx
@@ -0,0 +1,176 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef SC_DPOUTPUT_HXX
+#define SC_DPOUTPUT_HXX
+
+#include <com/sun/star/sheet/XDimensionsSupplier.hpp>
+#include <com/sun/star/sheet/DataResult.hpp>
+#include <com/sun/star/sheet/MemberResult.hpp>
+#include <com/sun/star/sheet/GeneralFunction.hpp>
+#include <com/sun/star/sheet/DataPilotOutputRangeType.hpp>
+
+#include "global.hxx"
+#include "address.hxx"
+
+#include "dpcachetable.hxx"
+#include <vector>
+
+namespace com { namespace sun { namespace star { namespace sheet {
+ struct DataPilotFieldFilter;
+ struct DataPilotTablePositionData;
+}}}}
+
+class Rectangle;
+class SvStream;
+class ScDocument;
+class ScStrCollection;
+
+struct ScDPOutLevelData;
+
+
+struct ScDPGetPivotDataField
+{
+ String maFieldName;
+ com::sun::star::sheet::GeneralFunction meFunction;
+
+ bool mbValIsStr;
+ String maValStr;
+ double mnValNum;
+
+ ScDPGetPivotDataField() :
+ meFunction( com::sun::star::sheet::GeneralFunction_NONE ),
+ mbValIsStr( false ),
+ mnValNum( 0.0 )
+ {
+ }
+};
+
+
+
+class ScDPOutput //! name???
+{
+private:
+ //! use impl-object?
+ ScDocument* pDoc;
+ com::sun::star::uno::Reference<
+ com::sun::star::sheet::XDimensionsSupplier> xSource;
+ ScAddress aStartPos;
+ bool bDoFilter;
+ ScDPOutLevelData* pColFields;
+ ScDPOutLevelData* pRowFields;
+ ScDPOutLevelData* pPageFields;
+ long nColFieldCount;
+ long nRowFieldCount;
+ long nPageFieldCount;
+ com::sun::star::uno::Sequence<
+ com::sun::star::uno::Sequence<
+ com::sun::star::sheet::DataResult> > aData;
+ bool bResultsError;
+ bool mbHasDataLayout;
+ String aDataDescription;
+
+ // Number format related parameters
+ sal_uInt32* pColNumFmt;
+ sal_uInt32* pRowNumFmt;
+ long nColFmtCount;
+ long nRowFmtCount;
+ sal_uInt32 nSingleNumFmt;
+
+ // Output geometry related parameters
+ bool bSizesValid;
+ bool bSizeOverflow;
+ long nColCount;
+ long nRowCount;
+ long nHeaderSize;
+ bool mbHeaderLayout; // sal_True : grid, sal_False : standard
+ SCCOL nTabStartCol;
+ SCROW nTabStartRow;
+ SCCOL nMemberStartCol;
+ SCROW nMemberStartRow;
+ SCCOL nDataStartCol;
+ SCROW nDataStartRow;
+ SCCOL nTabEndCol;
+ SCROW nTabEndRow;
+
+ void DataCell( SCCOL nCol, SCROW nRow, SCTAB nTab,
+ const com::sun::star::sheet::DataResult& rData );
+ void HeaderCell( SCCOL nCol, SCROW nRow, SCTAB nTab,
+ const com::sun::star::sheet::MemberResult& rData,
+ sal_Bool bColHeader, long nLevel );
+ void FieldCell( SCCOL nCol, SCROW nRow, SCTAB nTab, const String& rCaption,
+ bool bInTable, bool bPopup, bool bHasHiddenMember );
+ void CalcSizes();
+
+ /** Query which sub-area of the table the cell is in. See
+ css.sheet.DataPilotTablePositionType for the interpretation of the
+ return value. */
+ sal_Int32 GetPositionType(const ScAddress& rPos);
+
+public:
+ ScDPOutput( ScDocument* pD,
+ const com::sun::star::uno::Reference<
+ com::sun::star::sheet::XDimensionsSupplier>& xSrc,
+ const ScAddress& rPos, bool bFilter );
+ ~ScDPOutput();
+
+ void SetPosition( const ScAddress& rPos );
+
+ void Output(); //! Refresh?
+ ScRange GetOutputRange( sal_Int32 nRegionType = ::com::sun::star::sheet::DataPilotOutputRangeType::WHOLE );
+ long GetHeaderRows();
+ bool HasError(); // range overflow or exception from source
+
+ void GetPositionData(const ScAddress& rPos, ::com::sun::star::sheet::DataPilotTablePositionData& rPosData);
+
+ /** Get filtering criteria based on the position of the cell within data
+ field region. */
+ bool GetDataResultPositionData(::std::vector< ::com::sun::star::sheet::DataPilotFieldFilter >& rFilters, const ScAddress& rPos);
+
+ sal_Bool GetPivotData( ScDPGetPivotDataField& rTarget, /* returns result */
+ const std::vector< ScDPGetPivotDataField >& rFilters );
+ long GetHeaderDim( const ScAddress& rPos, sal_uInt16& rOrient );
+ sal_Bool GetHeaderDrag( const ScAddress& rPos, sal_Bool bMouseLeft, sal_Bool bMouseTop,
+ long nDragDim,
+ Rectangle& rPosRect, sal_uInt16& rOrient, long& rDimPos );
+ sal_Bool IsFilterButton( const ScAddress& rPos );
+
+ void GetMemberResultNames( ScStrCollection& rNames, long nDimension );
+
+ void SetHeaderLayout(bool bUseGrid);
+ bool GetHeaderLayout() const;
+
+ static void GetDataDimensionNames( String& rSourceName, String& rGivenName,
+ const com::sun::star::uno::Reference<
+ com::sun::star::uno::XInterface>& xDim );
+};
+
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */