diff options
author | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2012-06-04 05:03:42 +0200 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2012-06-11 08:01:24 +0200 |
commit | 08ed74c89f7f018167b858e74cc30ae0272fae6c (patch) | |
tree | 6a254c979cab2dff9edec61f740b800f3696b01d /sc | |
parent | 13ed8001c9e825d28a9a0aa67fbf88d2d3e3b30e (diff) |
integrate color formats into conditional formats
Change-Id: I3c235f6dd0b69d3fc560910fcc890d2c80c995c0
Diffstat (limited to 'sc')
-rw-r--r-- | sc/inc/colorscale.hxx | 25 | ||||
-rw-r--r-- | sc/inc/conditio.hxx | 25 | ||||
-rw-r--r-- | sc/inc/table.hxx | 2 | ||||
-rw-r--r-- | sc/source/core/data/colorscale.cxx | 26 | ||||
-rw-r--r-- | sc/source/core/data/conditio.cxx | 109 | ||||
-rw-r--r-- | sc/source/core/data/fillinfo.cxx | 39 | ||||
-rw-r--r-- | sc/source/core/data/table2.cxx | 49 | ||||
-rw-r--r-- | sc/source/filter/excel/xecontent.cxx | 16 | ||||
-rw-r--r-- | sc/source/filter/xml/xmlexprt.cxx | 150 |
9 files changed, 201 insertions, 240 deletions
diff --git a/sc/inc/colorscale.hxx b/sc/inc/colorscale.hxx index d8b294c13e0b..32be4a60ffed 100644 --- a/sc/inc/colorscale.hxx +++ b/sc/inc/colorscale.hxx @@ -31,6 +31,7 @@ #include <formula/grammar.hxx> #include <tools/color.hxx> #include <rangelst.hxx> +#include "conditio.hxx" #include <vector> @@ -140,13 +141,7 @@ struct ScDataBarFormatData boost::scoped_ptr<ScColorScaleEntry> mpLowerLimit; }; -enum ScColorFormatType -{ - COLORSCALE, - DATABAR -}; - -class SC_DLLPUBLIC ScColorFormat +class SC_DLLPUBLIC ScColorFormat : public ScFormatEntry { public: ScColorFormat(ScDocument* pDoc); @@ -157,19 +152,13 @@ public: 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; + virtual void SetParent(ScConditionalFormat* pParent); protected: void getValues( std::vector<double>& rValues ) const; ScRangeList maRanges; - ScDocument* mpDoc; + ScConditionalFormat* mpParent; }; class SC_DLLPUBLIC ScColorScaleFormat : public ScColorFormat @@ -198,7 +187,7 @@ public: virtual void UpdateReference( UpdateRefMode eUpdateRefMode, const ScRange& rRange, SCsCOL nDx, SCsROW nDy, SCsTAB nDz ); - virtual ScColorFormatType GetType() const; + virtual condformat::ScFormatEntryType GetType() const; typedef ColorScaleEntries::iterator iterator; typedef ColorScaleEntries::const_iterator const_iterator; iterator begin(); @@ -224,7 +213,7 @@ public: virtual void UpdateReference( UpdateRefMode eUpdateRefMode, const ScRange& rRange, SCsCOL nDx, SCsROW nDy, SCsTAB nDz ); - virtual ScColorFormatType GetType() const; + virtual condformat::ScFormatEntryType GetType() const; private: double getMin(double nMin, double nMax) const; double getMax(double nMin, double nMax) const; @@ -262,7 +251,7 @@ public: // see http://www.boost.org/doc/libs/1_49_0/libs/ptr_container/doc/tutorial.html#cloneability //for MSVC we need: -inline ScColorFormat* new_clone( const ScColorFormat& rFormat ) +inline ScFormatEntry* new_clone( const ScColorFormat& rFormat ) { return rFormat.Clone(); } diff --git a/sc/inc/conditio.hxx b/sc/inc/conditio.hxx index 9a7f1af0ac15..b11261868ed4 100644 --- a/sc/inc/conditio.hxx +++ b/sc/inc/conditio.hxx @@ -70,6 +70,7 @@ enum ScConditionMode }; class ScConditionalFormat; +class ScDataBarInfo; namespace condformat { @@ -83,9 +84,21 @@ enum ScFormatEntryType } +struct ScCondFormatData +{ + ScCondFormatData(): + pColorScale(NULL), + pDataBar(NULL) {} + + Color* pColorScale; + ScDataBarInfo* pDataBar; + rtl::OUString aStyleName; +}; + class SC_DLLPUBLIC ScFormatEntry { public: + ScFormatEntry(ScDocument* pDoc); virtual ~ScFormatEntry() {} virtual condformat::ScFormatEntryType GetType() const = 0; @@ -93,9 +106,12 @@ public: const ScRange& rRange, SCsCOL nDx, SCsROW nDy, SCsTAB nDz ) = 0; virtual void UpdateMoveTab( SCTAB nOldPos, SCTAB nNewPos ) = 0; - virtual ScFormatEntry* Clone( ScDocument* pDoc ) const = 0; + virtual ScFormatEntry* Clone( ScDocument* pDoc = NULL ) const = 0; virtual void SetParent( ScConditionalFormat* pNew ) = 0; +protected: + ScDocument* mpDoc; + }; class SC_DLLPUBLIC ScConditionEntry : public ScFormatEntry @@ -120,7 +136,6 @@ class SC_DLLPUBLIC ScConditionEntry : public ScFormatEntry String aSrcString; // formula source position as text during XML import ScFormulaCell* pFCell1; ScFormulaCell* pFCell2; - ScDocument* pDoc; bool bRelRef1; bool bRelRef2; bool bFirstRun; @@ -186,11 +201,11 @@ public: virtual condformat::ScFormatEntryType GetType() const { return condformat::CONDITION; } - virtual ScFormatEntry* Clone(ScDocument* pDoc) const; + virtual ScFormatEntry* Clone(ScDocument* pDoc = NULL) const; protected: virtual void DataChanged( const ScRange* pModified ) const; - ScDocument* GetDocument() const { return pDoc; } + ScDocument* GetDocument() const { return mpDoc; } ScConditionalFormat* pCondFormat; }; @@ -274,6 +289,8 @@ public: const String& GetCellStyle( ScBaseCell* pCell, const ScAddress& rPos ) const; + ScCondFormatData GetData( ScBaseCell* pCell, const ScAddress& rPos ) const; + bool EqualEntries( const ScConditionalFormat& r ) const; void DoRepaint( const ScRange* pModified ); diff --git a/sc/inc/table.hxx b/sc/inc/table.hxx index c417562a2a15..3e3572095832 100644 --- a/sc/inc/table.hxx +++ b/sc/inc/table.hxx @@ -383,8 +383,6 @@ public: void CopyConditionalFormat( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, SCsCOL nDx, SCsROW nDy, ScTable* pTable); - void CopyColorScales( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, - SCsCOL nDx, SCsROW nDy, ScTable* pTable); void TransposeClip( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, ScTable* pTransClip, sal_uInt16 nFlags, bool bAsLink ); diff --git a/sc/source/core/data/colorscale.cxx b/sc/source/core/data/colorscale.cxx index f28cca8395f8..e1c19c0e2851 100644 --- a/sc/source/core/data/colorscale.cxx +++ b/sc/source/core/data/colorscale.cxx @@ -136,13 +136,13 @@ const Color& ScColorScaleEntry::GetColor() const } ScColorFormat::ScColorFormat(ScDocument* pDoc): - mpDoc(pDoc) + ScFormatEntry(pDoc) { } ScColorFormat::ScColorFormat(ScDocument* pDoc, const ScColorFormat& rFormat): - maRanges(rFormat.maRanges), - mpDoc(pDoc) + ScFormatEntry(pDoc), + maRanges(rFormat.maRanges) { } @@ -150,6 +150,11 @@ ScColorFormat::~ScColorFormat() { } +void ScColorFormat::SetParent( ScConditionalFormat* pParent ) +{ + mpParent = pParent; +} + ScColorScaleFormat::ScColorScaleFormat(ScDocument* pDoc): ScColorFormat(pDoc) { @@ -615,9 +620,9 @@ void ScColorScaleFormat::DataChanged(const ScRange& rRange) } } -ScColorFormatType ScColorScaleFormat::GetType() const +condformat::ScFormatEntryType ScColorScaleFormat::GetType() const { - return COLORSCALE; + return condformat::COLORSCALE; } ScColorScaleFormat::iterator ScColorScaleFormat::begin() @@ -665,9 +670,9 @@ ScColorFormat* ScDataBarFormat::Clone(ScDocument* pDoc) const return new ScDataBarFormat(pDoc, *this); } -ScColorFormatType ScDataBarFormat::GetType() const +condformat::ScFormatEntryType ScDataBarFormat::GetType() const { - return DATABAR; + return condformat::DATABAR; } void ScDataBarFormat::UpdateReference( UpdateRefMode eRefMode, @@ -870,6 +875,13 @@ ScDataBarInfo* ScDataBarFormat::GetDataBarInfo(const ScAddress& rAddr) const //----------------------------------------------------------------- +ScColorFormatList::ScColorFormatList(ScDocument* pDoc, const ScColorFormatList& rList) +{ + for(const_iterator itr = rList.begin(); itr != rList.end(); ++itr) + { + } +} + void ScColorFormatList::AddFormat( ScColorFormat* pFormat ) { maColorScaleFormats.push_back( pFormat ); diff --git a/sc/source/core/data/conditio.cxx b/sc/source/core/data/conditio.cxx index 24703f359d57..03ddbe3c9b67 100644 --- a/sc/source/core/data/conditio.cxx +++ b/sc/source/core/data/conditio.cxx @@ -42,10 +42,16 @@ #include "rangelst.hxx" #include "stlpool.hxx" #include "rangenam.hxx" +#include "colorscale.hxx" using namespace formula; //------------------------------------------------------------------------ +ScFormatEntry::ScFormatEntry(ScDocument* pDoc): + mpDoc(pDoc) +{ +} + bool lcl_HasRelRef( ScDocument* pDoc, ScTokenArray* pFormula, sal_uInt16 nRecursion = 0 ) { if (pFormula) @@ -111,6 +117,7 @@ bool lcl_HasRelRef( ScDocument* pDoc, ScTokenArray* pFormula, sal_uInt16 nRecurs } ScConditionEntry::ScConditionEntry( const ScConditionEntry& r ) : + ScFormatEntry(r.mpDoc), eOp(r.eOp), nOptions(r.nOptions), nVal1(r.nVal1), @@ -129,7 +136,6 @@ ScConditionEntry::ScConditionEntry( const ScConditionEntry& r ) : aSrcString(r.aSrcString), pFCell1(NULL), pFCell2(NULL), - pDoc(r.pDoc), bRelRef1(r.bRelRef1), bRelRef2(r.bRelRef2), bFirstRun(true), @@ -146,6 +152,7 @@ ScConditionEntry::ScConditionEntry( const ScConditionEntry& r ) : } ScConditionEntry::ScConditionEntry( ScDocument* pDocument, const ScConditionEntry& r ) : + ScFormatEntry(pDocument), eOp(r.eOp), nOptions(r.nOptions), nVal1(r.nVal1), @@ -164,7 +171,6 @@ ScConditionEntry::ScConditionEntry( ScDocument* pDocument, const ScConditionEntr aSrcString(r.aSrcString), pFCell1(NULL), pFCell2(NULL), - pDoc(pDocument), bRelRef1(r.bRelRef1), bRelRef2(r.bRelRef2), bFirstRun(true), @@ -185,6 +191,7 @@ ScConditionEntry::ScConditionEntry( ScConditionMode eOper, const String& rExpr1, const String& rExpr2, ScDocument* pDocument, const ScAddress& rPos, const String& rExprNmsp1, const String& rExprNmsp2, FormulaGrammar::Grammar eGrammar1, FormulaGrammar::Grammar eGrammar2 ) : + ScFormatEntry(pDocument), eOp(eOper), nOptions(0), // spaeter... nVal1(0.0), @@ -200,7 +207,6 @@ ScConditionEntry::ScConditionEntry( ScConditionMode eOper, aSrcPos(rPos), pFCell1(NULL), pFCell2(NULL), - pDoc(pDocument), bRelRef1(false), bRelRef2(false), bFirstRun(true), @@ -214,6 +220,7 @@ ScConditionEntry::ScConditionEntry( ScConditionMode eOper, ScConditionEntry::ScConditionEntry( ScConditionMode eOper, const ScTokenArray* pArr1, const ScTokenArray* pArr2, ScDocument* pDocument, const ScAddress& rPos ) : + ScFormatEntry(pDocument), eOp(eOper), nOptions(0), // spaeter... nVal1(0.0), @@ -227,7 +234,6 @@ ScConditionEntry::ScConditionEntry( ScConditionMode eOper, aSrcPos(rPos), pFCell1(NULL), pFCell2(NULL), - pDoc(pDocument), bRelRef1(false), bRelRef2(false), bFirstRun(true), @@ -255,7 +261,7 @@ ScConditionEntry::ScConditionEntry( ScConditionMode eOper, } } } - bRelRef1 = lcl_HasRelRef( pDoc, pFormula1 ); + bRelRef1 = lcl_HasRelRef( mpDoc, pFormula1 ); } if ( pArr2 ) { @@ -279,7 +285,7 @@ ScConditionEntry::ScConditionEntry( ScConditionMode eOper, } } } - bRelRef2 = lcl_HasRelRef( pDoc, pFormula2 ); + bRelRef2 = lcl_HasRelRef( mpDoc, pFormula2 ); } // formula cells are created at IsValid @@ -300,12 +306,12 @@ void ScConditionEntry::Compile( const String& rExpr1, const String& rExpr2, { if ( rExpr1.Len() || rExpr2.Len() ) { - ScCompiler aComp( pDoc, aSrcPos ); + ScCompiler aComp( mpDoc, aSrcPos ); if ( rExpr1.Len() ) { aComp.SetGrammar( eGrammar1 ); - if ( pDoc->IsImportingXML() && !bTextToReal ) + if ( mpDoc->IsImportingXML() && !bTextToReal ) { // temporary formula string as string tokens //! merge with lcl_ScDocFunc_CreateTokenArrayXML @@ -335,14 +341,14 @@ void ScConditionEntry::Compile( const String& rExpr1, const String& rExpr2, } } } - bRelRef1 = lcl_HasRelRef( pDoc, pFormula1 ); + bRelRef1 = lcl_HasRelRef( mpDoc, pFormula1 ); } } if ( rExpr2.Len() ) { aComp.SetGrammar( eGrammar2 ); - if ( pDoc->IsImportingXML() && !bTextToReal ) + if ( mpDoc->IsImportingXML() && !bTextToReal ) { // temporary formula string as string tokens //! merge with lcl_ScDocFunc_CreateTokenArrayXML @@ -372,7 +378,7 @@ void ScConditionEntry::Compile( const String& rExpr1, const String& rExpr2, } } } - bRelRef2 = lcl_HasRelRef( pDoc, pFormula2 ); + bRelRef2 = lcl_HasRelRef( mpDoc, pFormula2 ); } } } @@ -380,18 +386,18 @@ void ScConditionEntry::Compile( const String& rExpr1, const String& rExpr2, void ScConditionEntry::MakeCells( const ScAddress& rPos ) // Formelzellen anlegen { - if ( !pDoc->IsClipOrUndo() ) // nie im Clipboard rechnen! + if ( !mpDoc->IsClipOrUndo() ) // nie im Clipboard rechnen! { if ( pFormula1 && !pFCell1 && !bRelRef1 ) { - pFCell1 = new ScFormulaCell( pDoc, rPos, pFormula1 ); - pFCell1->StartListeningTo( pDoc ); + pFCell1 = new ScFormulaCell( mpDoc, rPos, pFormula1 ); + pFCell1->StartListeningTo( mpDoc ); } if ( pFormula2 && !pFCell2 && !bRelRef2 ) { - pFCell2 = new ScFormulaCell( pDoc, rPos, pFormula2 ); - pFCell2->StartListeningTo( pDoc ); + pFCell2 = new ScFormulaCell( mpDoc, rPos, pFormula2 ); + pFCell2->StartListeningTo( mpDoc ); } } } @@ -424,7 +430,7 @@ void ScConditionEntry::CompileXML() ScAddress aNew; /* XML is always in OOo:A1 format, although R1C1 would be more amenable * to compression */ - if ( aNew.Parse( aSrcString, pDoc ) & SCA_VALID ) + if ( aNew.Parse( aSrcString, mpDoc ) & SCA_VALID ) aSrcPos = aNew; // if the position is invalid, there isn't much we can do at this time aSrcString.Erase(); @@ -440,7 +446,7 @@ void ScConditionEntry::CompileXML() void ScConditionEntry::SetSrcString( const String& rNew ) { // aSrcString is only evaluated in CompileXML - OSL_ENSURE( pDoc->IsImportingXML(), "SetSrcString is only valid for XML import" ); + OSL_ENSURE( mpDoc->IsImportingXML(), "SetSrcString is only valid for XML import" ); aSrcString = rNew; } @@ -451,7 +457,7 @@ void ScConditionEntry::SetFormula1( const ScTokenArray& rArray ) if( rArray.GetLen() > 0 ) { pFormula1 = new ScTokenArray( rArray ); - bRelRef1 = lcl_HasRelRef( pDoc, pFormula1 ); + bRelRef1 = lcl_HasRelRef( mpDoc, pFormula1 ); } } @@ -461,7 +467,7 @@ void ScConditionEntry::SetFormula2( const ScTokenArray& rArray ) if( rArray.GetLen() > 0 ) { pFormula2 = new ScTokenArray( rArray ); - bRelRef2 = lcl_HasRelRef( pDoc, pFormula2 ); + bRelRef2 = lcl_HasRelRef( mpDoc, pFormula2 ); } } @@ -511,8 +517,8 @@ void ScConditionEntry::UpdateReference( UpdateRefMode eUpdateRefMode, lcl_CondUpdateInsertTab( *pFormula1, rRange.aStart.Tab(), aSrcPos.Tab(), bChanged1, nDz ); else { - ScCompiler aComp( pDoc, aSrcPos, *pFormula1 ); - aComp.SetGrammar(pDoc->GetGrammar()); + ScCompiler aComp( mpDoc, aSrcPos, *pFormula1 ); + aComp.SetGrammar(mpDoc->GetGrammar()); if ( bDeleteTab ) aComp.UpdateDeleteTab( rRange.aStart.Tab(), false, true, bChanged1, static_cast<SCTAB>(-1 * nDz) ); else @@ -528,8 +534,8 @@ void ScConditionEntry::UpdateReference( UpdateRefMode eUpdateRefMode, lcl_CondUpdateInsertTab( *pFormula2, rRange.aStart.Tab(), aSrcPos.Tab(), bChanged2, nDz ); else { - ScCompiler aComp( pDoc, aSrcPos, *pFormula2); - aComp.SetGrammar(pDoc->GetGrammar()); + ScCompiler aComp( mpDoc, aSrcPos, *pFormula2); + aComp.SetGrammar(mpDoc->GetGrammar()); if ( bDeleteTab ) aComp.UpdateDeleteTab( rRange.aStart.Tab(), false, true, bChanged2, static_cast<SCTAB>(-1*nDz) ); else @@ -545,15 +551,15 @@ void ScConditionEntry::UpdateMoveTab( SCTAB nOldPos, SCTAB nNewPos ) { if (pFormula1) { - ScCompiler aComp( pDoc, aSrcPos, *pFormula1); - aComp.SetGrammar(pDoc->GetGrammar()); + ScCompiler aComp( mpDoc, aSrcPos, *pFormula1); + aComp.SetGrammar(mpDoc->GetGrammar()); aComp.UpdateMoveTab(nOldPos, nNewPos, true ); DELETEZ(pFCell1); } if (pFormula2) { - ScCompiler aComp( pDoc, aSrcPos, *pFormula2); - aComp.SetGrammar(pDoc->GetGrammar()); + ScCompiler aComp( mpDoc, aSrcPos, *pFormula2); + aComp.SetGrammar(mpDoc->GetGrammar()); aComp.UpdateMoveTab(nOldPos, nNewPos, true ); DELETEZ(pFCell2); } @@ -623,7 +629,7 @@ void ScConditionEntry::Interpret( const ScAddress& rPos ) ScFormulaCell* pEff1 = pFCell1; if ( bRelRef1 ) { - pTemp1 = new ScFormulaCell( pDoc, rPos, pFormula1 ); // ohne Listening + pTemp1 = new ScFormulaCell( mpDoc, rPos, pFormula1 ); // ohne Listening pEff1 = pTemp1; } if ( pEff1 ) @@ -653,7 +659,7 @@ void ScConditionEntry::Interpret( const ScAddress& rPos ) ScFormulaCell* pEff2 = pFCell2; //@ 1!=2 if ( bRelRef2 ) { - pTemp2 = new ScFormulaCell( pDoc, rPos, pFormula2 ); // ohne Listening + pTemp2 = new ScFormulaCell( mpDoc, rPos, pFormula2 ); // ohne Listening pEff2 = pTemp2; } if ( pEff2 ) @@ -834,7 +840,7 @@ bool ScConditionEntry::IsValid( double nArg, const ScAddress& rAddr ) const if( pCondFormat ) { ScRangeListRef pRanges = pCondFormat->GetRangeInfo(); - bValid = lcl_IsDuplicate( pDoc, nArg, String(), rAddr, pRanges ); + bValid = lcl_IsDuplicate( mpDoc, nArg, String(), rAddr, pRanges ); if( eOp == SC_COND_NOTDUPLICATE ) bValid = !bValid; } @@ -862,7 +868,7 @@ bool ScConditionEntry::IsValidStr( const String& rArg, const ScAddress& rAddr ) if( pCondFormat && rArg.Len() ) { ScRangeListRef pRanges = pCondFormat->GetRangeInfo(); - bValid = lcl_IsDuplicate( pDoc, 0.0, rArg, rAddr, pRanges ); + bValid = lcl_IsDuplicate( mpDoc, 0.0, rArg, rAddr, pRanges ); if( eOp == SC_COND_NOTDUPLICATE ) bValid = !bValid; return bValid; @@ -956,13 +962,13 @@ String ScConditionEntry::GetExpression( const ScAddress& rCursor, sal_uInt16 nIn String aRet; if ( FormulaGrammar::isEnglish( eGrammar) && nNumFmt == 0 ) - nNumFmt = pDoc->GetFormatTable()->GetStandardIndex( LANGUAGE_ENGLISH_US ); + nNumFmt = mpDoc->GetFormatTable()->GetStandardIndex( LANGUAGE_ENGLISH_US ); if ( nIndex==0 ) { if ( pFormula1 ) { - ScCompiler aComp(pDoc, rCursor, *pFormula1); + ScCompiler aComp(mpDoc, rCursor, *pFormula1); aComp.SetGrammar(eGrammar); aComp.CreateStringFromTokenArray( aRet ); } @@ -973,13 +979,13 @@ String ScConditionEntry::GetExpression( const ScAddress& rCursor, sal_uInt16 nIn aRet += '"'; } else - pDoc->GetFormatTable()->GetInputLineString(nVal1, nNumFmt, aRet); + mpDoc->GetFormatTable()->GetInputLineString(nVal1, nNumFmt, aRet); } else if ( nIndex==1 ) { if ( pFormula2 ) { - ScCompiler aComp(pDoc, rCursor, *pFormula2); + ScCompiler aComp(mpDoc, rCursor, *pFormula2); aComp.SetGrammar(eGrammar); aComp.CreateStringFromTokenArray( aRet ); } @@ -990,7 +996,7 @@ String ScConditionEntry::GetExpression( const ScAddress& rCursor, sal_uInt16 nIn aRet += '"'; } else - pDoc->GetFormatTable()->GetInputLineString(nVal2, nNumFmt, aRet); + mpDoc->GetFormatTable()->GetInputLineString(nVal2, nNumFmt, aRet); } else { @@ -1164,7 +1170,7 @@ ScAddress ScConditionEntry::GetValidSrcPos() const } ScAddress aValidPos = aSrcPos; - SCTAB nTabCount = pDoc->GetTableCount(); + SCTAB nTabCount = mpDoc->GetTableCount(); if ( nMaxTab >= nTabCount && nMinTab > 0 ) aValidPos.SetTab( aSrcPos.Tab() - nMinTab ); // so the lowest tab ref will be on 0 @@ -1186,7 +1192,7 @@ bool ScConditionEntry::MarkUsedExternalReferences() const { ScTokenArray* pFormula = nPass ? pFormula2 : pFormula1; if (pFormula) - bAllMarked = pDoc->MarkUsedExternalReferences( *pFormula); + bAllMarked = mpDoc->MarkUsedExternalReferences( *pFormula); } return bAllMarked; } @@ -1367,6 +1373,31 @@ const String& ScConditionalFormat::GetCellStyle( ScBaseCell* pCell, const ScAddr return EMPTY_STRING; } +ScCondFormatData ScConditionalFormat::GetData( ScBaseCell* pCell, const ScAddress& rPos ) const +{ + ScCondFormatData aData; + for(CondFormatContainer::const_iterator itr = maEntries.begin(); itr != maEntries.end(); ++itr) + { + if(itr->GetType() == condformat::CONDITION && aData.aStyleName.isEmpty()) + { + const ScCondFormatEntry& rEntry = static_cast<const ScCondFormatEntry&>(*itr); + if ( rEntry.IsCellValid( pCell, rPos ) ) + aData.aStyleName = rEntry.GetStyle(); + } + else if(itr->GetType() == condformat::COLORSCALE && !aData.pColorScale) + { + const ScColorScaleFormat& rEntry = static_cast<const ScColorScaleFormat&>(*itr); + aData.pColorScale = rEntry.GetColor(rPos); + } + else if(itr->GetType() == condformat::DATABAR && !aData.pDataBar) + { + const ScDataBarFormat& rEntry = static_cast<const ScDataBarFormat&>(*itr); + aData.pDataBar = rEntry.GetDataBarInfo(rPos); + } + } + return aData; +} + void lcl_Extend( ScRange& rRange, ScDocument* pDoc, bool bLines ) { SCTAB nTab = rRange.aStart.Tab(); diff --git a/sc/source/core/data/fillinfo.cxx b/sc/source/core/data/fillinfo.cxx index e1eefa5099f5..f3a01e99e3b6 100644 --- a/sc/source/core/data/fillinfo.cxx +++ b/sc/source/core/data/fillinfo.cxx @@ -475,26 +475,12 @@ void ScDocument::FillInfo( ScTableInfo& rTabInfo, SCCOL nX1, SCROW nY1, SCCOL nX sal_uLong nConditional = ((const SfxUInt32Item&)pPattern-> GetItem(ATTR_CONDITIONAL)).GetValue(); - sal_uLong nColorScale = ((const SfxUInt32Item&)pPattern-> - GetItem(ATTR_COLORSCALE)).GetValue(); ScConditionalFormatList* pCondFormList = GetCondFormList(nTab); const ScConditionalFormat* pCondForm = NULL; if ( nConditional && pCondFormList ) pCondForm = pCondFormList->GetFormat( nConditional ); - ScColorFormatList* pColorFormatList = GetColorScaleList(nTab); - const ScColorScaleFormat* pColorScale = NULL; - const ScDataBarFormat* pDataBar = NULL; - if ( nColorScale && pColorFormatList ) - { - ScColorFormat* pFormat = pColorFormatList->GetFormat( nColorScale ); - if(pFormat->GetType() == COLORSCALE) - pColorScale = static_cast<ScColorScaleFormat*>(pFormat); - else if(pFormat->GetType() == DATABAR) - pDataBar = static_cast<ScDataBarFormat*>(pFormat); - } - do { SCROW nLastHiddenRow = -1; @@ -554,12 +540,12 @@ void ScDocument::FillInfo( ScTableInfo& rTabInfo, SCCOL nX1, SCROW nY1, SCCOL nX if ( pCondForm ) { - String aStyle = pCondForm->GetCellStyle( pInfo->pCell, + ScCondFormatData aData = pCondForm->GetData( pInfo->pCell, ScAddress( nX, nCurRow, nTab ) ); - if (aStyle.Len()) + if (!aData.aStyleName.isEmpty()) { SfxStyleSheetBase* pStyleSheet = - pStlPool->Find( aStyle, SFX_STYLE_FAMILY_PARA ); + pStlPool->Find( aData.aStyleName, SFX_STYLE_FAMILY_PARA ); if ( pStyleSheet ) { //! Style-Sets cachen !!! @@ -568,16 +554,15 @@ void ScDocument::FillInfo( ScTableInfo& rTabInfo, SCCOL nX1, SCROW nY1, SCCOL nX } // if style is not there, treat like no condition } - } - if ( pColorScale ) - { - Color* pColor = pColorScale->GetColor( ScAddress( nX, nCurRow, nTab ) ); - pInfo->pColorScale = pColor; - } - if( pDataBar ) - { - ScDataBarInfo* pDataBarInfo = pDataBar->GetDataBarInfo( ScAddress( nX, nCurRow, nTab ) ); - pInfo->pDataBar = pDataBarInfo; + if(aData.pColorScale) + { + pInfo->pColorScale = aData.pColorScale; + } + + if(aData.pDataBar) + { + pInfo->pDataBar = aData.pDataBar; + } } ++nArrY; diff --git a/sc/source/core/data/table2.cxx b/sc/source/core/data/table2.cxx index 802a1d828962..9551c9205236 100644 --- a/sc/source/core/data/table2.cxx +++ b/sc/source/core/data/table2.cxx @@ -692,54 +692,6 @@ void ScTable::CopyConditionalFormat( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCRO } } -void ScTable::CopyColorScales( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, - SCsCOL nDx, SCsROW nDy, ScTable* pTable) -{ - std::map<sal_Int32, sal_Int32> aOldIdToNewId; - std::map<sal_Int32, ScRangeList> aIdToRange; - - ScColorFormatList* pColorScaleList = mpColorFormatList.get(); - ScColorFormatList* pOldColorScaleList = pTable->mpColorFormatList.get(); - for(SCCOL i = nCol1; i <= nCol2; ++i) - { - ScAttrIterator* pIter = aCol[i-nDx].CreateAttrIterator( nRow1-nDy, nRow2-nDy ); - SCROW nStartRow = 0, nEndRow = 0; - const ScPatternAttr* pPattern = pIter->Next( nStartRow, nEndRow ); - sal_uInt32 nId = ((SfxUInt32Item&)pPattern->GetItem(ATTR_COLORSCALE)).GetValue(); - if ( nId != 0) - { - if (aOldIdToNewId.find(nId) == aOldIdToNewId.end()) - { - ScColorFormat* pFormat = pOldColorScaleList->GetFormat(nId); - ScColorFormat* pNewFormat = pFormat->Clone(pDocument); - sal_Int32 nNewId = pColorScaleList->size() + 1; - //not in list => create entries in both maps and new format - pColorScaleList->AddFormat(pNewFormat); - aOldIdToNewId.insert( std::pair<sal_Int32, sal_Int32>( nId, nNewId ) ); - aIdToRange.insert( std::pair<sal_Int32, ScRangeList>( nId, ScRangeList() ) ); - } - - aIdToRange.find(nId)->second.Join( ScRange( i, nStartRow + nDy, nTab, i, nEndRow + nDy, nTab ) ); - } - } - - for(std::map<sal_Int32, ScRangeList>::const_iterator itr = aIdToRange.begin(); - itr != aIdToRange.end(); ++itr) - { - sal_uInt32 nNewKey = aOldIdToNewId.find(itr->first)->second; - ScColorFormat* pFormat = pColorScaleList->GetFormat( nNewKey ); - pFormat->UpdateReference(URM_MOVE, ScRange(nCol1 - nDx, nRow1 - nDy, pTable->nTab, nCol2 - nDx, nRow2 - nDy, pTable->nTab), - nDx, nDy, pTable->nTab - nTab); - pFormat->SetRange(itr->second); - - ScPatternAttr aPattern( pDocument->GetPool() ); - aPattern.GetItemSet().Put( SfxUInt32Item( ATTR_COLORSCALE, nNewKey ) ); - ScMarkData aMarkData; - aMarkData.MarkFromRangeList(itr->second, true); - pDocument->ApplySelectionPattern( aPattern, aMarkData ); - } -} - void ScTable::CopyFromClip(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, SCsCOL nDx, SCsROW nDy, sal_uInt16 nInsFlag, bool bAsLink, bool bSkipAttrForEmpty, ScTable* pTable) @@ -798,7 +750,6 @@ void ScTable::CopyFromClip(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, // create deep copies for conditional formatting CopyConditionalFormat( nCol1, nRow1, nCol2, nRow2, nDx, nDy, pTable); - CopyColorScales( nCol1, nRow1, nCol2, nRow2, nDx, nDy, pTable); } DecRecalcLevel(); } diff --git a/sc/source/filter/excel/xecontent.cxx b/sc/source/filter/excel/xecontent.cxx index aa17d60482b9..3395cf9d77c5 100644 --- a/sc/source/filter/excel/xecontent.cxx +++ b/sc/source/filter/excel/xecontent.cxx @@ -972,6 +972,10 @@ XclExpCondfmt::XclExpCondfmt( const XclExpRoot& rRoot, const ScConditionalFormat { if(pFormatEntry->GetType() == condformat::CONDITION) maCFList.AppendNewRecord( new XclExpCF( GetRoot(), static_cast<const ScCondFormatEntry&>(*pFormatEntry), nIndex ) ); + else if(pFormatEntry->GetType() == condformat::COLORSCALE) + ; + else if(pFormatEntry->GetType() == condformat::DATABAR) + ; } aScRanges.Format( msSeqRef, SCA_VALID, NULL, formula::FormulaGrammar::CONV_XL_A1 ); } @@ -1086,18 +1090,6 @@ XclExpCondFormatBuffer::XclExpCondFormatBuffer( const XclExpRoot& rRoot ) : maCondfmtList.AppendRecord( xCondfmtRec ); } } - if( const ScColorFormatList* pColorScaleList = GetDoc().GetColorScaleList(GetCurrScTab()) ) - { - for( ScColorFormatList::const_iterator itr = pColorScaleList->begin(); - itr != pColorScaleList->end(); ++itr) - { - if(itr->GetType() == COLORSCALE) - { - XclExpColorScaleList::RecordRefType xColorScaleRec( new XclExpColorScale( GetRoot(), static_cast<const ScColorScaleFormat&>(*itr) ) ); - maColorScaleList.AppendRecord( xColorScaleRec ); - } - } - } } void XclExpCondFormatBuffer::Save( XclExpStream& rStrm ) diff --git a/sc/source/filter/xml/xmlexprt.cxx b/sc/source/filter/xml/xmlexprt.cxx index 19c562a4086c..ff5cd3de9bbe 100644 --- a/sc/source/filter/xml/xmlexprt.cxx +++ b/sc/source/filter/xml/xmlexprt.cxx @@ -3909,106 +3909,92 @@ void ScXMLExport::ExportConditionalFormat(SCTAB nTab) AddAttribute(XML_NAMESPACE_CALC_EXT, XML_VALUE, aCond.makeStringAndClear()); SvXMLElementExport aElementCondEntry(*this, XML_NAMESPACE_CALC_EXT, XML_CONDITION, true, true); } - } - } - } - - if(pColorFormatList) - { - for(ScColorFormatList::const_iterator itr = pColorFormatList->begin(); - itr != pColorFormatList->end(); ++itr) - { - rtl::OUString sRangeList; - const ScRangeList& rRangeList = itr->GetRange(); - ScRangeStringConverter::GetStringFromRangeList( sRangeList, &rRangeList, pDoc, formula::FormulaGrammar::CONV_ODF ); - AddAttribute(XML_NAMESPACE_CALC_EXT, XML_TARGET_RANGE_ADDRESS, sRangeList); - SvXMLElementExport aElementColFormat(*this, XML_NAMESPACE_CALC_EXT, XML_CONDITIONAL_FORMAT, true, true); - - if(itr->GetType() == COLORSCALE) - { - SvXMLElementExport aElementColorScale(*this, XML_NAMESPACE_CALC_EXT, XML_COLOR_SCALE, true, true); - const ScColorScaleFormat& mrColorScale = static_cast<const ScColorScaleFormat&>(*itr); - for(ScColorScaleFormat::const_iterator it = mrColorScale.begin(); - it != mrColorScale.end(); ++it) + else if(pFormatEntry->GetType() == condformat::COLORSCALE) { - if(it->HasFormula()) + SvXMLElementExport aElementColorScale(*this, XML_NAMESPACE_CALC_EXT, XML_COLOR_SCALE, true, true); + const ScColorScaleFormat& mrColorScale = static_cast<const ScColorScaleFormat&>(*pFormatEntry); + for(ScColorScaleFormat::const_iterator it = mrColorScale.begin(); + it != mrColorScale.end(); ++it) { - rtl::OUString sFormula = it->GetFormula(formula::FormulaGrammar::GRAM_ODFF); - AddAttribute(XML_NAMESPACE_CALC_EXT, XML_VALUE, sFormula); - } - else - AddAttribute(XML_NAMESPACE_CALC_EXT, XML_VALUE, rtl::OUString::valueOf(it->GetValue())); - - AddAttribute(XML_NAMESPACE_CALC_EXT, XML_TYPE, getCondFormatEntryType(*it)); - rtl::OUStringBuffer aBuffer; - ::sax::Converter::convertColor(aBuffer, it->GetColor().GetColor()); - AddAttribute(XML_NAMESPACE_CALC_EXT, XML_COLOR, aBuffer.makeStringAndClear()); - SvXMLElementExport aElementColorScaleEntry(*this, XML_NAMESPACE_CALC_EXT, XML_COLOR_SCALE_ENTRY, true, true); - } - } - else if(itr->GetType() == DATABAR) - { - const ScDataBarFormatData* pFormatData = static_cast<const ScDataBarFormat&>(*itr).GetDataBarData(); - if(!pFormatData->mbGradient) - AddAttribute(XML_NAMESPACE_CALC_EXT, XML_GRADIENT, XML_FALSE); - if(pFormatData->mbOnlyBar) - AddAttribute(XML_NAMESPACE_CALC_EXT, XML_SHOW_VALUE, XML_FALSE); + if(it->HasFormula()) + { + rtl::OUString sFormula = it->GetFormula(formula::FormulaGrammar::GRAM_ODFF); + AddAttribute(XML_NAMESPACE_CALC_EXT, XML_VALUE, sFormula); + } + else + AddAttribute(XML_NAMESPACE_CALC_EXT, XML_VALUE, rtl::OUString::valueOf(it->GetValue())); - if(pFormatData->mbNeg) - { - if(pFormatData->mpNegativeColor) - { - rtl::OUStringBuffer aBuffer; - ::sax::Converter::convertColor(aBuffer, pFormatData->mpNegativeColor->GetColor()); - AddAttribute(XML_NAMESPACE_CALC_EXT, XML_NEGATIVE_COLOR, aBuffer.makeStringAndClear()); - } - else - { + AddAttribute(XML_NAMESPACE_CALC_EXT, XML_TYPE, getCondFormatEntryType(*it)); rtl::OUStringBuffer aBuffer; - ::sax::Converter::convertColor(aBuffer, Color(COL_LIGHTRED).GetColor()); - AddAttribute(XML_NAMESPACE_CALC_EXT, XML_NEGATIVE_COLOR, aBuffer.makeStringAndClear()); + ::sax::Converter::convertColor(aBuffer, it->GetColor().GetColor()); + AddAttribute(XML_NAMESPACE_CALC_EXT, XML_COLOR, aBuffer.makeStringAndClear()); + SvXMLElementExport aElementColorScaleEntry(*this, XML_NAMESPACE_CALC_EXT, XML_COLOR_SCALE_ENTRY, true, true); } } - - if(pFormatData->meAxisPosition != databar::AUTOMATIC) + else if(pFormatEntry->GetType() == condformat::DATABAR) { - if(pFormatData->meAxisPosition == databar::NONE) + const ScDataBarFormatData* pFormatData = static_cast<const ScDataBarFormat&>(*pFormatEntry).GetDataBarData(); + if(!pFormatData->mbGradient) + AddAttribute(XML_NAMESPACE_CALC_EXT, XML_GRADIENT, XML_FALSE); + if(pFormatData->mbOnlyBar) + AddAttribute(XML_NAMESPACE_CALC_EXT, XML_SHOW_VALUE, XML_FALSE); + + if(pFormatData->mbNeg) { - AddAttribute(XML_NAMESPACE_CALC_EXT, XML_AXIS_POSITION, rtl::OUString("none")); + if(pFormatData->mpNegativeColor) + { + rtl::OUStringBuffer aBuffer; + ::sax::Converter::convertColor(aBuffer, pFormatData->mpNegativeColor->GetColor()); + AddAttribute(XML_NAMESPACE_CALC_EXT, XML_NEGATIVE_COLOR, aBuffer.makeStringAndClear()); + } + else + { + rtl::OUStringBuffer aBuffer; + ::sax::Converter::convertColor(aBuffer, Color(COL_LIGHTRED).GetColor()); + AddAttribute(XML_NAMESPACE_CALC_EXT, XML_NEGATIVE_COLOR, aBuffer.makeStringAndClear()); + } } - else + + if(pFormatData->meAxisPosition != databar::AUTOMATIC) { - AddAttribute(XML_NAMESPACE_CALC_EXT, XML_AXIS_POSITION, rtl::OUString("middle")); + if(pFormatData->meAxisPosition == databar::NONE) + { + AddAttribute(XML_NAMESPACE_CALC_EXT, XML_AXIS_POSITION, rtl::OUString("none")); + } + else + { + AddAttribute(XML_NAMESPACE_CALC_EXT, XML_AXIS_POSITION, rtl::OUString("middle")); + } } - } - rtl::OUStringBuffer aBuffer; - ::sax::Converter::convertColor(aBuffer, pFormatData->maPositiveColor.GetColor()); - AddAttribute(XML_NAMESPACE_CALC_EXT, XML_POSITIVE_COLOR, aBuffer.makeStringAndClear()); - SvXMLElementExport aElementDataBar(*this, XML_NAMESPACE_CALC_EXT, XML_DATA_BAR, true, true); + rtl::OUStringBuffer aBuffer; + ::sax::Converter::convertColor(aBuffer, pFormatData->maPositiveColor.GetColor()); + AddAttribute(XML_NAMESPACE_CALC_EXT, XML_POSITIVE_COLOR, aBuffer.makeStringAndClear()); + SvXMLElementExport aElementDataBar(*this, XML_NAMESPACE_CALC_EXT, XML_DATA_BAR, true, true); - { - if(pFormatData->mpLowerLimit->HasFormula()) { - rtl::OUString sFormula = pFormatData->mpLowerLimit->GetFormula(formula::FormulaGrammar::GRAM_ODFF); - AddAttribute(XML_NAMESPACE_CALC_EXT, XML_VALUE, sFormula); + if(pFormatData->mpLowerLimit->HasFormula()) + { + rtl::OUString sFormula = pFormatData->mpLowerLimit->GetFormula(formula::FormulaGrammar::GRAM_ODFF); + AddAttribute(XML_NAMESPACE_CALC_EXT, XML_VALUE, sFormula); + } + else + AddAttribute(XML_NAMESPACE_CALC_EXT, XML_VALUE, rtl::OUString::valueOf(pFormatData->mpLowerLimit->GetValue())); + AddAttribute(XML_NAMESPACE_CALC_EXT, XML_TYPE, getCondFormatEntryType(*pFormatData->mpLowerLimit)); + SvXMLElementExport aElementDataBarEntryLower(*this, XML_NAMESPACE_CALC_EXT, XML_DATA_BAR_ENTRY, true, true); } - else - AddAttribute(XML_NAMESPACE_CALC_EXT, XML_VALUE, rtl::OUString::valueOf(pFormatData->mpLowerLimit->GetValue())); - AddAttribute(XML_NAMESPACE_CALC_EXT, XML_TYPE, getCondFormatEntryType(*pFormatData->mpLowerLimit)); - SvXMLElementExport aElementDataBarEntryLower(*this, XML_NAMESPACE_CALC_EXT, XML_DATA_BAR_ENTRY, true, true); - } - { - if(pFormatData->mpUpperLimit->HasFormula()) { - rtl::OUString sFormula = pFormatData->mpUpperLimit->GetFormula(formula::FormulaGrammar::GRAM_ODFF); - AddAttribute(XML_NAMESPACE_CALC_EXT, XML_VALUE, sFormula); + if(pFormatData->mpUpperLimit->HasFormula()) + { + rtl::OUString sFormula = pFormatData->mpUpperLimit->GetFormula(formula::FormulaGrammar::GRAM_ODFF); + AddAttribute(XML_NAMESPACE_CALC_EXT, XML_VALUE, sFormula); + } + else + AddAttribute(XML_NAMESPACE_CALC_EXT, XML_VALUE, rtl::OUString::valueOf(pFormatData->mpUpperLimit->GetValue())); + AddAttribute(XML_NAMESPACE_CALC_EXT, XML_TYPE, getCondFormatEntryType(*pFormatData->mpUpperLimit)); + SvXMLElementExport aElementDataBarEntryUpper(*this, XML_NAMESPACE_CALC_EXT, XML_DATA_BAR_ENTRY, true, true); } - else - AddAttribute(XML_NAMESPACE_CALC_EXT, XML_VALUE, rtl::OUString::valueOf(pFormatData->mpUpperLimit->GetValue())); - AddAttribute(XML_NAMESPACE_CALC_EXT, XML_TYPE, getCondFormatEntryType(*pFormatData->mpUpperLimit)); - SvXMLElementExport aElementDataBarEntryUpper(*this, XML_NAMESPACE_CALC_EXT, XML_DATA_BAR_ENTRY, true, true); } } } |