diff options
-rw-r--r-- | include/xmloff/xmltoken.hxx | 1 | ||||
-rw-r--r-- | sc/qa/unit/ThemeImportExportTest.cxx | 12 | ||||
-rw-r--r-- | sc/source/filter/xml/xmlstyle.cxx | 51 | ||||
-rw-r--r-- | sc/source/filter/xml/xmlstyli.cxx | 9 | ||||
-rw-r--r-- | schema/libreoffice/OpenDocument-v1.3+libreoffice-schema.rng | 17 | ||||
-rw-r--r-- | xmloff/source/core/xmltoken.cxx | 1 | ||||
-rw-r--r-- | xmloff/source/token/tokens.txt | 1 |
7 files changed, 80 insertions, 12 deletions
diff --git a/include/xmloff/xmltoken.hxx b/include/xmloff/xmltoken.hxx index 1afdf70498a5..3cc97405e511 100644 --- a/include/xmloff/xmltoken.hxx +++ b/include/xmloff/xmltoken.hxx @@ -311,6 +311,7 @@ namespace xmloff::token { XML_BACKFACE_CULLING, XML_BACKGROUND, XML_BACKGROUND_COLOR, + XML_BACKGROUND_COMPLEX_COLOR, XML_BACKGROUND_IMAGE, XML_BACKGROUND_NO_REPEAT, XML_BAR, diff --git a/sc/qa/unit/ThemeImportExportTest.cxx b/sc/qa/unit/ThemeImportExportTest.cxx index b7dcce552d4d..9164d41668f1 100644 --- a/sc/qa/unit/ThemeImportExportTest.cxx +++ b/sc/qa/unit/ThemeImportExportTest.cxx @@ -134,7 +134,7 @@ void checkCellBackgroundThemeColor(ScDocument* pDoc) } } -CPPUNIT_TEST_FIXTURE(ThemeImportExportTest, testCellBackgroundThemeColor) +CPPUNIT_TEST_FIXTURE(ThemeImportExportTest, testCellBackgroundThemeColorOOXML) { loadFromURL(u"xlsx/Test_ThemeColor_Text_Background_Border.xlsx"); checkCellBackgroundThemeColor(getScDoc()); @@ -142,6 +142,16 @@ CPPUNIT_TEST_FIXTURE(ThemeImportExportTest, testCellBackgroundThemeColor) checkCellBackgroundThemeColor(getScDoc()); } +CPPUNIT_TEST_FIXTURE(ThemeImportExportTest, testCellBackgroundThemeColorODF) +{ + // 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 + checkCellBackgroundThemeColor(getScDoc()); +} + void checkCellTextThemeColor(ScDocument* pDoc) { // B1 diff --git a/sc/source/filter/xml/xmlstyle.cxx b/sc/source/filter/xml/xmlstyle.cxx index f434432c7671..bb38d305b9a3 100644 --- a/sc/source/filter/xml/xmlstyle.cxx +++ b/sc/source/filter/xml/xmlstyle.cxx @@ -29,6 +29,10 @@ #include <xmloff/families.hxx> #include <xmloff/contextid.hxx> #include <xmloff/txtprmap.hxx> +#include <xmloff/XMLComplexColorHandler.hxx> +#include <xmloff/XMLComplexColorExport.hxx> +#include <docmodel/color/ComplexColor.hxx> +#include <docmodel/uno/UnoComplexColor.hxx> #include <sax/tools/converter.hxx> #include <com/sun/star/util/CellProtection.hpp> #include <com/sun/star/table/CellOrientation.hpp> @@ -36,6 +40,7 @@ #include <com/sun/star/table/CellHoriJustify.hpp> #include <com/sun/star/table/CellJustifyMethod.hpp> #include <com/sun/star/table/BorderLine2.hpp> +#include <com/sun/star/util/XComplexColor.hpp> #include <com/sun/star/sheet/XSheetConditionalEntry.hpp> #include <com/sun/star/sheet/XSheetCondition.hpp> #include <com/sun/star/beans/XPropertySet.hpp> @@ -63,6 +68,7 @@ const XMLPropertyMapEntry aXMLScCellStylesProperties[] = MAP( SC_UNONAME_BOTTBORDER, XML_NAMESPACE_FO, XML_BORDER_BOTTOM, XML_TYPE_PROP_TABLE_CELL|XML_TYPE_BORDER, CTF_SC_BOTTOMBORDER ), MAP( SC_UNONAME_BOTTBORDER, XML_NAMESPACE_STYLE, XML_BORDER_LINE_WIDTH_BOTTOM, XML_TYPE_PROP_TABLE_CELL|XML_TYPE_BORDER_WIDTH, CTF_SC_BOTTOMBORDERWIDTH ), MAP( SC_UNONAME_CELLBACK, XML_NAMESPACE_FO, XML_BACKGROUND_COLOR, XML_TYPE_PROP_TABLE_CELL|XML_TYPE_COLORTRANSPARENT|MID_FLAG_MULTI_PROPERTY|MID_FLAG_MERGE_ATTRIBUTE, 0 ), + MAP_EXT( SC_UNONAME_CELL_BACKGROUND_COMPLEX_COLOR, XML_NAMESPACE_LO_EXT, XML_BACKGROUND_COMPLEX_COLOR, XML_TYPE_PROP_TABLE_CELL|XML_TYPE_COMPLEX_COLOR|MID_FLAG_ELEMENT_ITEM, CTF_COMPLEX_COLOR), MAP( SC_UNONAME_CELLPRO, XML_NAMESPACE_STYLE, XML_CELL_PROTECT, XML_TYPE_PROP_TABLE_CELL|XML_SC_TYPE_CELLPROTECTION|MID_FLAG_MERGE_PROPERTY, 0 ), MAP( SC_UNONAME_CELLPRO, XML_NAMESPACE_STYLE, XML_PRINT_CONTENT, XML_TYPE_PROP_TABLE_CELL|XML_SC_TYPE_PRINTCONTENT|MID_FLAG_MERGE_PROPERTY, 0 ), MAP( SC_UNONAME_CELLSTYL, XML_NAMESPACE_STYLE, XML_STYLE, XML_TYPE_PROP_TABLE_CELL|XML_TYPE_STRING, CTF_SC_CELLSTYLE ), @@ -130,6 +136,7 @@ const XMLPropertyMapEntry aXMLScRowStylesImportProperties[] = MAP( SC_UNONAME_CELLBACK, XML_NAMESPACE_FO, XML_BACKGROUND_COLOR, XML_TYPE_PROP_TABLE_ROW|XML_TYPE_COLORTRANSPARENT|MID_FLAG_MULTI_PROPERTY|MID_FLAG_MERGE_ATTRIBUTE, 0 ), MAP( SC_UNONAME_CELLHGT, XML_NAMESPACE_STYLE, XML_ROW_HEIGHT, XML_TYPE_PROP_TABLE_ROW|XML_TYPE_MEASURE, CTF_SC_ROWHEIGHT), MAP( SC_UNONAME_CELLTRAN, XML_NAMESPACE_FO, XML_BACKGROUND_COLOR, XML_TYPE_PROP_TABLE_ROW|XML_TYPE_ISTRANSPARENT|MID_FLAG_MULTI_PROPERTY|MID_FLAG_MERGE_ATTRIBUTE, 0 ), + MAP_EXT( SC_UNONAME_CELL_BACKGROUND_COMPLEX_COLOR, XML_NAMESPACE_LO_EXT, XML_BACKGROUND_COMPLEX_COLOR, XML_TYPE_PROP_TABLE_ROW|XML_TYPE_COMPLEX_COLOR, CTF_COMPLEX_COLOR ), MAP( SC_UNONAME_MANPAGE, XML_NAMESPACE_FO, XML_BREAK_BEFORE, XML_TYPE_PROP_TABLE_ROW|XML_SC_TYPE_BREAKBEFORE, CTF_SC_ROWBREAKBEFORE), MAP( SC_UNONAME_OHEIGHT, XML_NAMESPACE_STYLE, XML_USE_OPTIMAL_ROW_HEIGHT, XML_TYPE_PROP_TABLE_ROW|XML_TYPE_BOOL, CTF_SC_ROWOPTIMALHEIGHT), MAP_END() @@ -160,6 +167,7 @@ const XMLPropertyMapEntry aXMLScTableStylesImportProperties[] = MAP( SC_UNONAME_CELLBACK, XML_NAMESPACE_FO, XML_BACKGROUND_COLOR, XML_TYPE_PROP_TABLE|XML_TYPE_COLORTRANSPARENT|MID_FLAG_MULTI_PROPERTY|MID_FLAG_MERGE_ATTRIBUTE, 0 ), MAP( SC_UNONAME_CELLTRAN, XML_NAMESPACE_FO, XML_BACKGROUND_COLOR, XML_TYPE_PROP_TABLE|XML_TYPE_ISTRANSPARENT|MID_FLAG_MULTI_PROPERTY|MID_FLAG_MERGE_ATTRIBUTE, 0 ), + MAP_EXT( SC_UNONAME_CELL_BACKGROUND_COMPLEX_COLOR, XML_NAMESPACE_LO_EXT, XML_BACKGROUND_COMPLEX_COLOR, XML_TYPE_PROP_TABLE|XML_TYPE_COMPLEX_COLOR, CTF_COMPLEX_COLOR ), MAP( SC_UNONAME_CELLVIS, XML_NAMESPACE_TABLE, XML_DISPLAY, XML_TYPE_PROP_TABLE|XML_TYPE_BOOL, 0 ), MAP( SC_UNONAME_PAGESTL, XML_NAMESPACE_STYLE, XML_MASTER_PAGE_NAME, XML_TYPE_PROP_TABLE|XML_TYPE_STRING|MID_FLAG_SPECIAL_ITEM, CTF_SC_MASTERPAGENAME ), MAP( SC_UNONAME_TABLAYOUT, XML_NAMESPACE_STYLE, XML_WRITING_MODE, XML_TYPE_PROP_TABLE|XML_TYPE_TEXT_WRITING_MODE, 0 ), @@ -522,6 +530,7 @@ void ScXMLCellExportPropertyMapper::handleSpecialItem( // the SpecialItem ConditionlaFormat must not be handled by this method // the SpecialItem CharBackColor must not be handled by this method } + void ScXMLCellExportPropertyMapper::handleElementItem( SvXMLExport& rExport, const XMLPropertyState& rProperty, @@ -530,18 +539,33 @@ void ScXMLCellExportPropertyMapper::handleElementItem( sal_uInt32 /* nIdx */) const { sal_uInt32 nContextId = getPropertySetMapper()->GetEntryContextId( rProperty.mnIndex ); - OUString sURL; - if ( ( nContextId == CTF_SC_HYPERLINK ) && - ( rProperty.maValue >>= sURL ) && - !sURL.isEmpty() ) + switch (nContextId) { - rExport.AddAttribute( XML_NAMESPACE_XLINK, XML_HREF, sURL ); - rExport.AddAttribute( XML_NAMESPACE_XLINK, XML_TYPE, - XML_SIMPLE ); - sal_uInt32 nPropIndex = rProperty.mnIndex; - sal_uInt16 nPrefix = getPropertySetMapper()->GetEntryNameSpace( nPropIndex ); - OUString sLocalName = getPropertySetMapper()->GetEntryXMLName( nPropIndex ); - SvXMLElementExport aElem( rExport, nPrefix, sLocalName, true, true ); + case CTF_SC_HYPERLINK: + { + OUString sURL; + if ((rProperty.maValue >>= sURL) && !sURL.isEmpty()) + { + rExport.AddAttribute( XML_NAMESPACE_XLINK, XML_HREF, sURL ); + rExport.AddAttribute( XML_NAMESPACE_XLINK, XML_TYPE, + XML_SIMPLE ); + sal_uInt32 nPropIndex = rProperty.mnIndex; + sal_uInt16 nPrefix = getPropertySetMapper()->GetEntryNameSpace( nPropIndex ); + OUString sLocalName = getPropertySetMapper()->GetEntryXMLName( nPropIndex ); + SvXMLElementExport aElem( rExport, nPrefix, sLocalName, true, true ); + } + } + break; + case CTF_COMPLEX_COLOR: + { + XMLComplexColorExport aExport(rExport); + aExport.exportXML(rProperty.maValue, + getPropertySetMapper()->GetEntryNameSpace(rProperty.mnIndex), + getPropertySetMapper()->GetEntryXMLName(rProperty.mnIndex)); + } + break; + default: + break; } } @@ -884,6 +908,11 @@ 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/sc/source/filter/xml/xmlstyli.cxx b/sc/source/filter/xml/xmlstyli.cxx index e15840ed3fe5..84812db9d6ac 100644 --- a/sc/source/filter/xml/xmlstyli.cxx +++ b/sc/source/filter/xml/xmlstyli.cxx @@ -28,6 +28,7 @@ #include <com/sun/star/table/BorderLine2.hpp> #include <comphelper/extract.hxx> #include <xmloff/xmlprcon.hxx> +#include <xmloff/XMLComplexColorContext.hxx> #include "XMLTableHeaderFooterContext.hxx" #include "XMLConverter.hxx" #include "XMLTableShapeImportHelper.hxx" @@ -43,6 +44,10 @@ #include <conditio.hxx> #include <rangelst.hxx> +#include <xmloff/xmltypes.hxx> +#include <xmloff/contextid.hxx> +#include <xmloff/txtprmap.hxx> + #define XML_LINE_LEFT 0 #define XML_LINE_RIGHT 1 #define XML_LINE_TOP 2 @@ -319,6 +324,10 @@ css::uno::Reference< css::xml::sax::XFastContextHandler > XMLTableCellPropsConte rProperties.push_back( aProp ); } } + else if (nElement == XML_ELEMENT(LO_EXT, XML_BACKGROUND_COMPLEX_COLOR)) + { + return new XMLComplexColorContext(GetImport(), nElement, xAttrList, rProp, rProperties); + } return SvXMLPropertySetContext::createFastChildContext( nElement, xAttrList, rProperties, rProp ); } diff --git a/schema/libreoffice/OpenDocument-v1.3+libreoffice-schema.rng b/schema/libreoffice/OpenDocument-v1.3+libreoffice-schema.rng index e927ebb89c01..c7e70f111342 100644 --- a/schema/libreoffice/OpenDocument-v1.3+libreoffice-schema.rng +++ b/schema/libreoffice/OpenDocument-v1.3+libreoffice-schema.rng @@ -3564,6 +3564,23 @@ xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1. </rng:optional> </rng:define> + <!-- TODO no proposal - Document Themes --> + <rng:define name="loext-background-complex-color"> + <rng:element name="loext:background-complex-color"> + <rng:ref name="loext-complex-color-attlist"/> + <rng:zeroOrMore> + <rng:ref name="loext-transformation"/> + </rng:zeroOrMore> + </rng:element> + </rng:define> + + <!-- TODO no proposal - Document Themes--> + <rng:define name="style-table-cell-properties-elements" combine="interleave"> + <rng:optional> + <rng:ref name="loext-background-complex-color"/> + </rng:optional> + </rng:define> + <rng:define name="draw-frame-attlist" combine="interleave"> <!-- TODO(vmiklos) no proposal for multi-page floating tables --> <rng:optional> diff --git a/xmloff/source/core/xmltoken.cxx b/xmloff/source/core/xmltoken.cxx index a5f3b976560b..ecefb14f20f1 100644 --- a/xmloff/source/core/xmltoken.cxx +++ b/xmloff/source/core/xmltoken.cxx @@ -323,6 +323,7 @@ namespace xmloff::token { TOKEN( "backface-culling", XML_BACKFACE_CULLING ), TOKEN( "background", XML_BACKGROUND ), TOKEN( "background-color", XML_BACKGROUND_COLOR ), + TOKEN( "background-complex-color", XML_BACKGROUND_COMPLEX_COLOR ), TOKEN( "background-image", XML_BACKGROUND_IMAGE ), TOKEN( "no-repeat", XML_BACKGROUND_NO_REPEAT ), TOKEN( "bar", XML_BAR ), diff --git a/xmloff/source/token/tokens.txt b/xmloff/source/token/tokens.txt index 96e88f2ee0c4..1ab7518cd0d2 100644 --- a/xmloff/source/token/tokens.txt +++ b/xmloff/source/token/tokens.txt @@ -228,6 +228,7 @@ back-scale backface-culling background background-color +background-complex-color background-image no-repeat bar |