summaryrefslogtreecommitdiff
path: root/sc/inc/dpdimsave.hxx
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@gmail.com>2012-03-09 10:15:52 -0500
committerKohei Yoshida <kohei.yoshida@gmail.com>2012-03-09 11:13:35 -0500
commit0637ca0aefed73b55154c15c8738c100f329a3a8 (patch)
tree551eca27ec05ddb5a6185115126d3c8bd8c9871b /sc/inc/dpdimsave.hxx
parent593f6ac1064184f1faee60155c412b964f6f86a1 (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.hxx22
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; }