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 <rtl/ustring.hxx> 40 #include "types.hxx" 41 #include "scdllapi.h" 42 #include "dpglobal.hxx" 43 #include "calcmacros.hxx" 44 45 #include <vector> 46 #include <memory> 47 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 #define PIVOT_DATA_FIELD (MAXCOLCOUNT) 55 56 struct SC_DLLPUBLIC ScDPName 57 { 58 OUString maName; ///< Original name of the dimension. 59 OUString maLayoutName; ///< Layout name (display name) 60 sal_uInt8 mnDupCount; 61 62 ScDPName(); 63 explicit ScDPName(const OUString& rName, const OUString& rLayoutName, sal_uInt8 nDupCount); 64 }; 65 66 struct ScDPLabelData 67 { 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; 81 82 struct Member 83 { 84 OUString maName; 85 OUString maLayoutName; 86 bool mbVisible; 87 bool mbShowDetails; 88 89 Member(); 90 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. 95 */ 96 SC_DLLPUBLIC OUString const & getDisplayName() const; 97 }; 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. 103 104 ScDPLabelData(); 105 106 /** 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. 109 */ 110 SC_DLLPUBLIC OUString const & getDisplayName() const; 111 }; 112 113 typedef std::vector< std::unique_ptr<ScDPLabelData> > ScDPLabelDataVector; 114 115 struct ScPivotField 116 { 117 css::sheet::DataPilotFieldReference maFieldRef; 118 119 long mnOriginalDim; ///< >= 0 for duplicated field. 120 PivotFunc nFuncMask; 121 SCCOL nCol; ///< 0-based dimension index (not source column index) 122 sal_uInt8 mnDupCount; 123 124 explicit ScPivotField( SCCOL nNewCol = 0 ); 125 126 long getOriginalDim() 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 void SetLabelData(const ScDPLabelDataVector& r); 154 }; 155 156 struct ScPivotFuncData 157 { 158 css::sheet::DataPilotFieldReference maFieldRef; 159 160 long mnOriginalDim; 161 PivotFunc mnFuncMask; 162 SCCOL mnCol; 163 sal_uInt8 mnDupCount; 164 165 explicit ScPivotFuncData( SCCOL nCol, PivotFunc nFuncMask ); 166 167 #if DEBUG_PIVOT_TABLE 168 void Dump() const; 169 #endif 170 }; 171 172 typedef std::vector<ScDPName> ScDPNameVec; 173 174 #endif 175 176 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 177