sc/UIConfig_scalc.mk | 1 sc/inc/scabstdlg.hxx | 5 sc/inc/styleuno.hxx | 2 sc/inc/unonames.hxx | 1 sc/source/ui/attrdlg/scdlgfact.cxx | 7 sc/source/ui/attrdlg/scdlgfact.hxx | 4 sc/source/ui/inc/styledlg.hxx | 16 sc/source/ui/styleui/styledlg.cxx | 102 +++ sc/source/ui/unoobj/shapeuno.cxx | 33 + sc/source/ui/view/tabvwsha.cxx | 7 sc/uiconfig/scalc/ui/drawtemplatedialog.ui | 847 +++++++++++++++++++++++++++++ 11 files changed, 1023 insertions(+), 2 deletions(-)
New commits: commit ca487e3f4c0f97c14bcff3a5372717d47f32ee94 Author: Maxim Monastirsky <momonas...@gmail.com> AuthorDate: Fri Mar 17 14:42:20 2023 +0200 Commit: Maxim Monastirsky <momonas...@gmail.com> CommitDate: Wed Mar 22 10:16:12 2023 +0000 sc drawstyles: Add a dialog for style editing Change-Id: I7e62251024df8f24bd6fe318f5c0262bbd6a1a11 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149279 Tested-by: Jenkins Reviewed-by: Maxim Monastirsky <momonas...@gmail.com> diff --git a/sc/UIConfig_scalc.mk b/sc/UIConfig_scalc.mk index 13a4b98a6c7c..d83aa96dbaa1 100644 --- a/sc/UIConfig_scalc.mk +++ b/sc/UIConfig_scalc.mk @@ -121,6 +121,7 @@ $(eval $(call gb_UIConfig_add_uifiles,modules/scalc,\ sc/uiconfig/scalc/ui/deletecolumnentry \ sc/uiconfig/scalc/ui/deletecontents \ sc/uiconfig/scalc/ui/descriptivestatisticsdialog \ + sc/uiconfig/scalc/ui/drawtemplatedialog \ sc/uiconfig/scalc/ui/dropmenu \ sc/uiconfig/scalc/ui/doubledialog \ sc/uiconfig/scalc/ui/erroralerttabpage \ diff --git a/sc/inc/scabstdlg.hxx b/sc/inc/scabstdlg.hxx index 9901d48bd610..1868964e9bd0 100644 --- a/sc/inc/scabstdlg.hxx +++ b/sc/inc/scabstdlg.hxx @@ -43,6 +43,7 @@ class ScTabViewShell; class ScConditionalFormat; class ScConditionalFormatList; class Date; +class SdrView; enum class CreateNameFlags; enum class CellShiftDisabledFlags; @@ -551,6 +552,10 @@ public: SfxStyleSheetBase& rStyleBase, bool bPage /*true : page, false: para*/) = 0; + virtual VclPtr<SfxAbstractTabDialog> CreateScDrawStyleDlg(weld::Window* pParent, + SfxStyleSheetBase& rStyleBase, + SdrView* pView) = 0; + virtual VclPtr<SfxAbstractTabDialog> CreateScSubTotalDlg(weld::Window* pParent, const SfxItemSet& rArgSet) = 0; diff --git a/sc/source/ui/attrdlg/scdlgfact.cxx b/sc/source/ui/attrdlg/scdlgfact.cxx index 0eca6bafb8a7..d0db6f84505a 100644 --- a/sc/source/ui/attrdlg/scdlgfact.cxx +++ b/sc/source/ui/attrdlg/scdlgfact.cxx @@ -1328,6 +1328,13 @@ VclPtr<SfxAbstractTabDialog> ScAbstractDialogFactory_Impl::CreateScStyleDlg(weld return VclPtr<ScAbstractTabController_Impl>::Create(std::make_shared<ScStyleDlg>(pParent, rStyleBase, bPage)); } +VclPtr<SfxAbstractTabDialog> ScAbstractDialogFactory_Impl::CreateScDrawStyleDlg(weld::Window* pParent, + SfxStyleSheetBase& rStyleBase, + SdrView* pView) +{ + return VclPtr<ScAbstractTabController_Impl>::Create(std::make_shared<ScDrawStyleDlg>(pParent, rStyleBase, pView)); +} + VclPtr<SfxAbstractTabDialog> ScAbstractDialogFactory_Impl::CreateScSubTotalDlg(weld::Window* pParent, const SfxItemSet& rArgSet) { return VclPtr<ScAbstractTabController_Impl>::Create(std::make_shared<ScSubTotalDlg>(pParent, rArgSet)); diff --git a/sc/source/ui/attrdlg/scdlgfact.hxx b/sc/source/ui/attrdlg/scdlgfact.hxx index e39428018287..855abeecf1c8 100644 --- a/sc/source/ui/attrdlg/scdlgfact.hxx +++ b/sc/source/ui/attrdlg/scdlgfact.hxx @@ -791,6 +791,10 @@ public: SfxStyleSheetBase& rStyleBase, bool bPage) override; + virtual VclPtr<SfxAbstractTabDialog> CreateScDrawStyleDlg(weld::Window* pParent, + SfxStyleSheetBase& rStyleBase, + SdrView* pView) override; + virtual VclPtr<SfxAbstractTabDialog> CreateScSubTotalDlg(weld::Window* pParent, const SfxItemSet& rArgSet) override; virtual VclPtr<SfxAbstractTabDialog> CreateScCharDlg(weld::Window* pParent, diff --git a/sc/source/ui/inc/styledlg.hxx b/sc/source/ui/inc/styledlg.hxx index 2f43e04745a6..736849ef963d 100644 --- a/sc/source/ui/inc/styledlg.hxx +++ b/sc/source/ui/inc/styledlg.hxx @@ -22,6 +22,7 @@ #include <sfx2/styledlg.hxx> class SfxStyleSheetBase; +class SdrView; class ScStyleDlg : public SfxStyleDialogController { @@ -38,4 +39,19 @@ private: bool m_bPage; }; +class ScDrawStyleDlg : public SfxStyleDialogController +{ +public: + ScDrawStyleDlg(weld::Window* pParent, + SfxStyleSheetBase& rStyleBase, + SdrView* pView); + +protected: + virtual void PageCreated(const OString& rPageId, SfxTabPage& rTabPage) override; + virtual void RefreshInputSet() override; + +private: + SdrView* mpView; +}; + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/ui/styleui/styledlg.cxx b/sc/source/ui/styleui/styledlg.cxx index d814654e5008..206d852cf46a 100644 --- a/sc/source/ui/styleui/styledlg.cxx +++ b/sc/source/ui/styleui/styledlg.cxx @@ -19,6 +19,9 @@ #undef SC_DLLIMPLEMENTATION +#include <svx/drawitem.hxx> +#include <svx/ofaitem.hxx> +#include <svx/svdview.hxx> #include <svx/numinf.hxx> #include <sfx2/objsh.hxx> #include <sfx2/sfxdlg.hxx> @@ -136,4 +139,103 @@ void ScStyleDlg::RefreshInputSet() pItemSet->SetParent( GetStyleSheet().GetItemSet().GetParent() ); } +ScDrawStyleDlg::ScDrawStyleDlg(weld::Window* pParent, SfxStyleSheetBase& rStyleBase, SdrView* pView) + : SfxStyleDialogController(pParent, "modules/scalc/ui/drawtemplatedialog.ui", "DrawTemplateDialog", rStyleBase) + , mpView(pView) +{ + AddTabPage("line", RID_SVXPAGE_LINE); + AddTabPage("area", RID_SVXPAGE_AREA); + AddTabPage("shadowing", RID_SVXPAGE_SHADOW); + AddTabPage("transparency", RID_SVXPAGE_TRANSPARENCE); + AddTabPage("font", RID_SVXPAGE_CHAR_NAME); + AddTabPage("fonteffect", RID_SVXPAGE_CHAR_EFFECTS); + AddTabPage("background", RID_SVXPAGE_BKG); + AddTabPage("indents", RID_SVXPAGE_STD_PARAGRAPH); + AddTabPage("text", RID_SVXPAGE_TEXTATTR); + AddTabPage("animation", RID_SVXPAGE_TEXTANIMATION); + AddTabPage("dimensioning", RID_SVXPAGE_MEASURE); + AddTabPage("alignment", RID_SVXPAGE_ALIGN_PARAGRAPH); + AddTabPage("tabs", RID_SVXPAGE_TABULATOR); + if (SvtCJKOptions::IsAsianTypographyEnabled()) + AddTabPage("asiantypo", RID_SVXPAGE_PARA_ASIAN); + else + RemoveTabPage("asiantypo"); +} + +void ScDrawStyleDlg::PageCreated(const OString& rPageId, SfxTabPage& rTabPage) +{ + SfxAllItemSet aSet(*(GetInputSetImpl()->GetPool())); + SdrModel& rModel = mpView->GetModel(); + + if (rPageId == "line") + { + aSet.Put(SvxColorListItem(rModel.GetColorList(), SID_COLOR_TABLE)); + aSet.Put(SvxDashListItem(rModel.GetDashList(), SID_DASH_LIST)); + aSet.Put(SvxLineEndListItem(rModel.GetLineEndList(), SID_LINEEND_LIST)); + aSet.Put(SfxUInt16Item(SID_DLG_TYPE, 1)); + rTabPage.PageCreated(aSet); + } + else if (rPageId == "area") + { + aSet.Put(SvxColorListItem(rModel.GetColorList(), SID_COLOR_TABLE)); + aSet.Put(SvxGradientListItem(rModel.GetGradientList(), SID_GRADIENT_LIST)); + aSet.Put(SvxHatchListItem(rModel.GetHatchList(), SID_HATCH_LIST)); + aSet.Put(SvxBitmapListItem(rModel.GetBitmapList(), SID_BITMAP_LIST)); + aSet.Put(SvxPatternListItem(rModel.GetPatternList(), SID_PATTERN_LIST)); + aSet.Put(SfxUInt16Item(SID_PAGE_TYPE, 0)); + aSet.Put(SfxUInt16Item(SID_DLG_TYPE, 1)); + aSet.Put(SfxUInt16Item(SID_TABPAGE_POS, 0)); + rTabPage.PageCreated(aSet); + } + else if (rPageId == "shadowing") + { + aSet.Put(SvxColorListItem(rModel.GetColorList(), SID_COLOR_TABLE)); + aSet.Put(SfxUInt16Item(SID_PAGE_TYPE, 0)); + aSet.Put(SfxUInt16Item(SID_DLG_TYPE, 1)); + rTabPage.PageCreated(aSet); + } + else if (rPageId == "transparency") + { + aSet.Put (SfxUInt16Item(SID_PAGE_TYPE, 0)); + aSet.Put (SfxUInt16Item(SID_DLG_TYPE, 1)); + rTabPage.PageCreated(aSet); + } + else if (rPageId == "font") + { + if (SfxObjectShell* pDocSh = SfxObjectShell::Current()) + { + SvxFontListItem aItem(*static_cast<const SvxFontListItem*>( + pDocSh->GetItem(SID_ATTR_CHAR_FONTLIST))); + + aSet.Put(SvxFontListItem(aItem.GetFontList(), SID_ATTR_CHAR_FONTLIST)); + } + rTabPage.PageCreated(aSet); + } + else if (rPageId == "fonteffect") + { + rTabPage.PageCreated(aSet); + } + else if (rPageId == "background") + { + aSet.Put(SfxUInt32Item(SID_FLAG_TYPE, static_cast<sal_uInt32>(SvxBackgroundTabFlags::SHOW_CHAR_BKGCOLOR))); + rTabPage.PageCreated(aSet); + } + else if (rPageId == "text") + { + rTabPage.PageCreated(aSet); + } + else if (rPageId == "dimensioning") + { + aSet.Put(OfaPtrItem(SID_OBJECT_LIST, mpView)); + rTabPage.PageCreated(aSet); + } +} + +void ScDrawStyleDlg::RefreshInputSet() +{ + SfxItemSet* pItemSet = GetInputSetImpl(); + pItemSet->ClearItem(); + pItemSet->SetParent( GetStyleSheet().GetItemSet().GetParent() ); +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/ui/view/tabvwsha.cxx b/sc/source/ui/view/tabvwsha.cxx index 62bfe8835b7e..9bcf40828ba6 100644 --- a/sc/source/ui/view/tabvwsha.cxx +++ b/sc/source/ui/view/tabvwsha.cxx @@ -1522,7 +1522,12 @@ void ScTabViewShell::ExecStyle( SfxRequest& rReq ) weld::Window* pDialogParent = rReq.GetFrameWeld(); if (!pDialogParent) pDialogParent = GetFrameWeld(); - pDlg.disposeAndReset(pFact->CreateScStyleDlg(pDialogParent, *pStyleSheet, bPage)); + + if (eFam == SfxStyleFamily::Frame) + pDlg.disposeAndReset(pFact->CreateScDrawStyleDlg(pDialogParent, *pStyleSheet, GetDrawView())); + else + pDlg.disposeAndReset(pFact->CreateScStyleDlg(pDialogParent, *pStyleSheet, bPage)); + short nResult = pDlg->Execute(); SetInFormatDialog(false); diff --git a/sc/uiconfig/scalc/ui/drawtemplatedialog.ui b/sc/uiconfig/scalc/ui/drawtemplatedialog.ui new file mode 100644 index 000000000000..2a2ca1f3e632 --- /dev/null +++ b/sc/uiconfig/scalc/ui/drawtemplatedialog.ui @@ -0,0 +1,847 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Generated with glade 3.22.1 --> +<interface domain="sc"> + <requires lib="gtk+" version="3.20"/> + <object class="GtkDialog" id="DrawTemplateDialog"> + <property name="can_focus">False</property> + <property name="border_width">6</property> + <property name="title" translatable="yes" context="drawtemplatedialog|DrawTemplateDialog">Drawing Style</property> + <property name="modal">True</property> + <property name="default_width">0</property> + <property name="default_height">0</property> + <property name="type_hint">dialog</property> + <child> + <placeholder/> + </child> + <child internal-child="vbox"> + <object class="GtkBox" id="dialog-vbox1"> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <property name="spacing">12</property> + <child internal-child="action_area"> + <object class="GtkButtonBox" id="dialog-action_area1"> + <property name="can_focus">False</property> + <property name="layout_style">end</property> + <child> + <object class="GtkButton" id="reset"> + <property name="label" translatable="yes" context="stock">_Reset</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use-underline">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="standard"> + <property name="label" translatable="yes" context="drawtemplatedialog|standard">_Standard</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_underline">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkButton" id="ok"> + <property name="label" translatable="yes" context="stock">_OK</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="can_default">True</property> + <property name="has_default">True</property> + <property name="receives_default">True</property> + <property name="use-underline">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkButton" id="cancel"> + <property name="label" translatable="yes" context="stock">_Cancel</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use-underline">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkButton" id="help"> + <property name="label" translatable="yes" context="stock">_Help</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use-underline">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">4</property> + <property name="secondary">True</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="pack_type">end</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkNotebook" id="tabcontrol"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> + <property name="scrollable">True</property> + <property name="enable_popup">True</property> + <child> + <!-- n-columns=1 n-rows=1 --> + <object class="GtkGrid"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + </object> + </child> + <child type="tab"> + <object class="GtkLabel" id="organizer"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes" context="drawtemplatedialog|organizer">Organizer</property> + </object> + <packing> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <!-- n-columns=1 n-rows=1 --> + <object class="GtkGrid"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="line"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes" context="drawtemplatedialog|line">Line</property> + </object> + <packing> + <property name="position">1</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <!-- n-columns=1 n-rows=1 --> + <object class="GtkGrid"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="position">2</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="area"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes" context="drawtemplatedialog|area">Area</property> + </object> + <packing> + <property name="position">2</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <!-- n-columns=1 n-rows=1 --> + <object class="GtkGrid"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="position">3</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="shadowing"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes" context="drawtemplatedialog|shadowing">Shadowing</property> + </object> + <packing> + <property name="position">3</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <!-- n-columns=1 n-rows=1 --> + <object class="GtkGrid"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="position">4</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="transparency"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes" context="drawtemplatedialog|transparency">Transparency</property> + </object> + <packing> + <property name="position">4</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <!-- n-columns=1 n-rows=1 --> + <object class="GtkGrid"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="position">5</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="font"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes" context="drawtemplatedialog|font">Font</property> + </object> + <packing> + <property name="position">5</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <!-- n-columns=1 n-rows=1 --> + <object class="GtkGrid"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="position">6</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="fonteffect"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes" context="drawtemplatedialog|fonteffect">Font Effects</property> + </object> + <packing> + <property name="position">6</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <!-- n-columns=1 n-rows=1 --> + <object class="GtkGrid"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="position">7</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="indents"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes" context="drawtemplatedialog|indents">Indents & Spacing</property> + </object> + <packing> + <property name="position">7</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <!-- n-columns=1 n-rows=1 --> + <object class="GtkGrid"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="position">8</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="text"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes" context="drawtemplatedialog|text">Text</property> + </object> + <packing> + <property name="position">8</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <!-- n-columns=1 n-rows=1 --> + <object class="GtkGrid"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="position">9</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="animation"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes" context="drawtemplatedialog|animation">Text Animation</property> + </object> + <packing> + <property name="position">9</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <!-- n-columns=1 n-rows=1 --> + <object class="GtkGrid"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="position">10</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="dimensioning"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes" context="drawtemplatedialog|dimensioning">Dimensioning</property> + </object> + <packing> + <property name="position">10</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <!-- n-columns=1 n-rows=1 --> + <object class="GtkGrid"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="position">11</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="alignment"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes" context="drawtemplatedialog|alignment">Alignment</property> + </object> + <packing> + <property name="position">11</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <!-- n-columns=1 n-rows=1 --> + <object class="GtkGrid"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="position">12</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="asiantypo"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes" context="drawtemplatedialog|asiantypo">Asian Typography</property> + </object> + <packing> + <property name="position">12</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <!-- n-columns=1 n-rows=1 --> + <object class="GtkGrid"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="position">13</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="tabs"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes" context="drawtemplatedialog|tabs">Tabs</property> + </object> + <packing> + <property name="position">13</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <!-- n-columns=1 n-rows=1 --> + <object class="GtkGrid"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="position">14</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="background"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes" context="drawtemplatedialog|background">Highlighting</property> + </object> + <packing> + <property name="position">14</property> + <property name="tab_fill">False</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + <action-widgets> + <action-widget response="101">reset</action-widget> + <action-widget response="102">standard</action-widget> + <action-widget response="-5">ok</action-widget> + <action-widget response="-6">cancel</action-widget> + <action-widget response="-11">help</action-widget> + </action-widgets> + </object> +</interface> commit debf3e06bc5330b227dc9dd55e49930cb3da522a Author: Maxim Monastirsky <momonas...@gmail.com> AuthorDate: Fri Mar 17 14:51:25 2023 +0200 Commit: Maxim Monastirsky <momonas...@gmail.com> CommitDate: Wed Mar 22 10:16:03 2023 +0000 sc drawstyles: Add a style UNO property to shapes Change-Id: I5c8eb3c3e182d9efefc385020b97d768e615a20a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149278 Tested-by: Jenkins Reviewed-by: Maxim Monastirsky <momonas...@gmail.com> diff --git a/sc/inc/styleuno.hxx b/sc/inc/styleuno.hxx index d19feed3563a..07bf2cb7b12d 100644 --- a/sc/inc/styleuno.hxx +++ b/sc/inc/styleuno.hxx @@ -170,7 +170,6 @@ private: OUString aStyleName; SfxStyleSheetBase* pStyle_cached; - SfxStyleSheetBase* GetStyle_Impl( bool bUseCachedValue = false ); const SfxItemSet* GetStyleItemSet_Impl( std::u16string_view rPropName, const SfxItemPropertyMapEntry*& rpEntry ); /// @throws css::beans::UnknownPropertyException /// @throws css::uno::RuntimeException @@ -198,6 +197,7 @@ public: bool IsInserted() const { return pDocShell != nullptr; } SfxStyleFamily GetFamily() const { return eFamily; } void InitDoc( ScDocShell* pNewDocSh, const OUString& rNewName ); + SfxStyleSheetBase* GetStyle_Impl( bool bUseCachedValue = false ); virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override; diff --git a/sc/inc/unonames.hxx b/sc/inc/unonames.hxx index abb09c334c10..4617bcf46700 100644 --- a/sc/inc/unonames.hxx +++ b/sc/inc/unonames.hxx @@ -198,6 +198,7 @@ inline constexpr OUStringLiteral SC_UNONAME_HORIPOS = u"HoriOrientPosit inline constexpr OUStringLiteral SC_UNONAME_VERTPOS = u"VertOrientPosition"; inline constexpr OUStringLiteral SC_UNONAME_HYPERLINK = u"Hyperlink"; inline constexpr OUStringLiteral SC_UNONAME_MOVEPROTECT = u"MoveProtect"; +inline constexpr OUStringLiteral SC_UNONAME_STYLE = u"Style"; // other cell properties inline constexpr OUStringLiteral SC_UNONAME_CHCOLHDR = u"ChartColumnAsLabel"; diff --git a/sc/source/ui/unoobj/shapeuno.cxx b/sc/source/ui/unoobj/shapeuno.cxx index 2dfd6ca10701..67931eab9a83 100644 --- a/sc/source/ui/unoobj/shapeuno.cxx +++ b/sc/source/ui/unoobj/shapeuno.cxx @@ -33,6 +33,7 @@ #include <cppuhelper/supportsservice.hxx> #include <comphelper/diagnose_ex.hxx> +#include <com/sun/star/beans/PropertyAttribute.hpp> #include <com/sun/star/drawing/XShape.hpp> #include <com/sun/star/lang/NoSupportException.hpp> @@ -44,6 +45,7 @@ #include <drwlayer.hxx> #include <userdat.hxx> #include <unonames.hxx> +#include <styleuno.hxx> using namespace ::com::sun::star; @@ -59,6 +61,7 @@ static o3tl::span<const SfxItemPropertyMapEntry> lcl_GetShapeMap() { SC_UNONAME_MOVEPROTECT, 0, cppu::UnoType<sal_Bool>::get(), 0, 0 }, { SC_UNONAME_HYPERLINK, 0, cppu::UnoType<OUString>::get(), 0, 0 }, { SC_UNONAME_URL, 0, cppu::UnoType<OUString>::get(), 0, 0 }, + { SC_UNONAME_STYLE, 0, cppu::UnoType<style::XStyle>::get(), css::beans::PropertyAttribute::MAYBEVOID, 0 }, }; return aShapeMap_Impl; } @@ -649,6 +652,22 @@ void SAL_CALL ScShapeObj::setPropertyValue(const OUString& aPropertyName, const pObj->SetMoveProtect( aProt ); } } + else if ( aPropertyName == SC_UNONAME_STYLE ) + { + if (SdrObject* pObj = GetSdrObject()) + { + uno::Reference<style::XStyle> xStyle(aValue, uno::UNO_QUERY); + auto pStyleSheetObj = dynamic_cast<ScStyleObj*>(xStyle.get()); + if (!pStyleSheetObj) + throw lang::IllegalArgumentException(); + + auto pStyleSheet = pStyleSheetObj->GetStyle_Impl(); + auto pOldStyleSheet = pObj->GetStyleSheet(); + + if (pStyleSheet != pOldStyleSheet) + pObj->SetStyleSheet(static_cast<SfxStyleSheet*>(pStyleSheet), false); + } + } else { GetShapePropertySet(); @@ -843,6 +862,20 @@ uno::Any SAL_CALL ScShapeObj::getPropertyValue( const OUString& aPropertyName ) aProt = pObj->IsMoveProtect(); aAny <<= aProt; } + else if ( aPropertyName == SC_UNONAME_STYLE ) + { + if (SdrObject* pObj = GetSdrObject()) + { + if (auto pStyleSheet = pObj->GetStyleSheet()) + { + ScDrawLayer& rModel(static_cast< ScDrawLayer& >(pObj->getSdrModelFromSdrObject())); + ScDocument* pDoc = rModel.GetDocument(); + aAny <<= uno::Reference<style::XStyle>(new ScStyleObj( + static_cast<ScDocShell*>(pDoc ? pDoc->GetDocumentShell() : nullptr), + SfxStyleFamily::Frame, pStyleSheet->GetName())); + } + } + } else { if(!pShapePropertySet) //performance consideration