summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sc/inc/conditio.hxx4
-rw-r--r--sc/source/core/data/conditio.cxx34
-rw-r--r--sc/source/filter/xml/xmlimprt.cxx2
-rw-r--r--sc/source/filter/xml/xmlimprt.hxx1
-rw-r--r--sc/source/filter/xml/xmlstyli.cxx259
-rw-r--r--sc/source/filter/xml/xmlstyli.hxx32
6 files changed, 151 insertions, 181 deletions
diff --git a/sc/inc/conditio.hxx b/sc/inc/conditio.hxx
index 9890758871af..b4f686ea6dc6 100644
--- a/sc/inc/conditio.hxx
+++ b/sc/inc/conditio.hxx
@@ -111,6 +111,8 @@ public:
virtual void SetParent( ScConditionalFormat* pNew ) = 0;
+ bool operator==( const ScFormatEntry& ) const;
+
#if DUMP_FORMAT_INFO
virtual void dumpInfo() const = 0;
#endif
@@ -282,6 +284,8 @@ public:
void AddEntry( ScFormatEntry* pNew );
void AddRange( const ScRangeList& rRanges );
const ScRangeList& GetRange() const { return maRanges; }
+ // don't use the same name as for the const version
+ ScRangeList& GetRangeList() { return maRanges; }
bool IsEmpty() const { return maEntries.empty(); }
size_t size() const { return maEntries.size(); }
diff --git a/sc/source/core/data/conditio.cxx b/sc/source/core/data/conditio.cxx
index 17483c3b44d8..5a0c4832ae59 100644
--- a/sc/source/core/data/conditio.cxx
+++ b/sc/source/core/data/conditio.cxx
@@ -54,6 +54,27 @@ ScFormatEntry::ScFormatEntry(ScDocument* pDoc):
{
}
+bool ScFormatEntry::operator==( const ScFormatEntry& r ) const
+{
+ if(GetType() != r.GetType())
+ return false;
+
+ switch(GetType())
+ {
+ case condformat::CONDITION:
+ return static_cast<const ScCondFormatEntry&>(*this) == static_cast<const ScCondFormatEntry&>(r);
+ break;
+ default:
+ // TODO: implement also this case
+ // actually return false for these cases is not that bad
+ // as soon as databar and color scale are tested we need
+ // to think about the range
+ return false;
+ }
+
+ return true;
+}
+
bool lcl_HasRelRef( ScDocument* pDoc, ScTokenArray* pFormula, sal_uInt16 nRecursion = 0 )
{
if (pFormula)
@@ -1286,8 +1307,6 @@ int ScCondFormatEntry::operator== ( const ScCondFormatEntry& r ) const
{
return ScConditionEntry::operator==( r ) &&
aStyleName == r.aStyleName;
-
- // Range wird nicht verglichen
}
ScCondFormatEntry::~ScCondFormatEntry()
@@ -1353,13 +1372,14 @@ bool ScConditionalFormat::EqualEntries( const ScConditionalFormat& r ) const
//! auf gleiche Eintraege in anderer Reihenfolge testen ???
- /*
- for (sal_uInt16 i=0; i<nEntryCount; i++)
- if ( ! (*ppEntries[i] == *r.ppEntries[i]) )
+ for (sal_uInt16 i=0; i<size(); i++)
+ if ( ! (maEntries == r.maEntries ) )
return false;
- */
- return maRanges == r.maRanges;
+ // right now don't check for same range
+ // we only use this method to merge same conditional formats from
+ // old ODF data structure
+ return true;
}
void ScConditionalFormat::AddRange( const ScRangeList& rRanges )
diff --git a/sc/source/filter/xml/xmlimprt.cxx b/sc/source/filter/xml/xmlimprt.cxx
index 495e7d7350aa..0de87a254df3 100644
--- a/sc/source/filter/xml/xmlimprt.cxx
+++ b/sc/source/filter/xml/xmlimprt.cxx
@@ -2684,11 +2684,13 @@ void ScXMLImport::SetStyleToRanges()
if (pStyle)
{
pStyle->FillPropertySet(xProperties);
+ // here needs to be the cond format import method
sal_Int32 nNumberFormat(pStyle->GetNumberFormat());
SetType(xProperties, nNumberFormat, nPrevCellType, sPrevCurrency);
// store first cell of first range for each style, once per sheet
uno::Sequence<table::CellRangeAddress> aAddresses(xSheetCellRanges->getRangeAddresses());
+ pStyle->ApplyCondFormat(aAddresses);
if ( aAddresses.getLength() > 0 )
{
const table::CellRangeAddress& rRange = aAddresses[0];
diff --git a/sc/source/filter/xml/xmlimprt.hxx b/sc/source/filter/xml/xmlimprt.hxx
index f3706d9854cf..d9d86fc7c5b2 100644
--- a/sc/source/filter/xml/xmlimprt.hxx
+++ b/sc/source/filter/xml/xmlimprt.hxx
@@ -852,6 +852,7 @@ class ScXMLImport: public SvXMLImport
com::sun::star::uno::Reference <com::sun::star::util::XNumberFormats> xNumberFormats;
com::sun::star::uno::Reference <com::sun::star::util::XNumberFormatTypes> xNumberFormatTypes;
+ ScRangeList maSheetRanges;
com::sun::star::uno::Reference <com::sun::star::sheet::XSheetCellRangeContainer> xSheetCellRanges;
rtl::OUString sEmpty;
diff --git a/sc/source/filter/xml/xmlstyli.cxx b/sc/source/filter/xml/xmlstyli.cxx
index 1ef7cdae696f..5776d72fd2a8 100644
--- a/sc/source/filter/xml/xmlstyli.cxx
+++ b/sc/source/filter/xml/xmlstyli.cxx
@@ -52,6 +52,15 @@
#include "docuno.hxx"
#include "unonames.hxx"
#include "document.hxx"
+#include "conditio.hxx"
+#include "svl/intitem.hxx"
+#include "rangelst.hxx"
+#include "rangeutl.hxx"
+#include "docfunc.hxx"
+#include "markdata.hxx"
+#include "docpool.hxx"
+#include "scitems.hxx"
+#include "patattr.hxx"
#define XML_LINE_LEFT 0
#define XML_LINE_RIGHT 1
@@ -279,9 +288,12 @@ void ScXMLRowImportPropertyMapper::finished(::std::vector< XMLPropertyState >& r
class ScXMLMapContext : public SvXMLImportContext
{
- rtl::OUString sApplyStyle;
- rtl::OUString sCondition;
- rtl::OUString sBaseCell;
+ rtl::OUString msApplyStyle;
+ rtl::OUString msCondition;
+ rtl::OUString msBaseCell;
+
+ const ScXMLImport& GetScImport() const { return (const ScXMLImport&)GetImport(); }
+ ScXMLImport& GetScImport() { return (ScXMLImport&)GetImport(); }
public:
ScXMLMapContext(
@@ -290,9 +302,7 @@ public:
const uno::Reference< xml::sax::XAttributeList > & xAttrList );
virtual ~ScXMLMapContext();
- const rtl::OUString& GetApplyStyle() const { return sApplyStyle; }
- const rtl::OUString& GetCondition() const { return sCondition; }
- const rtl::OUString& GetBaseCell() const { return sBaseCell; }
+ ScCondFormatEntry* CreateConditionEntry();
};
ScXMLMapContext::ScXMLMapContext(SvXMLImport& rImport, sal_uInt16 nPrfx,
@@ -311,134 +321,48 @@ ScXMLMapContext::ScXMLMapContext(SvXMLImport& rImport, sal_uInt16 nPrfx,
if( XML_NAMESPACE_STYLE == nPrefix )
{
if( IsXMLToken(aLocalName, XML_CONDITION ) )
- sCondition = rValue;
+ msCondition = rValue;
else if( IsXMLToken(aLocalName, XML_APPLY_STYLE_NAME ) )
- sApplyStyle = GetImport().GetStyleDisplayName( XML_STYLE_FAMILY_TABLE_CELL, rValue);
+ msApplyStyle = GetImport().GetStyleDisplayName( XML_STYLE_FAMILY_TABLE_CELL, rValue);
else if ( IsXMLToken(aLocalName, XML_BASE_CELL_ADDRESS ) )
- sBaseCell = rValue;
+ msBaseCell = rValue;
}
}
}
-ScXMLMapContext::~ScXMLMapContext()
-{
-}
-
-namespace {
-
-template< typename Type >
-inline void lclAppendProperty( uno::Sequence< beans::PropertyValue >& rProps, const OUString& rPropName, const Type& rValue )
-{
- sal_Int32 nLength = rProps.getLength();
- rProps.realloc( nLength + 1 );
- rProps[ nLength ].Name = rPropName;
- rProps[ nLength ].Value <<= rValue;
-}
-
-} // namespace
-
-void XMLTableStyleContext::SetOperator( uno::Sequence< beans::PropertyValue >& rProps, sheet::ConditionOperator eOp ) const
-{
- lclAppendProperty( rProps, OUString( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_OPERATOR ) ), eOp );
-}
-
-void XMLTableStyleContext::SetBaseCellAddress( uno::Sequence< beans::PropertyValue >& rProps, const OUString& rBaseCell ) const
+ScCondFormatEntry* ScXMLMapContext::CreateConditionEntry()
{
- /* Source position must be set as string, because it may refer
- to a sheet that hasn't been loaded yet. */
- lclAppendProperty( rProps, OUString( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_SOURCESTR ) ), rBaseCell );
-}
+ OUString aCondition, aConditionNmsp;
+ FormulaGrammar::Grammar eGrammar = FormulaGrammar::GRAM_UNSPECIFIED;
+ GetScImport().ExtractFormulaNamespaceGrammar( aCondition, aConditionNmsp, eGrammar, msCondition );
+ bool bHasNmsp = aCondition.getLength() < msCondition.getLength();
-void XMLTableStyleContext::SetStyle( uno::Sequence<beans::PropertyValue>& rProps, const OUString& rApplyStyle ) const
-{
- lclAppendProperty( rProps, OUString( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_STYLENAME ) ), rApplyStyle );
-}
+ // parse a condition from the attribute string
+ ScXMLConditionParseResult aParseResult;
+ ScXMLConditionHelper::parseCondition( aParseResult, aCondition, 0 );
-void XMLTableStyleContext::SetFormula( uno::Sequence< beans::PropertyValue >& rProps,
- sal_Int32 nFormulaIdx, const OUString& rFormula, const OUString& rFormulaNmsp,
- FormulaGrammar::Grammar eGrammar, bool bHasNmsp ) const
-{
- OUString aFormula, aFormulaNmsp;
- FormulaGrammar::Grammar eNewGrammar = FormulaGrammar::GRAM_UNSPECIFIED;
- if( bHasNmsp )
- {
- // the entire attribute contains a namespace: internal namespace not allowed
- aFormula = rFormula;
- aFormulaNmsp = rFormulaNmsp;
- eNewGrammar = eGrammar;
- }
- else
+ if( !bHasNmsp )
{
// the attribute does not contain a namespace: try to find a namespace of an external grammar
- GetScImport().ExtractFormulaNamespaceGrammar( aFormula, aFormulaNmsp, eNewGrammar, rFormula, true );
+ FormulaGrammar::Grammar eNewGrammar = FormulaGrammar::GRAM_UNSPECIFIED;
+ GetScImport().ExtractFormulaNamespaceGrammar( aCondition, aConditionNmsp, eNewGrammar, aCondition, true );
if( eNewGrammar != FormulaGrammar::GRAM_EXTERNAL )
- eNewGrammar = eGrammar;
+ eGrammar = eNewGrammar;
}
- // add formula, formula namespace, and grammar with appropriate property names
- sal_Int32 nGrammar = static_cast< sal_Int32 >( eNewGrammar );
- switch( nFormulaIdx )
- {
- case 1:
- lclAppendProperty( rProps, OUString( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_FORMULA1 ) ), aFormula );
- lclAppendProperty( rProps, OUString( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_FORMULANMSP1 ) ), aFormulaNmsp );
- lclAppendProperty( rProps, OUString( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_GRAMMAR1 ) ), nGrammar );
- break;
- case 2:
- lclAppendProperty( rProps, OUString( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_FORMULA2 ) ), aFormula );
- lclAppendProperty( rProps, OUString( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_FORMULANMSP2 ) ), aFormulaNmsp );
- lclAppendProperty( rProps, OUString( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_GRAMMAR2 ) ), nGrammar );
- break;
- default:
- OSL_FAIL( "XMLTableStyleContext::SetFormula - invalid formula index" );
- }
+ ScConditionMode eMode = ScConditionEntry::GetModeFromApi(aParseResult.meOperator);
+ rtl::OUString aExpr1, aExpr2, aNmsp1, aNmsp2;
+ ScDocument* pDoc = GetScImport().GetDocument();
+
+ ScCondFormatEntry* pEntry = new ScCondFormatEntry(eMode, aParseResult.maOperand1, aParseResult.maOperand2, pDoc, ScAddress(), msApplyStyle,
+ aNmsp1, aNmsp2, eGrammar, eGrammar);
+
+ pEntry->SetSrcString(msBaseCell);
+ return pEntry;
}
-void XMLTableStyleContext::GetConditionalFormat(uno::Any& aAny,
- const rtl::OUString& sTempCondition,
- const rtl::OUString& sApplyStyle, const rtl::OUString& sBaseCell) const
+ScXMLMapContext::~ScXMLMapContext()
{
- if (!sTempCondition.isEmpty() && !sApplyStyle.isEmpty())
- {
- uno::Reference<sheet::XSheetConditionalEntries> xConditionalEntries(aAny, uno::UNO_QUERY);
- if (xConditionalEntries.is())
- {
- uno::Sequence<beans::PropertyValue> aProps;
- if (!sBaseCell.isEmpty())
- SetBaseCellAddress(aProps, sBaseCell);
- SetStyle(aProps, sApplyStyle);
-
- // extract leading namespace from condition string
- OUString aCondition, aConditionNmsp;
- FormulaGrammar::Grammar eGrammar = FormulaGrammar::GRAM_UNSPECIFIED;
- GetScImport().ExtractFormulaNamespaceGrammar( aCondition, aConditionNmsp, eGrammar, sTempCondition );
- bool bHasNmsp = aCondition.getLength() < sTempCondition.getLength();
-
- // parse a condition from the attribute string
- ScXMLConditionParseResult aParseResult;
- ScXMLConditionHelper::parseCondition( aParseResult, aCondition, 0 );
-
- /* Check the result. A valid value in aParseResult.meToken implies
- that the other members of aParseResult are filled with valid
- data for that token. */
- switch( aParseResult.meToken )
- {
- case XML_COND_CELLCONTENT: // condition is 'cell-content()<operator><expression>'
- case XML_COND_ISTRUEFORMULA: // condition is 'is-true-formula(<expression>)'
- case XML_COND_ISBETWEEN: // condition is 'cell-content-is-between(<expression1>,<expression2>)'
- case XML_COND_ISNOTBETWEEN: // condition is 'cell-content-is-not-between(<expression1>,<expression2>)'
- SetOperator( aProps, aParseResult.meOperator );
- SetFormula( aProps, 1, aParseResult.maOperand1, aConditionNmsp, eGrammar, bHasNmsp );
- SetFormula( aProps, 2, aParseResult.maOperand2, aConditionNmsp, eGrammar, bHasNmsp );
- break;
-
- default:; // unacceptable or unknown condition
- }
-
- xConditionalEntries->addNew( aProps );
- aAny <<= xConditionalEntries;
- }
- }
}
void XMLTableStyleContext::SetAttribute( sal_uInt16 nPrefixKey,
@@ -454,13 +378,6 @@ void XMLTableStyleContext::SetAttribute( sal_uInt16 nPrefixKey,
XMLPropStyleContext::SetAttribute( nPrefixKey, rLocalName, rValue );
}
-struct ScXMLMapContent
-{
- rtl::OUString sCondition;
- rtl::OUString sApplyStyle;
- rtl::OUString sBaseCell;
-};
-
TYPEINIT1( XMLTableStyleContext, XMLPropStyleContext );
XMLTableStyleContext::XMLTableStyleContext( ScXMLImport& rImport,
@@ -469,12 +386,11 @@ XMLTableStyleContext::XMLTableStyleContext( ScXMLImport& rImport,
SvXMLStylesContext& rStyles, sal_uInt16 nFamily, bool bDefaultStyle ) :
XMLPropStyleContext( rImport, nPrfx, rLName, xAttrList, rStyles, nFamily, bDefaultStyle ),
sDataStyleName(),
- sNumberFormat(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NumberFormat"))),
pStyles(&rStyles),
nNumberFormat(-1),
nLastSheet(-1),
- bConditionalFormatCreated(false),
- bParentSet(false)
+ bParentSet(false),
+ mpCondFormat(NULL)
{
}
@@ -492,13 +408,11 @@ SvXMLImportContext *XMLTableStyleContext::CreateChildContext(
if( (XML_NAMESPACE_STYLE == nPrefix) &&
IsXMLToken(rLocalName, XML_MAP ) )
{
- pContext = new ScXMLMapContext(GetImport(), nPrefix, rLocalName, xAttrList);
-
- ScXMLMapContent aMap;
- aMap.sCondition = ((ScXMLMapContext*)pContext)->GetCondition();
- aMap.sApplyStyle = ((ScXMLMapContext*)pContext)->GetApplyStyle();
- aMap.sBaseCell = ((ScXMLMapContext*)pContext)->GetBaseCell();
- aMaps.push_back(aMap);
+ if(!mpCondFormat)
+ mpCondFormat = new ScConditionalFormat( 0, GetScImport().GetDocument() );
+ ScXMLMapContext* pMapContext = new ScXMLMapContext(GetImport(), nPrefix, rLocalName, xAttrList);
+ pContext = pContext;
+ mpCondFormat->AddEntry(pMapContext->CreateConditionEntry());
}
if (!pContext)
pContext = XMLPropStyleContext::CreateChildContext( nPrefix, rLocalName,
@@ -506,6 +420,68 @@ SvXMLImportContext *XMLTableStyleContext::CreateChildContext(
return pContext;
}
+void XMLTableStyleContext::ApplyCondFormat( uno::Sequence<table::CellRangeAddress> xCellRanges )
+{
+ if(!mpCondFormat)
+ return;
+
+ ScRangeList rRange;
+ sal_Int32 nRanges = xCellRanges.getLength();
+ for(sal_Int32 i = 0; i < nRanges; ++i)
+ {
+ table::CellRangeAddress aAddress = xCellRanges[i];
+ ScRange aRange( aAddress.StartColumn, aAddress.StartRow, aAddress.Sheet, aAddress.EndColumn, aAddress.EndRow, aAddress.Sheet );
+ rRange.Join( aRange, false );
+ }
+
+ ScDocument* pDoc = GetScImport().GetDocument();
+ SCTAB nTab = GetScImport().GetTables().GetCurrentSheet();
+ ScConditionalFormatList* pFormatList = pDoc->GetCondFormList(nTab);
+ for(ScConditionalFormatList::iterator itr = pFormatList->begin(), itrEnd = pFormatList->end();
+ itr != itrEnd; ++itr)
+ {
+ if(itr->EqualEntries(*mpCondFormat))
+ {
+ // we don't need the new cond format entry now
+ // the found one is the same and we just need to add the range to it
+ delete mpCondFormat;
+ mpCondFormat = NULL;
+
+ ScRangeList& rRangeList = itr->GetRangeList();
+ sal_uInt32 nCondId = itr->GetKey();
+ size_t n = rRange.size();
+ for(size_t i = 0; i < n; ++i)
+ {
+ const ScRange* pRange = rRange[i];
+ rRangeList.Join(*pRange);
+ }
+
+ ScPatternAttr aPattern( pDoc->GetPool() );
+ aPattern.GetItemSet().Put( SfxUInt32Item( ATTR_CONDITIONAL, nCondId ) );
+ ScMarkData aMarkData;
+ aMarkData.MarkFromRangeList(rRange, true);
+ pDoc->ApplySelectionPattern( aPattern , aMarkData);
+
+ break;
+ }
+ }
+
+ if(mpCondFormat)
+ {
+ sal_uLong nIndex = pDoc->AddCondFormat(mpCondFormat, nTab );
+ mpCondFormat->SetKey(nIndex);
+ mpCondFormat->AddRange(rRange);
+
+ ScPatternAttr aPattern( pDoc->GetPool() );
+ aPattern.GetItemSet().Put( SfxUInt32Item( ATTR_CONDITIONAL, nIndex ) );
+ ScMarkData aMarkData;
+ aMarkData.MarkFromRangeList(rRange, true);
+ pDoc->ApplySelectionPattern( aPattern , aMarkData);
+ }
+
+
+}
+
void XMLTableStyleContext::FillPropertySet(
const uno::Reference< XPropertySet > & rPropSet )
{
@@ -521,21 +497,6 @@ void XMLTableStyleContext::FillPropertySet(
sal_Int32 nNumFmt = GetNumberFormat();
if (nNumFmt >= 0)
AddProperty(CTF_SC_NUMBERFORMAT, uno::makeAny(nNumFmt));
- if (!GetScImport().HasNewCondFormatData() && !bConditionalFormatCreated && (!aMaps.empty()))
- {
- aConditionalFormat = rPropSet->getPropertyValue(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNONAME_CONDXML)));
- std::vector<ScXMLMapContent>::iterator aItr(aMaps.begin());
- std::vector<ScXMLMapContent>::iterator aEndItr(aMaps.end());
- while(aItr != aEndItr)
- {
- //rPropSet->setPropertyValue(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_CONDITIONALFORMAT)),
- GetConditionalFormat(aConditionalFormat, aItr->sCondition, aItr->sApplyStyle, aItr->sBaseCell);
-
- ++aItr;
- }
- AddProperty(CTF_SC_IMPORT_MAP, aConditionalFormat);
- bConditionalFormatCreated = true;
- }
}
else if (GetFamily() == XML_STYLE_FAMILY_TABLE_TABLE)
{
diff --git a/sc/source/filter/xml/xmlstyli.hxx b/sc/source/filter/xml/xmlstyli.hxx
index d6f57df7033c..edc579438d77 100644
--- a/sc/source/filter/xml/xmlstyli.hxx
+++ b/sc/source/filter/xml/xmlstyli.hxx
@@ -42,6 +42,8 @@
#include <com/sun/star/sheet/ConditionOperator.hpp>
#include "xmlimprt.hxx"
+class ScConditionalFormat;
+
class ScXMLCellImportPropertyMapper : public SvXMLImportPropertyMapper
{
protected:
@@ -89,44 +91,20 @@ public:
virtual void finished(
::std::vector< XMLPropertyState >& rProperties, sal_Int32 nStartIndex, sal_Int32 nEndIndex ) const;
};
-struct ScXMLMapContent;
class XMLTableStyleContext : public XMLPropStyleContext
{
::rtl::OUString sDataStyleName;
rtl::OUString sPageStyle;
- const rtl::OUString sNumberFormat;
SvXMLStylesContext* pStyles;
- std::vector<ScXMLMapContent> aMaps;
- com::sun::star::uno::Any aConditionalFormat;
sal_Int32 nNumberFormat;
SCTAB nLastSheet;
- bool bConditionalFormatCreated;
bool bParentSet;
+ ScConditionalFormat* mpCondFormat;
const ScXMLImport& GetScImport() const { return (const ScXMLImport&)GetImport(); }
ScXMLImport& GetScImport() { return (ScXMLImport&)GetImport(); }
- void SetOperator(
- ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& rProps,
- ::com::sun::star::sheet::ConditionOperator eOp ) const;
-
- void SetBaseCellAddress(
- ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& rProps,
- const ::rtl::OUString& rBaseCell ) const;
-
- void SetStyle(
- ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& rProps,
- const ::rtl::OUString& rApplyStyle ) const;
-
- void SetFormula(
- ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& rProps,
- sal_Int32 nFormulaIdx, const ::rtl::OUString& rFormula,
- const ::rtl::OUString& rFormulaNmsp, ::formula::FormulaGrammar::Grammar eGrammar, bool bHasNmsp ) const;
-
- void GetConditionalFormat(
- ::com::sun::star::uno::Any& aAny, const rtl::OUString& sCondition,
- const rtl::OUString& sApplyStyle, const rtl::OUString& sBaseCell) const;
protected:
virtual void SetAttribute( sal_uInt16 nPrefixKey,
@@ -161,8 +139,12 @@ public:
SCTAB GetLastSheet() const { return nLastSheet; }
void SetLastSheet(SCTAB nNew) { nLastSheet = nNew; }
+ void ApplyCondFormat( com::sun::star::uno::Sequence<com::sun::star::table::CellRangeAddress> xCellRanges );
+
private:
using XMLPropStyleContext::SetStyle;
+
+ ScConditionalFormat* CreateCondFormat();
};
class XMLTableStylesContext : public SvXMLStylesContext