diff options
author | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2012-05-17 11:04:56 +0200 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2012-05-18 10:51:20 +0200 |
commit | eb3d3a0a7d49b51942e7f39cdcde1be0b11349e7 (patch) | |
tree | dabb1e9934436cdb5bc57728ed0abffa91b4c9a1 | |
parent | 914fc75da516218bb072245a5c2e3038a4e3639e (diff) |
restructure colorscale code a bit to allow adding databars
This is just a first step. In a second step we need another layer to
allow color scales and databars applied to the same range and finally
merge them with normal conditional formatting.
Change-Id: I0452ed12dd9b2d5395cf005d75a902fbb7a984ad
-rw-r--r-- | sc/inc/colorscale.hxx | 86 | ||||
-rw-r--r-- | sc/inc/document.hxx | 8 | ||||
-rw-r--r-- | sc/source/core/data/colorscale.cxx | 59 | ||||
-rw-r--r-- | sc/source/core/data/documen2.cxx | 4 | ||||
-rw-r--r-- | sc/source/core/data/documen4.cxx | 6 | ||||
-rw-r--r-- | sc/source/core/data/fillinfo.cxx | 6 | ||||
-rw-r--r-- | sc/source/core/data/table2.cxx | 10 | ||||
-rw-r--r-- | sc/source/filter/excel/xecontent.cxx | 11 |
8 files changed, 139 insertions, 51 deletions
diff --git a/sc/inc/colorscale.hxx b/sc/inc/colorscale.hxx index 61346b6873cb..2596953d3c27 100644 --- a/sc/inc/colorscale.hxx +++ b/sc/inc/colorscale.hxx @@ -39,2 +39,9 @@ class ScFormulaCell; class ScTokenArray; +class ScDataBarInfo; + +struct ScDataBarFormatData +{ + Color maPositiveColor; + bool mbGradient; +}; @@ -73,7 +80,35 @@ public: -class SC_DLLPUBLIC ScColorScaleFormat +enum ScColorFormatType { -private: + COLORSCALE, + DATABAR +}; + +class SC_DLLPUBLIC ScColorFormat +{ +public: + ScColorFormat(ScDocument* pDoc); + ScColorFormat(ScDocument* pDoc, const ScColorFormat& rFormat); + virtual ~ScColorFormat(); + + void SetRange(const ScRangeList& rList); + const ScRangeList& GetRange() const; + + virtual void DataChanged(const ScRange& rRange) = 0; + virtual void UpdateMoveTab(SCTAB nOldTab, SCTAB nNewTab) = 0; + virtual void UpdateReference( UpdateRefMode eUpdateRefMode, + const ScRange& rRange, SCsCOL nDx, SCsROW nDy, SCsTAB nDz ) = 0; + + virtual ScColorFormat* Clone(ScDocument* pDoc = NULL) const = 0; + + virtual ScColorFormatType GetType() const = 0; + +protected: ScRangeList maRanges; ScDocument* mpDoc; +}; + +class SC_DLLPUBLIC ScColorScaleFormat : public ScColorFormat +{ +private: typedef boost::ptr_vector<ScColorScaleEntry> ColorScaleEntries; @@ -89,2 +124,4 @@ public: ScColorScaleFormat(ScDocument* pDoc, const ScColorScaleFormat& rFormat); + virtual ~ScColorScaleFormat(); + virtual ScColorFormat* Clone(ScDocument* pDoc = NULL) const; @@ -92,10 +129,9 @@ public: void AddEntry(ScColorScaleEntry* pEntry); - void SetRange(const ScRangeList& rList); - const ScRangeList& GetRange() const; - void DataChanged(const ScRange& rRange); - void UpdateMoveTab(SCTAB nOldTab, SCTAB nNewTab); - void UpdateReference( UpdateRefMode eUpdateRefMode, + virtual void DataChanged(const ScRange& rRange); + virtual void UpdateMoveTab(SCTAB nOldTab, SCTAB nNewTab); + virtual void UpdateReference( UpdateRefMode eUpdateRefMode, const ScRange& rRange, SCsCOL nDx, SCsROW nDy, SCsTAB nDz ); + virtual ScColorFormatType GetType() const; typedef ColorScaleEntries::iterator iterator; @@ -108,16 +144,34 @@ public: -class SC_DLLPUBLIC ScColorScaleFormatList +class SC_DLLPUBLIC ScDataBarFormat : public ScColorFormat +{ +public: + ScDataBarFormat(ScDocument* pDoc); + ScDataBarFormat(ScDocument* pDoc, const ScDataBarFormat& rFormat); + + ScDataBarInfo* GetDataBarInfo(const ScAddress& rAddr) const; + + virtual void DataChanged(const ScRange& rRange); + virtual void UpdateMoveTab(SCTAB nOldTab, SCTAB nNewTab); + virtual void UpdateReference( UpdateRefMode eUpdateRefMode, + const ScRange& rRange, SCsCOL nDx, SCsROW nDy, SCsTAB nDz ); + + virtual ScColorFormatType GetType() const; +private: + ScDataBarFormatData maFormatData; +}; + +class SC_DLLPUBLIC ScColorFormatList { private: - typedef boost::ptr_vector<ScColorScaleFormat> ColorScaleFormatContainer; - boost::ptr_vector<ScColorScaleFormat> maColorScaleFormats; + typedef boost::ptr_vector<ScColorFormat> ColorFormatContainer; + ColorFormatContainer maColorScaleFormats; public: - ScColorScaleFormatList() {}; - ScColorScaleFormatList(ScDocument* pDoc, const ScColorScaleFormatList& rList); + ScColorFormatList() {}; + ScColorFormatList(ScDocument* pDoc, const ScColorFormatList& rList); - typedef ColorScaleFormatContainer::iterator iterator; - typedef ColorScaleFormatContainer::const_iterator const_iterator; + typedef ColorFormatContainer::iterator iterator; + typedef ColorFormatContainer::const_iterator const_iterator; - ScColorScaleFormat* GetFormat(sal_uInt32 nFormat); - void AddFormat( ScColorScaleFormat* pFormat ); + ScColorFormat* GetFormat(sal_uInt32 nFormat); + void AddFormat( ScColorFormat* pFormat ); diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx index 0fecf8d4fd46..7e14a5cfd4e0 100644 --- a/sc/inc/document.hxx +++ b/sc/inc/document.hxx @@ -99,3 +99,3 @@ class ScConditionalFormatList; class ScColorScaleFormat; -class ScColorScaleFormatList; +class ScColorFormatList; class ScDBCollection; @@ -248,3 +248,3 @@ private: ScConditionalFormatList* pCondFormList; // conditional formats - boost::scoped_ptr<ScColorScaleFormatList> mpColorScaleList; //color scales + boost::scoped_ptr<ScColorFormatList> mpColorScaleList; //color scales ScValidationDataList* pValidationList; // validity @@ -1214,4 +1214,4 @@ public: - SC_DLLPUBLIC const ScColorScaleFormatList* GetColorScaleList() const; - SC_DLLPUBLIC ScColorScaleFormatList* GetColorScaleList(); + SC_DLLPUBLIC const ScColorFormatList* GetColorScaleList() const; + SC_DLLPUBLIC ScColorFormatList* GetColorScaleList(); diff --git a/sc/source/core/data/colorscale.cxx b/sc/source/core/data/colorscale.cxx index bad6a1495b65..1892a7562be8 100644 --- a/sc/source/core/data/colorscale.cxx +++ b/sc/source/core/data/colorscale.cxx @@ -122,3 +122,3 @@ const Color& ScColorScaleEntry::GetColor() const -ScColorScaleFormat::ScColorScaleFormat(ScDocument* pDoc): +ScColorFormat::ScColorFormat(ScDocument* pDoc): mpDoc(pDoc) @@ -127,3 +127,3 @@ ScColorScaleFormat::ScColorScaleFormat(ScDocument* pDoc): -ScColorScaleFormat::ScColorScaleFormat(ScDocument* pDoc, const ScColorScaleFormat& rFormat): +ScColorFormat::ScColorFormat(ScDocument* pDoc, const ScColorFormat& rFormat): maRanges(rFormat.maRanges), @@ -131,2 +131,16 @@ ScColorScaleFormat::ScColorScaleFormat(ScDocument* pDoc, const ScColorScaleForma { +} + +ScColorFormat::~ScColorFormat() +{ +} + +ScColorScaleFormat::ScColorScaleFormat(ScDocument* pDoc): + ScColorFormat(pDoc) +{ +} + +ScColorScaleFormat::ScColorScaleFormat(ScDocument* pDoc, const ScColorScaleFormat& rFormat): + ScColorFormat(pDoc, rFormat) +{ for(const_iterator itr = rFormat.begin(); itr != rFormat.end(); ++itr) @@ -137,2 +151,10 @@ ScColorScaleFormat::ScColorScaleFormat(ScDocument* pDoc, const ScColorScaleForma +ScColorFormat* ScColorScaleFormat::Clone(ScDocument* pDoc) const +{ + return new ScColorScaleFormat(pDoc, *this); +} + +ScColorScaleFormat::~ScColorScaleFormat() +{ +} @@ -294,3 +316,3 @@ void ScColorScaleFormat::calcMinMax(double& rMin, double& rMax) const -void ScColorScaleFormat::SetRange(const ScRangeList& rList) +void ScColorFormat::SetRange(const ScRangeList& rList) { @@ -299,3 +321,3 @@ void ScColorScaleFormat::SetRange(const ScRangeList& rList) -const ScRangeList& ScColorScaleFormat::GetRange() const +const ScRangeList& ScColorFormat::GetRange() const { @@ -487,2 +509,7 @@ void ScColorScaleFormat::DataChanged(const ScRange& rRange) +ScColorFormatType ScColorScaleFormat::GetType() const +{ + return COLORSCALE; +} + ScColorScaleFormat::iterator ScColorScaleFormat::begin() @@ -507,3 +534,3 @@ ScColorScaleFormat::const_iterator ScColorScaleFormat::end() const -ScColorScaleFormatList::ScColorScaleFormatList(ScDocument* pDoc, const ScColorScaleFormatList& rList) +ScColorFormatList::ScColorFormatList(ScDocument* pDoc, const ScColorFormatList& rList) { @@ -511,3 +538,3 @@ ScColorScaleFormatList::ScColorScaleFormatList(ScDocument* pDoc, const ScColorSc { - maColorScaleFormats.push_back(new ScColorScaleFormat(pDoc, *itr)); + maColorScaleFormats.push_back(itr->Clone(pDoc)); } @@ -515,3 +542,3 @@ ScColorScaleFormatList::ScColorScaleFormatList(ScDocument* pDoc, const ScColorSc -void ScColorScaleFormatList::AddFormat( ScColorScaleFormat* pFormat ) +void ScColorFormatList::AddFormat( ScColorFormat* pFormat ) { @@ -521,3 +548,3 @@ void ScColorScaleFormatList::AddFormat( ScColorScaleFormat* pFormat ) // attention nFormat is 1 based, 0 is reserved for no format -ScColorScaleFormat* ScColorScaleFormatList::GetFormat(sal_uInt32 nFormat) +ScColorFormat* ScColorFormatList::GetFormat(sal_uInt32 nFormat) { @@ -529,3 +556,3 @@ ScColorScaleFormat* ScColorScaleFormatList::GetFormat(sal_uInt32 nFormat) -ScColorScaleFormatList::iterator ScColorScaleFormatList::begin() +ScColorFormatList::iterator ScColorFormatList::begin() { @@ -534,3 +561,3 @@ ScColorScaleFormatList::iterator ScColorScaleFormatList::begin() -ScColorScaleFormatList::const_iterator ScColorScaleFormatList::begin() const +ScColorFormatList::const_iterator ScColorFormatList::begin() const { @@ -539,3 +566,3 @@ ScColorScaleFormatList::const_iterator ScColorScaleFormatList::begin() const -ScColorScaleFormatList::iterator ScColorScaleFormatList::end() +ScColorFormatList::iterator ScColorFormatList::end() { @@ -544,3 +571,3 @@ ScColorScaleFormatList::iterator ScColorScaleFormatList::end() -ScColorScaleFormatList::const_iterator ScColorScaleFormatList::end() const +ScColorFormatList::const_iterator ScColorFormatList::end() const { @@ -549,3 +576,3 @@ ScColorScaleFormatList::const_iterator ScColorScaleFormatList::end() const -size_t ScColorScaleFormatList::size() const +size_t ScColorFormatList::size() const { @@ -554,3 +581,3 @@ size_t ScColorScaleFormatList::size() const -void ScColorScaleFormatList::DataChanged(const ScRange& rRange) +void ScColorFormatList::DataChanged(const ScRange& rRange) { @@ -562,3 +589,3 @@ void ScColorScaleFormatList::DataChanged(const ScRange& rRange) -void ScColorScaleFormatList::UpdateMoveTab(SCTAB nOldTab, SCTAB nNewTab) +void ScColorFormatList::UpdateMoveTab(SCTAB nOldTab, SCTAB nNewTab) { @@ -570,3 +597,3 @@ void ScColorScaleFormatList::UpdateMoveTab(SCTAB nOldTab, SCTAB nNewTab) -void ScColorScaleFormatList::UpdateReference( UpdateRefMode eUpdateRefMode, +void ScColorFormatList::UpdateReference( UpdateRefMode eUpdateRefMode, const ScRange& rRange, SCsCOL nDx, SCsROW nDy, SCsTAB nDz ) diff --git a/sc/source/core/data/documen2.cxx b/sc/source/core/data/documen2.cxx index 87ad7d41b6b5..0135892d8ad7 100644 --- a/sc/source/core/data/documen2.cxx +++ b/sc/source/core/data/documen2.cxx @@ -478,5 +478,5 @@ void ScDocument::InitClipPtrs( ScDocument* pSourceDoc ) - const ScColorScaleFormatList* pSourceColorScaleList = pSourceDoc->mpColorScaleList.get(); + const ScColorFormatList* pSourceColorScaleList = pSourceDoc->mpColorScaleList.get(); if ( pSourceColorScaleList ) - mpColorScaleList.reset(new ScColorScaleFormatList(this, *pSourceColorScaleList)); + mpColorScaleList.reset(new ScColorFormatList(this, *pSourceColorScaleList)); diff --git a/sc/source/core/data/documen4.cxx b/sc/source/core/data/documen4.cxx index cae947303aef..76d3773c2b8b 100644 --- a/sc/source/core/data/documen4.cxx +++ b/sc/source/core/data/documen4.cxx @@ -630,3 +630,3 @@ sal_uLong ScDocument::AddCondFormat( const ScConditionalFormat& rNew ) -const ScColorScaleFormatList* ScDocument::GetColorScaleList() const +const ScColorFormatList* ScDocument::GetColorScaleList() const { @@ -635,3 +635,3 @@ const ScColorScaleFormatList* ScDocument::GetColorScaleList() const -ScColorScaleFormatList* ScDocument::GetColorScaleList() +ScColorFormatList* ScDocument::GetColorScaleList() { @@ -648,3 +648,3 @@ sal_uLong ScDocument::AddColorScaleFormat( ScColorScaleFormat* pNew ) if(!mpColorScaleList) - mpColorScaleList.reset(new ScColorScaleFormatList()); + mpColorScaleList.reset(new ScColorFormatList()); diff --git a/sc/source/core/data/fillinfo.cxx b/sc/source/core/data/fillinfo.cxx index 9d7fc2f9972d..4b227b0720a2 100644 --- a/sc/source/core/data/fillinfo.cxx +++ b/sc/source/core/data/fillinfo.cxx @@ -491,3 +491,7 @@ void ScDocument::FillInfo( ScTableInfo& rTabInfo, SCCOL nX1, SCROW nY1, SCCOL nX if ( nColorScale && mpColorScaleList ) - pColorScale = mpColorScaleList->GetFormat( nColorScale ); + { + ScColorFormat* pFormat = mpColorScaleList->GetFormat( nColorScale ); + if(pFormat->GetType() == COLORSCALE) + pColorScale = static_cast<ScColorScaleFormat*>(pFormat); + } diff --git a/sc/source/core/data/table2.cxx b/sc/source/core/data/table2.cxx index 9674c2ad1955..09a171f03b9c 100644 --- a/sc/source/core/data/table2.cxx +++ b/sc/source/core/data/table2.cxx @@ -704,4 +704,4 @@ void ScTable::CopyColorScales( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow - ScColorScaleFormatList* pColorScaleList = pDocument->GetColorScaleList(); - ScColorScaleFormatList* pOldColorScaleList = pTable->pDocument->GetColorScaleList(); + ScColorFormatList* pColorScaleList = pDocument->GetColorScaleList(); + ScColorFormatList* pOldColorScaleList = pTable->pDocument->GetColorScaleList(); for(SCCOL i = nCol1; i <= nCol2; ++i) @@ -716,4 +716,4 @@ void ScTable::CopyColorScales( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow { - ScColorScaleFormat* pFormat = pOldColorScaleList->GetFormat(nId); - ScColorScaleFormat* pNewFormat = new ScColorScaleFormat(pDocument, *pFormat); + ScColorFormat* pFormat = pOldColorScaleList->GetFormat(nId); + ScColorFormat* pNewFormat = pFormat->Clone(pDocument); sal_Int32 nNewId = pColorScaleList->size() + 1; @@ -733,3 +733,3 @@ void ScTable::CopyColorScales( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow sal_uInt32 nNewKey = aOldIdToNewId.find(itr->first)->second; - ScColorScaleFormat* pFormat = pColorScaleList->GetFormat( nNewKey ); + ScColorFormat* pFormat = pColorScaleList->GetFormat( nNewKey ); pFormat->UpdateReference(URM_MOVE, ScRange(nCol1 - nDx, nRow1 - nDy, pTable->nTab, nCol2 - nDx, nRow2 - nDy, pTable->nTab), diff --git a/sc/source/filter/excel/xecontent.cxx b/sc/source/filter/excel/xecontent.cxx index 968aab2f9601..9f42dcb68b7e 100644 --- a/sc/source/filter/excel/xecontent.cxx +++ b/sc/source/filter/excel/xecontent.cxx @@ -1086,5 +1086,5 @@ XclExpCondFormatBuffer::XclExpCondFormatBuffer( const XclExpRoot& rRoot ) : } - if( const ScColorScaleFormatList* pColorScaleList = GetDoc().GetColorScaleList() ) + if( const ScColorFormatList* pColorScaleList = GetDoc().GetColorScaleList() ) { - for( ScColorScaleFormatList::const_iterator itr = pColorScaleList->begin(); + for( ScColorFormatList::const_iterator itr = pColorScaleList->begin(); itr != pColorScaleList->end(); ++itr) @@ -1094,4 +1094,7 @@ XclExpCondFormatBuffer::XclExpCondFormatBuffer( const XclExpRoot& rRoot ) : { - XclExpColorScaleList::RecordRefType xColorScaleRec( new XclExpColorScale( GetRoot(), *itr ) ); - maColorScaleList.AppendRecord( xColorScaleRec ); + if(itr->GetType() == COLORSCALE) + { + XclExpColorScaleList::RecordRefType xColorScaleRec( new XclExpColorScale( GetRoot(), static_cast<const ScColorScaleFormat&>(*itr) ) ); + maColorScaleList.AppendRecord( xColorScaleRec ); + } } |