diff --git a/sc/inc/colorscale.hxx b/sc/inc/colorscale.hxx index 54f0c5958c02..e7d09442796f 100644 --- a/sc/inc/colorscale.hxx +++ b/sc/inc/colorscale.hxx @@ -50,6 +50,7 @@ private: public: ScColorScaleEntry(double nVal, const Color& rCol); ScColorScaleEntry(const ScColorScaleEntry& rEntry); + ScColorScaleEntry(ScDocument* pDoc, const ScColorScaleEntry& rEntry); ~ScColorScaleEntry(); const Color& GetColor() const; @@ -83,6 +84,7 @@ private: bool CheckEntriesForRel(const ScRange& rRange) const; public: ScColorScaleFormat(ScDocument* pDoc); + ScColorScaleFormat(ScDocument* pDoc, const ScColorScaleFormat& rFormat); Color* GetColor(const ScAddress& rAddr) const; void AddEntry(ScColorScaleEntry* pEntry); @@ -108,6 +110,7 @@ private: boost::ptr_vector maColorScaleFormats; public: ScColorScaleFormatList() {}; + ScColorScaleFormatList(ScDocument* pDoc, const ScColorScaleFormatList& rList); typedef ColorScaleFormatContainer::iterator iterator; typedef ColorScaleFormatContainer::const_iterator const_iterator; diff --git a/sc/source/core/data/colorscale.cxx b/sc/source/core/data/colorscale.cxx index 6a249ff88c2b..21df634a16eb 100644 --- a/sc/source/core/data/colorscale.cxx +++ b/sc/source/core/data/colorscale.cxx @@ -50,6 +50,16 @@ ScColorScaleEntry::ScColorScaleEntry(const ScColorScaleEntry& rEntry): { } +ScColorScaleEntry::ScColorScaleEntry(ScDocument* pDoc, const ScColorScaleEntry& rEntry): + mnVal(rEntry.mnVal), + maColor(rEntry.maColor), + mpCell(static_cast(rEntry.mpCell->Clone(*pDoc))), + mbMin(rEntry.mbMin), + mbMax(rEntry.mbMax), + mbPercent(rEntry.mbPercent) +{ +} + ScColorScaleEntry::~ScColorScaleEntry() { } @@ -101,6 +111,17 @@ ScColorScaleFormat::ScColorScaleFormat(ScDocument* pDoc): { } +ScColorScaleFormat::ScColorScaleFormat(ScDocument* pDoc, const ScColorScaleFormat& rFormat): + maRanges(rFormat.maRanges), + mpDoc(pDoc) +{ + for(const_iterator itr = rFormat.begin(); itr != rFormat.end(); ++itr) + { + maColorScales.push_back(new ScColorScaleEntry(pDoc, *itr)); + } +} + + void ScColorScaleFormat::AddEntry( ScColorScaleEntry* pEntry ) { maColorScales.push_back( pEntry ); @@ -465,6 +486,14 @@ ScColorScaleFormat::const_iterator ScColorScaleFormat::end() const return maColorScales.end(); } +ScColorScaleFormatList::ScColorScaleFormatList(ScDocument* pDoc, const ScColorScaleFormatList& rList) +{ + for(const_iterator itr = rList.begin(); itr != rList.end(); ++itr) + { + maColorScaleFormats.push_back(new ScColorScaleFormat(pDoc, *itr)); + } +} + void ScColorScaleFormatList::AddFormat( ScColorScaleFormat* pFormat ) { maColorScaleFormats.push_back( pFormat ); diff --git a/sc/source/core/data/documen2.cxx b/sc/source/core/data/documen2.cxx index 1120f052fb30..87ad7d41b6b5 100644 --- a/sc/source/core/data/documen2.cxx +++ b/sc/source/core/data/documen2.cxx @@ -475,6 +475,11 @@ void ScDocument::InitClipPtrs( ScDocument* pSourceDoc ) const ScConditionalFormatList* pSourceCond = pSourceDoc->pCondFormList; if ( pSourceCond ) pCondFormList = new ScConditionalFormatList(this, *pSourceCond); + + const ScColorScaleFormatList* pSourceColorScaleList = pSourceDoc->mpColorScaleList.get(); + if ( pSourceColorScaleList ) + mpColorScaleList.reset(new ScColorScaleFormatList(this, *pSourceColorScaleList)); + const ScValidationDataList* pSourceValid = pSourceDoc->pValidationList; if ( pSourceValid ) pValidationList = new ScValidationDataList(this, *pSourceValid);