From 75c0d7827625c683d52a9e2f3a7c514df890107b Mon Sep 17 00:00:00 2001 From: Tomaž Vajngerl Date: Fri, 27 Jan 2023 15:03:09 +0900 Subject: sd: use XTheme to transport the theme to xmloff import/export MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Refactor the existing places and tests in Impress code (sd) to use it instead. Also keep the old property of construction and view of the theme with a sequence of property values, but under the new property named "ThemeUnoRepresentation". This is needed by the UI tests currently. Change-Id: I484567f4a603f1a5e2e03955fdd2b63132dcc66e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146225 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl --- sd/CppunitTest_sd_filter_eppt.mk | 1 + sd/qa/filter/eppt/eppt.cxx | 28 +++++++++++++++++++--------- sd/qa/unit/uiimpress.cxx | 27 +++++++++++++++++++-------- sd/source/ui/unoidl/unomodel.cxx | 3 ++- sd/source/ui/unoidl/unopage.cxx | 32 ++++++++++++++++++++++++++++++-- 5 files changed, 71 insertions(+), 20 deletions(-) (limited to 'sd') diff --git a/sd/CppunitTest_sd_filter_eppt.mk b/sd/CppunitTest_sd_filter_eppt.mk index 2a570b5dcd92..261fa3052ee8 100644 --- a/sd/CppunitTest_sd_filter_eppt.mk +++ b/sd/CppunitTest_sd_filter_eppt.mk @@ -24,6 +24,7 @@ $(eval $(call gb_CppunitTest_use_libraries,sd_filter_eppt, \ comphelper \ cppu \ cppuhelper \ + docmodel \ sd \ sal \ subsequenttest \ diff --git a/sd/qa/filter/eppt/eppt.cxx b/sd/qa/filter/eppt/eppt.cxx index 57c73456aea0..fe8151a67638 100644 --- a/sd/qa/filter/eppt/eppt.cxx +++ b/sd/qa/filter/eppt/eppt.cxx @@ -15,7 +15,7 @@ #include #include -#include +#include using namespace ::com::sun::star; @@ -66,14 +66,24 @@ CPPUNIT_TEST_FIXTURE(Test, testThemeExport) uno::Reference xDrawPage( xDrawPagesSupplier->getDrawPages()->getByIndex(0), uno::UNO_QUERY); uno::Reference xMasterPage(xDrawPage->getMasterPage(), uno::UNO_QUERY); - comphelper::SequenceAsHashMap aMap; - aMap["Name"] <<= OUString("mytheme"); - aMap["ColorSchemeName"] <<= OUString("mycolorscheme"); - uno::Sequence aColorScheme - = { 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }; - aMap["ColorScheme"] <<= aColorScheme; - uno::Any aTheme(aMap.getAsConstPropertyValueList()); - xMasterPage->setPropertyValue("Theme", aTheme); + + model::Theme aTheme("mytheme"); + std::unique_ptr pColorSet(new model::ColorSet("mycolorscheme")); + pColorSet->add(model::ThemeColorType::Dark1, 0x1); + pColorSet->add(model::ThemeColorType::Light1, 0x2); + pColorSet->add(model::ThemeColorType::Dark2, 0x3); + pColorSet->add(model::ThemeColorType::Light2, 0x4); + pColorSet->add(model::ThemeColorType::Accent1, 0x5); + pColorSet->add(model::ThemeColorType::Accent2, 0x6); + pColorSet->add(model::ThemeColorType::Accent3, 0x7); + pColorSet->add(model::ThemeColorType::Accent4, 0x8); + pColorSet->add(model::ThemeColorType::Accent5, 0x9); + pColorSet->add(model::ThemeColorType::Accent6, 0xa); + pColorSet->add(model::ThemeColorType::Hyperlink, 0xb); + pColorSet->add(model::ThemeColorType::FollowedHyperlink, 0xc); + aTheme.SetColorSet(std::move(pColorSet)); + + xMasterPage->setPropertyValue("Theme", uno::Any(model::theme::createXTheme(aTheme))); // When exporting to PPTX: save("Impress Office Open XML"); diff --git a/sd/qa/unit/uiimpress.cxx b/sd/qa/unit/uiimpress.cxx index e311087673ab..4eb16f50713b 100644 --- a/sd/qa/unit/uiimpress.cxx +++ b/sd/qa/unit/uiimpress.cxx @@ -46,6 +46,7 @@ #include #include #include +#include #include #include @@ -1195,14 +1196,24 @@ CPPUNIT_TEST_FIXTURE(SdUiImpressTest, testThemeShapeInsert) uno::Reference xMasterPageTarget(xDrawPage, uno::UNO_QUERY); uno::Reference xMasterPage(xMasterPageTarget->getMasterPage(), uno::UNO_QUERY); - comphelper::SequenceAsHashMap aMap; - aMap["Name"] <<= OUString("mytheme"); - aMap["ColorSchemeName"] <<= OUString("mycolorscheme"); - uno::Sequence aColorScheme - = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb }; - aMap["ColorScheme"] <<= aColorScheme; - uno::Any aTheme(aMap.getAsConstPropertyValueList()); - xMasterPage->setPropertyValue("Theme", aTheme); + + model::Theme aTheme("mytheme"); + std::unique_ptr pColorSet(new model::ColorSet("mycolorscheme")); + pColorSet->add(model::ThemeColorType::Dark1, 0x0); + pColorSet->add(model::ThemeColorType::Light1, 0x1); + pColorSet->add(model::ThemeColorType::Dark2, 0x2); + pColorSet->add(model::ThemeColorType::Light2, 0x3); + pColorSet->add(model::ThemeColorType::Accent1, 0x4); + pColorSet->add(model::ThemeColorType::Accent2, 0x5); + pColorSet->add(model::ThemeColorType::Accent3, 0x6); + pColorSet->add(model::ThemeColorType::Accent4, 0x7); + pColorSet->add(model::ThemeColorType::Accent5, 0x8); + pColorSet->add(model::ThemeColorType::Accent6, 0x9); + pColorSet->add(model::ThemeColorType::Hyperlink, 0xa); + pColorSet->add(model::ThemeColorType::FollowedHyperlink, 0xb); + aTheme.SetColorSet(std::move(pColorSet)); + + xMasterPage->setPropertyValue("Theme", uno::Any(model::theme::createXTheme(aTheme))); // When inserting a shape: uno::Sequence aArgs = { diff --git a/sd/source/ui/unoidl/unomodel.cxx b/sd/source/ui/unoidl/unomodel.cxx index 9b9ed18dbfc6..b5c9e64a61bc 100644 --- a/sd/source/ui/unoidl/unomodel.cxx +++ b/sd/source/ui/unoidl/unomodel.cxx @@ -28,6 +28,7 @@ #include #include #include +#include #include @@ -245,7 +246,7 @@ static const SvxItemPropertySet* ImplGetDrawModelPropertySet() { sUNO_Prop_HasValidSignatures, WID_MODEL_HASVALIDSIGNATURES, ::cppu::UnoType::get(), beans::PropertyAttribute::READONLY, 0}, { u"Fonts", WID_MODEL_FONTS, cppu::UnoType>::get(), beans::PropertyAttribute::READONLY, 0}, { sUNO_Prop_InteropGrabBag, WID_MODEL_INTEROPGRABBAG, cppu::UnoType>::get(), 0, 0}, - { sUNO_Prop_Theme, WID_MODEL_THEME, cppu::UnoType>::get(), 0, 0}, + { sUNO_Prop_Theme, WID_MODEL_THEME, cppu::UnoType::get(), 0, 0}, }; static SvxItemPropertySet aDrawModelPropertySet_Impl( aDrawModelPropertyMap_Impl, SdrObject::GetGlobalDrawObjectItemPool() ); return &aDrawModelPropertySet_Impl; diff --git a/sd/source/ui/unoidl/unopage.cxx b/sd/source/ui/unoidl/unopage.cxx index 2dfff467ceb7..5292349b4ba8 100644 --- a/sd/source/ui/unoidl/unopage.cxx +++ b/sd/source/ui/unoidl/unopage.cxx @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -74,6 +75,7 @@ #include #include #include +#include #include using ::com::sun::star::animations::XAnimationNode; @@ -100,7 +102,7 @@ enum WID_PAGE WID_PAGE_PAGENUMBERVISIBLE, WID_PAGE_DATETIMEVISIBLE, WID_PAGE_DATETIMEFIXED, WID_PAGE_DATETIMETEXT, WID_PAGE_DATETIMEFORMAT, WID_TRANSITION_TYPE, WID_TRANSITION_SUBTYPE, WID_TRANSITION_DIRECTION, WID_TRANSITION_FADE_COLOR, WID_TRANSITION_DURATION, WID_LOOP_SOUND, - WID_NAVORDER, WID_PAGE_PREVIEWMETAFILE, WID_PAGE_THEME + WID_NAVORDER, WID_PAGE_PREVIEWMETAFILE, WID_PAGE_THEME, WID_PAGE_THEME_UNO_REPRESENTATION }; } @@ -279,7 +281,9 @@ static const SvxItemPropertySet* ImplGetMasterPagePropertySet( PageKind ePageKin { u"BackgroundFullSize", WID_PAGE_BACKFULL, cppu::UnoType::get(), 0, 0}, { sUNO_Prop_UserDefinedAttributes,WID_PAGE_USERATTRIBS, cppu::UnoType::get(), 0, 0}, { u"IsBackgroundDark", WID_PAGE_ISDARK, cppu::UnoType::get(), beans::PropertyAttribute::READONLY, 0}, - { u"Theme", WID_PAGE_THEME, cppu::UnoType>::get(), 0, 0} + { u"Theme", WID_PAGE_THEME, cppu::UnoType::get(), 0, 0}, + // backwards compatible view of the theme for use in tests + { u"ThemeUnoRepresentation", WID_PAGE_THEME_UNO_REPRESENTATION, cppu::UnoType>::get(), 0, 0} }; static const SfxItemPropertyMapEntry aHandoutMasterPagePropertyMap_Impl[] = @@ -974,6 +978,19 @@ void SAL_CALL SdGenericDrawPage::setPropertyValue( const OUString& aPropertyName } case WID_PAGE_THEME: + { + SdrPage* pPage = GetPage(); + uno::Reference xTheme; + if (aValue >>= xTheme) + { + auto* pUnoTheme = dynamic_cast(xTheme.get()); + std::unique_ptr pTheme(new model::Theme(pUnoTheme->getTheme())); + pPage->getSdrPageProperties().SetTheme(std::move(pTheme)); + } + break; + } + + case WID_PAGE_THEME_UNO_REPRESENTATION: { SdrPage* pPage = GetPage(); std::unique_ptr pTheme = model::Theme::FromAny(aValue); @@ -1296,6 +1313,17 @@ Any SAL_CALL SdGenericDrawPage::getPropertyValue( const OUString& PropertyName ) break; case WID_PAGE_THEME: + { + SdrPage* pPage = GetPage(); + css::uno::Reference xTheme; + auto* pTheme = pPage->getSdrPageProperties().GetTheme(); + if (pTheme) + xTheme = new UnoTheme(*pTheme); + aAny <<= xTheme; + break; + } + + case WID_PAGE_THEME_UNO_REPRESENTATION: { SdrPage* pPage = GetPage(); model::Theme* pTheme = pPage->getSdrPageProperties().GetTheme(); -- cgit