summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/xmloff/xmltoken.hxx1
-rw-r--r--sc/qa/unit/ThemeImportExportTest.cxx12
-rw-r--r--sc/source/filter/xml/xmlstyle.cxx51
-rw-r--r--sc/source/filter/xml/xmlstyli.cxx9
-rw-r--r--schema/libreoffice/OpenDocument-v1.3+libreoffice-schema.rng17
-rw-r--r--xmloff/source/core/xmltoken.cxx1
-rw-r--r--xmloff/source/token/tokens.txt1
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