Version 6.1.0.2, tag libreoffice-6.1.0.2
[LibreOffice.git] / sc / inc / pivot.hxx
blobc374c952641e58d8af50d0ad9e91520aa0a83c2e
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
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 .
21 IMPORTANT:
22 Strictly adhere to the following sequence when creating a pivot table:
24 pPivot->SetColFields(aColArr, aColCount)
25 pPivot->SetRowFields(aRowArr, aRowCount)
26 pPivot->SetDataFields(aDataArr, aDataCount)
27 if (pPivot->CreateData())
29 pPivotDrawData();
30 pPivotReleaseData();
33 Make sure that either ColArr or RowArr contains a PivotDataField entry.
36 #ifndef INCLUDED_SC_INC_PIVOT_HXX
37 #define INCLUDED_SC_INC_PIVOT_HXX
39 #include <rtl/ustring.hxx>
40 #include "types.hxx"
41 #include "scdllapi.h"
42 #include "dpglobal.hxx"
43 #include "calcmacros.hxx"
45 #include <vector>
46 #include <memory>
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>
54 #define PIVOT_DATA_FIELD (MAXCOLCOUNT)
56 struct SC_DLLPUBLIC ScDPName
58 OUString maName; ///< Original name of the dimension.
59 OUString maLayoutName; ///< Layout name (display name)
60 sal_uInt8 mnDupCount;
62 ScDPName();
63 explicit ScDPName(const OUString& rName, const OUString& rLayoutName, sal_uInt8 nDupCount);
66 struct ScDPLabelData
68 OUString maName; ///< Original name of the dimension.
69 OUString maLayoutName; ///< Layout name (display name)
70 OUString maSubtotalName;
71 SCCOL mnCol; ///< 0-based field index (not the source column index)
72 long mnOriginalDim; ///< original dimension index (>= 0 for duplicated dimension)
73 PivotFunc mnFuncMask; ///< Page/Column/Row subtotal function.
74 sal_Int32 mnUsedHier; ///< Used hierarchy.
75 sal_Int32 mnFlags; ///< Flags from the DataPilotSource dimension
76 sal_uInt8 mnDupCount;
77 bool mbShowAll:1; ///< true = Show all (also empty) results.
78 bool mbIsValue:1; ///< true = Sum or count in data field.
79 bool mbDataLayout:1;
80 bool mbRepeatItemLabels:1;
82 struct Member
84 OUString maName;
85 OUString maLayoutName;
86 bool mbVisible;
87 bool mbShowDetails;
89 Member();
91 /**
92 * @return the name that should be displayed in the dp dialogs i.e.
93 * when the layout name is present, use it, or else use the original
94 * name.
96 SC_DLLPUBLIC OUString const & getDisplayName() const;
98 std::vector<Member> maMembers;
99 css::uno::Sequence<OUString> maHiers; ///< Hierarchies.
100 css::sheet::DataPilotFieldSortInfo maSortInfo; ///< Sorting info.
101 css::sheet::DataPilotFieldLayoutInfo maLayoutInfo; ///< Layout info.
102 css::sheet::DataPilotFieldAutoShowInfo maShowInfo; ///< AutoShow info.
104 ScDPLabelData();
107 * @return the name that should be displayed in the dp dialogs i.e. when
108 * the layout name is present, use it, or else use the original name.
110 SC_DLLPUBLIC OUString const & getDisplayName() const;
113 typedef std::vector< std::unique_ptr<ScDPLabelData> > ScDPLabelDataVector;
115 struct ScPivotField
117 SCCOL nCol; ///< 0-based dimension index (not source column index)
118 long mnOriginalDim; ///< >= 0 for duplicated field.
119 PivotFunc nFuncMask;
120 sal_uInt8 mnDupCount;
122 css::sheet::DataPilotFieldReference maFieldRef;
124 explicit ScPivotField( SCCOL nNewCol = 0 );
125 ScPivotField( const ScPivotField& r );
127 long getOriginalDim() const;
130 typedef std::vector< ScPivotField > ScPivotFieldVector;
132 struct ScPivotParam
134 SCCOL nCol; ///< Cursor Position /
135 SCROW nRow; ///< or start of destination area
136 SCTAB nTab;
138 ScDPLabelDataVector maLabelArray;
139 ScPivotFieldVector maPageFields;
140 ScPivotFieldVector maColFields;
141 ScPivotFieldVector maRowFields;
142 ScPivotFieldVector maDataFields;
144 bool bIgnoreEmptyRows;
145 bool bDetectCategories;
146 bool bMakeTotalCol;
147 bool bMakeTotalRow;
149 ScPivotParam();
150 ScPivotParam( const ScPivotParam& r );
151 ~ScPivotParam();
153 ScPivotParam& operator= ( const ScPivotParam& r );
154 void SetLabelData(const ScDPLabelDataVector& r);
157 struct ScPivotFuncData
159 SCCOL mnCol;
160 long mnOriginalDim;
161 PivotFunc mnFuncMask;
162 sal_uInt8 mnDupCount;
164 css::sheet::DataPilotFieldReference maFieldRef;
166 explicit ScPivotFuncData( SCCOL nCol, PivotFunc nFuncMask );
168 #if DEBUG_PIVOT_TABLE
169 void Dump() const;
170 #endif
173 typedef std::vector<ScDPName> ScDPNameVec;
175 #endif
177 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */