summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sc/inc/colorscale.hxx25
-rw-r--r--sc/inc/conditio.hxx25
-rw-r--r--sc/inc/table.hxx2
-rw-r--r--sc/source/core/data/colorscale.cxx26
-rw-r--r--sc/source/core/data/conditio.cxx109
-rw-r--r--sc/source/core/data/fillinfo.cxx39
-rw-r--r--sc/source/core/data/table2.cxx49
-rw-r--r--sc/source/filter/excel/xecontent.cxx16
-rw-r--r--sc/source/filter/xml/xmlexprt.cxx150
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);
}
}
}