sc/inc/tablestyle.hxx | 3 + sc/source/core/data/tablestyle.cxx | 57 +++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+)
New commits: commit 71da66ff8c4acae1cfec0a0057aa65d1394519a2 Author: Szymon Kłos <[email protected]> AuthorDate: Tue Feb 24 15:57:45 2026 +0000 Commit: Szymon Kłos <[email protected]> CommitDate: Thu Feb 26 15:25:32 2026 +0100 Table Styles: generate JSON with definitions Change-Id: I7c422794cac1fc0a097ae59212f918f0349d754f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/200327 Reviewed-by: Szymon Kłos <[email protected]> Reviewed-by: Balazs Varga <[email protected]> Tested-by: Jenkins CollaboraOffice <[email protected]> diff --git a/sc/inc/tablestyle.hxx b/sc/inc/tablestyle.hxx index 57fbd8046b14..2397124af9eb 100644 --- a/sc/inc/tablestyle.hxx +++ b/sc/inc/tablestyle.hxx @@ -13,6 +13,7 @@ #include <editeng/boxitem.hxx> #include <editeng/brushitem.hxx> +#include <tools/json_writer.hxx> #include "document.hxx" #include "scdllapi.h" #include "dbdata.hxx" @@ -127,6 +128,8 @@ public: void DeleteTableStyle(const OUString& rName); const ScTableStyle* GetTableStyle(const OUString& rName) const; bool HasTableStyle() const { return maTableStyles.size() > 0; } + + void generateJSON(tools::JsonWriter& rWriter) const; }; /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/sc/source/core/data/tablestyle.cxx b/sc/source/core/data/tablestyle.cxx index bf4c5ac6f6cf..e6b8643dba96 100644 --- a/sc/source/core/data/tablestyle.cxx +++ b/sc/source/core/data/tablestyle.cxx @@ -897,4 +897,61 @@ const ScTableStyle* ScTableStyles::GetTableStyle(const OUString& rName) const return maTableStyles.find(rName)->second.get(); } +namespace +{ +std::string_view tableStyleElementName(ScTableStyleElement eElement) +{ + switch (eElement) + { + case ScTableStyleElement::WholeTable: + return "WholeTable"; + case ScTableStyleElement::FirstColumnStripe: + return "FirstColumnStripe"; + case ScTableStyleElement::SecondColumnStripe: + return "SecondColumnStripe"; + case ScTableStyleElement::FirstRowStripe: + return "FirstRowStripe"; + case ScTableStyleElement::SecondRowStripe: + return "SecondRowStripe"; + case ScTableStyleElement::LastColumn: + return "LastColumn"; + case ScTableStyleElement::FirstColumn: + return "FirstColumn"; + case ScTableStyleElement::HeaderRow: + return "HeaderRow"; + case ScTableStyleElement::TotalRow: + return "TotalRow"; + case ScTableStyleElement::FirstHeaderCell: + return "FirstHeaderCell"; + case ScTableStyleElement::LastHeaderCell: + return "LastHeaderCell"; + } + return {}; +} +} + +void ScTableStyles::generateJSON(tools::JsonWriter& rWriter) const +{ + auto aStylesArray = rWriter.startArray("TableStyles"); + + for (auto const & [ rName, pStyle ] : maTableStyles) + { + auto aStyleStruct = rWriter.startStruct(); + rWriter.put("Name", pStyle->GetName().toUtf8()); + rWriter.put("UIName", pStyle->GetUIName().toUtf8()); + + auto aElementsArray = rWriter.startArray("Elements"); + for (auto const & [ eElement, pPattern ] : pStyle->GetSetPatterns()) + { + const SvxBrushItem* pBrush = pPattern->GetItemSet().GetItemIfSet(ATTR_BACKGROUND); + if (!pBrush) + continue; + + auto aElementStruct = rWriter.startStruct(); + rWriter.put("Type", tableStyleElementName(eElement)); + rWriter.put("FillColor", pBrush->GetColor().AsRGBHexString().toUtf8()); + } + } +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
