xref: /AOO41X/main/sc/inc/dpoutput.hxx (revision 38d50f7b14e1cf975d8c6468d9633894cd59b523)
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