[Libreoffice-commits] core.git: Branch 'libreoffice-6-4' - cui/source include/vcl vcl/source vcl/unx

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Thu Nov 28 12:53:44 UTC 2019


 cui/source/customize/SvxMenuConfigPage.cxx    |   29 ++++++-------
 cui/source/customize/SvxToolbarConfigPage.cxx |   12 ++---
 cui/source/customize/cfg.cxx                  |   57 ++++++++++++++++----------
 cui/source/inc/cfg.hxx                        |    9 +++-
 include/vcl/weld.hxx                          |    5 +-
 vcl/source/app/salvtables.cxx                 |    8 +++
 vcl/unx/gtk3/gtk3gtkinst.cxx                  |    6 ++
 7 files changed, 81 insertions(+), 45 deletions(-)

New commits:
commit 7f1a82783ce1bfad08fcf39025c985c56fc3d90f
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Mon Nov 25 14:25:28 2019 +0000
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Thu Nov 28 13:53:03 2019 +0100

    tdf#126043 use another bulk_insert_for_each
    
    Change-Id: I05c3fc6e708d000ba955981dbd8d11371ea99da2
    Reviewed-on: https://gerrit.libreoffice.org/83686
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>
    (cherry picked from commit 05734503ed36cff64cfaac8afb7c6df5eced8873)
    Reviewed-on: https://gerrit.libreoffice.org/83983

diff --git a/cui/source/customize/SvxMenuConfigPage.cxx b/cui/source/customize/SvxMenuConfigPage.cxx
index 218d087349ad..7289b3506a7c 100644
--- a/cui/source/customize/SvxMenuConfigPage.cxx
+++ b/cui/source/customize/SvxMenuConfigPage.cxx
@@ -263,22 +263,21 @@ short SvxMenuConfigPage::QueryReset()
 
 void SvxMenuConfigPage::SelectElement()
 {
-    m_xContentsListBox->clear();
+    weld::TreeView& rTreeView = m_xContentsListBox->get_widget();
 
     SvxConfigEntry* pMenuData = GetTopLevelSelection();
-
-    if ( pMenuData )
+    if (!pMenuData)
+        rTreeView.clear();
+    else
     {
         SvxEntries* pEntries = pMenuData->GetEntries();
 
-        int i = 0;
-        for (auto const& entry : *pEntries)
-        {
+        rTreeView.bulk_insert_for_each(pEntries->size(), [this, &rTreeView, pEntries](weld::TreeIter& rIter, int nIdx) {
+            auto const& entry = (*pEntries)[nIdx];
             OUString sId(OUString::number(reinterpret_cast<sal_Int64>(entry)));
-            m_xContentsListBox->insert(i, sId);
-            InsertEntryIntoUI(entry, i, 0);
-            ++i;
-        }
+            rTreeView.set_id(rIter, sId);
+            InsertEntryIntoUI(entry, rTreeView, rIter, 0);
+        });
     }
 
     UpdateButtonStates();
@@ -364,9 +363,10 @@ IMPL_LINK_NOARG( SvxMenuConfigPage, AddCommandHdl, weld::Button&, void )
     int nPos = AddFunction(-1, /*bAllowDuplicates*/false);
     if (nPos == -1)
         return;
+    weld::TreeView& rTreeView = m_xContentsListBox->get_widget();
     SvxConfigEntry* pEntry =
-        reinterpret_cast<SvxConfigEntry*>(m_xContentsListBox->get_id(nPos).toInt64());
-    InsertEntryIntoUI(pEntry, nPos, 0);
+        reinterpret_cast<SvxConfigEntry*>(rTreeView.get_id(nPos).toInt64());
+    InsertEntryIntoUI(pEntry, rTreeView, nPos, 0);
 }
 
 IMPL_LINK_NOARG( SvxMenuConfigPage, RemoveCommandHdl, weld::Button&, void )
@@ -380,12 +380,13 @@ IMPL_LINK_NOARG( SvxMenuConfigPage, RemoveCommandHdl, weld::Button&, void )
 
 IMPL_LINK(SvxMenuConfigPage, InsertHdl, const OString&, rIdent, void)
 {
+    weld::TreeView& rTreeView = m_xContentsListBox->get_widget();
     if (rIdent == "insertseparator")
     {
         SvxConfigEntry* pNewEntryData = new SvxConfigEntry;
         pNewEntryData->SetUserDefined();
         int nPos = AppendEntry(pNewEntryData, -1);
-        InsertEntryIntoUI(pNewEntryData, nPos, 0);
+        InsertEntryIntoUI(pNewEntryData, rTreeView, nPos, 0);
     }
     else if (rIdent == "insertsubmenu")
     {
@@ -406,7 +407,7 @@ IMPL_LINK(SvxMenuConfigPage, InsertHdl, const OString&, rIdent, void)
             pNewEntryData->SetUserDefined();
 
             int nPos = AppendEntry(pNewEntryData, -1);
-            InsertEntryIntoUI(pNewEntryData, nPos, 0);
+            InsertEntryIntoUI(pNewEntryData, rTreeView, nPos, 0);
 
             ReloadTopLevelListBox();
 
diff --git a/cui/source/customize/SvxToolbarConfigPage.cxx b/cui/source/customize/SvxToolbarConfigPage.cxx
index b8058df387f5..b30302d52ed3 100644
--- a/cui/source/customize/SvxToolbarConfigPage.cxx
+++ b/cui/source/customize/SvxToolbarConfigPage.cxx
@@ -463,7 +463,7 @@ IMPL_LINK(SvxToolbarConfigPage, InsertHdl, const OString&, rIdent, void)
         pNewEntryData->SetUserDefined();
 
         int nPos = AppendEntry(pNewEntryData, -1);
-        InsertEntryIntoUI(pNewEntryData, nPos, 1);
+        InsertEntryIntoUI(pNewEntryData, m_xContentsListBox->get_widget(), nPos, 1);
 
         static_cast<ToolbarSaveInData*>( GetSaveInData())->ApplyToolbar( pToolbar );
 
@@ -561,7 +561,7 @@ IMPL_LINK(SvxToolbarConfigPage, ModifyItemHdl, const OString&, rIdent, void)
                     OUString sId(OUString::number(reinterpret_cast<sal_Int64>(pEntry)));
                     m_xContentsListBox->insert(nActEntry, sId);
                     m_xContentsListBox->set_toggle(nActEntry, pEntry->IsVisible() ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
-                    InsertEntryIntoUI(pEntry, nActEntry, 1);
+                    InsertEntryIntoUI(pEntry, m_xContentsListBox->get_widget(), nActEntry, 1);
 
                     m_xContentsListBox->select(nActEntry);
                     m_xContentsListBox->scroll_to_row(nActEntry);
@@ -601,7 +601,7 @@ IMPL_LINK(SvxToolbarConfigPage, ModifyItemHdl, const OString&, rIdent, void)
             OUString sId(OUString::number(reinterpret_cast<sal_Int64>(pEntry)));
             m_xContentsListBox->insert(nActEntry, sId);
             m_xContentsListBox->set_toggle(nActEntry, pEntry->IsVisible() ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
-            InsertEntryIntoUI(pEntry, nActEntry, 1);
+            InsertEntryIntoUI(pEntry, m_xContentsListBox->get_widget(), nActEntry, 1);
 
             m_xContentsListBox->select(nActEntry);
             m_xContentsListBox->scroll_to_row(nActEntry);
@@ -658,7 +658,7 @@ IMPL_LINK(SvxToolbarConfigPage, ModifyItemHdl, const OString&, rIdent, void)
             m_xContentsListBox->insert(nActEntry, sId);
             m_xContentsListBox->set_toggle(nActEntry,
                 pEntry->IsVisible() ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
-            InsertEntryIntoUI(pEntry, nActEntry, 1);
+            InsertEntryIntoUI(pEntry, m_xContentsListBox->get_widget(), nActEntry, 1);
 
             m_xContentsListBox->select(nActEntry);
             m_xContentsListBox->scroll_to_row(nActEntry);
@@ -790,7 +790,7 @@ void SvxToolbarConfigPage::SelectElement()
         m_xContentsListBox->insert(i, sId);
         if (entry->IsBinding() && !entry->IsSeparator())
             m_xContentsListBox->set_toggle(i,  entry->IsVisible() ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
-        InsertEntryIntoUI(entry, i, 1);
+        InsertEntryIntoUI(entry, m_xContentsListBox->get_widget(), i, 1);
         ++i;
     }
 
@@ -819,7 +819,7 @@ void SvxToolbarConfigPage::AddFunction(int nTarget)
         m_xContentsListBox->set_toggle(nNewLBEntry, TRISTATE_TRUE, 0);
     }
 
-    InsertEntryIntoUI(pEntry, nNewLBEntry, 1);
+    InsertEntryIntoUI(pEntry, m_xContentsListBox->get_widget(), nNewLBEntry, 1);
 
     // Changes are not visible on the toolbar until this point
     // TODO: Figure out a way to show the changes on the toolbar, but revert if
diff --git a/cui/source/customize/cfg.cxx b/cui/source/customize/cfg.cxx
index 1cb922bc51c6..8daf8409ed68 100644
--- a/cui/source/customize/cfg.cxx
+++ b/cui/source/customize/cfg.cxx
@@ -1506,34 +1506,49 @@ int SvxConfigPage::AppendEntry(
     return nNewEntry;
 }
 
-void SvxConfigPage::InsertEntryIntoUI(SvxConfigEntry* pNewEntryData, int nPos, int nStartCol)
+namespace
 {
-    OUString sId(OUString::number(reinterpret_cast<sal_Int64>(pNewEntryData)));
-
-    m_xContentsListBox->set_id(nPos, sId);
-
-    if (pNewEntryData->IsSeparator())
-    {
-        m_xContentsListBox->set_text(nPos, "----------------------------------", nStartCol + 1);
-    }
-    else
+    template<typename itertype> void TmplInsertEntryIntoUI(SvxConfigEntry* pNewEntryData, weld::TreeView& rTreeView, itertype& rIter, int nStartCol, SaveInData* pSaveInData, VirtualDevice& rDropDown)
     {
-        auto xImage = GetSaveInData()->GetImage(pNewEntryData->GetCommand());
-        if (xImage.is())
-            m_xContentsListBox->set_image(nPos, xImage, nStartCol);
-        OUString aName = SvxConfigPageHelper::stripHotKey( pNewEntryData->GetName() );
-        m_xContentsListBox->set_text(nPos, aName, nStartCol + 1);
-    }
+        OUString sId(OUString::number(reinterpret_cast<sal_Int64>(pNewEntryData)));
 
-    if (nStartCol == 0)  // menus
-    {
-        if (pNewEntryData->IsPopup() || pNewEntryData->GetStyle() & css::ui::ItemStyle::DROP_DOWN)
-            m_xContentsListBox->set_dropdown(nPos, nStartCol + 2);
+        rTreeView.set_id(rIter, sId);
+
+        if (pNewEntryData->IsSeparator())
+        {
+            rTreeView.set_text(rIter, "----------------------------------", nStartCol + 1);
+        }
         else
-            m_xContentsListBox->set_image(nPos, nullptr, nStartCol + 2);
+        {
+            auto xImage = pSaveInData->GetImage(pNewEntryData->GetCommand());
+            if (xImage.is())
+                rTreeView.set_image(rIter, xImage, nStartCol);
+            OUString aName = SvxConfigPageHelper::stripHotKey( pNewEntryData->GetName() );
+            rTreeView.set_text(rIter, aName, nStartCol + 1);
+        }
+
+        if (nStartCol == 0)  // menus
+        {
+            if (pNewEntryData->IsPopup() || pNewEntryData->GetStyle() & css::ui::ItemStyle::DROP_DOWN)
+                rTreeView.set_image(rIter, rDropDown, nStartCol + 2);
+            else
+                rTreeView.set_image(rIter, css::uno::Reference<css::graphic::XGraphic>(), nStartCol + 2);
+        }
     }
 }
 
+void SvxConfigPage::InsertEntryIntoUI(SvxConfigEntry* pNewEntryData, weld::TreeView& rTreeView, int nPos, int nStartCol)
+{
+    TmplInsertEntryIntoUI<int>(pNewEntryData, rTreeView, nPos, nStartCol,
+            GetSaveInData(), m_xContentsListBox->get_dropdown_image());
+}
+
+void SvxConfigPage::InsertEntryIntoUI(SvxConfigEntry* pNewEntryData, weld::TreeView& rTreeView, weld::TreeIter& rIter, int nStartCol)
+{
+    TmplInsertEntryIntoUI<weld::TreeIter>(pNewEntryData, rTreeView, rIter, nStartCol,
+            GetSaveInData(), m_xContentsListBox->get_dropdown_image());
+}
+
 IMPL_LINK(SvxConfigPage, MoveHdl, weld::Button&, rButton, void)
 {
     MoveEntry(&rButton == m_xMoveUpButton.get());
diff --git a/cui/source/inc/cfg.hxx b/cui/source/inc/cfg.hxx
index d5410a6ce667..fa825b92f207 100644
--- a/cui/source/inc/cfg.hxx
+++ b/cui/source/inc/cfg.hxx
@@ -325,6 +325,8 @@ public:
     SvxMenuEntriesListBox(std::unique_ptr<weld::TreeView> xControl, SvxConfigPage* pPage);
     virtual ~SvxMenuEntriesListBox();
 
+    VirtualDevice& get_dropdown_image() const { return *m_xDropDown; }
+
     int get_selected_index() const { return m_xControl->get_selected_index(); }
     OUString get_id(int nPos) const { return m_xControl->get_id(nPos); }
     void remove(int nPos) { m_xControl->remove(nPos); }
@@ -451,7 +453,12 @@ protected:
                                         SvxConfigEntry const * pParentData );
 
     void                InsertEntryIntoUI(SvxConfigEntry* pNewEntryData,
-                                          int nPos, int nStartCol);
+                                          weld::TreeView& rTreeView, int nPos,
+                                          int nStartCol);
+    void                InsertEntryIntoUI(SvxConfigEntry* pNewEntryData,
+                                          weld::TreeView& rTreeView, weld::TreeIter& rIter,
+                                          int nStartCol);
+
     void InsertEntryIntoNotebookbarTabUI(const OUString& sClassId, const OUString& sUIItemId,
                                          const OUString& sUIItemCommand,
                                          weld::TreeView& rTreeView, weld::TreeIter& rIter,
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index 194383e72bcc..abe71e42fedb 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -870,7 +870,6 @@ public:
     virtual void collapse_row(const TreeIter& rIter) = 0;
     virtual void set_text(const TreeIter& rIter, const OUString& rStr, int col = -1) = 0;
     virtual void set_sensitive(const TreeIter& rIter, bool bSensitive, int col = -1) = 0;
-    virtual void set_image(const TreeIter& rIter, const OUString& rImage, int col = -1) = 0;
     virtual void set_text_emphasis(const TreeIter& rIter, bool bOn, int col) = 0;
     virtual bool get_text_emphasis(const TreeIter& rIter, int col) const = 0;
     virtual void set_toggle(const TreeIter& rIter, TriState bOn, int col) = 0;
@@ -878,8 +877,10 @@ public:
     virtual OUString get_text(const TreeIter& rIter, int col = -1) const = 0;
     virtual void set_id(const TreeIter& rIter, const OUString& rId) = 0;
     virtual OUString get_id(const TreeIter& rIter) const = 0;
+    virtual void set_image(const TreeIter& rIter, const OUString& rImage, int col = -1) = 0;
+    virtual void set_image(const TreeIter& rIter, VirtualDevice& rImage, int col = -1) = 0;
     virtual void set_image(const TreeIter& rIter,
-                           const css::uno::Reference<css::graphic::XGraphic>& rImage, int col)
+                           const css::uno::Reference<css::graphic::XGraphic>& rImage, int col = -1)
         = 0;
     virtual void set_font_color(const TreeIter& rIter, const Color& rColor) const = 0;
     virtual void scroll_to_row(const TreeIter& rIter) = 0;
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index bf704c2e6026..fa8777493cb1 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -4018,13 +4018,19 @@ public:
         set_image(m_xTreeView->GetEntry(nullptr, pos), createImage(rImage), col);
     }
 
+    virtual void set_image(const weld::TreeIter& rIter, const OUString& rImage, int col) override
+    {
+        const SalInstanceTreeIter& rVclIter = static_cast<const SalInstanceTreeIter&>(rIter);
+        set_image(rVclIter.iter, createImage(rImage), col);
+    }
+
     virtual void set_image(const weld::TreeIter& rIter, const css::uno::Reference<css::graphic::XGraphic>& rImage, int col) override
     {
         const SalInstanceTreeIter& rVclIter = static_cast<const SalInstanceTreeIter&>(rIter);
         set_image(rVclIter.iter, Image(rImage), col);
     }
 
-    virtual void set_image(const weld::TreeIter& rIter, const OUString& rImage, int col) override
+    virtual void set_image(const weld::TreeIter& rIter, VirtualDevice& rImage, int col) override
     {
         const SalInstanceTreeIter& rVclIter = static_cast<const SalInstanceTreeIter&>(rIter);
         set_image(rVclIter.iter, createImage(rImage), col);
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index a64edcd8c1be..2b101adaabde 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -9083,6 +9083,12 @@ public:
         set_image(rGtkIter.iter, col, getPixbuf(rImage));
     }
 
+    virtual void set_image(const weld::TreeIter& rIter, VirtualDevice& rImage, int col) override
+    {
+        const GtkInstanceTreeIter& rGtkIter = static_cast<const GtkInstanceTreeIter&>(rIter);
+        set_image(rGtkIter.iter, col, getPixbuf(rImage));
+    }
+
     virtual OUString get_id(int pos) const override
     {
         return get(pos, m_nIdCol);


More information about the Libreoffice-commits mailing list