Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : /*
21 : IMPORTANT:
22 : Strictly adhere to the following sequence when creating a pivot table:
23 :
24 : pPivot->SetColFields(aColArr, aColCount)
25 : pPivot->SetRowFields(aRowArr, aRowCount)
26 : pPivot->SetDataFields(aDataArr, aDataCount)
27 : if (pPivot->CreateData())
28 : {
29 : pPivotDrawData();
30 : pPivotReleaseData();
31 : }
32 :
33 : Make sure that either ColArr or RowArr contains a PivotDataField entry.
34 : */
35 :
36 : #ifndef INCLUDED_SC_INC_PIVOT_HXX
37 : #define INCLUDED_SC_INC_PIVOT_HXX
38 :
39 : #include "global.hxx"
40 : #include "address.hxx"
41 : #include "dpglobal.hxx"
42 : #include "calcmacros.hxx"
43 :
44 : #include <vector>
45 : #include <boost/ptr_container/ptr_vector.hpp>
46 :
47 : #define PIVOT_DATA_FIELD (MAXCOLCOUNT)
48 : #include <com/sun/star/uno/Sequence.hxx>
49 : #include <com/sun/star/sheet/DataPilotFieldReference.hpp>
50 : #include <com/sun/star/sheet/DataPilotFieldSortInfo.hpp>
51 : #include <com/sun/star/sheet/DataPilotFieldLayoutInfo.hpp>
52 : #include <com/sun/star/sheet/DataPilotFieldAutoShowInfo.hpp>
53 :
54 0 : struct SC_DLLPUBLIC ScDPName
55 : {
56 : OUString maName; ///< Original name of the dimension.
57 : OUString maLayoutName; ///< Layout name (display name)
58 : sal_uInt8 mnDupCount;
59 :
60 : ScDPName();
61 : explicit ScDPName(const OUString& rName, const OUString& rLayoutName, sal_uInt8 nDupCount);
62 : };
63 :
64 4 : struct ScDPLabelData
65 : {
66 : OUString maName; ///< Original name of the dimension.
67 : OUString maLayoutName; ///< Layout name (display name)
68 : OUString maSubtotalName;
69 : SCCOL mnCol; ///< 0-based field index (not the source column index)
70 : long mnOriginalDim; ///< original dimension index (>= 0 for duplicated dimension)
71 : sal_uInt16 mnFuncMask; ///< Page/Column/Row subtotal function.
72 : sal_Int32 mnUsedHier; ///< Used hierarchy.
73 : sal_Int32 mnFlags; ///< Flags from the DataPilotSource dimension
74 : sal_uInt8 mnDupCount;
75 : bool mbShowAll:1; ///< true = Show all (also empty) results.
76 : bool mbIsValue:1; ///< true = Sum or count in data field.
77 : bool mbDataLayout:1;
78 : bool mbRepeatItemLabels:1;
79 :
80 96 : struct Member
81 : {
82 : OUString maName;
83 : OUString maLayoutName;
84 : bool mbVisible;
85 : bool mbShowDetails;
86 :
87 : Member();
88 :
89 : /**
90 : * @return the name that should be displayed in the dp dialogs i.e.
91 : * when the layout name is present, use it, or else use the original
92 : * name.
93 : */
94 : OUString SC_DLLPUBLIC getDisplayName() const;
95 : };
96 : std::vector<Member> maMembers;
97 : css::uno::Sequence<OUString> maHiers; ///< Hierarchies.
98 : css::sheet::DataPilotFieldSortInfo maSortInfo; ///< Sorting info.
99 : css::sheet::DataPilotFieldLayoutInfo maLayoutInfo; ///< Layout info.
100 : css::sheet::DataPilotFieldAutoShowInfo maShowInfo; ///< AutoShow info.
101 :
102 : ScDPLabelData();
103 :
104 : /**
105 : * @return the name that should be displayed in the dp dialogs i.e. when
106 : * the layout name is present, use it, or else use the original name.
107 : */
108 : OUString SC_DLLPUBLIC getDisplayName() const;
109 : };
110 :
111 : typedef boost::ptr_vector<ScDPLabelData> ScDPLabelDataVector;
112 :
113 0 : struct ScPivotField
114 : {
115 : SCCOL nCol; ///< 0-based dimension index (not source column index)
116 : long mnOriginalDim; ///< >= 0 for duplicated field.
117 : sal_uInt16 nFuncMask;
118 : sal_uInt8 mnDupCount;
119 :
120 : css::sheet::DataPilotFieldReference maFieldRef;
121 :
122 : explicit ScPivotField( SCCOL nNewCol = 0, sal_uInt16 nNewFuncMask = PIVOT_FUNC_NONE );
123 : ScPivotField( const ScPivotField& r );
124 :
125 : long getOriginalDim() const;
126 : bool operator==( const ScPivotField& r ) const;
127 : };
128 :
129 : typedef std::vector< ScPivotField > ScPivotFieldVector;
130 :
131 : struct ScPivotParam
132 : {
133 : SCCOL nCol; ///< Cursor Position /
134 : SCROW nRow; ///< or start of destination area
135 : SCTAB nTab;
136 :
137 : ScDPLabelDataVector maLabelArray;
138 : ScPivotFieldVector maPageFields;
139 : ScPivotFieldVector maColFields;
140 : ScPivotFieldVector maRowFields;
141 : ScPivotFieldVector maDataFields;
142 :
143 : bool bIgnoreEmptyRows;
144 : bool bDetectCategories;
145 : bool bMakeTotalCol;
146 : bool bMakeTotalRow;
147 :
148 : ScPivotParam();
149 : ScPivotParam( const ScPivotParam& r );
150 : ~ScPivotParam();
151 :
152 : ScPivotParam& operator= ( const ScPivotParam& r );
153 : bool operator== ( const ScPivotParam& r ) const;
154 : void SetLabelData(const ScDPLabelDataVector& r);
155 : };
156 :
157 0 : struct ScPivotFuncData
158 : {
159 : SCCOL mnCol;
160 : long mnOriginalDim;
161 : sal_uInt16 mnFuncMask;
162 : sal_uInt8 mnDupCount;
163 :
164 : css::sheet::DataPilotFieldReference maFieldRef;
165 :
166 : explicit ScPivotFuncData( SCCOL nCol, sal_uInt16 nFuncMask );
167 :
168 : bool operator== (const ScPivotFuncData& r) const;
169 :
170 : #if DEBUG_PIVOT_TABLE
171 : void Dump() const;
172 : #endif
173 : };
174 :
175 : typedef std::vector<ScDPName> ScDPNameVec;
176 :
177 : #endif
178 :
179 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|