diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk> | 2023-07-30 08:52:44 +0200 |
---|---|---|
committer | Tomaž Vajngerl <quikee@gmail.com> | 2023-08-02 21:22:43 +0200 |
commit | c8d8bf4282cbd04abacfa69ba2cc0fa4300e35e1 (patch) | |
tree | 270fcf114ac38a4d1b374b6837fa4cc6c9c5d649 /sc/source/filter/xml | |
parent | 2d96d69322ac18f53668b75397c8587f94cd043b (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.cxx | 32 | ||||
-rw-r--r-- | sc/source/filter/xml/SparklineGroupsExport.hxx | 9 | ||||
-rw-r--r-- | sc/source/filter/xml/SparklineGroupsImportContext.cxx | 126 | ||||
-rw-r--r-- | sc/source/filter/xml/SparklineGroupsImportContext.hxx | 19 | ||||
-rw-r--r-- | sc/source/filter/xml/xmlstyli.cxx | 2 |
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: |