xref: /trunk/main/sc/inc/dpoutput.hxx (revision 38d50f7b)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef SC_DPOUTPUT_HXX
25 #define SC_DPOUTPUT_HXX
26 
27 #include <com/sun/star/sheet/XDimensionsSupplier.hpp>
28 #include <com/sun/star/sheet/DataResult.hpp>
29 #include <com/sun/star/sheet/MemberResult.hpp>
30 #include <com/sun/star/sheet/GeneralFunction.hpp>
31 #include <com/sun/star/sheet/DataPilotOutputRangeType.hpp>
32 
33 #include "global.hxx"
34 #include "address.hxx"
35 
36 #include "dpcachetable.hxx"
37 #include <vector>
38 
39 namespace com { namespace sun { namespace star { namespace sheet {
40     struct DataPilotFieldFilter;
41     struct DataPilotTablePositionData;
42 }}}}
43 
44 class Rectangle;
45 class SvStream;
46 class ScDocument;
47 class ScStrCollection;
48 
49 struct ScDPOutLevelData;
50 
51 
52 struct ScDPGetPivotDataField
53 {
54     String maFieldName;
55     com::sun::star::sheet::GeneralFunction meFunction;
56 
57     bool   mbValIsStr;
58     String maValStr;
59     double mnValNum;
60 
ScDPGetPivotDataFieldScDPGetPivotDataField61         ScDPGetPivotDataField() :
62             meFunction( com::sun::star::sheet::GeneralFunction_NONE ),
63             mbValIsStr( false ),
64             mnValNum( 0.0 )
65         {
66         }
67 };
68 
69 
70 
71 class ScDPOutput			//! name???
72 {
73 private:
74 	//!	use impl-object?
75 	ScDocument*				pDoc;
76 	com::sun::star::uno::Reference<
77 		com::sun::star::sheet::XDimensionsSupplier> xSource;
78 	ScAddress				aStartPos;
79 	sal_Bool					bDoFilter;
80 	ScDPOutLevelData*		pColFields;
81 	ScDPOutLevelData*		pRowFields;
82 	ScDPOutLevelData*		pPageFields;
83 	long					nColFieldCount;
84 	long					nRowFieldCount;
85 	long					nPageFieldCount;
86 	com::sun::star::uno::Sequence<
87 		com::sun::star::uno::Sequence<
88 			com::sun::star::sheet::DataResult> > aData;
89 	sal_Bool					bResultsError;
90     bool                    mbHasDataLayout;
91 	String					aDataDescription;
92 
93     // Number format related parameters
94 	sal_uInt32*					pColNumFmt;
95 	sal_uInt32*					pRowNumFmt;
96 	long					nColFmtCount;
97 	long					nRowFmtCount;
98     sal_uInt32                  nSingleNumFmt;
99 
100     // Output geometry related parameters
101 	sal_Bool					bSizesValid;
102 	sal_Bool					bSizeOverflow;
103 	long					nColCount;
104 	long					nRowCount;
105 	long					nHeaderSize;
106     bool                    mbHeaderLayout;  // sal_True : grid, sal_False : standard
107 	SCCOL					nTabStartCol;
108 	SCROW					nTabStartRow;
109 	SCCOL					nMemberStartCol;
110 	SCROW					nMemberStartRow;
111 	SCCOL					nDataStartCol;
112 	SCROW					nDataStartRow;
113 	SCCOL					nTabEndCol;
114 	SCROW					nTabEndRow;
115 
116 	void			DataCell( SCCOL nCol, SCROW nRow, SCTAB nTab,
117 								const com::sun::star::sheet::DataResult& rData );
118 	void			HeaderCell( SCCOL nCol, SCROW nRow, SCTAB nTab,
119 								const com::sun::star::sheet::MemberResult& rData,
120 								sal_Bool bColHeader, long nLevel );
121     void            FieldCell( SCCOL nCol, SCROW nRow, SCTAB nTab, const String& rCaption,
122                                bool bInTable, bool bPopup, bool bHasHiddenMember );
123 	void			CalcSizes();
124 
125     /** Query which sub-area of the table the cell is in. See
126         css.sheet.DataPilotTablePositionType for the interpretation of the
127         return value. */
128     sal_Int32       GetPositionType(const ScAddress& rPos);
129 
130 public:
131 					ScDPOutput( ScDocument* pD,
132 								const com::sun::star::uno::Reference<
133 									com::sun::star::sheet::XDimensionsSupplier>& xSrc,
134 								const ScAddress& rPos, sal_Bool bFilter );
135 					~ScDPOutput();
136 
137 	void			SetPosition( const ScAddress& rPos );
138 
139 	void			Output();			//! Refresh?
140     ScRange			GetOutputRange( sal_Int32 nRegionType = ::com::sun::star::sheet::DataPilotOutputRangeType::WHOLE );
141 	long			GetHeaderRows();
142 	sal_Bool			HasError();			// range overflow or exception from source
143 
144     void            GetPositionData(const ScAddress& rPos, ::com::sun::star::sheet::DataPilotTablePositionData& rPosData);
145 
146     /** Get filtering criteria based on the position of the cell within data
147         field region. */
148     bool            GetDataResultPositionData(::std::vector< ::com::sun::star::sheet::DataPilotFieldFilter >& rFilters, const ScAddress& rPos);
149 
150     sal_Bool            GetPivotData( ScDPGetPivotDataField& rTarget, /* returns result */
151                                   const std::vector< ScDPGetPivotDataField >& rFilters );
152 	long			GetHeaderDim( const ScAddress& rPos, sal_uInt16& rOrient );
153 	sal_Bool			GetHeaderDrag( const ScAddress& rPos, sal_Bool bMouseLeft, sal_Bool bMouseTop,
154 									long nDragDim,
155 									Rectangle& rPosRect, sal_uInt16& rOrient, long& rDimPos );
156 	sal_Bool			IsFilterButton( const ScAddress& rPos );
157 
158     void            GetMemberResultNames( ScStrCollection& rNames, long nDimension );
159 
160     void            SetHeaderLayout(bool bUseGrid);
161     bool            GetHeaderLayout() const;
162 
163     static void     GetDataDimensionNames( String& rSourceName, String& rGivenName,
164                                            const com::sun::star::uno::Reference<
165                                                com::sun::star::uno::XInterface>& xDim );
166 };
167 
168 
169 #endif
170 
171