sc/qa/unit/ThemeImportExportTest.cxx | 10 +++++ sc/source/filter/xml/xmlstyle.cxx | 5 -- xmloff/Library_xo.mk | 1 xmloff/source/style/StylePropertiesContext.cxx | 45 +++++++++++++++++++++++++ xmloff/source/style/StylePropertiesContext.hxx | 31 +++++++++++++++++ xmloff/source/style/prhdlfac.cxx | 5 ++ xmloff/source/style/prstylei.cxx | 11 ++---- 7 files changed, 96 insertions(+), 12 deletions(-)
New commits: commit 5a3cb219f135e17fa4745811521c718b97f287c4 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Fri Jul 28 09:03:50 2023 +0200 Commit: Mike Kaganski <mike.kagan...@collabora.com> CommitDate: Mon Aug 28 12:39:51 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/+/156100 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> diff --git a/sc/qa/unit/ThemeImportExportTest.cxx b/sc/qa/unit/ThemeImportExportTest.cxx index 155370c32827..0e5b093b42ff 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 b1d95614242b..b2dd7ebc3c3c 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 588fefdbb17b..9746688d8c9b 100644 --- a/xmloff/Library_xo.mk +++ b/xmloff/Library_xo.mk @@ -232,6 +232,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..fff47913480e --- /dev/null +++ b/xmloff/source/style/StylePropertiesContext.cxx @@ -0,0 +1,45 @@ +/* -*- 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/xmlimppr.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 a0277bf8a752..47df5c09303b 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;