diff options
author | Kohei Yoshida <kohei.yoshida@gmail.com> | 2012-03-09 10:15:52 -0500 |
---|---|---|
committer | Kohei Yoshida <kohei.yoshida@gmail.com> | 2012-03-09 11:13:35 -0500 |
commit | 0637ca0aefed73b55154c15c8738c100f329a3a8 (patch) | |
tree | 551eca27ec05ddb5a6185115126d3c8bd8c9871b /sc/inc/dpdimsave.hxx | |
parent | 593f6ac1064184f1faee60155c412b964f6f86a1 (diff) |
Populate group dimensions directly to the cache.
This is to avoid populating them twice in case the same cache is
referenced by multiple pivot tables.
Diffstat (limited to 'sc/inc/dpdimsave.hxx')
-rw-r--r-- | sc/inc/dpdimsave.hxx | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/sc/inc/dpdimsave.hxx b/sc/inc/dpdimsave.hxx index 6858e8bf0f78..925cb9425918 100644 --- a/sc/inc/dpdimsave.hxx +++ b/sc/inc/dpdimsave.hxx @@ -52,13 +52,14 @@ class ScDPSaveGroupDimension; class SC_DLLPUBLIC ScDPSaveGroupItem { rtl::OUString aGroupName; // name of group - ::std::vector<rtl::OUString> aElements; // names of items in original dimension + std::vector<rtl::OUString> aElements; // names of items in original dimension + mutable std::vector<ScDPItemData> maItems; // items converted from the strings. public: ScDPSaveGroupItem( const rtl::OUString& rName ); ~ScDPSaveGroupItem(); - void AddToData( ScDPGroupDimension& rDataDim, SvNumberFormatter* pFormatter ) const; + void AddToData(ScDPGroupDimension& rDataDim) const; void AddElement( const rtl::OUString& rName ); void AddElementsFromGroup( const ScDPSaveGroupItem& rGroup ); @@ -74,6 +75,9 @@ public: // remove this group's elements from their groups in rDimension // (rDimension must be a different dimension from the one which contains this) void RemoveElementsFromGroups( ScDPSaveGroupDimension& rDimension ) const; + + void ConvertElementsToItems(SvNumberFormatter* pFormatter) const; + bool HasInGroup(const ScDPItemData& rItem) const; }; typedef ::std::vector<ScDPSaveGroupItem> ScDPSaveGroupItemVec; @@ -87,7 +91,7 @@ class SC_DLLPUBLIC ScDPSaveGroupDimension rtl::OUString aSourceDim; // always the real source from the original data rtl::OUString aGroupDimName; ScDPSaveGroupItemVec aGroups; - ScDPNumGroupInfo aDateInfo; + mutable ScDPNumGroupInfo aDateInfo; sal_Int32 nDatePart; public: @@ -96,7 +100,7 @@ public: ~ScDPSaveGroupDimension(); void AddToData( ScDPGroupTableData& rData ) const; - + void AddToCache(ScDPCache& rCache) const; void SetDateInfo( const ScDPNumGroupInfo& rInfo, sal_Int32 nPart ); void AddGroupItem( const ScDPSaveGroupItem& rItem ); @@ -119,18 +123,21 @@ public: ScDPSaveGroupItem* GetGroupAccByIndex( long nIndex ); void Rename( const rtl::OUString& rNewName ); + +private: + bool IsInGroup(const ScDPItemData& rItem) const; }; /** * Represents a group dimension that introduces a new hierarchy for an * existing dimension. Unlike the ScDPSaveGroupDimension counterpart, it - * re-uses the source dimension. + * re-uses the source dimension name and ID. */ class SC_DLLPUBLIC ScDPSaveNumGroupDimension { rtl::OUString aDimensionName; - ScDPNumGroupInfo aGroupInfo; - ScDPNumGroupInfo aDateInfo; + mutable ScDPNumGroupInfo aGroupInfo; + mutable ScDPNumGroupInfo aDateInfo; sal_Int32 nDatePart; public: @@ -139,6 +146,7 @@ public: ~ScDPSaveNumGroupDimension(); void AddToData( ScDPGroupTableData& rData ) const; + void AddToCache(ScDPCache& rCache) const; const rtl::OUString& GetDimensionName() const { return aDimensionName; } const ScDPNumGroupInfo& GetInfo() const { return aGroupInfo; } |