chart2/source/controller/dialogs/dlg_Theme.cxx              |   66 ++++++++----
 chart2/source/controller/inc/ChartController.hxx            |    3 
 chart2/source/controller/inc/dlg_Theme.hxx                  |    6 -
 chart2/source/controller/main/ChartController.cxx           |   58 ++++++++++
 chart2/source/controller/main/ControllerCommandDispatch.cxx |    2 
 chart2/source/controller/sidebar/ChartThemeControl.cxx      |   21 +++
 chart2/source/controller/sidebar/ChartThemeControl.hxx      |    3 
 chart2/source/controller/sidebar/ChartThemePanel.cxx        |    2 
 chart2/uiconfig/ui/chartthemepopup.ui                       |   29 +++++
 chart2/uiconfig/ui/dlg_Theme.ui                             |   44 ++++++--
 svx/source/svdraw/svdmrkv.cxx                               |   26 ++++
 vcl/inc/jsdialog/jsdialogbuilder.hxx                        |    2 
 vcl/jsdialog/jsdialogbuilder.cxx                            |   12 ++
 13 files changed, 236 insertions(+), 38 deletions(-)

New commits:
commit 0fcda0e8780be6b5e72a302560c6f9b34521a91e
Author:     Attila Szűcs <[email protected]>
AuthorDate: Tue Sep 2 14:35:40 2025 +0200
Commit:     Caolán McNamara <[email protected]>
CommitDate: Fri Sep 26 14:53:33 2025 +0200

    Chart themes improvements
    
    Added a selection only version for manage themes.
    Added manage themes button to select theme popup.
    Added uno command for save to new theme.
    Renamed chart theme to chart style in UI.
    added some things needed for lok.
    
    Change-Id: Iae79603445914fe08c89ce7e45bb5bc12ee2ae3d
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/190525
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Reviewed-by: Caolán McNamara <[email protected]>
    Tested-by: Caolán McNamara <[email protected]>

diff --git a/chart2/source/controller/dialogs/dlg_Theme.cxx 
b/chart2/source/controller/dialogs/dlg_Theme.cxx
index d994ebdd9630..a60b6e96a2a9 100644
--- a/chart2/source/controller/dialogs/dlg_Theme.cxx
+++ b/chart2/source/controller/dialogs/dlg_Theme.cxx
@@ -30,31 +30,36 @@ using namespace css;
 
 namespace chart
 {
-SchThemeDlg::SchThemeDlg(weld::Window* pWindow, ChartController* pController)
+SchThemeDlg::SchThemeDlg(weld::Window* pWindow, ChartController* pController, 
bool bSelectOnly)
     : GenericDialogController(pWindow, u"modules/schart/ui/dlg_Theme.ui"_ustr,
                               u"ChartThemeDialog"_ustr)
     , mxModel(pController->getChartModel())
     , mpController(pController)
+    , mbSelectOnly(bSelectOnly)
     , mxThemeIconView(m_xBuilder->weld_icon_view(u"themeview"_ustr))
-    , mxSaveTheme(m_xBuilder->weld_button(u"save"_ustr))
-    , mxLoadTheme(m_xBuilder->weld_button(u"load"_ustr))
-    , mxDeleteTheme(m_xBuilder->weld_button(u"delete"_ustr))
-    , mxSaveToNewTheme(m_xBuilder->weld_button(u"savetonew"_ustr))
+    , mxSaveTheme(m_xBuilder->weld_button(u"chartsave"_ustr))
+    , mxLoadTheme(m_xBuilder->weld_button(u"chartload"_ustr))
+    , mxDeleteTheme(m_xBuilder->weld_button(u"chartdelete"_ustr))
+    , mxSaveToNewTheme(m_xBuilder->weld_button(u"chartsavetonew"_ustr))
+    , mxChangeToManage(m_xBuilder->weld_button(u"chartmanage"_ustr))
 {
     mxThemeIconView->connect_selection_changed(LINK(this, SchThemeDlg, 
ThemeSelectedHdl));
+    mxThemeIconView->connect_item_activated(LINK(this, SchThemeDlg, 
ThemeItemActivatedHdl));
 
     mxSaveTheme->connect_clicked(LINK(this, SchThemeDlg, ClickSaveHdl));
     mxLoadTheme->connect_clicked(LINK(this, SchThemeDlg, ClickLoadHdl));
     mxDeleteTheme->connect_clicked(LINK(this, SchThemeDlg, ClickDeleteHdl));
     mxSaveToNewTheme->connect_clicked(LINK(this, SchThemeDlg, 
ClickSaveToNewHdl));
+    mxChangeToManage->connect_clicked(LINK(this, SchThemeDlg, 
ClickChangeToManageHdl));
 
     mxSaveTheme->set_sensitive(false);
     mxDeleteTheme->set_sensitive(false);
 
-    mxSaveTheme->set_visible(true);
-    mxLoadTheme->set_visible(true);
-    mxDeleteTheme->set_visible(true);
-    mxSaveToNewTheme->set_visible(true);
+    mxChangeToManage->set_visible(mbSelectOnly);
+    mxSaveTheme->set_visible(!mbSelectOnly);
+    mxLoadTheme->set_visible(!mbSelectOnly);
+    mxDeleteTheme->set_visible(!mbSelectOnly);
+    mxSaveToNewTheme->set_visible(!mbSelectOnly);
 
     mxThemeIconView->set_item_width(200);
 
@@ -163,20 +168,20 @@ IMPL_LINK_NOARG(SchThemeDlg, ClickDeleteHdl, 
weld::Button&, void)
     if (sId.isEmpty())
         return;
     int nIndex = sId.toInt32();
-    // remove it from the themes
-    ChartThemesType& aChartTypes = ChartThemesType::getInstance();
-    aChartTypes.m_aThemes.erase(aChartTypes.m_aThemes.begin() + nIndex);
-    // remove it from the list
-    mxThemeIconView->remove(nIndex);
-    // fix the numbers in the list.
+    // fix the numbers in the list, before the delete
     int nThemeCount = ChartThemesType::getInstance().getThemesCount();
-    for (int i = nIndex; i < nThemeCount; i++)
+    for (int i = nIndex + 1; i < nThemeCount; i++)
     {
-        sId = OUString::number(i);
-        OUString sLayoutName = OUString::number(i);
+        sId = OUString::number(i - 1);
+        OUString sLayoutName = OUString::number(i - 1);
         mxThemeIconView->set_id(i, sId);
         mxThemeIconView->set_text(i, sLayoutName);
     }
+    // remove it from the themes
+    ChartThemesType& aChartTypes = ChartThemesType::getInstance();
+    aChartTypes.m_aThemes.erase(aChartTypes.m_aThemes.begin() + nIndex);
+    // remove it from the list
+    mxThemeIconView->remove(nIndex);
 }
 
 IMPL_LINK_NOARG(SchThemeDlg, ClickSaveToNewHdl, weld::Button&, void)
@@ -199,6 +204,17 @@ IMPL_LINK_NOARG(SchThemeDlg, ClickSaveToNewHdl, 
weld::Button&, void)
     device1.disposeAndClear();
 }
 
+IMPL_LINK_NOARG(SchThemeDlg, ClickChangeToManageHdl, weld::Button&, void)
+{
+    mbSelectOnly = false;
+    mxChangeToManage->set_visible(mbSelectOnly);
+    mxSaveTheme->set_visible(!mbSelectOnly);
+    mxLoadTheme->set_visible(!mbSelectOnly);
+    mxDeleteTheme->set_visible(!mbSelectOnly);
+    mxSaveToNewTheme->set_visible(!mbSelectOnly);
+    // Todo: resize window.
+}
+
 IMPL_LINK_NOARG(SchThemeDlg, ThemeSelectedHdl, weld::IconView&, void)
 {
     // enable / disable buttons based on the selected theme
@@ -219,6 +235,20 @@ IMPL_LINK_NOARG(SchThemeDlg, ThemeSelectedHdl, 
weld::IconView&, void)
     mxLoadTheme->set_sensitive(bSelected);
 }
 
+IMPL_LINK_NOARG(SchThemeDlg, ThemeItemActivatedHdl, weld::IconView&, bool)
+{
+    if (mbSelectOnly)
+    {
+        OUString sId = mxThemeIconView->get_selected_id();
+        if (sId.isEmpty())
+            return false;
+        int nIndex = sId.toInt32();
+        mpController->setTheme(nIndex);
+        return true;
+    }
+    return false;
+}
+
 } //namespace chart
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/ChartController.hxx 
b/chart2/source/controller/inc/ChartController.hxx
index 475c8b52f5c9..b2975c4993cc 100644
--- a/chart2/source/controller/inc/ChartController.hxx
+++ b/chart2/source/controller/inc/ChartController.hxx
@@ -439,7 +439,8 @@ private:
     void executeDlg_ObjectProperties_withUndoGuard( std::shared_ptr<UndoGuard> 
aUndoGuard, const OUString& rObjectCID, bool bSuccessOnUnchanged );
 
     void executeDispatch_ChartType();
-    void executeDispatch_ManageThemes();
+    void executeDispatch_ManageThemes(bool bSelectOnly = false);
+    void executeDispatch_SaveToNewTheme();
 
     void executeDispatch_InsertTitles();
     void executeDispatch_InsertLegend();
diff --git a/chart2/source/controller/inc/dlg_Theme.hxx 
b/chart2/source/controller/inc/dlg_Theme.hxx
index 3891e205565d..72dbde277409 100644
--- a/chart2/source/controller/inc/dlg_Theme.hxx
+++ b/chart2/source/controller/inc/dlg_Theme.hxx
@@ -30,23 +30,27 @@ class SchThemeDlg final : public 
weld::GenericDialogController
 private:
     rtl::Reference<ChartModel> mxModel;
     ChartController* mpController;
+    bool mbSelectOnly;
 
     std::unique_ptr<weld::IconView> mxThemeIconView;
     std::unique_ptr<weld::Button> mxSaveTheme;
     std::unique_ptr<weld::Button> mxLoadTheme;
     std::unique_ptr<weld::Button> mxDeleteTheme;
     std::unique_ptr<weld::Button> mxSaveToNewTheme;
+    std::unique_ptr<weld::Button> mxChangeToManage;
 
     DECL_LINK(ClickSaveHdl, weld::Button&, void);
     DECL_LINK(ClickLoadHdl, weld::Button&, void);
     DECL_LINK(ClickDeleteHdl, weld::Button&, void);
     DECL_LINK(ClickSaveToNewHdl, weld::Button&, void);
+    DECL_LINK(ClickChangeToManageHdl, weld::Button&, void);
     DECL_LINK(ThemeSelectedHdl, weld::IconView&, void);
+    DECL_LINK(ThemeItemActivatedHdl, weld::IconView&, bool);
 
     VclPtr<VirtualDevice> makeImage(int nIndex);
 
 public:
-    SchThemeDlg(weld::Window* pParent, ChartController* pController);
+    SchThemeDlg(weld::Window* pParent, ChartController* pController, bool 
bSelectOnly);
 };
 
 } //namespace chart
diff --git a/chart2/source/controller/main/ChartController.cxx 
b/chart2/source/controller/main/ChartController.cxx
index e9bc36e05081..ca1ff7dadc6d 100644
--- a/chart2/source/controller/main/ChartController.cxx
+++ b/chart2/source/controller/main/ChartController.cxx
@@ -1150,6 +1150,44 @@ void SAL_CALL ChartController::dispatch(
         this->executeDispatch_EditData();
     else if( aCommand == "ManageThemes")
         this->executeDispatch_ManageThemes();
+    else if (aCommand == "SelectTheme")
+    {
+        this->executeDispatch_ManageThemes(true);
+        // Todo: try to make a popup window only
+        // it did something but not displayed anything.
+
+        //static std::shared_ptr<sidebar::ChartThemeControl> pThemeControl
+        //    = std::make_shared<sidebar::ChartThemeControl>(m_xCC);
+        //assert(pThemeControl);
+        //std::shared_ptr<sidebar::IThemeHandler> mxThemeWrapper
+        //    = sidebar::createThemeWrapper(getChartModel(), 
pThemeControl.get(), this);
+        //pThemeControl->setThemeHandler(mxThemeWrapper);
+        //pThemeControl->weldPopupWindow();
+
+        // it need addition includes:
+        //#include <../sidebar/ChartThemePanel.hxx>
+        //#include <../sidebar/ChartThemeControl.hxx>
+
+        // it need createThemeWrapper a ChartThemePanel.cxx:
+        //std::shared_ptr<sidebar::IThemeHandler> createThemeWrapper(
+        //    rtl::Reference<ChartModel> xModel, ChartThemeControl * pControl,
+        //    ChartController * pController)
+        //{
+        //    return std::make_shared<sidebar::ThemeWrapper>(xModel, pControl, 
pController);
+        //}
+
+        // and in a ChartThemePanel.hxx:
+        //struct IThemeHandler;
+        //class ChartThemeControl;
+        //
+        //std::shared_ptr<sidebar::IThemeHandler> createThemeWrapper(
+        //    rtl::Reference<ChartModel> xModel, ChartThemeControl * pControl,
+        //    ChartController * pController);
+    }
+    else if (aCommand == "ChartSaveToNewTheme")
+    {
+        this->executeDispatch_SaveToNewTheme();
+    }
     //insert objects
     else if( aCommand == "InsertTitles"
         || aCommand == "InsertMenuTitles")
@@ -1590,7 +1628,7 @@ void ChartController::executeDispatch_ChartType()
     });
 }
 
-void ChartController::executeDispatch_ManageThemes()
+void ChartController::executeDispatch_ManageThemes(bool bSelectOnly)
 {
     SolarMutexGuard aSolarGuard;
     auto xUndoGuard = std::make_shared<UndoGuard>(
@@ -1600,7 +1638,7 @@ void ChartController::executeDispatch_ManageThemes()
 
     try
     {
-        auto aDlg = std::make_shared<SchThemeDlg>(GetChartFrame(), this);
+        auto aDlg = std::make_shared<SchThemeDlg>(GetChartFrame(), this, 
bSelectOnly);
         weld::DialogController::runAsync(
             aDlg,
             [aDlg, xUndoGuard = std::move(xUndoGuard)](int nResult) {
@@ -1616,6 +1654,18 @@ void ChartController::executeDispatch_ManageThemes()
     }
 }
 
+void ChartController::executeDispatch_SaveToNewTheme()
+{
+    ChartThemesType& aChartTypes = ChartThemesType::getInstance();
+    int nIndex = aChartTypes.m_aThemes.size();
+    // maximum 256 chart styles
+    // Todo: maybe we could figure out some other way to limit this.
+    if (nIndex >= 256)
+    {
+        return;
+    }
+    saveTheme(nIndex);
+}
 
 void ChartController::executeDispatch_SourceData()
 {
@@ -1849,6 +1899,8 @@ const o3tl::sorted_vector< std::u16string_view >& 
ChartController::impl_getAvail
         // toolbar commands
         u"ChartElementSelector",
         u"ManageThemes",
+        u"SelectTheme",
+        u"ChartSaveToNewTheme",
 
         // LOK commands
         u"LOKSetTextSelection", u"LOKTransform",
@@ -2342,7 +2394,7 @@ ChartThemesType::ChartThemesType()
         ChartThemeElementID nElementType = ChartThemeElementID(i % 
ElementCount);
 
         sal_uInt32 nHeight = 240 + i * 10;
-        sal_uInt32 nColor = 170 << (i % 15);
+        sal_uInt32 nColor = 0xff000000 + (170 << (i % 15));
         const Color aColor(ColorAlpha, nColor);
         short nKerning = 0;
         FontWeight nBold = WEIGHT_NORMAL;
diff --git a/chart2/source/controller/main/ControllerCommandDispatch.cxx 
b/chart2/source/controller/main/ControllerCommandDispatch.cxx
index 8c4806d880e2..5c9742d641c2 100644
--- a/chart2/source/controller/main/ControllerCommandDispatch.cxx
+++ b/chart2/source/controller/main/ControllerCommandDispatch.cxx
@@ -598,6 +598,8 @@ void ControllerCommandDispatch::updateCommandAvailability()
         bShapeContext || ( bIsWritable && bControllerStateIsValid && ( 
m_apControllerState->bMayMoveSeriesForward || 
m_apControllerState->bMayMoveSeriesBackward ) );
 
     m_aCommandAvailability[ u".uno:ManageThemes"_ustr] = true;
+    m_aCommandAvailability[ u".uno:SelectTheme"_ustr] = true;
+    m_aCommandAvailability[ u".uno:ChartSaveToNewTheme"_ustr] = true;
 
     // insert objects
     m_aCommandAvailability[ u".uno:InsertTitles"_ustr ] = 
m_aCommandAvailability[ u".uno:InsertMenuTitles"_ustr ] = bIsWritable;
diff --git a/chart2/source/controller/sidebar/ChartThemeControl.cxx 
b/chart2/source/controller/sidebar/ChartThemeControl.cxx
index 546422aeab70..84627f1ba15c 100644
--- a/chart2/source/controller/sidebar/ChartThemeControl.cxx
+++ b/chart2/source/controller/sidebar/ChartThemeControl.cxx
@@ -18,6 +18,7 @@
  */
 
 #include <com/sun/star/drawing/FillStyle.hpp>
+#include <comphelper/dispatchcommand.hxx>
 
 #include <memory>
 #include <utility>
@@ -164,11 +165,17 @@ ChartThemePopup::ChartThemePopup(ChartThemeControl* 
pControl, weld::Widget* pPar
     : WeldToolbarPopup(pControl->getFrameInterface(), pParent,
                        "modules/schart/ui/chartthemepopup.ui", "ThemeWindow")
     , mxControl(pControl)
-    , mxThemesIconView(m_xBuilder->weld_icon_view(u"themeview"_ustr))
+    , mxThemesIconView(m_xBuilder->weld_icon_view(u"themeview1col"_ustr))
+    , 
mxManageChartStylesButton(m_xBuilder->weld_button(u"managechartstyle"_ustr))
 {
     mxThemesIconView->connect_item_activated(LINK(this, ChartThemePopup, 
ThemeSelectedHdl));
     mxThemesIconView->set_item_width(ChartThemeThumbSizeX);
 
+    mxManageChartStylesButton->set_visible(true);
+    mxManageChartStylesButton->set_sensitive(true);
+    mxManageChartStylesButton->connect_clicked(
+        LINK(this, ChartThemePopup, ClickManageChartStyleHdl));
+
     int nThemeCount = ChartThemesType::getInstance().getThemesCount();
     for (int i = 0; i < nThemeCount; i++)
     {
@@ -181,7 +188,11 @@ ChartThemePopup::ChartThemePopup(ChartThemeControl* 
pControl, weld::Widget* pPar
     }
 }
 
-ChartThemePopup::~ChartThemePopup() { mxThemesIconView.reset(); }
+ChartThemePopup::~ChartThemePopup()
+{
+    mxThemesIconView.reset();
+    mxManageChartStylesButton.reset();
+}
 
 VclPtr<VirtualDevice> ChartThemePopup::makeImage(int nIndex)
 {
@@ -216,6 +227,12 @@ IMPL_LINK_NOARG(ChartThemePopup, ThemeSelectedHdl, 
weld::IconView&, bool)
     return true;
 }
 
+IMPL_LINK_NOARG(ChartThemePopup, ClickManageChartStyleHdl, weld::Button&, void)
+{
+    comphelper::dispatchCommand(u".uno:ManageThemes"_ustr, 
mxControl->getFrameInterface(), {});
+    mxControl->EndPopupMode();
+}
+
 } // end namespace chart::sidebar
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/sidebar/ChartThemeControl.hxx 
b/chart2/source/controller/sidebar/ChartThemeControl.hxx
index d380416220c8..c4f88f5ad1d2 100644
--- a/chart2/source/controller/sidebar/ChartThemeControl.hxx
+++ b/chart2/source/controller/sidebar/ChartThemeControl.hxx
@@ -12,6 +12,7 @@
 
 #include <svtools/popupwindowcontroller.hxx>
 #include <svtools/toolbarmenu.hxx>
+#include <sfx2/weldutils.hxx>
 
 namespace chart
 {
@@ -59,8 +60,10 @@ class ChartThemePopup final : public WeldToolbarPopup
 {
     rtl::Reference<ChartThemeControl> mxControl;
     std::unique_ptr<weld::IconView> mxThemesIconView;
+    std::unique_ptr<weld::Button> mxManageChartStylesButton;
 
     DECL_LINK(ThemeSelectedHdl, weld::IconView&, bool);
+    DECL_LINK(ClickManageChartStyleHdl, weld::Button&, void);
 
     void GrabFocus() override;
 
diff --git a/chart2/source/controller/sidebar/ChartThemePanel.cxx 
b/chart2/source/controller/sidebar/ChartThemePanel.cxx
index 8a4756db7899..9e9038d625f0 100644
--- a/chart2/source/controller/sidebar/ChartThemePanel.cxx
+++ b/chart2/source/controller/sidebar/ChartThemePanel.cxx
@@ -123,7 +123,7 @@ VclPtr<VirtualDevice> 
ThemeWrapper::makePictureFromThemedChart(sal_uInt32 nIndex
             aRSP.toggleAutoResizeState();
         }
 
-        int scale = 4;
+        int scale = 1;
         mxModel2->setVisualAreaSize(1, awt::Size(aSize.Width / scale, 
aSize.Height / scale));
         device1->SetOutputSize(Size(aSize.Width / scale, aSize.Height / 
scale));
 
diff --git a/chart2/uiconfig/ui/chartthemepopup.ui 
b/chart2/uiconfig/ui/chartthemepopup.ui
index cfd16fcdbc6c..4108532ed580 100644
--- a/chart2/uiconfig/ui/chartthemepopup.ui
+++ b/chart2/uiconfig/ui/chartthemepopup.ui
@@ -2,6 +2,14 @@
 <!-- Generated with glade 3.40.0 -->
 <interface domain="chart">
   <requires lib="gtk+" version="3.20"/>
+  <object class="GtkTreeStore" id="liststore1">
+    <columns>
+      <!-- column-name pixbuf -->
+      <column type="GdkPixbuf"/>
+      <!-- column-name id -->
+      <column type="gchararray"/>
+    </columns>
+  </object>
   <object class="GtkPopover" id="ThemeWindow">
     <property name="can-focus">False</property>
     <child>
@@ -21,16 +29,35 @@
             <property name="shadow-type">in</property>
             <property name="min-content-width">192</property>
             <child>
-              <object class="GtkIconView" id="themeview">
+              <object class="GtkIconView" id="themeview1col">
                 <property name="visible">True</property>
                 <property name="can-focus">True</property>
                 <property name="margin">0</property>
                 <property name="model">liststore1</property>
+                <property name="pixbuf-column">0</property>
                 <property name="columns">1</property>
                 <property name="item-width">192</property>
               </object>
             </child>
           </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkButton" id="managechartstyle">
+            <property name="label" translatable="yes" 
context="chartthemepopup|managechartstyle">_Manage chart styles</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>
       </object>
     </child>
diff --git a/chart2/uiconfig/ui/dlg_Theme.ui b/chart2/uiconfig/ui/dlg_Theme.ui
index 1baa0b03654a..7774fe8ddec6 100644
--- a/chart2/uiconfig/ui/dlg_Theme.ui
+++ b/chart2/uiconfig/ui/dlg_Theme.ui
@@ -2,10 +2,18 @@
 <!-- Generated with glade 3.40.0 -->
 <interface domain="chart">
   <requires lib="gtk+" version="3.20"/>
+  <object class="GtkTreeStore" id="liststore1">
+    <columns>
+      <!-- column-name pixbuf -->
+      <column type="GdkPixbuf"/>
+      <!-- column-name id -->
+      <column type="gchararray"/>
+    </columns>
+  </object>
   <object class="GtkDialog" id="ChartThemeDialog">
     <property name="can-focus">False</property>
     <property name="border-width">6</property>
-    <property name="title" translatable="yes" 
context="dlg_Theme|ChartThemeDialog">Manage Chart Themes</property>
+    <property name="title" translatable="yes" 
context="dlg_Theme|ChartThemeDialog">Manage Chart Styles</property>
     <property name="modal">True</property>
     <property name="default-width">0</property>
     <property name="default-height">0</property>
@@ -35,12 +43,12 @@
               <object class="GtkLabel" id="iconviewlabel">
                 <property name="visible">True</property>
                 <property name="can-focus">False</property>
-                <property name="tooltip-text" translatable="yes" 
context="dlg_Theme|iconviewlabel|tooltip_text">Selectable chart themes 
list.</property>
+                <property name="tooltip-text" translatable="yes" 
context="dlg_Theme|iconviewlabel|tooltip_text">Selectable chart styles 
list.</property>
                 <property name="halign">start</property>
                 <property name="valign">start</property>
                 <property name="hexpand">False</property>
                 <property name="vexpand">False</property>
-                <property name="label" translatable="yes" 
context="dlg_Theme|iconviewlabel">_Chart themes:</property>
+                <property name="label" translatable="yes" 
context="dlg_Theme|iconviewlabel">_Chart styles:</property>
                 <property name="use-underline">True</property>
                 <property name="xalign">0</property>
                 <accessibility>
@@ -81,6 +89,7 @@
                         <property name="can-focus">True</property>
                         <property name="margin">0</property>
                         <property name="model">liststore1</property>
+                        <property name="pixbuf-column">0</property>
                         <property name="hexpand">True</property>
                         <property name="vexpand">True</property>
                         <property name="columns">1</property>
@@ -109,8 +118,8 @@
                     <property name="row-spacing">3</property>
                     <property name="column-spacing">6</property>
                     <child>
-                      <object class="GtkButton" id="load">
-                        <property name="label" translatable="yes" 
context="dlg_Theme|themeload">_Load theme to chart</property>
+                      <object class="GtkButton" id="chartload">
+                        <property name="label" translatable="yes" 
context="dlg_Theme|chartload">_Load style to chart</property>
                         <property name="can-focus">True</property>
                         <property name="receives-default">True</property>
                         <property name="use-underline">True</property>
@@ -121,8 +130,8 @@
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkButton" id="save">
-                        <property name="label" translatable="yes" 
context="dlg_Theme|themesave">_Save to theme</property>
+                      <object class="GtkButton" id="chartsave">
+                        <property name="label" translatable="yes" 
context="dlg_Theme|chartsave">_Save to styles</property>
                         <property name="can-focus">True</property>
                         <property name="receives-default">True</property>
                         <property name="use-underline">True</property>
@@ -133,8 +142,8 @@
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkButton" id="delete">
-                        <property name="label" translatable="yes" 
context="dlg_Theme|themedelete">_Delete theme</property>
+                      <object class="GtkButton" id="chartdelete">
+                        <property name="label" translatable="yes" 
context="dlg_Theme|chartdelete">_Delete style</property>
                         <property name="can-focus">True</property>
                         <property name="receives-default">True</property>
                         <property name="use-underline">True</property>
@@ -145,8 +154,8 @@
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkButton" id="savetonew">
-                        <property name="label" translatable="yes" 
context="dlg_Theme|themesavenew">_Save to new theme</property>
+                      <object class="GtkButton" id="chartsavetonew">
+                        <property name="label" translatable="yes" 
context="dlg_Theme|chartsavenew">Save to _new style</property>
                         <property name="can-focus">True</property>
                         <property name="receives-default">True</property>
                         <property name="use-underline">True</property>
@@ -169,6 +178,19 @@
                 <property name="position">1</property>
               </packing>
             </child>
+            <child>
+              <object class="GtkButton" id="chartmanage">
+                <property name="label" translatable="yes" 
context="dlg_Theme|chartmanage">_Manage chart styles</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">2</property>
+              </packing>
+            </child>
           </object>
           <packing>
             <property name="expand">True</property>
diff --git a/svx/source/svdraw/svdmrkv.cxx b/svx/source/svdraw/svdmrkv.cxx
index 192fdc028409..ed79f7521e4a 100644
--- a/svx/source/svdraw/svdmrkv.cxx
+++ b/svx/source/svdraw/svdmrkv.cxx
@@ -759,6 +759,27 @@ bool lcl_isStarMath(SdrObject* pO)
     return false;
 }
 
+bool lcl_isChartPage(std::u16string_view aCID)
+{
+    size_t nLastSign = aCID.rfind(':'); //last sign before the type string
+    if (nLastSign == std::u16string_view::npos)
+        nLastSign = aCID.rfind('/');
+    if (nLastSign == std::u16string_view::npos && aCID.rfind('=') != 
std::u16string_view::npos)
+        nLastSign = 0;
+
+    if (nLastSign < std::u16string_view::npos)
+    {
+        if (nLastSign > 0)
+            nLastSign++;
+
+        if (o3tl::starts_with(aCID.substr(nLastSign), u"Page"))
+        {
+            return true;
+        }
+    }
+    return false;
+}
+
 } // anonymous namespace
 
 bool SdrMarkView::dumpGluePointsToJSON(boost::property_tree::ptree& rTree)
@@ -1032,6 +1053,11 @@ void 
SdrMarkView::SetMarkHandlesForLOKit(tools::Rectangle const & rRect, const S
                     OUString aValue;
                     if (aSel >>= aValue)
                     {
+                        if (lcl_isChartPage(aValue))
+                        {
+                            aExtraInfo.append(", \"isChartPage\": true");
+                        }
+
                         OString aObjectCID(aValue.getStr(), 
aValue.getLength(), osl_getThreadTextEncoding());
                         const std::vector<OString> aProps{"Draggable"_ostr, 
"Resizable"_ostr, "Rotatable"_ostr};
                         for (const auto& rProp: aProps)
diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 37b1f45f442c..bd733f2a4669 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -780,6 +780,8 @@ public:
                         const VirtualDevice* pIcon, weld::TreeIter* pRet) 
override;
 
     virtual void insert_separator(int pos, const OUString* pId) override;
+    virtual void remove(int pos) override;
+    virtual void set_image(int pos, VirtualDevice* pIcon) override;
 
     virtual void clear() override;
     virtual void select(int pos) override;
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 9138f9faca65..a7ac443bf561 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -1924,6 +1924,18 @@ void JSIconView::insert_separator(int pos, const 
OUString* pId)
     sendUpdate();
 }
 
+void JSIconView::remove(int pos)
+{
+    SalInstanceIconView::remove(pos);
+    sendUpdate();
+}
+
+void JSIconView::set_image(int pos, VirtualDevice* pIcon)
+{
+    SalInstanceIconView::set_image(pos, pIcon);
+    sendUpdate();
+}
+
 void JSIconView::clear()
 {
     SalInstanceIconView::clear();

Reply via email to