1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski #ifndef SC_DPTABRES_HXX 25*b1cdbd2cSJim Jagielski #define SC_DPTABRES_HXX 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski #include <svl/svarray.hxx> 28*b1cdbd2cSJim Jagielski #include <tools/string.hxx> 29*b1cdbd2cSJim Jagielski #include <com/sun/star/sheet/MemberResult.hpp> 30*b1cdbd2cSJim Jagielski #include <com/sun/star/sheet/DataResult.hpp> 31*b1cdbd2cSJim Jagielski #include <com/sun/star/uno/Sequence.hxx> 32*b1cdbd2cSJim Jagielski #include "global.hxx" // enum ScSubTotalFunc 33*b1cdbd2cSJim Jagielski #include "dpcachetable.hxx" 34*b1cdbd2cSJim Jagielski #include <hash_map> 35*b1cdbd2cSJim Jagielski #include <hash_set> 36*b1cdbd2cSJim Jagielski #include <vector> 37*b1cdbd2cSJim Jagielski #include <memory> 38*b1cdbd2cSJim Jagielski 39*b1cdbd2cSJim Jagielski namespace com { namespace sun { namespace star { namespace sheet { 40*b1cdbd2cSJim Jagielski struct DataPilotFieldReference; 41*b1cdbd2cSJim Jagielski } } } } 42*b1cdbd2cSJim Jagielski 43*b1cdbd2cSJim Jagielski 44*b1cdbd2cSJim Jagielski class ScAddress; 45*b1cdbd2cSJim Jagielski class ScDocument; 46*b1cdbd2cSJim Jagielski class ScDPSource; 47*b1cdbd2cSJim Jagielski class ScDPDimension; 48*b1cdbd2cSJim Jagielski class ScDPDimensions; 49*b1cdbd2cSJim Jagielski class ScDPLevel; 50*b1cdbd2cSJim Jagielski class ScDPMember; 51*b1cdbd2cSJim Jagielski class ScDPAggData; 52*b1cdbd2cSJim Jagielski class ScDPResultMember; 53*b1cdbd2cSJim Jagielski class ScDPResultVisibilityData; 54*b1cdbd2cSJim Jagielski 55*b1cdbd2cSJim Jagielski struct ScDPValueData; 56*b1cdbd2cSJim Jagielski // Wang Xu Ming -- 2009-8-17 57*b1cdbd2cSJim Jagielski // DataPilot Migration - Cache&&Performance 58*b1cdbd2cSJim Jagielski class ScDPItemData; 59*b1cdbd2cSJim Jagielski // End Comments 60*b1cdbd2cSJim Jagielski // 61*b1cdbd2cSJim Jagielski // Member names that are being processed for InitFrom/LateInitFrom 62*b1cdbd2cSJim Jagielski // (needed for initialization of grouped items) 63*b1cdbd2cSJim Jagielski // 64*b1cdbd2cSJim Jagielski 65*b1cdbd2cSJim Jagielski class ScDPInitState 66*b1cdbd2cSJim Jagielski { 67*b1cdbd2cSJim Jagielski long* pIndex; // array 68*b1cdbd2cSJim Jagielski // Wang Xu Ming -- 2009-8-17 69*b1cdbd2cSJim Jagielski // DataPilot Migration - Cache&&Performance 70*b1cdbd2cSJim Jagielski SCROW* pData; // array 71*b1cdbd2cSJim Jagielski // End Comments 72*b1cdbd2cSJim Jagielski long nCount; 73*b1cdbd2cSJim Jagielski 74*b1cdbd2cSJim Jagielski public: 75*b1cdbd2cSJim Jagielski ScDPInitState(); 76*b1cdbd2cSJim Jagielski ~ScDPInitState(); 77*b1cdbd2cSJim Jagielski 78*b1cdbd2cSJim Jagielski void AddMember( long nSourceIndex,SCROW nMember); 79*b1cdbd2cSJim Jagielski void RemoveMember(); 80*b1cdbd2cSJim Jagielski GetCount() const81*b1cdbd2cSJim Jagielski long GetCount() const { return nCount; } GetSource() const82*b1cdbd2cSJim Jagielski const long* GetSource() const { return pIndex; } 83*b1cdbd2cSJim Jagielski // Wang Xu Ming -- 2009-8-17 84*b1cdbd2cSJim Jagielski // DataPilot Migration - Cache&&Performance GetNameIds() const85*b1cdbd2cSJim Jagielski const SCROW* GetNameIds() const { return pData; } 86*b1cdbd2cSJim Jagielski SCROW GetNameIdForIndex( long nIndexValue ) const; 87*b1cdbd2cSJim Jagielski // End Comments 88*b1cdbd2cSJim Jagielski }; 89*b1cdbd2cSJim Jagielski 90*b1cdbd2cSJim Jagielski typedef ::std::vector<sal_Int32> ScMemberSortOrder; 91*b1cdbd2cSJim Jagielski 92*b1cdbd2cSJim Jagielski // 93*b1cdbd2cSJim Jagielski // selected subtotal information, passed down the dimensions 94*b1cdbd2cSJim Jagielski // 95*b1cdbd2cSJim Jagielski 96*b1cdbd2cSJim Jagielski struct ScDPSubTotalState 97*b1cdbd2cSJim Jagielski { 98*b1cdbd2cSJim Jagielski ScSubTotalFunc eColForce; 99*b1cdbd2cSJim Jagielski ScSubTotalFunc eRowForce; 100*b1cdbd2cSJim Jagielski long nColSubTotalFunc; 101*b1cdbd2cSJim Jagielski long nRowSubTotalFunc; 102*b1cdbd2cSJim Jagielski ScDPSubTotalStateScDPSubTotalState103*b1cdbd2cSJim Jagielski ScDPSubTotalState() : 104*b1cdbd2cSJim Jagielski eColForce( SUBTOTAL_FUNC_NONE ), 105*b1cdbd2cSJim Jagielski eRowForce( SUBTOTAL_FUNC_NONE ), 106*b1cdbd2cSJim Jagielski nColSubTotalFunc( -1 ), 107*b1cdbd2cSJim Jagielski nRowSubTotalFunc( -1 ) 108*b1cdbd2cSJim Jagielski {} 109*b1cdbd2cSJim Jagielski }; 110*b1cdbd2cSJim Jagielski 111*b1cdbd2cSJim Jagielski // 112*b1cdbd2cSJim Jagielski // indexes when calculating running totals 113*b1cdbd2cSJim Jagielski // Col/RowVisible: simple counts from 0 - without sort order applied - visible index 114*b1cdbd2cSJim Jagielski // (only used for running total / relative index) 115*b1cdbd2cSJim Jagielski // Col/RowIndexes: with sort order applied - member index 116*b1cdbd2cSJim Jagielski // (used otherwise - so other members' children can be accessed) 117*b1cdbd2cSJim Jagielski // 118*b1cdbd2cSJim Jagielski 119*b1cdbd2cSJim Jagielski class ScDPRunningTotalState 120*b1cdbd2cSJim Jagielski { 121*b1cdbd2cSJim Jagielski ScDPResultMember* pColResRoot; 122*b1cdbd2cSJim Jagielski ScDPResultMember* pRowResRoot; 123*b1cdbd2cSJim Jagielski long* pColVisible; 124*b1cdbd2cSJim Jagielski long* pColIndexes; 125*b1cdbd2cSJim Jagielski long* pRowVisible; 126*b1cdbd2cSJim Jagielski long* pRowIndexes; 127*b1cdbd2cSJim Jagielski long nColIndexPos; 128*b1cdbd2cSJim Jagielski long nRowIndexPos; 129*b1cdbd2cSJim Jagielski 130*b1cdbd2cSJim Jagielski public: 131*b1cdbd2cSJim Jagielski ScDPRunningTotalState( ScDPResultMember* pColRoot, ScDPResultMember* pRowRoot ); 132*b1cdbd2cSJim Jagielski ~ScDPRunningTotalState(); 133*b1cdbd2cSJim Jagielski GetColResRoot() const134*b1cdbd2cSJim Jagielski ScDPResultMember* GetColResRoot() const { return pColResRoot; } GetRowResRoot() const135*b1cdbd2cSJim Jagielski ScDPResultMember* GetRowResRoot() const { return pRowResRoot; } 136*b1cdbd2cSJim Jagielski GetColVisible() const137*b1cdbd2cSJim Jagielski const long* GetColVisible() const { return pColVisible; } GetColIndexes() const138*b1cdbd2cSJim Jagielski const long* GetColIndexes() const { return pColIndexes; } GetRowVisible() const139*b1cdbd2cSJim Jagielski const long* GetRowVisible() const { return pRowVisible; } GetRowIndexes() const140*b1cdbd2cSJim Jagielski const long* GetRowIndexes() const { return pRowIndexes; } 141*b1cdbd2cSJim Jagielski 142*b1cdbd2cSJim Jagielski void AddColIndex( long nVisible, long nSorted ); 143*b1cdbd2cSJim Jagielski void AddRowIndex( long nVisible, long nSorted ); 144*b1cdbd2cSJim Jagielski void RemoveColIndex(); 145*b1cdbd2cSJim Jagielski void RemoveRowIndex(); 146*b1cdbd2cSJim Jagielski }; 147*b1cdbd2cSJim Jagielski 148*b1cdbd2cSJim Jagielski struct ScDPRelativePos 149*b1cdbd2cSJim Jagielski { 150*b1cdbd2cSJim Jagielski long nBasePos; // simple count, without sort order applied 151*b1cdbd2cSJim Jagielski long nDirection; 152*b1cdbd2cSJim Jagielski 153*b1cdbd2cSJim Jagielski ScDPRelativePos( long nBase, long nDir ); 154*b1cdbd2cSJim Jagielski }; 155*b1cdbd2cSJim Jagielski 156*b1cdbd2cSJim Jagielski // 157*b1cdbd2cSJim Jagielski // aggregated data 158*b1cdbd2cSJim Jagielski //! separate header file? 159*b1cdbd2cSJim Jagielski // 160*b1cdbd2cSJim Jagielski 161*b1cdbd2cSJim Jagielski // Possible values for the nCount member: 162*b1cdbd2cSJim Jagielski // (greater than 0 counts the collected values) 163*b1cdbd2cSJim Jagielski const long SC_DPAGG_EMPTY = 0; // empty during data collection 164*b1cdbd2cSJim Jagielski const long SC_DPAGG_DATA_ERROR = -1; // error during data collection 165*b1cdbd2cSJim Jagielski const long SC_DPAGG_RESULT_EMPTY = -2; // empty result calculated 166*b1cdbd2cSJim Jagielski const long SC_DPAGG_RESULT_VALID = -3; // valid result calculated 167*b1cdbd2cSJim Jagielski const long SC_DPAGG_RESULT_ERROR = -4; // error in calculated result 168*b1cdbd2cSJim Jagielski 169*b1cdbd2cSJim Jagielski class ScDPAggData 170*b1cdbd2cSJim Jagielski { 171*b1cdbd2cSJim Jagielski private: 172*b1cdbd2cSJim Jagielski double fVal; 173*b1cdbd2cSJim Jagielski double fAux; 174*b1cdbd2cSJim Jagielski long nCount; 175*b1cdbd2cSJim Jagielski ScDPAggData* pChild; 176*b1cdbd2cSJim Jagielski 177*b1cdbd2cSJim Jagielski public: ScDPAggData()178*b1cdbd2cSJim Jagielski ScDPAggData() : fVal(0.0), fAux(0.0), nCount(SC_DPAGG_EMPTY), pChild(NULL) {} ~ScDPAggData()179*b1cdbd2cSJim Jagielski ~ScDPAggData() { delete pChild; } 180*b1cdbd2cSJim Jagielski 181*b1cdbd2cSJim Jagielski void Update( const ScDPValueData& rNext, ScSubTotalFunc eFunc, const ScDPSubTotalState& rSubState ); 182*b1cdbd2cSJim Jagielski void Calculate( ScSubTotalFunc eFunc, const ScDPSubTotalState& rSubState ); 183*b1cdbd2cSJim Jagielski sal_Bool IsCalculated() const; 184*b1cdbd2cSJim Jagielski 185*b1cdbd2cSJim Jagielski double GetResult() const; 186*b1cdbd2cSJim Jagielski sal_Bool HasError() const; 187*b1cdbd2cSJim Jagielski sal_Bool HasData() const; 188*b1cdbd2cSJim Jagielski 189*b1cdbd2cSJim Jagielski void SetResult( double fNew ); 190*b1cdbd2cSJim Jagielski void SetEmpty( sal_Bool bSet ); 191*b1cdbd2cSJim Jagielski void SetError(); 192*b1cdbd2cSJim Jagielski 193*b1cdbd2cSJim Jagielski double GetAuxiliary() const; 194*b1cdbd2cSJim Jagielski void SetAuxiliary( double fNew ); 195*b1cdbd2cSJim Jagielski 196*b1cdbd2cSJim Jagielski void Reset(); // also deletes children 197*b1cdbd2cSJim Jagielski GetExistingChild() const198*b1cdbd2cSJim Jagielski const ScDPAggData* GetExistingChild() const { return pChild; } 199*b1cdbd2cSJim Jagielski ScDPAggData* GetChild(); 200*b1cdbd2cSJim Jagielski }; 201*b1cdbd2cSJim Jagielski 202*b1cdbd2cSJim Jagielski // 203*b1cdbd2cSJim Jagielski // Row and grand total state, passed down (column total is at result member) 204*b1cdbd2cSJim Jagielski // 205*b1cdbd2cSJim Jagielski 206*b1cdbd2cSJim Jagielski class ScDPRowTotals 207*b1cdbd2cSJim Jagielski { 208*b1cdbd2cSJim Jagielski ScDPAggData aRowTotal; 209*b1cdbd2cSJim Jagielski ScDPAggData aGrandTotal; 210*b1cdbd2cSJim Jagielski sal_Bool bIsInColRoot; 211*b1cdbd2cSJim Jagielski 212*b1cdbd2cSJim Jagielski public: 213*b1cdbd2cSJim Jagielski ScDPRowTotals(); 214*b1cdbd2cSJim Jagielski ~ScDPRowTotals(); 215*b1cdbd2cSJim Jagielski 216*b1cdbd2cSJim Jagielski ScDPAggData* GetRowTotal( long nMeasure ); 217*b1cdbd2cSJim Jagielski ScDPAggData* GetGrandTotal( long nMeasure ); 218*b1cdbd2cSJim Jagielski IsInColRoot() const219*b1cdbd2cSJim Jagielski sal_Bool IsInColRoot() const { return bIsInColRoot; } SetInColRoot(sal_Bool bSet)220*b1cdbd2cSJim Jagielski void SetInColRoot(sal_Bool bSet) { bIsInColRoot = bSet; } 221*b1cdbd2cSJim Jagielski }; 222*b1cdbd2cSJim Jagielski 223*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------- 224*b1cdbd2cSJim Jagielski // 225*b1cdbd2cSJim Jagielski // results for a hierarchy dimension 226*b1cdbd2cSJim Jagielski // 227*b1cdbd2cSJim Jagielski 228*b1cdbd2cSJim Jagielski #define SC_DP_RES_GROW 16 229*b1cdbd2cSJim Jagielski 230*b1cdbd2cSJim Jagielski class ScDPResultDimension; 231*b1cdbd2cSJim Jagielski class ScDPDataDimension; 232*b1cdbd2cSJim Jagielski class ScDPDataMember; 233*b1cdbd2cSJim Jagielski 234*b1cdbd2cSJim Jagielski #define SC_DPMEASURE_ALL -1 235*b1cdbd2cSJim Jagielski #define SC_DPMEASURE_ANY -2 236*b1cdbd2cSJim Jagielski // Wang Xu Ming -- 2009-8-17 237*b1cdbd2cSJim Jagielski // DataPilot Migration - Cache&&Performance 238*b1cdbd2cSJim Jagielski 239*b1cdbd2cSJim Jagielski struct MemberHashIndexFunc : public std::unary_function< const SCROW &, size_t > 240*b1cdbd2cSJim Jagielski { operator ()MemberHashIndexFunc241*b1cdbd2cSJim Jagielski size_t operator() (const SCROW &rDataIndex) const { return rDataIndex; } 242*b1cdbd2cSJim Jagielski }; 243*b1cdbd2cSJim Jagielski 244*b1cdbd2cSJim Jagielski class ScDPParentDimData 245*b1cdbd2cSJim Jagielski { 246*b1cdbd2cSJim Jagielski public: 247*b1cdbd2cSJim Jagielski const SCROW mnOrder; //! Ref 248*b1cdbd2cSJim Jagielski const ScDPDimension* mpParentDim; //! Ref 249*b1cdbd2cSJim Jagielski const ScDPLevel* mpParentLevel; //! Ref 250*b1cdbd2cSJim Jagielski const ScDPMember* mpMemberDesc; //! Ref 251*b1cdbd2cSJim Jagielski ScDPParentDimData()252*b1cdbd2cSJim Jagielski ScDPParentDimData():mnOrder(-1), mpParentDim( NULL), mpParentLevel( NULL ), mpMemberDesc( NULL ){} ScDPParentDimData(const SCROW nIndex,ScDPDimension * pDim,const ScDPLevel * pLev,const ScDPMember * pMember)253*b1cdbd2cSJim Jagielski ScDPParentDimData( const SCROW nIndex, ScDPDimension* pDim, const ScDPLevel* pLev, const ScDPMember* pMember ): mnOrder( nIndex ), mpParentDim( pDim), mpParentLevel( pLev ), mpMemberDesc( pMember ){} 254*b1cdbd2cSJim Jagielski }; 255*b1cdbd2cSJim Jagielski 256*b1cdbd2cSJim Jagielski typedef std::vector <ScDPParentDimData *> DimMemberArray; 257*b1cdbd2cSJim Jagielski typedef std::hash_map < SCROW, ScDPParentDimData *, MemberHashIndexFunc> DimMemberHash; 258*b1cdbd2cSJim Jagielski 259*b1cdbd2cSJim Jagielski class ResultMembers 260*b1cdbd2cSJim Jagielski { 261*b1cdbd2cSJim Jagielski DimMemberHash maMemberHash; 262*b1cdbd2cSJim Jagielski sal_Bool mbHasHideDetailsMember; 263*b1cdbd2cSJim Jagielski public: 264*b1cdbd2cSJim Jagielski ScDPParentDimData* FindMember( const SCROW& nIndex ) const; 265*b1cdbd2cSJim Jagielski void InsertMember( ScDPParentDimData* pNew ); IsHasHideDetailsMembers() const266*b1cdbd2cSJim Jagielski sal_Bool IsHasHideDetailsMembers() const { return mbHasHideDetailsMember; } SetHasHideDetailsMembers(sal_Bool b)267*b1cdbd2cSJim Jagielski void SetHasHideDetailsMembers( sal_Bool b ) { mbHasHideDetailsMember=b; } 268*b1cdbd2cSJim Jagielski ResultMembers(); 269*b1cdbd2cSJim Jagielski virtual ~ResultMembers(); 270*b1cdbd2cSJim Jagielski }; 271*b1cdbd2cSJim Jagielski 272*b1cdbd2cSJim Jagielski class LateInitParams 273*b1cdbd2cSJim Jagielski { 274*b1cdbd2cSJim Jagielski private: 275*b1cdbd2cSJim Jagielski const ::std::vector<ScDPDimension*>& mppDim; 276*b1cdbd2cSJim Jagielski const ::std::vector<ScDPLevel*>& mppLev; 277*b1cdbd2cSJim Jagielski 278*b1cdbd2cSJim Jagielski sal_Bool mbRow; 279*b1cdbd2cSJim Jagielski sal_Bool mbInitChild; 280*b1cdbd2cSJim Jagielski sal_Bool mbAllChildren; 281*b1cdbd2cSJim Jagielski public: 282*b1cdbd2cSJim Jagielski LateInitParams( const ::std::vector<ScDPDimension*>& ppDim, const ::std::vector<ScDPLevel*>& ppLev, 283*b1cdbd2cSJim Jagielski sal_Bool bRow, sal_Bool bInitChild = sal_True , sal_Bool bAllChildren = sal_False); 284*b1cdbd2cSJim Jagielski ~LateInitParams(); 285*b1cdbd2cSJim Jagielski SetInitChild(sal_Bool b)286*b1cdbd2cSJim Jagielski void SetInitChild( sal_Bool b ) { mbInitChild = b; } SetInitAllChildren(sal_Bool b)287*b1cdbd2cSJim Jagielski void SetInitAllChildren( sal_Bool b ) { mbAllChildren = b; } 288*b1cdbd2cSJim Jagielski GetDim(size_t nPos) const289*b1cdbd2cSJim Jagielski inline ScDPDimension* GetDim( size_t nPos ) const { return mppDim[nPos];} GetLevel(size_t nPos) const290*b1cdbd2cSJim Jagielski inline ScDPLevel* GetLevel( size_t nPos ) const { return mppLev[nPos];} 291*b1cdbd2cSJim Jagielski GetInitChild() const292*b1cdbd2cSJim Jagielski inline sal_Bool GetInitChild() const {return mbInitChild; } GetInitAllChild() const293*b1cdbd2cSJim Jagielski inline sal_Bool GetInitAllChild() const { return mbAllChildren; } IsRow() const294*b1cdbd2cSJim Jagielski inline sal_Bool IsRow() const { return mbRow; } 295*b1cdbd2cSJim Jagielski sal_Bool IsEnd( size_t nPos ) const ; 296*b1cdbd2cSJim Jagielski }; 297*b1cdbd2cSJim Jagielski // End Comments 298*b1cdbd2cSJim Jagielski 299*b1cdbd2cSJim Jagielski class ScDPResultData 300*b1cdbd2cSJim Jagielski { 301*b1cdbd2cSJim Jagielski private: 302*b1cdbd2cSJim Jagielski ScDPSource* pSource; //! Ref 303*b1cdbd2cSJim Jagielski //! keep things like measure lists here 304*b1cdbd2cSJim Jagielski 305*b1cdbd2cSJim Jagielski long nMeasCount; 306*b1cdbd2cSJim Jagielski ScSubTotalFunc* pMeasFuncs; 307*b1cdbd2cSJim Jagielski ::com::sun::star::sheet::DataPilotFieldReference* pMeasRefs; 308*b1cdbd2cSJim Jagielski sal_uInt16* pMeasRefOrient; 309*b1cdbd2cSJim Jagielski String* pMeasNames; 310*b1cdbd2cSJim Jagielski sal_Bool bLateInit; 311*b1cdbd2cSJim Jagielski sal_Bool bDataAtCol; 312*b1cdbd2cSJim Jagielski sal_Bool bDataAtRow; 313*b1cdbd2cSJim Jagielski 314*b1cdbd2cSJim Jagielski //! add "displayed values" settings 315*b1cdbd2cSJim Jagielski mutable std::vector< ResultMembers* > mpDimMembers; 316*b1cdbd2cSJim Jagielski public: 317*b1cdbd2cSJim Jagielski ScDPResultData( ScDPSource* pSrc ); //! Ref 318*b1cdbd2cSJim Jagielski ~ScDPResultData(); 319*b1cdbd2cSJim Jagielski 320*b1cdbd2cSJim Jagielski void SetMeasureData( long nCount, const ScSubTotalFunc* pFunctions, 321*b1cdbd2cSJim Jagielski const ::com::sun::star::sheet::DataPilotFieldReference* pRefs, 322*b1cdbd2cSJim Jagielski const sal_uInt16* pRefOrient, const String* pNames ); 323*b1cdbd2cSJim Jagielski void SetDataLayoutOrientation( sal_uInt16 nOrient ); 324*b1cdbd2cSJim Jagielski void SetLateInit( sal_Bool bSet ); 325*b1cdbd2cSJim Jagielski GetMeasureCount() const326*b1cdbd2cSJim Jagielski long GetMeasureCount() const { return nMeasCount; } 327*b1cdbd2cSJim Jagielski ScSubTotalFunc GetMeasureFunction(long nMeasure) const; 328*b1cdbd2cSJim Jagielski String GetMeasureString(long nMeasure, sal_Bool bForce, ScSubTotalFunc eForceFunc, bool& rbTotalResult) const; 329*b1cdbd2cSJim Jagielski String GetMeasureDimensionName(long nMeasure) const; 330*b1cdbd2cSJim Jagielski const ::com::sun::star::sheet::DataPilotFieldReference& GetMeasureRefVal(long nMeasure) const; 331*b1cdbd2cSJim Jagielski sal_uInt16 GetMeasureRefOrient(long nMeasure) const; 332*b1cdbd2cSJim Jagielski IsDataAtCol() const333*b1cdbd2cSJim Jagielski sal_Bool IsDataAtCol() const { return bDataAtCol; } IsDataAtRow() const334*b1cdbd2cSJim Jagielski sal_Bool IsDataAtRow() const { return bDataAtRow; } IsLateInit() const335*b1cdbd2cSJim Jagielski sal_Bool IsLateInit() const { return bLateInit; } 336*b1cdbd2cSJim Jagielski 337*b1cdbd2cSJim Jagielski long GetColStartMeasure() const; 338*b1cdbd2cSJim Jagielski long GetRowStartMeasure() const; 339*b1cdbd2cSJim Jagielski GetCountForMeasure(long nMeas) const340*b1cdbd2cSJim Jagielski long GetCountForMeasure( long nMeas ) const 341*b1cdbd2cSJim Jagielski { return ( nMeas == SC_DPMEASURE_ALL ) ? nMeasCount : 1; } 342*b1cdbd2cSJim Jagielski 343*b1cdbd2cSJim Jagielski sal_Bool IsBaseForGroup( long nDim ) const; // any group 344*b1cdbd2cSJim Jagielski long GetGroupBase( long nGroupDim ) const; 345*b1cdbd2cSJim Jagielski sal_Bool IsNumOrDateGroup( long nDim ) const; 346*b1cdbd2cSJim Jagielski // Wang Xu Ming -- 2009-8-17 347*b1cdbd2cSJim Jagielski // DataPilot Migration - Cache&&Performance 348*b1cdbd2cSJim Jagielski sal_Bool IsInGroup( const ScDPItemData& rGroupData, long nGroupIndex, 349*b1cdbd2cSJim Jagielski long nBaseDataId, long nBaseIndex ) const; 350*b1cdbd2cSJim Jagielski sal_Bool IsInGroup( SCROW nGroupDataId, long nGroupIndex, 351*b1cdbd2cSJim Jagielski const ScDPItemData& rBaseData, long nBaseIndex ) const; 352*b1cdbd2cSJim Jagielski sal_Bool HasCommonElement( SCROW nFirstDataId, long nFirstIndex, 353*b1cdbd2cSJim Jagielski const ScDPItemData& rSecondData, long nSecondIndex ) const; 354*b1cdbd2cSJim Jagielski 355*b1cdbd2cSJim Jagielski ResultMembers* GetDimResultMembers( long nDim , ScDPDimension* pDim , ScDPLevel* pLevel) const ; 356*b1cdbd2cSJim Jagielski 357*b1cdbd2cSJim Jagielski // End Comments 358*b1cdbd2cSJim Jagielski const ScDPSource* GetSource() const; 359*b1cdbd2cSJim Jagielski }; 360*b1cdbd2cSJim Jagielski 361*b1cdbd2cSJim Jagielski 362*b1cdbd2cSJim Jagielski class ScDPResultMember 363*b1cdbd2cSJim Jagielski { 364*b1cdbd2cSJim Jagielski private: 365*b1cdbd2cSJim Jagielski const ScDPResultData* pResultData; 366*b1cdbd2cSJim Jagielski // Wang Xu Ming -- 2009-8-17 367*b1cdbd2cSJim Jagielski // DataPilot Migration - Cache&&Performance 368*b1cdbd2cSJim Jagielski ScDPParentDimData aParentDimData; 369*b1cdbd2cSJim Jagielski // End Comments 370*b1cdbd2cSJim Jagielski ScDPResultDimension* pChildDimension; 371*b1cdbd2cSJim Jagielski ScDPDataMember* pDataRoot; 372*b1cdbd2cSJim Jagielski sal_Bool bHasElements; 373*b1cdbd2cSJim Jagielski sal_Bool bForceSubTotal; 374*b1cdbd2cSJim Jagielski sal_Bool bHasHiddenDetails; 375*b1cdbd2cSJim Jagielski sal_Bool bInitialized; 376*b1cdbd2cSJim Jagielski sal_Bool bAutoHidden; 377*b1cdbd2cSJim Jagielski ScDPAggData aColTotal; // to store column totals 378*b1cdbd2cSJim Jagielski 379*b1cdbd2cSJim Jagielski sal_uInt16 nMemberStep; // step to show details 380*b1cdbd2cSJim Jagielski public: 381*b1cdbd2cSJim Jagielski // Wang Xu Ming -- 2009-8-17 382*b1cdbd2cSJim Jagielski // DataPilot Migration - Cache&&Performance 383*b1cdbd2cSJim Jagielski ScDPResultMember( const ScDPResultData* pData, const ScDPParentDimData& rParentDimData, 384*b1cdbd2cSJim Jagielski sal_Bool bForceSub ); //! Ref 385*b1cdbd2cSJim Jagielski ScDPResultMember( const ScDPResultData* pData, sal_Bool bForceSub ); 386*b1cdbd2cSJim Jagielski // End Comments 387*b1cdbd2cSJim Jagielski ~ScDPResultMember(); 388*b1cdbd2cSJim Jagielski 389*b1cdbd2cSJim Jagielski // Wang Xu Ming -- 2009-8-17 390*b1cdbd2cSJim Jagielski // DataPilot Migration - Cache&&Performance 391*b1cdbd2cSJim Jagielski void InitFrom( const ::std::vector<ScDPDimension*>& ppDim, 392*b1cdbd2cSJim Jagielski const ::std::vector<ScDPLevel*>& ppLev, 393*b1cdbd2cSJim Jagielski size_t nPos, 394*b1cdbd2cSJim Jagielski ScDPInitState& rInitState, 395*b1cdbd2cSJim Jagielski sal_Bool bInitChild = sal_True ); 396*b1cdbd2cSJim Jagielski void LateInitFrom( 397*b1cdbd2cSJim Jagielski LateInitParams& rParams, 398*b1cdbd2cSJim Jagielski const ::std::vector< SCROW >& pItemData, 399*b1cdbd2cSJim Jagielski size_t nPos, 400*b1cdbd2cSJim Jagielski ScDPInitState& rInitState); 401*b1cdbd2cSJim Jagielski void CheckShowEmpty( sal_Bool bShow = sal_False ); 402*b1cdbd2cSJim Jagielski // End Comments 403*b1cdbd2cSJim Jagielski String GetName() const; 404*b1cdbd2cSJim Jagielski void FillItemData( ScDPItemData& rData ) const; 405*b1cdbd2cSJim Jagielski sal_Bool IsValid() const; 406*b1cdbd2cSJim Jagielski sal_Bool IsVisible() const; 407*b1cdbd2cSJim Jagielski long GetSize(long nMeasure) const; 408*b1cdbd2cSJim Jagielski sal_Bool HasHiddenDetails() const; 409*b1cdbd2cSJim Jagielski sal_Bool IsSubTotalInTitle(long nMeasure) const; 410*b1cdbd2cSJim Jagielski 411*b1cdbd2cSJim Jagielski // sal_Bool SubTotalEnabled() const; 412*b1cdbd2cSJim Jagielski long GetSubTotalCount( long* pUserSubStart = NULL ) const; 413*b1cdbd2cSJim Jagielski 414*b1cdbd2cSJim Jagielski // Wang Xu Ming -- 2009-8-17 415*b1cdbd2cSJim Jagielski // DataPilot Migration - Cache&&Performance 416*b1cdbd2cSJim Jagielski sal_Bool IsNamedItem( SCROW nIndex ) const; 417*b1cdbd2cSJim Jagielski bool IsValidEntry( const ::std::vector< SCROW >& aMembers ) const; 418*b1cdbd2cSJim Jagielski // End Comments 419*b1cdbd2cSJim Jagielski SetHasElements()420*b1cdbd2cSJim Jagielski void SetHasElements() { bHasElements = sal_True; } SetAutoHidden()421*b1cdbd2cSJim Jagielski void SetAutoHidden() { bAutoHidden = sal_True; } 422*b1cdbd2cSJim Jagielski 423*b1cdbd2cSJim Jagielski // Wang Xu Ming -- 2009-8-17 424*b1cdbd2cSJim Jagielski // DataPilot Migration - Cache&&Performance 425*b1cdbd2cSJim Jagielski void ProcessData( const ::std::vector<SCROW>& aChildMembers, 426*b1cdbd2cSJim Jagielski const ScDPResultDimension* pDataDim, 427*b1cdbd2cSJim Jagielski const ::std::vector<SCROW>& aDataMembers, 428*b1cdbd2cSJim Jagielski const ::std::vector<ScDPValueData>& aValues ); 429*b1cdbd2cSJim Jagielski // End Comments 430*b1cdbd2cSJim Jagielski void FillMemberResults( com::sun::star::uno::Sequence< 431*b1cdbd2cSJim Jagielski com::sun::star::sheet::MemberResult>* pSequences, 432*b1cdbd2cSJim Jagielski long& rPos, long nMeasure, sal_Bool bRoot, 433*b1cdbd2cSJim Jagielski const String* pMemberName, 434*b1cdbd2cSJim Jagielski const String* pMemberCaption ); 435*b1cdbd2cSJim Jagielski 436*b1cdbd2cSJim Jagielski void FillDataResults( const ScDPResultMember* pRefMember, 437*b1cdbd2cSJim Jagielski com::sun::star::uno::Sequence< 438*b1cdbd2cSJim Jagielski com::sun::star::uno::Sequence< 439*b1cdbd2cSJim Jagielski com::sun::star::sheet::DataResult> >& rSequence, 440*b1cdbd2cSJim Jagielski long& rRow, long nMeasure ) const; 441*b1cdbd2cSJim Jagielski 442*b1cdbd2cSJim Jagielski void UpdateDataResults( const ScDPResultMember* pRefMember, long nMeasure ) const; 443*b1cdbd2cSJim Jagielski void UpdateRunningTotals( const ScDPResultMember* pRefMember, long nMeasure, 444*b1cdbd2cSJim Jagielski ScDPRunningTotalState& rRunning, ScDPRowTotals& rTotals ) const; 445*b1cdbd2cSJim Jagielski 446*b1cdbd2cSJim Jagielski void SortMembers( ScDPResultMember* pRefMember ); 447*b1cdbd2cSJim Jagielski void DoAutoShow( ScDPResultMember* pRefMember ); 448*b1cdbd2cSJim Jagielski 449*b1cdbd2cSJim Jagielski void ResetResults( sal_Bool bRoot ); 450*b1cdbd2cSJim Jagielski 451*b1cdbd2cSJim Jagielski void DumpState( const ScDPResultMember* pRefMember, ScDocument* pDoc, ScAddress& rPos ) const; 452*b1cdbd2cSJim Jagielski 453*b1cdbd2cSJim Jagielski //! this will be removed! GetChildDimension() const454*b1cdbd2cSJim Jagielski const ScDPResultDimension* GetChildDimension() const { return pChildDimension; } GetChildDimension()455*b1cdbd2cSJim Jagielski ScDPResultDimension* GetChildDimension() { return pChildDimension; } 456*b1cdbd2cSJim Jagielski GetDataRoot() const457*b1cdbd2cSJim Jagielski ScDPDataMember* GetDataRoot() const { return pDataRoot; } 458*b1cdbd2cSJim Jagielski 459*b1cdbd2cSJim Jagielski // Wang Xu Ming -- 2009-8-17 460*b1cdbd2cSJim Jagielski // DataPilot Migration - Cache&&Performance GetParentDim() const461*b1cdbd2cSJim Jagielski const ScDPDimension* GetParentDim() const { return aParentDimData.mpParentDim; } //! Ref GetParentLevel() const462*b1cdbd2cSJim Jagielski const ScDPLevel* GetParentLevel() const { return aParentDimData.mpParentLevel; } //! Ref GetDPMember() const463*b1cdbd2cSJim Jagielski const ScDPMember* GetDPMember()const { return aParentDimData.mpMemberDesc; } //! Ref GetOrder() const464*b1cdbd2cSJim Jagielski inline SCROW GetOrder() const { return aParentDimData.mnOrder; } //! Ref IsRoot() const465*b1cdbd2cSJim Jagielski inline sal_Bool IsRoot() const { return GetParentLevel() == NULL; } 466*b1cdbd2cSJim Jagielski SCROW GetDataId( ) const ; 467*b1cdbd2cSJim Jagielski // End Comments 468*b1cdbd2cSJim Jagielski ScDPAggData* GetColTotal( long nMeasure ) const; 469*b1cdbd2cSJim Jagielski 470*b1cdbd2cSJim Jagielski void FillVisibilityData(ScDPResultVisibilityData& rData) const; 471*b1cdbd2cSJim Jagielski }; 472*b1cdbd2cSJim Jagielski 473*b1cdbd2cSJim Jagielski class ScDPDataMember 474*b1cdbd2cSJim Jagielski { 475*b1cdbd2cSJim Jagielski private: 476*b1cdbd2cSJim Jagielski const ScDPResultData* pResultData; 477*b1cdbd2cSJim Jagielski const ScDPResultMember* pResultMember; //! Ref? 478*b1cdbd2cSJim Jagielski ScDPDataDimension* pChildDimension; 479*b1cdbd2cSJim Jagielski ScDPAggData aAggregate; 480*b1cdbd2cSJim Jagielski 481*b1cdbd2cSJim Jagielski void UpdateValues( const ::std::vector<ScDPValueData>& aValues, const ScDPSubTotalState& rSubState ); 482*b1cdbd2cSJim Jagielski 483*b1cdbd2cSJim Jagielski public: 484*b1cdbd2cSJim Jagielski ScDPDataMember( const ScDPResultData* pData, const ScDPResultMember* pRes ); 485*b1cdbd2cSJim Jagielski ~ScDPDataMember(); 486*b1cdbd2cSJim Jagielski 487*b1cdbd2cSJim Jagielski void InitFrom( const ScDPResultDimension* pDim ); 488*b1cdbd2cSJim Jagielski 489*b1cdbd2cSJim Jagielski String GetName() const; 490*b1cdbd2cSJim Jagielski sal_Bool IsVisible() const; 491*b1cdbd2cSJim Jagielski sal_Bool HasData( long nMeasure, const ScDPSubTotalState& rSubState ) const; 492*b1cdbd2cSJim Jagielski 493*b1cdbd2cSJim Jagielski // Wang Xu Ming -- 2009-8-17 494*b1cdbd2cSJim Jagielski // DataPilot Migration - Cache&&Performance 495*b1cdbd2cSJim Jagielski sal_Bool IsNamedItem( SCROW r ) const; 496*b1cdbd2cSJim Jagielski // End Comments 497*b1cdbd2cSJim Jagielski sal_Bool HasHiddenDetails() const; 498*b1cdbd2cSJim Jagielski 499*b1cdbd2cSJim Jagielski // Wang Xu Ming -- 2009-8-17 500*b1cdbd2cSJim Jagielski // DataPilot Migration - Cache&&Performance 501*b1cdbd2cSJim Jagielski void ProcessData( const ::std::vector< SCROW >& aChildMembers, const ::std::vector<ScDPValueData>& aValues, 502*b1cdbd2cSJim Jagielski const ScDPSubTotalState& rSubState ); 503*b1cdbd2cSJim Jagielski // End Comments 504*b1cdbd2cSJim Jagielski sal_Bool HasError( long nMeasure, const ScDPSubTotalState& rSubState ) const; 505*b1cdbd2cSJim Jagielski double GetAggregate( long nMeasure, const ScDPSubTotalState& rSubState ) const; 506*b1cdbd2cSJim Jagielski const ScDPAggData* GetConstAggData( long nMeasure, const ScDPSubTotalState& rSubState ) const; 507*b1cdbd2cSJim Jagielski ScDPAggData* GetAggData( long nMeasure, const ScDPSubTotalState& rSubState ); 508*b1cdbd2cSJim Jagielski 509*b1cdbd2cSJim Jagielski void FillDataRow( const ScDPResultMember* pRefMember, 510*b1cdbd2cSJim Jagielski com::sun::star::uno::Sequence<com::sun::star::sheet::DataResult>& rSequence, 511*b1cdbd2cSJim Jagielski long& rCol, long nMeasure, sal_Bool bIsSubTotalRow, 512*b1cdbd2cSJim Jagielski const ScDPSubTotalState& rSubState ) const; 513*b1cdbd2cSJim Jagielski 514*b1cdbd2cSJim Jagielski void UpdateDataRow( const ScDPResultMember* pRefMember, long nMeasure, sal_Bool bIsSubTotalRow, 515*b1cdbd2cSJim Jagielski const ScDPSubTotalState& rSubState ); 516*b1cdbd2cSJim Jagielski void UpdateRunningTotals( const ScDPResultMember* pRefMember, long nMeasure, sal_Bool bIsSubTotalRow, 517*b1cdbd2cSJim Jagielski const ScDPSubTotalState& rSubState, ScDPRunningTotalState& rRunning, 518*b1cdbd2cSJim Jagielski ScDPRowTotals& rTotals, const ScDPResultMember& rRowParent ); 519*b1cdbd2cSJim Jagielski 520*b1cdbd2cSJim Jagielski void SortMembers( ScDPResultMember* pRefMember ); 521*b1cdbd2cSJim Jagielski void DoAutoShow( ScDPResultMember* pRefMember ); 522*b1cdbd2cSJim Jagielski 523*b1cdbd2cSJim Jagielski void ResetResults(); 524*b1cdbd2cSJim Jagielski 525*b1cdbd2cSJim Jagielski void DumpState( const ScDPResultMember* pRefMember, ScDocument* pDoc, ScAddress& rPos ) const; 526*b1cdbd2cSJim Jagielski 527*b1cdbd2cSJim Jagielski //! this will be removed! GetChildDimension() const528*b1cdbd2cSJim Jagielski const ScDPDataDimension* GetChildDimension() const { return pChildDimension; } GetChildDimension()529*b1cdbd2cSJim Jagielski ScDPDataDimension* GetChildDimension() { return pChildDimension; } 530*b1cdbd2cSJim Jagielski }; 531*b1cdbd2cSJim Jagielski 532*b1cdbd2cSJim Jagielski //! replace PtrArr with 32-bit array ???? 533*b1cdbd2cSJim Jagielski 534*b1cdbd2cSJim Jagielski typedef ScDPDataMember* ScDPDataMemberPtr; 535*b1cdbd2cSJim Jagielski SV_DECL_PTRARR_DEL(ScDPDataMembers, ScDPDataMemberPtr, SC_DP_RES_GROW, SC_DP_RES_GROW) 536*b1cdbd2cSJim Jagielski 537*b1cdbd2cSJim Jagielski 538*b1cdbd2cSJim Jagielski // result dimension contains only members 539*b1cdbd2cSJim Jagielski 540*b1cdbd2cSJim Jagielski class ScDPResultDimension 541*b1cdbd2cSJim Jagielski { 542*b1cdbd2cSJim Jagielski public : 543*b1cdbd2cSJim Jagielski // Wang Xu Ming -- 2009-8-17 544*b1cdbd2cSJim Jagielski // DataPilot Migration - Cache&&Performance 545*b1cdbd2cSJim Jagielski typedef std::vector <ScDPResultMember *> MemberArray; 546*b1cdbd2cSJim Jagielski typedef std::map < SCROW , ScDPResultMember *> MemberHash; 547*b1cdbd2cSJim Jagielski // End Comments 548*b1cdbd2cSJim Jagielski private: 549*b1cdbd2cSJim Jagielski const ScDPResultData* pResultData; 550*b1cdbd2cSJim Jagielski MemberArray maMemberArray; 551*b1cdbd2cSJim Jagielski MemberHash maMemberHash; 552*b1cdbd2cSJim Jagielski sal_Bool bInitialized; 553*b1cdbd2cSJim Jagielski String aDimensionName; //! or ptr to IntDimension? 554*b1cdbd2cSJim Jagielski sal_Bool bIsDataLayout; //! or ptr to IntDimension? 555*b1cdbd2cSJim Jagielski sal_Bool bSortByData; 556*b1cdbd2cSJim Jagielski sal_Bool bSortAscending; 557*b1cdbd2cSJim Jagielski long nSortMeasure; 558*b1cdbd2cSJim Jagielski ScMemberSortOrder aMemberOrder; // used when sorted by measure 559*b1cdbd2cSJim Jagielski sal_Bool bAutoShow; 560*b1cdbd2cSJim Jagielski sal_Bool bAutoTopItems; 561*b1cdbd2cSJim Jagielski long nAutoMeasure; 562*b1cdbd2cSJim Jagielski long nAutoCount; 563*b1cdbd2cSJim Jagielski 564*b1cdbd2cSJim Jagielski // Wang Xu Ming -- 2009-8-17 565*b1cdbd2cSJim Jagielski // DataPilot Migration - Cache&&Performance 566*b1cdbd2cSJim Jagielski ScDPResultMember* FindMember( SCROW iData ) const; 567*b1cdbd2cSJim Jagielski ScDPResultMember* AddMember( const ScDPParentDimData& aData ); 568*b1cdbd2cSJim Jagielski ScDPResultMember* InsertMember( ScDPParentDimData* pMemberData ); 569*b1cdbd2cSJim Jagielski ResultMembers* GetResultMember( ScDPDimension* pDim, ScDPLevel* pLevel ); 570*b1cdbd2cSJim Jagielski void InitWithMembers( LateInitParams& rParams, 571*b1cdbd2cSJim Jagielski const ::std::vector< SCROW >& pItemData, 572*b1cdbd2cSJim Jagielski size_t nPos, 573*b1cdbd2cSJim Jagielski ScDPInitState& rInitState ); 574*b1cdbd2cSJim Jagielski // End Comments 575*b1cdbd2cSJim Jagielski public: 576*b1cdbd2cSJim Jagielski ScDPResultDimension( const ScDPResultData* pData ); 577*b1cdbd2cSJim Jagielski ~ScDPResultDimension(); 578*b1cdbd2cSJim Jagielski 579*b1cdbd2cSJim Jagielski // allocates new members 580*b1cdbd2cSJim Jagielski // Wang Xu Ming -- 2009-8-17 581*b1cdbd2cSJim Jagielski // DataPilot Migration - Cache&&Performance 582*b1cdbd2cSJim Jagielski void InitFrom( const ::std::vector<ScDPDimension*>& ppDim, 583*b1cdbd2cSJim Jagielski const ::std::vector<ScDPLevel*>& ppLev, 584*b1cdbd2cSJim Jagielski size_t nPos, 585*b1cdbd2cSJim Jagielski ScDPInitState& rInitState , sal_Bool bInitChild = sal_True ); 586*b1cdbd2cSJim Jagielski void LateInitFrom( LateInitParams& rParams, 587*b1cdbd2cSJim Jagielski const ::std::vector< SCROW >& pItemData, 588*b1cdbd2cSJim Jagielski size_t nPos, 589*b1cdbd2cSJim Jagielski ScDPInitState& rInitState ); 590*b1cdbd2cSJim Jagielski void CheckShowEmpty( sal_Bool bShow = sal_False ); 591*b1cdbd2cSJim Jagielski 592*b1cdbd2cSJim Jagielski // End Comments 593*b1cdbd2cSJim Jagielski long GetSize(long nMeasure) const; 594*b1cdbd2cSJim Jagielski 595*b1cdbd2cSJim Jagielski // Wang Xu Ming -- 2009-8-17 596*b1cdbd2cSJim Jagielski // DataPilot Migration - Cache&&Performance 597*b1cdbd2cSJim Jagielski bool IsValidEntry( const ::std::vector<SCROW>& aMembers ) const; 598*b1cdbd2cSJim Jagielski 599*b1cdbd2cSJim Jagielski // modifies existing members, allocates data dimensions 600*b1cdbd2cSJim Jagielski void ProcessData( const ::std::vector<SCROW>& aMembers, 601*b1cdbd2cSJim Jagielski const ScDPResultDimension* pDataDim, 602*b1cdbd2cSJim Jagielski const ::std::vector<SCROW>& aDataMembers, 603*b1cdbd2cSJim Jagielski const ::std::vector<ScDPValueData>& aValues ) const; //! Test 604*b1cdbd2cSJim Jagielski // End Comments 605*b1cdbd2cSJim Jagielski void FillMemberResults( com::sun::star::uno::Sequence< 606*b1cdbd2cSJim Jagielski com::sun::star::sheet::MemberResult>* pSequences, 607*b1cdbd2cSJim Jagielski long nStart, long nMeasure ); 608*b1cdbd2cSJim Jagielski 609*b1cdbd2cSJim Jagielski void FillDataResults( const ScDPResultMember* pRefMember, 610*b1cdbd2cSJim Jagielski com::sun::star::uno::Sequence< 611*b1cdbd2cSJim Jagielski com::sun::star::uno::Sequence< 612*b1cdbd2cSJim Jagielski com::sun::star::sheet::DataResult> >& rSequence, 613*b1cdbd2cSJim Jagielski long nRow, long nMeasure ) const; 614*b1cdbd2cSJim Jagielski 615*b1cdbd2cSJim Jagielski void UpdateDataResults( const ScDPResultMember* pRefMember, long nMeasure ) const; 616*b1cdbd2cSJim Jagielski void UpdateRunningTotals( const ScDPResultMember* pRefMember, long nMeasure, 617*b1cdbd2cSJim Jagielski ScDPRunningTotalState& rRunning, ScDPRowTotals& rTotals ) const; 618*b1cdbd2cSJim Jagielski 619*b1cdbd2cSJim Jagielski void SortMembers( ScDPResultMember* pRefMember ); 620*b1cdbd2cSJim Jagielski long GetSortedIndex( long nUnsorted ) const; 621*b1cdbd2cSJim Jagielski 622*b1cdbd2cSJim Jagielski void DoAutoShow( ScDPResultMember* pRefMember ); 623*b1cdbd2cSJim Jagielski 624*b1cdbd2cSJim Jagielski void ResetResults(); 625*b1cdbd2cSJim Jagielski 626*b1cdbd2cSJim Jagielski // called for the reference dimension 627*b1cdbd2cSJim Jagielski ScDPDataMember* GetRowReferenceMember( const ScDPRelativePos* pMemberPos, const String* pName, 628*b1cdbd2cSJim Jagielski const long* pRowIndexes, const long* pColIndexes ) const; 629*b1cdbd2cSJim Jagielski 630*b1cdbd2cSJim Jagielski // uses row root member from ScDPRunningTotalState 631*b1cdbd2cSJim Jagielski static ScDPDataMember* GetColReferenceMember( const ScDPRelativePos* pMemberPos, const String* pName, 632*b1cdbd2cSJim Jagielski long nRefDimPos, const ScDPRunningTotalState& rRunning ); 633*b1cdbd2cSJim Jagielski 634*b1cdbd2cSJim Jagielski void DumpState( const ScDPResultMember* pRefMember, ScDocument* pDoc, ScAddress& rPos ) const; 635*b1cdbd2cSJim Jagielski 636*b1cdbd2cSJim Jagielski // for ScDPDataDimension::InitFrom 637*b1cdbd2cSJim Jagielski long GetMemberCount() const; 638*b1cdbd2cSJim Jagielski const ScDPResultMember* GetMember(long n) const; 639*b1cdbd2cSJim Jagielski ScDPResultMember* GetMember(long n); 640*b1cdbd2cSJim Jagielski GetMemberOrder() const641*b1cdbd2cSJim Jagielski const ScMemberSortOrder& GetMemberOrder() const { return aMemberOrder; } GetMemberOrder()642*b1cdbd2cSJim Jagielski ScMemberSortOrder& GetMemberOrder() { return aMemberOrder; } 643*b1cdbd2cSJim Jagielski IsDataLayout() const644*b1cdbd2cSJim Jagielski sal_Bool IsDataLayout() const { return bIsDataLayout; } GetName() const645*b1cdbd2cSJim Jagielski String GetName() const { return aDimensionName; } 646*b1cdbd2cSJim Jagielski IsSortByData() const647*b1cdbd2cSJim Jagielski sal_Bool IsSortByData() const { return bSortByData; } IsSortAscending() const648*b1cdbd2cSJim Jagielski sal_Bool IsSortAscending() const { return bSortAscending; } GetSortMeasure() const649*b1cdbd2cSJim Jagielski long GetSortMeasure() const { return nSortMeasure; } 650*b1cdbd2cSJim Jagielski IsAutoShow() const651*b1cdbd2cSJim Jagielski sal_Bool IsAutoShow() const { return bAutoShow; } IsAutoTopItems() const652*b1cdbd2cSJim Jagielski sal_Bool IsAutoTopItems() const { return bAutoTopItems; } GetAutoMeasure() const653*b1cdbd2cSJim Jagielski long GetAutoMeasure() const { return nAutoMeasure; } GetAutoCount() const654*b1cdbd2cSJim Jagielski long GetAutoCount() const { return nAutoCount; } 655*b1cdbd2cSJim Jagielski 656*b1cdbd2cSJim Jagielski ScDPResultDimension* GetFirstChildDimension() const; 657*b1cdbd2cSJim Jagielski 658*b1cdbd2cSJim Jagielski void FillVisibilityData(ScDPResultVisibilityData& rData) const; 659*b1cdbd2cSJim Jagielski }; 660*b1cdbd2cSJim Jagielski 661*b1cdbd2cSJim Jagielski class ScDPDataDimension 662*b1cdbd2cSJim Jagielski { 663*b1cdbd2cSJim Jagielski private: 664*b1cdbd2cSJim Jagielski const ScDPResultData* pResultData; 665*b1cdbd2cSJim Jagielski const ScDPResultDimension* pResultDimension; // column 666*b1cdbd2cSJim Jagielski ScDPDataMembers aMembers; 667*b1cdbd2cSJim Jagielski sal_Bool bIsDataLayout; //! or ptr to IntDimension? 668*b1cdbd2cSJim Jagielski 669*b1cdbd2cSJim Jagielski public: 670*b1cdbd2cSJim Jagielski ScDPDataDimension( const ScDPResultData* pData ); 671*b1cdbd2cSJim Jagielski ~ScDPDataDimension(); 672*b1cdbd2cSJim Jagielski 673*b1cdbd2cSJim Jagielski void InitFrom( const ScDPResultDimension* pDim ); // recursive 674*b1cdbd2cSJim Jagielski // Wang Xu Ming -- 2009-8-17 675*b1cdbd2cSJim Jagielski // DataPilot Migration - Cache&&Performance 676*b1cdbd2cSJim Jagielski void ProcessData( const ::std::vector< SCROW >& aDataMembers, const ::std::vector<ScDPValueData>& aValues, 677*b1cdbd2cSJim Jagielski const ScDPSubTotalState& rSubState ); 678*b1cdbd2cSJim Jagielski // End Comments 679*b1cdbd2cSJim Jagielski void FillDataRow( const ScDPResultDimension* pRefDim, 680*b1cdbd2cSJim Jagielski com::sun::star::uno::Sequence<com::sun::star::sheet::DataResult>& rSequence, 681*b1cdbd2cSJim Jagielski long nCol, long nMeasure, sal_Bool bIsSubTotalRow, 682*b1cdbd2cSJim Jagielski const ScDPSubTotalState& rSubState ) const; 683*b1cdbd2cSJim Jagielski 684*b1cdbd2cSJim Jagielski void UpdateDataRow( const ScDPResultDimension* pRefDim, long nMeasure, sal_Bool bIsSubTotalRow, 685*b1cdbd2cSJim Jagielski const ScDPSubTotalState& rSubState ) const; 686*b1cdbd2cSJim Jagielski void UpdateRunningTotals( const ScDPResultDimension* pRefDim, long nMeasure, sal_Bool bIsSubTotalRow, 687*b1cdbd2cSJim Jagielski const ScDPSubTotalState& rSubState, ScDPRunningTotalState& rRunning, 688*b1cdbd2cSJim Jagielski ScDPRowTotals& rTotals, const ScDPResultMember& rRowParent ) const; 689*b1cdbd2cSJim Jagielski 690*b1cdbd2cSJim Jagielski void SortMembers( ScDPResultDimension* pRefDim ); 691*b1cdbd2cSJim Jagielski long GetSortedIndex( long nUnsorted ) const; 692*b1cdbd2cSJim Jagielski 693*b1cdbd2cSJim Jagielski void DoAutoShow( ScDPResultDimension* pRefDim ); 694*b1cdbd2cSJim Jagielski 695*b1cdbd2cSJim Jagielski void ResetResults(); 696*b1cdbd2cSJim Jagielski 697*b1cdbd2cSJim Jagielski void DumpState( const ScDPResultDimension* pRefDim, ScDocument* pDoc, ScAddress& rPos ) const; 698*b1cdbd2cSJim Jagielski 699*b1cdbd2cSJim Jagielski long GetMemberCount() const; 700*b1cdbd2cSJim Jagielski ScDPDataMember* GetMember(long n) const; 701*b1cdbd2cSJim Jagielski }; 702*b1cdbd2cSJim Jagielski 703*b1cdbd2cSJim Jagielski // ---------------------------------------------------------------------------- 704*b1cdbd2cSJim Jagielski 705*b1cdbd2cSJim Jagielski /** 706*b1cdbd2cSJim Jagielski * This class collects visible members of each dimension and uses that 707*b1cdbd2cSJim Jagielski * information to create filtering criteria (e.g. for drill-down data). 708*b1cdbd2cSJim Jagielski */ 709*b1cdbd2cSJim Jagielski class ScDPResultVisibilityData 710*b1cdbd2cSJim Jagielski { 711*b1cdbd2cSJim Jagielski public: 712*b1cdbd2cSJim Jagielski // Wang Xu Ming -- 2009-8-17 713*b1cdbd2cSJim Jagielski // DataPilot Migration - Cache&&Performance 714*b1cdbd2cSJim Jagielski ScDPResultVisibilityData( ScDPSource* pSource); 715*b1cdbd2cSJim Jagielski // End Comments 716*b1cdbd2cSJim Jagielski ~ScDPResultVisibilityData(); 717*b1cdbd2cSJim Jagielski 718*b1cdbd2cSJim Jagielski void addVisibleMember(const String& rDimName, const ScDPItemData& rMemberItem); 719*b1cdbd2cSJim Jagielski void fillFieldFilters(::std::vector<ScDPCacheTable::Criterion>& rFilters) const; 720*b1cdbd2cSJim Jagielski 721*b1cdbd2cSJim Jagielski private: 722*b1cdbd2cSJim Jagielski struct MemberHash 723*b1cdbd2cSJim Jagielski { 724*b1cdbd2cSJim Jagielski size_t operator()(const ScDPItemData& r) const; 725*b1cdbd2cSJim Jagielski }; 726*b1cdbd2cSJim Jagielski typedef ::std::hash_set<ScDPItemData, MemberHash> VisibleMemberType; 727*b1cdbd2cSJim Jagielski typedef ::std::hash_map<String, VisibleMemberType, ScStringHashCode> DimMemberType; 728*b1cdbd2cSJim Jagielski DimMemberType maDimensions; 729*b1cdbd2cSJim Jagielski 730*b1cdbd2cSJim Jagielski ScDPSource* mpSource; 731*b1cdbd2cSJim Jagielski }; 732*b1cdbd2cSJim Jagielski 733*b1cdbd2cSJim Jagielski #endif 734*b1cdbd2cSJim Jagielski 735