summaryrefslogtreecommitdiff
path: root/sc/source/filter/xml
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2023-07-30 08:52:44 +0200
committerTomaž Vajngerl <quikee@gmail.com>2023-08-02 21:22:43 +0200
commitc8d8bf4282cbd04abacfa69ba2cc0fa4300e35e1 (patch)
tree270fcf114ac38a4d1b374b6837fa4cc6c9c5d649 /sc/source/filter/xml
parent2d96d69322ac18f53668b75397c8587f94cd043b (diff)
sc: theme color support for sparklines + ODF & OOXML import/export
This changes Sparkline colors to use complex colors instead and adds Sparkline theme color import and export support for ODF and OOXML. Change-Id: I58edd525d50f95199bd4fe7825afb51aaa7fc091 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/155113 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Diffstat (limited to 'sc/source/filter/xml')
-rw-r--r--sc/source/filter/xml/SparklineGroupsExport.cxx32
-rw-r--r--sc/source/filter/xml/SparklineGroupsExport.hxx9
-rw-r--r--sc/source/filter/xml/SparklineGroupsImportContext.cxx126
-rw-r--r--sc/source/filter/xml/SparklineGroupsImportContext.hxx19
-rw-r--r--sc/source/filter/xml/xmlstyli.cxx2
5 files changed, 153 insertions, 35 deletions
diff --git a/sc/source/filter/xml/SparklineGroupsExport.cxx b/sc/source/filter/xml/SparklineGroupsExport.cxx
index 077d43beab60..fd577e5c6c10 100644
--- a/sc/source/filter/xml/SparklineGroupsExport.cxx
+++ b/sc/source/filter/xml/SparklineGroupsExport.cxx
@@ -21,6 +21,7 @@
#include <rtl/ustrbuf.hxx>
#include <sax/tools/converter.hxx>
#include <o3tl/unit_conversion.hxx>
+#include <xmloff/XMLComplexColorExport.hxx>
using namespace css;
using namespace xmloff::token;
@@ -33,14 +34,24 @@ SparklineGroupsExport::SparklineGroupsExport(ScXMLExport& rExport, SCTAB nTable)
{
}
-void SparklineGroupsExport::insertColor(Color aColor, XMLTokenEnum eToken)
+void SparklineGroupsExport::insertColor(model::ComplexColor const& rComplexColor,
+ XMLTokenEnum eToken)
{
+ if (rComplexColor.getType() == model::ColorType::Unused)
+ return;
+
OUStringBuffer aStringBuffer;
- if (aColor != COL_TRANSPARENT)
- {
- sax::Converter::convertColor(aStringBuffer, aColor);
- m_rExport.AddAttribute(XML_NAMESPACE_CALC_EXT, eToken, aStringBuffer.makeStringAndClear());
- }
+ sax::Converter::convertColor(aStringBuffer, rComplexColor.getFinalColor());
+ m_rExport.AddAttribute(XML_NAMESPACE_CALC_EXT, eToken, aStringBuffer.makeStringAndClear());
+}
+
+void SparklineGroupsExport::insertComplexColor(model::ComplexColor const& rComplexColor,
+ XMLTokenEnum eToken)
+{
+ if (!rComplexColor.isValidSchemeType())
+ return;
+ XMLComplexColorExport aComplexColorExport(m_rExport);
+ aComplexColorExport.exportComplexColor(rComplexColor, XML_NAMESPACE_CALC_EXT, eToken);
}
void SparklineGroupsExport::insertBool(bool bValue, XMLTokenEnum eToken)
@@ -182,6 +193,15 @@ void SparklineGroupsExport::addSparklineGroup(
SvXMLElementExport aElementSparklineGroup(m_rExport, XML_NAMESPACE_CALC_EXT,
XML_SPARKLINE_GROUP, true, true);
+ insertComplexColor(rAttributes.getColorSeries(), XML_SPARKLINE_SERIES_COMPLEX_COLOR);
+ insertComplexColor(rAttributes.getColorNegative(), XML_SPARKLINE_NEGATIVE_COMPLEX_COLOR);
+ insertComplexColor(rAttributes.getColorAxis(), XML_SPARKLINE_AXIS_COMPLEX_COLOR);
+ insertComplexColor(rAttributes.getColorMarkers(), XML_SPARKLINE_MARKERS_COMPLEX_COLOR);
+ insertComplexColor(rAttributes.getColorFirst(), XML_SPARKLINE_FIRST_COMPLEX_COLOR);
+ insertComplexColor(rAttributes.getColorLast(), XML_SPARKLINE_LAST_COMPLEX_COLOR);
+ insertComplexColor(rAttributes.getColorHigh(), XML_SPARKLINE_HIGH_COMPLEX_COLOR);
+ insertComplexColor(rAttributes.getColorLow(), XML_SPARKLINE_LOW_COMPLEX_COLOR);
+
SvXMLElementExport aElementSparklines(m_rExport, XML_NAMESPACE_CALC_EXT, XML_SPARKLINES, true,
true);
diff --git a/sc/source/filter/xml/SparklineGroupsExport.hxx b/sc/source/filter/xml/SparklineGroupsExport.hxx
index 9359413735dc..a2ed4a8ef853 100644
--- a/sc/source/filter/xml/SparklineGroupsExport.hxx
+++ b/sc/source/filter/xml/SparklineGroupsExport.hxx
@@ -19,6 +19,10 @@
#include <SparklineGroup.hxx>
class ScXMLExport;
+namespace model
+{
+class ComplexColor;
+}
namespace sc
{
@@ -33,7 +37,10 @@ class SparklineGroupsExport
std::vector<std::shared_ptr<Sparkline>> const& rSparklines);
void addSparklineAttributes(Sparkline const& rSparkline);
- void insertColor(Color aColor, xmloff::token::XMLTokenEnum eToken);
+ void insertColor(model::ComplexColor const& rComplexColor, xmloff::token::XMLTokenEnum eToken);
+ void insertComplexColor(model::ComplexColor const& rComplexColor,
+ xmloff::token::XMLTokenEnum eToken);
+
void insertBool(bool bValue, xmloff::token::XMLTokenEnum eToken);
public:
diff --git a/sc/source/filter/xml/SparklineGroupsImportContext.cxx b/sc/source/filter/xml/SparklineGroupsImportContext.cxx
index b1164e3ef993..59c24cdd45a4 100644
--- a/sc/source/filter/xml/SparklineGroupsImportContext.cxx
+++ b/sc/source/filter/xml/SparklineGroupsImportContext.cxx
@@ -13,6 +13,7 @@
#include <xmloff/xmlnamespace.hxx>
#include <xmloff/xmltoken.hxx>
#include <xmloff/xmluconv.hxx>
+#include <xmloff/XMLComplexColorContext.hxx>
#include <document.hxx>
#include <rangeutl.hxx>
@@ -181,58 +182,50 @@ void SparklineGroupsImportContext::fillSparklineGroupAttributes(
}
case XML_ELEMENT(CALC_EXT, XML_COLOR_SERIES):
{
- Color aColor;
- sax::Converter::convertColor(aColor, rIter.toView());
- rAttributes.setColorSeries(aColor);
+ maSeriesColor = COL_TRANSPARENT;
+ sax::Converter::convertColor(maSeriesColor, rIter.toView());
break;
}
case XML_ELEMENT(CALC_EXT, XML_COLOR_NEGATIVE):
{
- Color aColor;
- sax::Converter::convertColor(aColor, rIter.toView());
- rAttributes.setColorNegative(aColor);
+ maNegativeColor = COL_TRANSPARENT;
+ sax::Converter::convertColor(maNegativeColor, rIter.toView());
break;
}
case XML_ELEMENT(CALC_EXT, XML_COLOR_AXIS):
{
- Color aColor;
- sax::Converter::convertColor(aColor, rIter.toView());
- rAttributes.setColorAxis(aColor);
+ maAxisColor = COL_TRANSPARENT;
+ sax::Converter::convertColor(maAxisColor, rIter.toView());
break;
}
case XML_ELEMENT(CALC_EXT, XML_COLOR_MARKERS):
{
- Color aColor;
- sax::Converter::convertColor(aColor, rIter.toView());
- rAttributes.setColorMarkers(aColor);
+ maMarkersColor = COL_TRANSPARENT;
+ sax::Converter::convertColor(maMarkersColor, rIter.toView());
break;
}
case XML_ELEMENT(CALC_EXT, XML_COLOR_FIRST):
{
- Color aColor;
- sax::Converter::convertColor(aColor, rIter.toView());
- rAttributes.setColorFirst(aColor);
+ maFirstColor = COL_TRANSPARENT;
+ sax::Converter::convertColor(maFirstColor, rIter.toView());
break;
}
case XML_ELEMENT(CALC_EXT, XML_COLOR_LAST):
{
- Color aColor;
- sax::Converter::convertColor(aColor, rIter.toView());
- rAttributes.setColorLast(aColor);
+ maLastColor = COL_TRANSPARENT;
+ sax::Converter::convertColor(maLastColor, rIter.toView());
break;
}
case XML_ELEMENT(CALC_EXT, XML_COLOR_HIGH):
{
- Color aColor;
- sax::Converter::convertColor(aColor, rIter.toView());
- rAttributes.setColorHigh(aColor);
+ maHighColor = COL_TRANSPARENT;
+ sax::Converter::convertColor(maHighColor, rIter.toView());
break;
}
case XML_ELEMENT(CALC_EXT, XML_COLOR_LOW):
{
- Color aColor;
- sax::Converter::convertColor(aColor, rIter.toView());
- rAttributes.setColorLow(aColor);
+ maLowColor = COL_TRANSPARENT;
+ sax::Converter::convertColor(maLowColor, rIter.toView());
break;
}
default:
@@ -281,23 +274,72 @@ uno::Reference<xml::sax::XFastContextHandler>
case XML_ELEMENT(CALC_EXT, XML_SPARKLINE_GROUP):
{
m_pCurrentSparklineGroup = std::make_shared<sc::SparklineGroup>();
+ maAxisComplexColor = model::ComplexColor();
+ maFirstComplexColor = model::ComplexColor();
+ maLastComplexColor = model::ComplexColor();
+ maHighComplexColor = model::ComplexColor();
+ maLowComplexColor = model::ComplexColor();
+ maSeriesComplexColor = model::ComplexColor();
+ maNegativeComplexColor = model::ComplexColor();
+ maMarkersComplexColor = model::ComplexColor();
+
fillSparklineGroupID(xAttrList);
fillSparklineGroupAttributes(xAttrList);
pContext = this;
- break;
}
+ break;
case XML_ELEMENT(CALC_EXT, XML_SPARKLINES):
{
pContext = this;
- break;
}
+ break;
case XML_ELEMENT(CALC_EXT, XML_SPARKLINE):
{
SparklineImportData& rImportData = m_aCurrentSparklineDataList.emplace_back();
fillSparklineAttributes(rImportData, xAttrList);
pContext = this;
- break;
}
+ break;
+ case XML_ELEMENT(CALC_EXT, XML_SPARKLINE_AXIS_COMPLEX_COLOR):
+ {
+ pContext = new XMLComplexColorContext(GetImport(), maAxisComplexColor, xAttrList);
+ }
+ break;
+ case XML_ELEMENT(CALC_EXT, XML_SPARKLINE_FIRST_COMPLEX_COLOR):
+ {
+ pContext = new XMLComplexColorContext(GetImport(), maFirstComplexColor, xAttrList);
+ }
+ break;
+ case XML_ELEMENT(CALC_EXT, XML_SPARKLINE_LAST_COMPLEX_COLOR):
+ {
+ pContext = new XMLComplexColorContext(GetImport(), maLastComplexColor, xAttrList);
+ }
+ break;
+ case XML_ELEMENT(CALC_EXT, XML_SPARKLINE_HIGH_COMPLEX_COLOR):
+ {
+ pContext = new XMLComplexColorContext(GetImport(), maHighComplexColor, xAttrList);
+ }
+ break;
+ case XML_ELEMENT(CALC_EXT, XML_SPARKLINE_LOW_COMPLEX_COLOR):
+ {
+ pContext = new XMLComplexColorContext(GetImport(), maLowComplexColor, xAttrList);
+ }
+ break;
+ case XML_ELEMENT(CALC_EXT, XML_SPARKLINE_SERIES_COMPLEX_COLOR):
+ {
+ pContext = new XMLComplexColorContext(GetImport(), maSeriesComplexColor, xAttrList);
+ }
+ break;
+ case XML_ELEMENT(CALC_EXT, XML_SPARKLINE_NEGATIVE_COMPLEX_COLOR):
+ {
+ pContext = new XMLComplexColorContext(GetImport(), maNegativeComplexColor, xAttrList);
+ }
+ break;
+ case XML_ELEMENT(CALC_EXT, XML_SPARKLINE_MARKERS_COMPLEX_COLOR):
+ {
+ pContext = new XMLComplexColorContext(GetImport(), maMarkersComplexColor, xAttrList);
+ }
+ break;
}
return pContext;
@@ -314,12 +356,42 @@ void SparklineGroupsImportContext::insertSparklines()
}
}
+namespace
+{
+model::ComplexColor combineComplexColorAndColor(model::ComplexColor& rComplexColor, Color aColor)
+{
+ if (rComplexColor.getType() != model::ColorType::Unused)
+ rComplexColor.setFinalColor(aColor);
+ else if (aColor != COL_TRANSPARENT)
+ rComplexColor = model::ComplexColor::RGB(aColor);
+ return rComplexColor;
+}
+} // end anonymous namespace
+
void SAL_CALL SparklineGroupsImportContext::endFastElement(sal_Int32 nElement)
{
switch (nElement)
{
case XML_ELEMENT(CALC_EXT, XML_SPARKLINE_GROUP):
{
+ sc::SparklineAttributes& rAttributes = m_pCurrentSparklineGroup->getAttributes();
+ {
+ rAttributes.setColorAxis(
+ combineComplexColorAndColor(maAxisComplexColor, maAxisColor));
+ rAttributes.setColorFirst(
+ combineComplexColorAndColor(maFirstComplexColor, maFirstColor));
+ rAttributes.setColorLast(
+ combineComplexColorAndColor(maLastComplexColor, maLastColor));
+ rAttributes.setColorHigh(
+ combineComplexColorAndColor(maHighComplexColor, maHighColor));
+ rAttributes.setColorLow(combineComplexColorAndColor(maLowComplexColor, maLowColor));
+ rAttributes.setColorSeries(
+ combineComplexColorAndColor(maSeriesComplexColor, maSeriesColor));
+ rAttributes.setColorNegative(
+ combineComplexColorAndColor(maNegativeComplexColor, maNegativeColor));
+ rAttributes.setColorMarkers(
+ combineComplexColorAndColor(maMarkersComplexColor, maMarkersColor));
+ }
insertSparklines();
m_pCurrentSparklineGroup.reset();
m_aCurrentSparklineDataList.clear();
diff --git a/sc/source/filter/xml/SparklineGroupsImportContext.hxx b/sc/source/filter/xml/SparklineGroupsImportContext.hxx
index b8161c96506d..197eca9ca09a 100644
--- a/sc/source/filter/xml/SparklineGroupsImportContext.hxx
+++ b/sc/source/filter/xml/SparklineGroupsImportContext.hxx
@@ -14,6 +14,7 @@
#include "xmlimprt.hxx"
#include <address.hxx>
#include <rangelst.hxx>
+#include <docmodel/color/ComplexColor.hxx>
namespace sax_fastparser
{
@@ -38,6 +39,24 @@ private:
std::shared_ptr<sc::SparklineGroup> m_pCurrentSparklineGroup;
std::vector<SparklineImportData> m_aCurrentSparklineDataList;
+ model::ComplexColor maAxisComplexColor;
+ model::ComplexColor maFirstComplexColor;
+ model::ComplexColor maLastComplexColor;
+ model::ComplexColor maHighComplexColor;
+ model::ComplexColor maLowComplexColor;
+ model::ComplexColor maSeriesComplexColor;
+ model::ComplexColor maNegativeComplexColor;
+ model::ComplexColor maMarkersComplexColor;
+
+ Color maAxisColor = COL_TRANSPARENT;
+ Color maFirstColor = COL_TRANSPARENT;
+ Color maLastColor = COL_TRANSPARENT;
+ Color maHighColor = COL_TRANSPARENT;
+ Color maLowColor = COL_TRANSPARENT;
+ Color maSeriesColor = COL_TRANSPARENT;
+ Color maNegativeColor = COL_TRANSPARENT;
+ Color maMarkersColor = COL_TRANSPARENT;
+
void
fillSparklineGroupID(css::uno::Reference<css::xml::sax::XFastAttributeList> const& xAttrList);
void fillSparklineGroupAttributes(
diff --git a/sc/source/filter/xml/xmlstyli.cxx b/sc/source/filter/xml/xmlstyli.cxx
index b938e4e5d174..3d7d86488425 100644
--- a/sc/source/filter/xml/xmlstyli.cxx
+++ b/sc/source/filter/xml/xmlstyli.cxx
@@ -307,7 +307,7 @@ css::uno::Reference< css::xml::sax::XFastContextHandler > XMLTableCellPropsConte
{
case CTF_COMPLEX_COLOR:
{
- return new XMLComplexColorContext(GetImport(), nElement, xAttrList, rProperty, rProperties);
+ return new XMLPropertyComplexColorContext(GetImport(), nElement, xAttrList, rProperty, rProperties);
}
break;
case CTF_SC_HYPERLINK: