From 8e4fb36a69d517bc5111d64d12b2c7df4f9791de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toma=C5=BE=20Vajngerl?= Date: Tue, 11 Jul 2023 20:25:23 +0900 Subject: [PATCH] sc: add test for changing theme colors and undo/redo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Ieaae64cd6cfd96b8c1627cf1c3935bc546a36617 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/154306 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl --- 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(-) 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 + +#include #include +#include +#include + +#include +#include +#include +#include +#include +#include +#include using namespace css; @@ -19,10 +30,11 @@ 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)); @@ -31,6 +43,116 @@ CPPUNIT_TEST_FIXTURE(DocumentThemesTest, testThemes) 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(pItem); + CPPUNIT_ASSERT_EQUAL(aBackgroundThemeColor, pBrushItem->GetColor()); + pPattern->GetItemSet().HasItem(ATTR_FONT_COLOR, &pItem); + auto pColorItem = static_cast(pItem); + CPPUNIT_ASSERT_EQUAL(aCellTextThemeColor, pColorItem->getColor()); + } + + auto pColorSet = std::make_shared("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(pItem); + CPPUNIT_ASSERT_EQUAL(pColorSet->getColor(eBackgroundThemeType), pBrushItem->GetColor()); + pPattern->GetItemSet().HasItem(ATTR_FONT_COLOR, &pItem); + auto pColorItem = static_cast(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(pItem); + CPPUNIT_ASSERT_EQUAL(aBackgroundThemeColor, pBrushItem->GetColor()); + pPattern->GetItemSet().HasItem(ATTR_FONT_COLOR, &pItem); + auto pColorItem = static_cast(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(pItem); + CPPUNIT_ASSERT_EQUAL(pColorSet->getColor(eBackgroundThemeType), pBrushItem->GetColor()); + pPattern->GetItemSet().HasItem(ATTR_FONT_COLOR, &pItem); + auto pColorItem = static_cast(pItem); + CPPUNIT_ASSERT_EQUAL(pColorSet->getColor(eCellTextThemeType), pColorItem->getColor()); + } +} + } // end anonymous namespace CPPUNIT_PLUGIN_IMPLEMENT(); 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 #include #include "docsh.hxx" namespace sc { -class ThemeColorChanger : public svx::IThemeColorChanger +class SC_DLLPUBLIC ThemeColorChanger : public svx::IThemeColorChanger { ScDocShell& m_rDocShell;