[Libreoffice-commits] .: sc/inc sc/Library_sc.mk sc/source xmloff/source

Markus Mohrhard mmohrhard at kemper.freedesktop.org
Fri May 25 13:42:40 PDT 2012


 sc/Library_sc.mk                       |    1 
 sc/inc/colorscale.hxx                  |    1 
 sc/source/core/data/colorscale.cxx     |   11 
 sc/source/filter/xml/xmlcondformat.cxx |  390 +++++++++++++++++++++++++++++++++
 sc/source/filter/xml/xmlcondformat.hxx |  185 +++++++++++++++
 sc/source/filter/xml/xmlexprt.cxx      |   16 -
 sc/source/filter/xml/xmlimprt.cxx      |  152 ++++++++++++
 sc/source/filter/xml/xmlimprt.hxx      |   66 +++++
 sc/source/filter/xml/xmltabi.cxx       |    4 
 xmloff/source/core/xmlimp.cxx          |    2 
 10 files changed, 819 insertions(+), 9 deletions(-)

New commits:
commit 1171a1375825785c9da40fd4e043d445c562c4aa
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Fri May 25 01:27:24 2012 +0200

    import new conditional format information
    
    Change-Id: Iaa16792a74a3e33d3880cb9db41baf5613804387

diff --git a/sc/Library_sc.mk b/sc/Library_sc.mk
index cbc337d..20a5eaf 100644
--- a/sc/Library_sc.mk
+++ b/sc/Library_sc.mk
@@ -254,6 +254,7 @@ $(eval $(call gb_Library_add_exception_objects,sc,\
 	sc/source/filter/xml/xmlbodyi \
 	sc/source/filter/xml/xmlcelli \
 	sc/source/filter/xml/xmlcoli \
+	sc/source/filter/xml/xmlcondformat \
 	sc/source/filter/xml/xmlconti \
 	sc/source/filter/xml/xmlcvali \
 	sc/source/filter/xml/xmldpimp \
diff --git a/sc/inc/colorscale.hxx b/sc/inc/colorscale.hxx
index 3187f84..562f981 100644
--- a/sc/inc/colorscale.hxx
+++ b/sc/inc/colorscale.hxx
@@ -71,6 +71,7 @@ public:
     bool GetPercentile() const;
     bool HasFormula() const;
     const ScTokenArray* GetFormula() const;
+    rtl::OUString GetFormula( formula::FormulaGrammar::Grammar eGrammar ) const;
     void SetMin(bool bMin);
     void SetMax(bool bMax);
     void SetPercent(bool bPercent);
diff --git a/sc/source/core/data/colorscale.cxx b/sc/source/core/data/colorscale.cxx
index c5db859..62b16e2 100644
--- a/sc/source/core/data/colorscale.cxx
+++ b/sc/source/core/data/colorscale.cxx
@@ -88,6 +88,17 @@ const ScTokenArray* ScColorScaleEntry::GetFormula() const
     return NULL;
 }
 
+rtl::OUString ScColorScaleEntry::GetFormula( formula::FormulaGrammar::Grammar eGrammar ) const
+{
+    rtl::OUString aFormula;
+    if(mpCell)
+    {
+        mpCell->GetFormula(aFormula, eGrammar);
+    }
+
+    return aFormula;
+}
+
 double ScColorScaleEntry::GetValue() const
 {
     if(mpCell)
diff --git a/sc/source/filter/xml/xmlcondformat.cxx b/sc/source/filter/xml/xmlcondformat.cxx
new file mode 100644
index 0000000..3e3d3c4
--- /dev/null
+++ b/sc/source/filter/xml/xmlcondformat.cxx
@@ -0,0 +1,390 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * Version: MPL 1.1 / GPLv3+ / LGPLv3+
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License or as specified alternatively below. You may obtain a copy of
+ * the License at http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * Major Contributor(s):
+ * Copyright (C) 2012 Markus Mohrhard <markus.mohrhard at googlemail.com> (initial developer)
+ *
+ * All Rights Reserved.
+ *
+ * For minor contributions see the git repository.
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 3 or later (the "GPLv3+"), or
+ * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
+ * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
+ * instead of those above.
+ */
+
+#include "xmlcondformat.hxx"
+#include <xmloff/nmspmap.hxx>
+
+#include "colorscale.hxx"
+#include "document.hxx"
+#include <sax/tools/converter.hxx>
+#include "rangelst.hxx"
+#include "rangeutl.hxx"
+#include "docfunc.hxx"
+#include "markdata.hxx"
+#include "docpool.hxx"
+#include "scitems.hxx"
+#include "patattr.hxx"
+#include "svl/intitem.hxx"
+
+
+ScXMLConditionalFormatsContext::ScXMLConditionalFormatsContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
+                        const ::rtl::OUString& rLName):
+    SvXMLImportContext( rImport, nPrfx, rLName )
+{
+}
+
+SvXMLImportContext* ScXMLConditionalFormatsContext::CreateChildContext( sal_uInt16 nPrefix,
+        const ::rtl::OUString& rLocalName,
+        const ::com::sun::star::uno::Reference<
+        ::com::sun::star::xml::sax::XAttributeList>& xAttrList )
+{
+    const SvXMLTokenMap& rTokenMap = GetScImport().GetCondFormatsTokenMap();
+    sal_uInt16 nToken = rTokenMap.Get(nPrefix, rLocalName);
+    SvXMLImportContext* pContext = NULL;
+    switch (nToken)
+    {
+        case XML_TOK_CONDFORMATS_CONDFORMAT:
+            pContext = new ScXMLConditionalFormatContext( GetScImport(), nPrefix, rLocalName, xAttrList );
+            break;
+    }
+
+    return pContext;
+}
+
+void ScXMLConditionalFormatsContext::EndElement()
+{
+}
+
+ScXMLConditionalFormatContext::ScXMLConditionalFormatContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
+                        const ::rtl::OUString& rLName, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList>& xAttrList):
+    SvXMLImportContext( rImport, nPrfx, rLName )
+{
+    rtl::OUString sRange;
+
+    sal_Int16 nAttrCount(xAttrList.is() ? xAttrList->getLength() : 0);
+    const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetCondFormatAttrMap();
+    for( sal_Int16 i=0; i < nAttrCount; ++i )
+    {
+        const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
+        rtl::OUString aLocalName;
+        sal_uInt16 nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
+                    sAttrName, &aLocalName ));
+        const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
+
+        switch( rAttrTokenMap.Get( nPrefix, aLocalName ) )
+        {
+            case XML_TOK_CONDFORMAT_TARGET_RANGE:
+                sRange = sValue;
+            break;
+            default:
+                break;
+        }
+    }
+
+    ScRangeStringConverter::GetRangeListFromString(maRange, sRange, GetScImport().GetDocument(),
+            formula::FormulaGrammar::CONV_ODF);
+
+}
+
+SvXMLImportContext* ScXMLConditionalFormatContext::CreateChildContext( sal_uInt16 nPrefix,
+        const ::rtl::OUString& rLocalName,
+        const ::com::sun::star::uno::Reference<
+        ::com::sun::star::xml::sax::XAttributeList>& xAttrList )
+{
+    const SvXMLTokenMap& rTokenMap = GetScImport().GetCondFormatTokenMap();
+    sal_uInt16 nToken = rTokenMap.Get(nPrefix, rLocalName);
+    SvXMLImportContext* pContext = NULL;
+    switch (nToken)
+    {
+        case XML_TOK_CONDFORMAT_COLORSCALE:
+            pContext = new ScXMLColorScaleFormatContext( GetScImport(), nPrefix, rLocalName, maRange );
+            break;
+        case XML_TOK_CONDFORMAT_DATABAR:
+            pContext = new ScXMLDataBarFormatContext( GetScImport(), nPrefix, rLocalName, xAttrList, maRange );
+            break;
+        default:
+            break;
+    }
+
+    return pContext;
+}
+
+void ScXMLConditionalFormatContext::EndElement()
+{
+}
+
+ScXMLColorScaleFormatContext::ScXMLColorScaleFormatContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
+                        const ::rtl::OUString& rLName, const ScRangeList& rRange):
+    SvXMLImportContext( rImport, nPrfx, rLName ),
+    pColorScaleFormat(NULL)
+{
+    pColorScaleFormat = new ScColorScaleFormat(GetScImport().GetDocument());
+    pColorScaleFormat->SetRange(rRange);
+}
+
+SvXMLImportContext* ScXMLColorScaleFormatContext::CreateChildContext( sal_uInt16 nPrefix,
+        const ::rtl::OUString& rLocalName,
+        const ::com::sun::star::uno::Reference<
+        ::com::sun::star::xml::sax::XAttributeList>& xAttrList )
+{
+    const SvXMLTokenMap& rTokenMap = GetScImport().GetColorScaleTokenMap();
+    sal_uInt16 nToken = rTokenMap.Get(nPrefix, rLocalName);
+    SvXMLImportContext* pContext = NULL;
+    switch (nToken)
+    {
+        case XML_TOK_COLORSCALE_COLORSCALEENTRY:
+            pContext = new ScXMLColorScaleFormatEntryContext( GetScImport(), nPrefix, rLocalName, xAttrList, pColorScaleFormat );
+            break;
+        default:
+            break;
+    }
+
+    return pContext;
+}
+
+void ScXMLColorScaleFormatContext::EndElement()
+{
+    ScDocument* pDoc = GetScImport().GetDocument();
+
+    sal_uLong nIndex = pDoc->AddColorFormat(pColorScaleFormat, GetScImport().GetTables().GetCurrentSheet());
+
+    ScPatternAttr aPattern( pDoc->GetPool() );
+    aPattern.GetItemSet().Put( SfxUInt32Item( ATTR_COLORSCALE, nIndex ) );
+    ScMarkData aMarkData;
+    aMarkData.MarkFromRangeList(pColorScaleFormat->GetRange(), true);
+    pDoc->ApplySelectionPattern( aPattern , aMarkData);
+}
+
+ScXMLDataBarFormatContext::ScXMLDataBarFormatContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
+                        const ::rtl::OUString& rLName, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
+                        const ScRangeList& rRange):
+    SvXMLImportContext( rImport, nPrfx, rLName ),
+    mpDataBarFormat(NULL),
+    mpFormatData(NULL)
+{
+    rtl::OUString sPositiveColor;
+    rtl::OUString sNegativeColor;
+    rtl::OUString sGradient;
+
+    sal_Int16 nAttrCount(xAttrList.is() ? xAttrList->getLength() : 0);
+    const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetDataBarAttrMap();
+    for( sal_Int16 i=0; i < nAttrCount; ++i )
+    {
+        const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
+        rtl::OUString aLocalName;
+        sal_uInt16 nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
+                    sAttrName, &aLocalName ));
+        const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
+
+        switch( rAttrTokenMap.Get( nPrefix, aLocalName ) )
+        {
+            case XML_TOK_DATABAR_POSITIVE_COLOR:
+                sPositiveColor = sValue;
+                break;
+            case XML_TOK_DATABAR_GRADIENT:
+                sGradient = sValue;
+                break;
+            default:
+                break;
+        }
+    }
+
+    mpDataBarFormat = new ScDataBarFormat(rImport.GetDocument());
+    mpFormatData = new ScDataBarFormatData();
+    mpDataBarFormat->SetDataBarData(mpFormatData);
+    if(!sGradient.isEmpty())
+    {
+        bool bGradient = true;
+        sax::Converter::convertBool( bGradient, sGradient);
+        mpFormatData->mbGradient = bGradient;
+    }
+    if(!sPositiveColor.isEmpty())
+    {
+        sal_Int32 nColor = 0;
+        sax::Converter::convertColor( nColor, sPositiveColor );
+        mpFormatData->maPositiveColor = Color(nColor);
+    }
+    if(!sNegativeColor.isEmpty())
+    {
+        sal_Int32 nColor = 0;
+        sax::Converter::convertColor( nColor, sPositiveColor );
+        mpFormatData->mpNegativeColor.reset(new Color(nColor));
+    }
+
+    mpDataBarFormat->SetRange(rRange);
+}
+
+SvXMLImportContext* ScXMLDataBarFormatContext::CreateChildContext( sal_uInt16 nPrefix,
+        const ::rtl::OUString& rLocalName,
+        const ::com::sun::star::uno::Reference<
+        ::com::sun::star::xml::sax::XAttributeList>& xAttrList )
+{
+    const SvXMLTokenMap& rTokenMap = GetScImport().GetDataBarTokenMap();
+    sal_uInt16 nToken = rTokenMap.Get(nPrefix, rLocalName);
+    SvXMLImportContext* pContext = NULL;
+    switch (nToken)
+    {
+        case XML_TOK_DATABAR_DATABARENTRY:
+            pContext = new ScXMLDataBarFormatEntryContext( GetScImport(), nPrefix, rLocalName, xAttrList, mpFormatData );
+            break;
+        default:
+            break;
+    }
+
+    return pContext;
+}
+
+void ScXMLDataBarFormatContext::EndElement()
+{
+    ScDocument* pDoc = GetScImport().GetDocument();
+
+    sal_uLong nIndex = pDoc->AddColorFormat(mpDataBarFormat, GetScImport().GetTables().GetCurrentSheet());
+
+    ScPatternAttr aPattern( pDoc->GetPool() );
+    aPattern.GetItemSet().Put( SfxUInt32Item( ATTR_COLORSCALE, nIndex ) );
+    ScMarkData aMarkData;
+    aMarkData.MarkFromRangeList(mpDataBarFormat->GetRange(), true);
+    pDoc->ApplySelectionPattern( aPattern , aMarkData);
+}
+
+namespace {
+
+void setColorEntryType(const rtl::OUString& rType, ScColorScaleEntry* pEntry)
+{
+    if(rType == "minimum")
+        pEntry->SetMin(true);
+    else if(rType == "maximum")
+        pEntry->SetMax(true);
+    else if(rType == "percentile")
+        pEntry->SetPercentile(true);
+    else if(rType == "percent")
+        pEntry->SetPercent(true);
+
+    //TODO: add formulas
+}
+
+}
+
+ScXMLColorScaleFormatEntryContext::ScXMLColorScaleFormatEntryContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
+                        const ::rtl::OUString& rLName, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
+                        ScColorScaleFormat* pFormat):
+    SvXMLImportContext( rImport, nPrfx, rLName ),
+    mpFormat( pFormat ),
+    mpFormatEntry( NULL )
+{
+    double nVal = 0;
+    Color aColor;
+
+    rtl::OUString sType;
+    rtl::OUString sVal;
+    rtl::OUString sColor;
+
+    sal_Int16 nAttrCount(xAttrList.is() ? xAttrList->getLength() : 0);
+    const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetColorScaleEntryAttrMap();
+    for( sal_Int16 i=0; i < nAttrCount; ++i )
+    {
+        const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
+        rtl::OUString aLocalName;
+        sal_uInt16 nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
+                    sAttrName, &aLocalName ));
+        const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
+
+        switch( rAttrTokenMap.Get( nPrefix, aLocalName ) )
+        {
+            case XML_TOK_COLORSCALEENTRY_TYPE:
+                sType = sValue;
+                break;
+            case XML_TOK_COLORSCALEENTRY_VALUE:
+                sVal = sValue;
+                break;
+            case XML_TOK_COLORSCALEENTRY_COLOR:
+                sColor = sValue;
+                break;
+            default:
+                break;
+        }
+    }
+
+    sal_Int32 nColor;
+    sax::Converter::convertColor(nColor, sColor);
+    aColor = Color(nColor);
+
+    //TODO: formulas
+    if(!sVal.isEmpty())
+        sax::Converter::convertDouble(nVal, sVal);
+
+    mpFormatEntry = new ScColorScaleEntry(nVal, aColor);
+    setColorEntryType(sType, mpFormatEntry);
+    pFormat->AddEntry(mpFormatEntry);
+}
+
+void ScXMLColorScaleFormatEntryContext::EndElement()
+{
+}
+
+ScXMLDataBarFormatEntryContext::ScXMLDataBarFormatEntryContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
+                        const ::rtl::OUString& rLName, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
+                        ScDataBarFormatData* pData):
+    SvXMLImportContext( rImport, nPrfx, rLName )
+{
+    rtl::OUString sVal;
+    rtl::OUString sType;
+
+    sal_Int16 nAttrCount(xAttrList.is() ? xAttrList->getLength() : 0);
+    const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetDataBarEntryAttrMap();
+    for( sal_Int16 i=0; i < nAttrCount; ++i )
+    {
+        const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
+        rtl::OUString aLocalName;
+        sal_uInt16 nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
+                    sAttrName, &aLocalName ));
+        const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
+
+        switch( rAttrTokenMap.Get( nPrefix, aLocalName ) )
+        {
+            case XML_TOK_DATABARENTRY_TYPE:
+                sType = sValue;
+                break;
+            case XML_TOK_DATABARENTRY_VALUE:
+                sVal = sValue;
+                break;
+            default:
+                break;
+        }
+    }
+
+    double nVal = 0;
+    if(!sVal.isEmpty())
+        sax::Converter::convertDouble(nVal, sVal);
+
+    ScColorScaleEntry* pEntry = new ScColorScaleEntry(nVal, Color());
+    setColorEntryType(sType, pEntry);
+    if(pData->mpLowerLimit)
+    {
+        pData->mpUpperLimit.reset(pEntry);
+    }
+    else
+    {
+        pData->mpLowerLimit.reset(pEntry);
+    }
+}
+
+void ScXMLDataBarFormatEntryContext::EndElement()
+{
+}
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/filter/xml/xmlcondformat.hxx b/sc/source/filter/xml/xmlcondformat.hxx
new file mode 100644
index 0000000..42e5d0a
--- /dev/null
+++ b/sc/source/filter/xml/xmlcondformat.hxx
@@ -0,0 +1,185 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * Version: MPL 1.1 / GPLv3+ / LGPLv3+
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License or as specified alternatively below. You may obtain a copy of
+ * the License at http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * Major Contributor(s):
+ * Copyright (C) 2012 Markus Mohrhard <markus.mohrhard at googlemail.com> (initial developer)
+ *
+ * All Rights Reserved.
+ *
+ * For minor contributions see the git repository.
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 3 or later (the "GPLv3+"), or
+ * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
+ * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
+ * instead of those above.
+ */
+
+#include <xmloff/xmlictxt.hxx>
+#include "xmlimprt.hxx"
+#include "rangelst.hxx"
+
+class ScColorScaleFormat;
+class ScColorScaleEntry;
+class ScDataBarFormat;
+struct ScDataBarFormatData;
+
+class ScXMLConditionalFormatsContext : public SvXMLImportContext
+{
+    const ScXMLImport& GetScImport() const { return (const ScXMLImport&)GetImport(); }
+    ScXMLImport& GetScImport() { return (ScXMLImport&)GetImport(); }
+public:
+    ScXMLConditionalFormatsContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
+                        const ::rtl::OUString& rLName );
+
+    virtual ~ScXMLConditionalFormatsContext() {}
+
+    virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
+                                     const ::rtl::OUString& rLocalName,
+                                     const ::com::sun::star::uno::Reference<
+                                          ::com::sun::star::xml::sax::XAttributeList>& xAttrList );
+
+    virtual void EndElement();
+};
+
+class ScXMLConditionalFormatContext : public SvXMLImportContext
+{
+    const ScXMLImport& GetScImport() const { return (const ScXMLImport&)GetImport(); }
+    ScXMLImport& GetScImport() { return (ScXMLImport&)GetImport(); }
+public:
+    ScXMLConditionalFormatContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
+                        const ::rtl::OUString& rLName,
+                        const ::com::sun::star::uno::Reference<
+                                        ::com::sun::star::xml::sax::XAttributeList>& xAttrList);
+
+    virtual ~ScXMLConditionalFormatContext() {}
+
+    virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
+                                     const ::rtl::OUString& rLocalName,
+                                     const ::com::sun::star::uno::Reference<
+                                          ::com::sun::star::xml::sax::XAttributeList>& xAttrList );
+
+    virtual void EndElement();
+
+private:
+
+    ScRangeList maRange;
+};
+
+class ScXMLColorScaleFormatContext : public SvXMLImportContext
+{
+private:
+    const ScXMLImport& GetScImport() const { return (const ScXMLImport&)GetImport(); }
+    ScXMLImport& GetScImport() { return (ScXMLImport&)GetImport(); }
+
+public:
+    ScXMLColorScaleFormatContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
+                        const ::rtl::OUString& rLName, const ScRangeList& rRange);
+
+    virtual ~ScXMLColorScaleFormatContext() {}
+
+
+    virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
+                                     const ::rtl::OUString& rLocalName,
+                                     const ::com::sun::star::uno::Reference<
+                                          ::com::sun::star::xml::sax::XAttributeList>& xAttrList );
+
+    virtual void EndElement();
+
+private:
+
+    ScColorScaleFormat* pColorScaleFormat;
+};
+
+class ScXMLDataBarFormatContext : public SvXMLImportContext
+{
+    const ScXMLImport& GetScImport() const { return (const ScXMLImport&)GetImport(); }
+    ScXMLImport& GetScImport() { return (ScXMLImport&)GetImport(); }
+public:
+    ScXMLDataBarFormatContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
+                        const ::rtl::OUString& rLName,
+                        const ::com::sun::star::uno::Reference<
+                                        ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
+                        const ScRangeList& rRange);
+
+    virtual ~ScXMLDataBarFormatContext() {}
+
+
+    virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
+                                     const ::rtl::OUString& rLocalName,
+                                     const ::com::sun::star::uno::Reference<
+                                          ::com::sun::star::xml::sax::XAttributeList>& xAttrList );
+
+    virtual void EndElement();
+
+private:
+
+    ScDataBarFormat* mpDataBarFormat;
+    ScDataBarFormatData* mpFormatData;
+
+};
+
+class ScXMLColorScaleFormatEntryContext : public SvXMLImportContext
+{
+    const ScXMLImport& GetScImport() const { return (const ScXMLImport&)GetImport(); }
+    ScXMLImport& GetScImport() { return (ScXMLImport&)GetImport(); }
+public:
+    ScXMLColorScaleFormatEntryContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
+                        const ::rtl::OUString& rLName,
+                        const ::com::sun::star::uno::Reference<
+                                        ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
+                        ScColorScaleFormat* pFormat);
+
+    virtual ~ScXMLColorScaleFormatEntryContext() {}
+
+    virtual void EndElement();
+
+private:
+
+    ScColorScaleFormat* mpFormat;
+    ScColorScaleEntry* mpFormatEntry;
+};
+
+class ScXMLDataBarFormatEntryContext : public SvXMLImportContext
+{
+    const ScXMLImport& GetScImport() const { return (const ScXMLImport&)GetImport(); }
+    ScXMLImport& GetScImport() { return (ScXMLImport&)GetImport(); }
+public:
+    ScXMLDataBarFormatEntryContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
+                        const ::rtl::OUString& rLName,
+                        const ::com::sun::star::uno::Reference<
+                                        ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
+                        ScDataBarFormatData* pData);
+
+    virtual ~ScXMLDataBarFormatEntryContext() {}
+
+    virtual void EndElement();
+};
+
+class ScXMLConditionContext : public SvXMLImportContext
+{
+    const ScXMLImport& GetScImport() const { return (const ScXMLImport&)GetImport(); }
+    ScXMLImport& GetScImport() { return (ScXMLImport&)GetImport(); }
+public:
+    ScXMLConditionContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
+                        const ::rtl::OUString& rLName,
+                        const ::com::sun::star::uno::Reference<
+                                        ::com::sun::star::xml::sax::XAttributeList>& xAttrList);
+
+    virtual ~ScXMLConditionContext() {}
+
+    virtual void EndElement();
+};
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/filter/xml/xmlexprt.cxx b/sc/source/filter/xml/xmlexprt.cxx
index 2379401..3aea14a 100644
--- a/sc/source/filter/xml/xmlexprt.cxx
+++ b/sc/source/filter/xml/xmlexprt.cxx
@@ -1169,7 +1169,7 @@ void ScXMLExport::WriteRowContent()
                 if (nCols > 1)
                 {
                     rtl::OUStringBuffer aBuf;
-            ::sax::Converter::convertNumber(aBuf, nCols);
+                    ::sax::Converter::convertNumber(aBuf, nCols);
                     AddAttribute(sAttrColumnsRepeated, aBuf.makeStringAndClear());
                 }
                 SvXMLElementExport aElemC(*this, sElemCell, true, true);
@@ -1193,7 +1193,7 @@ void ScXMLExport::WriteRowContent()
         if (nCols > 1)
         {
             rtl::OUStringBuffer aBuf;
-                    ::sax::Converter::convertNumber(aBuf, nCols);
+            ::sax::Converter::convertNumber(aBuf, nCols);
             AddAttribute(sAttrColumnsRepeated, aBuf.makeStringAndClear());
         }
         SvXMLElementExport aElemC(*this, sElemCell, true, true);
@@ -3865,9 +3865,9 @@ void ScXMLExport::ExportConditionalFormat(SCTAB nTab)
                     for(ScColorScaleFormat::const_iterator it = mrColorScale.begin();
                             it != mrColorScale.end(); ++it)
                     {
-                        if(it->GetFormula())
+                        if(it->HasFormula())
                         {
-                            rtl::OUString sFormula;
+                            rtl::OUString sFormula = it->GetFormula(formula::FormulaGrammar::GRAM_ODFF);
                             AddAttribute(XML_NAMESPACE_CALC_EXT, XML_VALUE, sFormula);
                         }
                         else
@@ -3891,9 +3891,9 @@ void ScXMLExport::ExportConditionalFormat(SCTAB nTab)
                     SvXMLElementExport aElementDataBar(*this, XML_NAMESPACE_CALC_EXT, XML_DATA_BAR, true, true);
 
                     {
-                        if(pFormatData->mpLowerLimit->GetFormula())
+                        if(pFormatData->mpLowerLimit->HasFormula())
                         {
-                            rtl::OUString sFormula;
+                            rtl::OUString sFormula = pFormatData->mpLowerLimit->GetFormula(formula::FormulaGrammar::GRAM_ODFF);
                             AddAttribute(XML_NAMESPACE_CALC_EXT, XML_VALUE, sFormula);
                         }
                         else
@@ -3903,9 +3903,9 @@ void ScXMLExport::ExportConditionalFormat(SCTAB nTab)
                     }
 
                     {
-                        if(pFormatData->mpUpperLimit->GetFormula())
+                        if(pFormatData->mpUpperLimit->HasFormula())
                         {
-                            rtl::OUString sFormula;
+                            rtl::OUString sFormula = pFormatData->mpUpperLimit->GetFormula(formula::FormulaGrammar::GRAM_ODFF);
                             AddAttribute(XML_NAMESPACE_CALC_EXT, XML_VALUE, sFormula);
                         }
                         else
diff --git a/sc/source/filter/xml/xmlimprt.cxx b/sc/source/filter/xml/xmlimprt.cxx
index 673b1f2..f689fcb 100644
--- a/sc/source/filter/xml/xmlimprt.cxx
+++ b/sc/source/filter/xml/xmlimprt.cxx
@@ -597,6 +597,141 @@ const SvXMLTokenMap& ScXMLImport::GetContentValidationErrorMacroAttrTokenMap()
     return *pContentValidationErrorMacroAttrTokenMap;
 }
 
+const SvXMLTokenMap& ScXMLImport::GetCondFormatsTokenMap()
+{
+    if( !pCondFormatsTokenMap )
+    {
+        static SvXMLTokenMapEntry aCondFormatsElemTokenMap[] =
+        {
+            { XML_NAMESPACE_CALC_EXT, XML_CONDITIONAL_FORMAT, XML_TOK_CONDFORMATS_CONDFORMAT },
+            XML_TOKEN_MAP_END
+        };
+
+        pCondFormatsTokenMap = new SvXMLTokenMap( aCondFormatsElemTokenMap );
+    }
+
+    return *pCondFormatsTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetCondFormatTokenMap()
+{
+    if( !pCondFormatTokenMap )
+    {
+        static SvXMLTokenMapEntry aCondFormatElemTokenMap[] =
+        {
+            { XML_NAMESPACE_CALC_EXT, XML_COLOR_SCALE, XML_TOK_CONDFORMAT_COLORSCALE },
+            { XML_NAMESPACE_CALC_EXT, XML_DATA_BAR, XML_TOK_CONDFORMAT_DATABAR },
+            XML_TOKEN_MAP_END
+        };
+
+        pCondFormatTokenMap = new SvXMLTokenMap( aCondFormatElemTokenMap );
+    }
+
+    return *pCondFormatTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetCondFormatAttrMap()
+{
+    if( !pCondFormatAttrMap )
+    {
+        static SvXMLTokenMapEntry aCondFormatAttrTokenMap[] =
+        {
+            { XML_NAMESPACE_CALC_EXT, XML_TARGET_RANGE_ADDRESS, XML_TOK_CONDFORMAT_TARGET_RANGE },
+            XML_TOKEN_MAP_END
+        };
+
+        pCondFormatAttrMap = new SvXMLTokenMap( aCondFormatAttrTokenMap );
+    }
+
+    return *pCondFormatAttrMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetColorScaleTokenMap()
+{
+    if( !pColorScaleTokenMap )
+    {
+        static SvXMLTokenMapEntry aColorScaleElemTokenMap[] =
+        {
+            { XML_NAMESPACE_CALC_EXT, XML_COLOR_SCALE_ENTRY, XML_TOK_COLORSCALE_COLORSCALEENTRY },
+            XML_TOKEN_MAP_END
+        };
+
+        pColorScaleTokenMap = new SvXMLTokenMap( aColorScaleElemTokenMap );
+    }
+
+    return *pColorScaleTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetColorScaleEntryAttrMap()
+{
+    if( !pColorScaleEntryAttrTokenMap )
+    {
+        static SvXMLTokenMapEntry aColorScaleAttrTokenMap[] =
+        {
+            { XML_NAMESPACE_CALC_EXT, XML_TYPE, XML_TOK_COLORSCALEENTRY_TYPE },
+            { XML_NAMESPACE_CALC_EXT, XML_VALUE, XML_TOK_COLORSCALEENTRY_VALUE },
+            { XML_NAMESPACE_CALC_EXT, XML_COLOR, XML_TOK_COLORSCALEENTRY_COLOR },
+            XML_TOKEN_MAP_END
+        };
+
+        pColorScaleEntryAttrTokenMap = new SvXMLTokenMap( aColorScaleAttrTokenMap );
+    }
+
+    return *pColorScaleEntryAttrTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetDataBarTokenMap()
+{
+    if( !pDataBarTokenMap )
+    {
+        static SvXMLTokenMapEntry aDataBarElemTokenMap[] =
+        {
+            { XML_NAMESPACE_CALC_EXT, XML_DATA_BAR_ENTRY, XML_TOK_DATABAR_DATABARENTRY },
+            XML_TOKEN_MAP_END
+        };
+
+        pDataBarTokenMap = new SvXMLTokenMap( aDataBarElemTokenMap );
+    }
+
+    return *pDataBarTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetDataBarAttrMap()
+{
+    if( !pDataBarAttrMap )
+    {
+        static SvXMLTokenMapEntry aDataBarAttrTokenMap[] =
+        {
+            { XML_NAMESPACE_CALC_EXT, XML_POSITIVE_COLOR, XML_TOK_DATABAR_POSITIVE_COLOR },
+            //{ XML_NAMESPACE_CALC_EXT, XML_NEGATIVE_COLOR, XML_TOK_DATABAR_NEGATIVE_COLOR },
+            { XML_NAMESPACE_CALC_EXT, XML_GRADIENT, XML_TOK_DATABAR_GRADIENT },
+            //{ XML_NAMESPACE_CALC_EXT, XML_AXIS_POSITION, XML_TOK_DATABAR_AXISPOSITION },
+            XML_TOKEN_MAP_END
+        };
+
+        pDataBarAttrMap = new SvXMLTokenMap( aDataBarAttrTokenMap );
+    }
+
+    return *pDataBarAttrMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetDataBarEntryAttrMap()
+{
+    if( !pDataBarEntryAttrMap )
+    {
+        static SvXMLTokenMapEntry aDataBarAttrEntryTokenMap[] =
+        {
+            { XML_NAMESPACE_CALC_EXT, XML_TYPE, XML_TOK_DATABARENTRY_TYPE },
+            { XML_NAMESPACE_CALC_EXT, XML_VALUE, XML_TOK_DATABARENTRY_VALUE },
+            XML_TOKEN_MAP_END
+        };
+
+        pDataBarEntryAttrMap = new SvXMLTokenMap( aDataBarAttrEntryTokenMap );
+    }
+
+    return *pDataBarEntryAttrMap;
+}
+
 const SvXMLTokenMap& ScXMLImport::GetLabelRangesElemTokenMap()
 {
     if( !pLabelRangesElemTokenMap )
@@ -653,6 +788,7 @@ const SvXMLTokenMap& ScXMLImport::GetTableElemTokenMap()
             { XML_NAMESPACE_OFFICE, XML_FORMS,                XML_TOK_TABLE_FORMS           },
             { XML_NAMESPACE_OFFICE, XML_EVENT_LISTENERS,      XML_TOK_TABLE_EVENT_LISTENERS },
             { XML_NAMESPACE_OFFICE_EXT, XML_EVENT_LISTENERS,  XML_TOK_TABLE_EVENT_LISTENERS_EXT },
+            { XML_NAMESPACE_CALC_EXT, XML_CONDITIONAL_FORMATS, XML_TOK_TABLE_CONDFORMATS },
             XML_TOKEN_MAP_END
         };
 
@@ -1716,6 +1852,14 @@ ScXMLImport::ScXMLImport(
     pContentValidationHelpMessageAttrTokenMap( 0 ),
     pContentValidationErrorMessageAttrTokenMap( 0 ),
     pContentValidationErrorMacroAttrTokenMap( 0 ),
+    pCondFormatsTokenMap( 0 ),
+    pCondFormatTokenMap( 0 ),
+    pCondFormatAttrMap( 0 ),
+    pColorScaleTokenMap( 0 ),
+    pColorScaleEntryAttrTokenMap( 0 ),
+    pDataBarTokenMap( 0 ),
+    pDataBarAttrMap( 0 ),
+    pDataBarEntryAttrMap( 0 ),
     pLabelRangesElemTokenMap( 0 ),
     pLabelRangeAttrTokenMap( 0 ),
     pTableElemTokenMap( 0 ),
@@ -1843,6 +1987,14 @@ ScXMLImport::~ScXMLImport() throw()
     delete pContentValidationHelpMessageAttrTokenMap;
     delete pContentValidationErrorMessageAttrTokenMap;
     delete pContentValidationErrorMacroAttrTokenMap;
+    delete pCondFormatsTokenMap;
+    delete pCondFormatTokenMap;
+    delete pCondFormatAttrMap;
+    delete pColorScaleTokenMap;
+    delete pColorScaleEntryAttrTokenMap;
+    delete pDataBarTokenMap;
+    delete pDataBarAttrMap;
+    delete pDataBarEntryAttrMap;
     delete pLabelRangesElemTokenMap;
     delete pLabelRangeAttrTokenMap;
     delete pTableElemTokenMap;
diff --git a/sc/source/filter/xml/xmlimprt.hxx b/sc/source/filter/xml/xmlimprt.hxx
index 8df2f77..9743c69 100644
--- a/sc/source/filter/xml/xmlimprt.hxx
+++ b/sc/source/filter/xml/xmlimprt.hxx
@@ -151,6 +151,53 @@ enum ScXMLContentValidationErrorMacroAttrTokens
     XML_TOK_ERROR_MACRO_ATTR_EXECUTE
 };
 
+enum ScXMLCondFormatsTokens
+{
+    XML_TOK_CONDFORMATS_CONDFORMAT
+};
+
+enum ScXMLCondFormatTokens
+{
+    XML_TOK_CONDFORMAT_COLORSCALE,
+    XML_TOK_CONDFORMAT_DATABAR
+};
+
+enum ScXMLCondFormatAttrTokens
+{
+    XML_TOK_CONDFORMAT_TARGET_RANGE
+};
+
+enum ScXMLColorScaleFormatTokens
+{
+    XML_TOK_COLORSCALE_COLORSCALEENTRY
+};
+
+enum ScXMLColorScaleEntryAttrTokens
+{
+    XML_TOK_COLORSCALEENTRY_TYPE,
+    XML_TOK_COLORSCALEENTRY_VALUE,
+    XML_TOK_COLORSCALEENTRY_COLOR
+};
+
+enum ScXMLDataBarFormatTokens
+{
+    XML_TOK_DATABAR_DATABARENTRY
+};
+
+enum ScXMLDataBarAttrTokens
+{
+    XML_TOK_DATABAR_POSITIVE_COLOR,
+    XML_TOK_DATABAR_NEGATIVE_COLOR,
+    XML_TOK_DATABAR_GRADIENT,
+    XML_TOK_DATABAR_AXISPOSITION
+};
+
+enum ScXMLDataBarEntryAttrTokens
+{
+    XML_TOK_DATABARENTRY_TYPE,
+    XML_TOK_DATABARENTRY_VALUE
+};
+
 enum ScXMLLabelRangesElemTokens
 {
     XML_TOK_LABEL_RANGE_ELEM
@@ -180,7 +227,8 @@ enum ScXMLTableTokens
     XML_TOK_TABLE_SHAPES,
     XML_TOK_TABLE_FORMS,
     XML_TOK_TABLE_EVENT_LISTENERS,
-    XML_TOK_TABLE_EVENT_LISTENERS_EXT
+    XML_TOK_TABLE_EVENT_LISTENERS_EXT,
+    XML_TOK_TABLE_CONDFORMATS
 };
 
 enum ScXMLTokenProtectionTokens
@@ -717,6 +765,14 @@ class ScXMLImport: public SvXMLImport
     SvXMLTokenMap           *pContentValidationHelpMessageAttrTokenMap;
     SvXMLTokenMap           *pContentValidationErrorMessageAttrTokenMap;
     SvXMLTokenMap           *pContentValidationErrorMacroAttrTokenMap;
+    SvXMLTokenMap           *pCondFormatsTokenMap;
+    SvXMLTokenMap           *pCondFormatTokenMap;
+    SvXMLTokenMap           *pCondFormatAttrMap;
+    SvXMLTokenMap           *pColorScaleTokenMap;
+    SvXMLTokenMap           *pColorScaleEntryAttrTokenMap;
+    SvXMLTokenMap           *pDataBarTokenMap;
+    SvXMLTokenMap           *pDataBarAttrMap;
+    SvXMLTokenMap           *pDataBarEntryAttrMap;
     SvXMLTokenMap           *pLabelRangesElemTokenMap;
     SvXMLTokenMap           *pLabelRangeAttrTokenMap;
     SvXMLTokenMap           *pTableElemTokenMap;
@@ -870,6 +926,14 @@ public:
     const SvXMLTokenMap& GetContentValidationHelpMessageAttrTokenMap();
     const SvXMLTokenMap& GetContentValidationErrorMessageAttrTokenMap();
     const SvXMLTokenMap& GetContentValidationErrorMacroAttrTokenMap();
+    const SvXMLTokenMap& GetCondFormatsTokenMap();
+    const SvXMLTokenMap& GetCondFormatTokenMap();
+    const SvXMLTokenMap& GetCondFormatAttrMap();
+    const SvXMLTokenMap& GetColorScaleTokenMap();
+    const SvXMLTokenMap& GetColorScaleEntryAttrMap();
+    const SvXMLTokenMap& GetDataBarTokenMap();
+    const SvXMLTokenMap& GetDataBarAttrMap();
+    const SvXMLTokenMap& GetDataBarEntryAttrMap();
     const SvXMLTokenMap& GetLabelRangesElemTokenMap();
     const SvXMLTokenMap& GetLabelRangeAttrTokenMap();
     const SvXMLTokenMap& GetTableElemTokenMap();
diff --git a/sc/source/filter/xml/xmltabi.cxx b/sc/source/filter/xml/xmltabi.cxx
index 7add17f..e973c90 100644
--- a/sc/source/filter/xml/xmltabi.cxx
+++ b/sc/source/filter/xml/xmltabi.cxx
@@ -48,6 +48,7 @@
 #include "rangeutl.hxx"
 #include "externalrefmgr.hxx"
 #include "sheetdata.hxx"
+#include "xmlcondformat.hxx"
 
 #include <xmloff/xmltkmap.hxx>
 #include <xmloff/nmspmap.hxx>
@@ -356,6 +357,9 @@ SvXMLImportContext *ScXMLTableContext::CreateChildContext( sal_uInt16 nPrefix,
             pContext = new XMLEventsImportContext( GetImport(), nPrefix, rLName, xSupplier );
         }
         break;
+    case XML_TOK_TABLE_CONDFORMATS:
+        pContext = new ScXMLConditionalFormatsContext( GetScImport(), nPrefix, rLName );
+        break;
     default:
         ;
     }
diff --git a/xmloff/source/core/xmlimp.cxx b/xmloff/source/core/xmlimp.cxx
index 1c50276..d2567a7 100644
--- a/xmloff/source/core/xmlimp.cxx
+++ b/xmloff/source/core/xmlimp.cxx
@@ -323,6 +323,8 @@ void SvXMLImport::_InitCtor()
         mpNamespaceMap->Add(
             OUString( RTL_CONSTASCII_USTRINGPARAM( sXML_np__css3text ) ),
             GetXMLToken(XML_N_CSS3TEXT), XML_NAMESPACE_CSS3TEXT );
+
+        mpNamespaceMap->Add( OUString("_calc_libo"), GetXMLToken(XML_N_CALC_EXT), XML_NAMESPACE_CALC_EXT);
     }
 
     msPackageProtocol = OUString( RTL_CONSTASCII_USTRINGPARAM( "vnd.sun.star.Package:" ) );


More information about the Libreoffice-commits mailing list