sc/CppunitTest_sc_ucalc_document_themes.mk |    3 
 sc/qa/unit/ucalc_DocumentThemes.cxx        |  126 ++++++++++++++++++++++++++++-
 sc/source/ui/inc/ThemeColorChanger.hxx     |    3 
 3 files changed, 129 insertions(+), 3 deletions(-)

New commits:
commit 8e4fb36a69d517bc5111d64d12b2c7df4f9791de
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Tue Jul 11 20:25:23 2023 +0900
Commit:     Tomaž Vajngerl <qui...@gmail.com>
CommitDate: Thu Jul 13 09:15:30 2023 +0200

    sc: add test for changing theme colors and undo/redo
    
    Change-Id: Ieaae64cd6cfd96b8c1627cf1c3935bc546a36617
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/154306
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>

diff --git a/sc/CppunitTest_sc_ucalc_document_themes.mk 
b/sc/CppunitTest_sc_ucalc_document_themes.mk
index b779a643ba19..c2e5bee7f8ef 100644
--- a/sc/CppunitTest_sc_ucalc_document_themes.mk
+++ b/sc/CppunitTest_sc_ucalc_document_themes.mk
@@ -28,10 +28,13 @@ $(eval $(call 
gb_CppunitTest_use_libraries,sc_ucalc_document_themes, \
     comphelper \
     cppu \
     cppuhelper \
+    docmodel \
+    editeng \
     sal \
     salhelper \
     sax \
     sc \
+    svl \
     scqahelper \
     sfx \
     svxcore \
diff --git a/sc/qa/unit/ucalc_DocumentThemes.cxx 
b/sc/qa/unit/ucalc_DocumentThemes.cxx
index 5c568b9f5ca0..fdd601e09d78 100644
--- a/sc/qa/unit/ucalc_DocumentThemes.cxx
+++ b/sc/qa/unit/ucalc_DocumentThemes.cxx
@@ -8,8 +8,19 @@
  */
 
 #include "helper/qahelper.hxx"
-#include <docsh.hxx>
+
+#include <docmodel/theme/Theme.hxx>
 #include <svx/svdpage.hxx>
+#include <editeng/brushitem.hxx>
+#include <editeng/colritem.hxx>
+
+#include <docsh.hxx>
+#include <patattr.hxx>
+#include <attrib.hxx>
+#include <docpool.hxx>
+#include <scitems.hxx>
+#include <undomanager.hxx>
+#include <ThemeColorChanger.hxx>
 
 using namespace css;
 
@@ -19,16 +30,127 @@ class DocumentThemesTest : public ScUcalcTestBase
 
 namespace
 {
-CPPUNIT_TEST_FIXTURE(DocumentThemesTest, testThemes)
+CPPUNIT_TEST_FIXTURE(DocumentThemesTest, testGetTheme)
 {
     m_pDoc->InitDrawLayer();
     m_pDoc->InsertTab(0, "Test");
+
+    ScDrawLayer* pDrawLayer = m_pDoc->GetDrawLayer();
+    CPPUNIT_ASSERT(pDrawLayer);
+    const SdrPage* pPage(pDrawLayer->GetPage(0));
+    CPPUNIT_ASSERT(pPage);
+    auto const& pTheme = pPage->getSdrPageProperties().GetTheme();
+    CPPUNIT_ASSERT(pTheme);
+}
+
+CPPUNIT_TEST_FIXTURE(DocumentThemesTest, testChangeTheme)
+{
+    m_pDoc->InitDrawLayer();
+    m_pDoc->InsertTab(0, "Test");
+
     ScDrawLayer* pDrawLayer = m_pDoc->GetDrawLayer();
     CPPUNIT_ASSERT(pDrawLayer);
     const SdrPage* pPage(pDrawLayer->GetPage(0));
     CPPUNIT_ASSERT(pPage);
     auto const& pTheme = pPage->getSdrPageProperties().GetTheme();
     CPPUNIT_ASSERT(pTheme);
+
+    Color aBackgroundThemeColor(0xc99c00);
+    Color aCellTextThemeColor(0x0369a3);
+
+    auto eBackgroundThemeType = model::ThemeColorType::Accent5;
+    auto eCellTextThemeType = model::ThemeColorType::Accent2;
+
+    ScPatternAttr aNewPattern(m_pDoc->GetPool());
+    {
+        model::ComplexColor aComplexColor;
+        aComplexColor.setSchemeColor(eBackgroundThemeType);
+        Color aColor = pTheme->getColorSet()->resolveColor(aComplexColor);
+        aNewPattern.GetItemSet().Put(SvxBrushItem(aColor, aComplexColor, 
ATTR_BACKGROUND));
+    }
+    {
+        model::ComplexColor aComplexColor;
+        aComplexColor.setSchemeColor(eCellTextThemeType);
+        Color aColor = pTheme->getColorSet()->resolveColor(aComplexColor);
+        aNewPattern.GetItemSet().Put(SvxColorItem(aColor, aComplexColor, 
ATTR_FONT_COLOR));
+    }
+
+    m_pDoc->ApplyPatternAreaTab(2, 2, 4, 4, 0, aNewPattern);
+
+    {
+        const SfxPoolItem* pItem = nullptr;
+        auto* pPattern = m_pDoc->GetPattern(ScAddress(3, 3, 0));
+        CPPUNIT_ASSERT(pPattern);
+
+        pPattern->GetItemSet().HasItem(ATTR_BACKGROUND, &pItem);
+        auto pBrushItem = static_cast<const SvxBrushItem*>(pItem);
+        CPPUNIT_ASSERT_EQUAL(aBackgroundThemeColor, pBrushItem->GetColor());
+        pPattern->GetItemSet().HasItem(ATTR_FONT_COLOR, &pItem);
+        auto pColorItem = static_cast<const SvxColorItem*>(pItem);
+        CPPUNIT_ASSERT_EQUAL(aCellTextThemeColor, pColorItem->getColor());
+    }
+
+    auto pColorSet = std::make_shared<model::ColorSet>("TestColorScheme");
+    pColorSet->add(model::ThemeColorType::Dark1, 0x000000);
+    pColorSet->add(model::ThemeColorType::Light1, 0x111111);
+    pColorSet->add(model::ThemeColorType::Dark2, 0x222222);
+    pColorSet->add(model::ThemeColorType::Light2, 0x333333);
+    pColorSet->add(model::ThemeColorType::Accent1, 0x444444);
+    pColorSet->add(model::ThemeColorType::Accent2, 0x555555);
+    pColorSet->add(model::ThemeColorType::Accent3, 0x666666);
+    pColorSet->add(model::ThemeColorType::Accent4, 0x777777);
+    pColorSet->add(model::ThemeColorType::Accent5, 0x888888);
+    pColorSet->add(model::ThemeColorType::Accent6, 0x999999);
+    pColorSet->add(model::ThemeColorType::Hyperlink, 0xaaaaaa);
+    pColorSet->add(model::ThemeColorType::FollowedHyperlink, 0xbbbbbb);
+
+    sc::ThemeColorChanger aChanger(*m_xDocShell);
+    aChanger.apply(pColorSet);
+
+    {
+        const SfxPoolItem* pItem = nullptr;
+        auto* pPattern = m_pDoc->GetPattern(ScAddress(3, 3, 0));
+        CPPUNIT_ASSERT(pPattern);
+
+        pPattern->GetItemSet().HasItem(ATTR_BACKGROUND, &pItem);
+        auto pBrushItem = static_cast<const SvxBrushItem*>(pItem);
+        CPPUNIT_ASSERT_EQUAL(pColorSet->getColor(eBackgroundThemeType), 
pBrushItem->GetColor());
+        pPattern->GetItemSet().HasItem(ATTR_FONT_COLOR, &pItem);
+        auto pColorItem = static_cast<const SvxColorItem*>(pItem);
+        CPPUNIT_ASSERT_EQUAL(pColorSet->getColor(eCellTextThemeType), 
pColorItem->getColor());
+    }
+
+    // Undo / Redo
+
+    m_pDoc->GetUndoManager()->Undo();
+
+    {
+        const SfxPoolItem* pItem = nullptr;
+        auto* pPattern = m_pDoc->GetPattern(ScAddress(3, 3, 0));
+        CPPUNIT_ASSERT(pPattern);
+
+        pPattern->GetItemSet().HasItem(ATTR_BACKGROUND, &pItem);
+        auto pBrushItem = static_cast<const SvxBrushItem*>(pItem);
+        CPPUNIT_ASSERT_EQUAL(aBackgroundThemeColor, pBrushItem->GetColor());
+        pPattern->GetItemSet().HasItem(ATTR_FONT_COLOR, &pItem);
+        auto pColorItem = static_cast<const SvxColorItem*>(pItem);
+        CPPUNIT_ASSERT_EQUAL(aCellTextThemeColor, pColorItem->getColor());
+    }
+
+    m_pDoc->GetUndoManager()->Redo();
+
+    {
+        const SfxPoolItem* pItem = nullptr;
+        auto* pPattern = m_pDoc->GetPattern(ScAddress(3, 3, 0));
+        CPPUNIT_ASSERT(pPattern);
+
+        pPattern->GetItemSet().HasItem(ATTR_BACKGROUND, &pItem);
+        auto pBrushItem = static_cast<const SvxBrushItem*>(pItem);
+        CPPUNIT_ASSERT_EQUAL(pColorSet->getColor(eBackgroundThemeType), 
pBrushItem->GetColor());
+        pPattern->GetItemSet().HasItem(ATTR_FONT_COLOR, &pItem);
+        auto pColorItem = static_cast<const SvxColorItem*>(pItem);
+        CPPUNIT_ASSERT_EQUAL(pColorSet->getColor(eCellTextThemeType), 
pColorItem->getColor());
+    }
 }
 
 } // end anonymous namespace
diff --git a/sc/source/ui/inc/ThemeColorChanger.hxx 
b/sc/source/ui/inc/ThemeColorChanger.hxx
index 888cf34f11ba..f3f3b7379671 100644
--- a/sc/source/ui/inc/ThemeColorChanger.hxx
+++ b/sc/source/ui/inc/ThemeColorChanger.hxx
@@ -10,12 +10,13 @@
 
 #pragma once
 
+#include <scdllapi.h>
 #include <svx/theme/ThemeColorChanger.hxx>
 #include "docsh.hxx"
 
 namespace sc
 {
-class ThemeColorChanger : public svx::IThemeColorChanger
+class SC_DLLPUBLIC ThemeColorChanger : public svx::IThemeColorChanger
 {
     ScDocShell& m_rDocShell;
 

Reply via email to