sc/qa/unit/ThemeImportExportTest.cxx           |   10 +++++
 sc/source/filter/xml/xmlstyle.cxx              |    5 --
 xmloff/Library_xo.mk                           |    1 
 xmloff/source/style/StylePropertiesContext.cxx |   44 +++++++++++++++++++++++++
 xmloff/source/style/StylePropertiesContext.hxx |   31 +++++++++++++++++
 xmloff/source/style/prhdlfac.cxx               |    5 ++
 xmloff/source/style/prstylei.cxx               |   11 ++----
 7 files changed, 95 insertions(+), 12 deletions(-)

New commits:
commit 0828e1fe9d999d1ccb0e755fac1553c5c4bc124f
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Fri Jul 28 09:03:50 2023 +0200
Commit:     Miklos Vajna <vmik...@collabora.com>
CommitDate: Thu Aug 3 16:43:48 2023 +0200

    xmloff: fix import of CharComplexColor - add StylePropertiesContext
    
    Import of CharComplexColor in Calc didn't work because the class
    XMLComplexColorContext wasn't used.
    
    This introduces a new class StylePropertiesContext, because the
    plain SvXMLPropertySetContext is not enough as we can't define to
    use XMLComplexColorContext when XML_CHAR_COMPLEX_COLOR is used on
    that class.
    
    Also adds a import/export test for CharComplexColor.
    
    Change-Id: I765ac71a801a5e9bcb105aaea73637df5e601b85
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/155008
    Tested-by: Tomaž Vajngerl <qui...@gmail.com>
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>
    (cherry picked from commit b543463f639ecee793484e8b419147d565a53d52)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/155176
    Tested-by: Jenkins
    Reviewed-by: Miklos Vajna <vmik...@collabora.com>

diff --git a/sc/qa/unit/ThemeImportExportTest.cxx 
b/sc/qa/unit/ThemeImportExportTest.cxx
index 9164d41668f1..09e4288b8a4f 100644
--- a/sc/qa/unit/ThemeImportExportTest.cxx
+++ b/sc/qa/unit/ThemeImportExportTest.cxx
@@ -213,6 +213,16 @@ CPPUNIT_TEST_FIXTURE(ThemeImportExportTest, 
testCellTextThemeColor)
     checkCellTextThemeColor(getScDoc());
 }
 
+CPPUNIT_TEST_FIXTURE(ThemeImportExportTest, testCellTextThemeColorODF)
+{
+    // Open the OOXML source
+    loadFromURL(u"xlsx/Test_ThemeColor_Text_Background_Border.xlsx");
+    // Save as ODF and load again - checks import / export cycle
+    saveAndReload("calc8");
+    // Check the values and show that the document is unchanged and all the 
data preserved
+    checkCellTextThemeColor(getScDoc());
+}
+
 void checkCellBorderThemeColor(ScDocument* pDoc)
 {
     // C1
diff --git a/sc/source/filter/xml/xmlstyle.cxx 
b/sc/source/filter/xml/xmlstyle.cxx
index bb38d305b9a3..9e5fb1598308 100644
--- a/sc/source/filter/xml/xmlstyle.cxx
+++ b/sc/source/filter/xml/xmlstyle.cxx
@@ -908,11 +908,6 @@ const XMLPropertyHandler* 
XMLScPropHdlFactory::GetPropertyHandler( sal_Int32 nTy
                 pHdl = new XmlScPropHdl_Vertical;
             }
             break;
-            case XML_TYPE_COMPLEX_COLOR:
-            {
-                pHdl = new XMLComplexColorHandler;
-            }
-            break;
         }
 
         if(pHdl)
diff --git a/xmloff/Library_xo.mk b/xmloff/Library_xo.mk
index 8e7f3208bfe9..2bad53c2130a 100644
--- a/xmloff/Library_xo.mk
+++ b/xmloff/Library_xo.mk
@@ -234,6 +234,7 @@ $(eval $(call gb_Library_add_exception_objects,xo,\
     xmloff/source/style/PagePropertySetContext \
     xmloff/source/style/SinglePropertySetInfoCache \
     xmloff/source/style/StyleMap \
+    xmloff/source/style/StylePropertiesContext \
     xmloff/source/style/TransGradientStyle \
     xmloff/source/style/WordWrapPropertyHdl \
     xmloff/source/style/XMLBackgroundImageContext \
diff --git a/xmloff/source/style/StylePropertiesContext.cxx 
b/xmloff/source/style/StylePropertiesContext.cxx
new file mode 100644
index 000000000000..1bda191485e6
--- /dev/null
+++ b/xmloff/source/style/StylePropertiesContext.cxx
@@ -0,0 +1,44 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include "StylePropertiesContext.hxx"
+
+#include <tools/debug.hxx>
+#include <xmloff/xmlnamespace.hxx>
+#include <xmloff/xmltypes.hxx>
+#include <xmloff/xmlimp.hxx>
+
+#include <xmloff/XMLComplexColorContext.hxx>
+
+using namespace xmloff::token;
+
+StylePropertiesContext::StylePropertiesContext(
+    SvXMLImport& rImport, sal_Int32 nElement,
+    const css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList, 
sal_uInt32 nFamily,
+    std::vector<XMLPropertyState>& rProps, const 
rtl::Reference<SvXMLImportPropertyMapper>& rMap)
+    : SvXMLPropertySetContext(rImport, nElement, xAttrList, nFamily, rProps, 
rMap)
+{
+}
+
+StylePropertiesContext::~StylePropertiesContext() {}
+
+css::uno::Reference<css::xml::sax::XFastContextHandler>
+StylePropertiesContext::createFastChildContext(
+    sal_Int32 nElement, const 
css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList,
+    std::vector<XMLPropertyState>& rProperties, const XMLPropertyState& 
rProperty)
+{
+    if (nElement == XML_ELEMENT(LO_EXT, XML_CHAR_COMPLEX_COLOR))
+    {
+        return new XMLComplexColorContext(GetImport(), nElement, xAttrList, 
rProperty, rProperties);
+    }
+    return SvXMLPropertySetContext::createFastChildContext(nElement, 
xAttrList, rProperties,
+                                                           rProperty);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/xmloff/source/style/StylePropertiesContext.hxx 
b/xmloff/source/style/StylePropertiesContext.hxx
new file mode 100644
index 000000000000..6fa3ef8703d9
--- /dev/null
+++ b/xmloff/source/style/StylePropertiesContext.hxx
@@ -0,0 +1,31 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#pragma once
+
+#include <xmloff/xmlprcon.hxx>
+
+class StylePropertiesContext : public SvXMLPropertySetContext
+{
+public:
+    StylePropertiesContext(SvXMLImport& rImport, sal_Int32 nElement,
+                           const 
css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList,
+                           sal_uInt32 nFamily, std::vector<XMLPropertyState>& 
rProps,
+                           const rtl::Reference<SvXMLImportPropertyMapper>& 
rMap);
+
+    virtual ~StylePropertiesContext() override;
+
+    using SvXMLPropertySetContext::createFastChildContext;
+
+    virtual css::uno::Reference<css::xml::sax::XFastContextHandler> 
createFastChildContext(
+        sal_Int32 nElement, const 
css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList,
+        std::vector<XMLPropertyState>& rProperties, const XMLPropertyState& 
rProperty) override;
+};
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/xmloff/source/style/prhdlfac.cxx b/xmloff/source/style/prhdlfac.cxx
index 5ff7172834e4..a3ab3290bef2 100644
--- a/xmloff/source/style/prhdlfac.cxx
+++ b/xmloff/source/style/prhdlfac.cxx
@@ -56,6 +56,7 @@
 #include <XMLRectangleMembersHandler.hxx>
 #include <XMLNumberWithAutoForVoidPropHdl.hxx>
 #include "DrawAspectHdl.hxx"
+#include <xmloff/XMLComplexColorHandler.hxx>
 
 #include <map>
 
@@ -474,7 +475,9 @@ std::unique_ptr<XMLPropertyHandler> 
XMLPropertyHandlerFactory::CreatePropertyHan
             pPropHdl.reset(new XMLNamedBoolPropertyHdl(GetXMLToken(XML_CLIP),
                                                        
GetXMLToken(XML_AUTO_CREATE_NEW_FRAME)));
             break;
-
+        case XML_TYPE_COMPLEX_COLOR:
+            pPropHdl.reset(new XMLComplexColorHandler);
+            break;
     }
 
     return pPropHdl;
diff --git a/xmloff/source/style/prstylei.cxx b/xmloff/source/style/prstylei.cxx
index c688a3a24b31..ec5f2d7d8d85 100644
--- a/xmloff/source/style/prstylei.cxx
+++ b/xmloff/source/style/prstylei.cxx
@@ -43,6 +43,7 @@
 #include <xmloff/xmlprmap.hxx>
 #include <comphelper/sequence.hxx>
 #include <com/sun/star/drawing/FillStyle.hpp>
+#include "StylePropertiesContext.hxx"
 
 using namespace ::com::sun::star;
 using namespace ::com::sun::star::uno;
@@ -208,12 +209,10 @@ css::uno::Reference< css::xml::sax::XFastContextHandler > 
XMLPropStyleContext::c
     {
         rtl::Reference < SvXMLImportPropertyMapper > xImpPrMap =
             mxStyles->GetImportPropertyMapper( GetFamily() );
-        if( xImpPrMap.is() )
-            return new SvXMLPropertySetContext( GetImport(), nElement,
-                                                    xAttrList,
-                                                    nFamily,
-                                                    maProperties,
-                                                    xImpPrMap );
+        if (xImpPrMap.is())
+        {
+            return new StylePropertiesContext(GetImport(), nElement, 
xAttrList, nFamily, maProperties, xImpPrMap);
+        }
     }
     XMLOFF_WARN_UNKNOWN_ELEMENT("xmloff", nElement);
     return nullptr;

Reply via email to