summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Mohrhard <markus.mohrhard@googlemail.com>2012-05-17 11:04:56 +0200
committerMarkus Mohrhard <markus.mohrhard@googlemail.com>2012-05-18 10:51:20 +0200
commiteb3d3a0a7d49b51942e7f39cdcde1be0b11349e7 (patch)
treedabb1e9934436cdb5bc57728ed0abffa91b4c9a1
parent914fc75da516218bb072245a5c2e3038a4e3639e (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.hxx86
-rw-r--r--sc/inc/document.hxx8
-rw-r--r--sc/source/core/data/colorscale.cxx59
-rw-r--r--sc/source/core/data/documen2.cxx4
-rw-r--r--sc/source/core/data/documen4.cxx6
-rw-r--r--sc/source/core/data/fillinfo.cxx6
-rw-r--r--sc/source/core/data/table2.cxx10
-rw-r--r--sc/source/filter/excel/xecontent.cxx11
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 );
+ }
}