[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-6.4' - 2 commits - include/vcl vcl/inc vcl/jsdialog vcl/source

Szymon KÅ‚os (via logerrit) logerrit at kemper.freedesktop.org
Tue Jan 12 09:33:02 UTC 2021


 include/vcl/salvtables.hxx           |   59 +++++
 vcl/inc/jsdialog/jsdialogbuilder.hxx |   20 +
 vcl/jsdialog/jsdialogbuilder.cxx     |   55 ++++
 vcl/source/app/salvtables.cxx        |  402 ++++++++++++++++-------------------
 4 files changed, 328 insertions(+), 208 deletions(-)

New commits:
commit 64054b927413cea718ba97c2b98da7aca392e0e0
Author:     Szymon Kłos <szymon.klos at collabora.com>
AuthorDate: Wed Dec 16 23:00:11 2020 +0300
Commit:     Szymon Kłos <szymon.klos at collabora.com>
CommitDate: Tue Jan 12 10:32:42 2021 +0100

    jsdialogs: implemented IconView
    
    Change-Id: I05f5009efc879aaf3fc6055ff8dfa7c26aa33d1b
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/108983
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
    Reviewed-by: Szymon Kłos <szymon.klos at collabora.com>

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index a440b7c0da97..ccc33b466da8 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -30,6 +30,7 @@
 class ToolBox;
 class SfxViewShell;
 class VclMultiLineEdit;
+class IconView;
 
 typedef std::map<OString, weld::Widget*> WidgetMap;
 
@@ -174,6 +175,8 @@ public:
                                                            bool bTakeOwnership = false) override;
     virtual std::unique_ptr<weld::Expander> weld_expander(const OString& id,
                                                           bool bTakeOwnership = false) override;
+    virtual std::unique_ptr<weld::IconView> weld_icon_view(const OString& id,
+                                                           bool bTakeOwnership = false) override;
 
     static weld::MessageDialog* CreateMessageDialog(weld::Widget* pParent,
                                                     VclMessageType eMessageType,
@@ -408,4 +411,21 @@ public:
     virtual void set_expanded(bool bExpand) override;
 };
 
+class JSIconView : public JSWidget<SalInstanceIconView, ::IconView>
+{
+public:
+    JSIconView(VclPtr<vcl::Window> aNotifierWindow, VclPtr<vcl::Window> aContentWindow,
+               ::IconView* pIconView, SalInstanceBuilder* pBuilder, bool bTakeOwnership,
+               std::string sTypeOfJSON);
+
+    virtual void insert(int pos, const OUString* pStr, const OUString* pId,
+                        const OUString* pIconName, weld::TreeIter* pRet) override;
+
+    virtual void insert(int pos, const OUString* pStr, const OUString* pId,
+                        const VirtualDevice* pIcon, weld::TreeIter* pRet) override;
+    virtual void clear() override;
+    virtual void select(int pos) override;
+    virtual void unselect(int pos) override;
+};
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 6873683a8cda..f0cb0475db08 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -600,6 +600,21 @@ std::unique_ptr<weld::Expander> JSInstanceBuilder::weld_expander(const OString&
     return pWeldWidget;
 }
 
+std::unique_ptr<weld::IconView> JSInstanceBuilder::weld_icon_view(const OString& id,
+                                                                  bool bTakeOwnership)
+{
+    ::IconView* pIconView = m_xBuilder->get<::IconView>(id);
+    auto pWeldWidget
+        = pIconView ? std::make_unique<JSIconView>(GetNotifierWindow(), GetContentWindow(),
+                                                   pIconView, this, bTakeOwnership, m_sTypeOfJSON)
+                    : nullptr;
+
+    if (pWeldWidget)
+        RememberWidget(id, pWeldWidget.get());
+
+    return pWeldWidget;
+}
+
 weld::MessageDialog* JSInstanceBuilder::CreateMessageDialog(weld::Widget* pParent,
                                                             VclMessageType eMessageType,
                                                             VclButtonsType eButtonType,
@@ -997,4 +1012,44 @@ void JSExpander::set_expanded(bool bExpand)
     notifyDialogState();
 }
 
+JSIconView::JSIconView(VclPtr<vcl::Window> aNotifierWindow, VclPtr<vcl::Window> aContentWindow,
+                       ::IconView* pIconView, SalInstanceBuilder* pBuilder, bool bTakeOwnership,
+                       std::string sTypeOfJSON)
+    : JSWidget<SalInstanceIconView, ::IconView>(aNotifierWindow, aContentWindow, pIconView,
+                                                pBuilder, bTakeOwnership, sTypeOfJSON)
+{
+}
+
+void JSIconView::insert(int pos, const OUString* pStr, const OUString* pId,
+                        const OUString* pIconName, weld::TreeIter* pRet)
+{
+    SalInstanceIconView::insert(pos, pStr, pId, pIconName, pRet);
+    notifyDialogState();
+}
+
+void JSIconView::insert(int pos, const OUString* pStr, const OUString* pId,
+                        const VirtualDevice* pIcon, weld::TreeIter* pRet)
+{
+    SalInstanceIconView::insert(pos, pStr, pId, pIcon, pRet);
+    notifyDialogState();
+}
+
+void JSIconView::clear()
+{
+    SalInstanceIconView::clear();
+    notifyDialogState();
+}
+
+void JSIconView::select(int pos)
+{
+    SalInstanceIconView::select(pos);
+    notifyDialogState();
+}
+
+void JSIconView::unselect(int pos)
+{
+    SalInstanceIconView::unselect(pos);
+    notifyDialogState();
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
commit 002299777776e55619a6a2708bbece1ada9a4dd2
Author:     Szymon Kłos <szymon.klos at collabora.com>
AuthorDate: Fri Jan 8 10:16:07 2021 +0100
Commit:     Szymon Kłos <szymon.klos at collabora.com>
CommitDate: Tue Jan 12 10:32:23 2021 +0100

    Move SalInstanceIconView decl to header file
    
    Change-Id: I179f044b3db38ee51f539ef4023b136eac55f4ed
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/108982
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
    Reviewed-by: Szymon Kłos <szymon.klos at collabora.com>

diff --git a/include/vcl/salvtables.hxx b/include/vcl/salvtables.hxx
index b96d02f0a5a8..d63d8b00dd36 100644
--- a/include/vcl/salvtables.hxx
+++ b/include/vcl/salvtables.hxx
@@ -16,6 +16,7 @@
 #include <vcl/messagedialog.hxx>
 #include <vcl/svtabbx.hxx>
 #include <vcl/svlbitm.hxx>
+#include <iconview.hxx>
 
 class SalInstanceBuilder : public weld::Builder
 {
@@ -1450,4 +1451,62 @@ public:
     virtual ~SalInstanceExpander() override;
 };
 
+class SalInstanceIconView : public SalInstanceContainer, public virtual weld::IconView
+{
+private:
+    // owner for UserData
+    std::vector<std::unique_ptr<OUString>> m_aUserData;
+    VclPtr<::IconView> m_xIconView;
+
+    DECL_LINK(SelectHdl, SvTreeListBox*, void);
+    DECL_LINK(DeSelectHdl, SvTreeListBox*, void);
+    DECL_LINK(DoubleClickHdl, SvTreeListBox*, bool);
+
+public:
+    SalInstanceIconView(::IconView* pIconView, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
+
+    virtual void freeze() override;
+
+    virtual void thaw() override;
+
+    virtual void insert(int pos, const OUString* pStr, const OUString* pId,
+                        const OUString* pIconName, weld::TreeIter* pRet) override;
+
+    virtual void insert(int pos, const OUString* pStr, const OUString* pId,
+                        const VirtualDevice* pIcon, weld::TreeIter* pRet) override;
+
+    virtual OUString get_selected_id() const override;
+
+    virtual OUString get_selected_text() const override;
+
+    virtual int count_selected_items() const override;
+
+    virtual void select(int pos) override;
+
+    virtual void unselect(int pos) override;
+
+    virtual int n_children() const override;
+
+    virtual std::unique_ptr<weld::TreeIter> make_iterator(const weld::TreeIter* pOrig
+                                                          = nullptr) const override;
+
+    virtual bool get_selected(weld::TreeIter* pIter) const override;
+
+    virtual bool get_cursor(weld::TreeIter* pIter) const override;
+
+    virtual void set_cursor(const weld::TreeIter& rIter) override;
+
+    virtual bool get_iter_first(weld::TreeIter& rIter) const override;
+
+    virtual void scroll_to_item(const weld::TreeIter& rIter) override;
+
+    virtual void selected_foreach(const std::function<bool(weld::TreeIter&)>& func) override;
+
+    virtual OUString get_id(const weld::TreeIter& rIter) const override;
+
+    virtual void clear() override;
+
+    virtual ~SalInstanceIconView() override;
+};
+
 #endif
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 77498436bf86..c4275fefb8be 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -20,7 +20,6 @@
 #include <com/sun/star/accessibility/AccessibleRelationType.hpp>
 #include <com/sun/star/awt/XWindow.hpp>
 #include <officecfg/Office/Common.hxx>
-#include <iconview.hxx>
 #include <salframe.hxx>
 #include <salinst.hxx>
 #include <salvd.hxx>
@@ -4741,258 +4740,245 @@ IMPL_LINK(SalInstanceTreeView, EditedEntryHdl, IterString, rIterString, bool)
     return signal_editing_done(std::pair<const weld::TreeIter&, OUString>(SalInstanceTreeIter(rIterString.first), rIterString.second));
 }
 
-class SalInstanceIconView : public SalInstanceContainer, public virtual weld::IconView
+SalInstanceIconView::SalInstanceIconView(::IconView* pIconView, SalInstanceBuilder* pBuilder, bool bTakeOwnership)
+    : SalInstanceContainer(pIconView, pBuilder, bTakeOwnership)
+    , m_xIconView(pIconView)
 {
-private:
-    // owner for UserData
-    std::vector<std::unique_ptr<OUString>> m_aUserData;
-    VclPtr<::IconView> m_xIconView;
+    m_xIconView->SetSelectHdl(LINK(this, SalInstanceIconView, SelectHdl));
+    m_xIconView->SetDeselectHdl(LINK(this, SalInstanceIconView, DeSelectHdl));
+    m_xIconView->SetDoubleClickHdl(LINK(this, SalInstanceIconView, DoubleClickHdl));
+}
 
-    DECL_LINK(SelectHdl, SvTreeListBox*, void);
-    DECL_LINK(DeSelectHdl, SvTreeListBox*, void);
-    DECL_LINK(DoubleClickHdl, SvTreeListBox*, bool);
+void SalInstanceIconView::freeze()
+{
+    SalInstanceWidget::freeze();
+    m_xIconView->SetUpdateMode(false);
+}
 
-public:
-    SalInstanceIconView(::IconView* pIconView, SalInstanceBuilder* pBuilder, bool bTakeOwnership)
-        : SalInstanceContainer(pIconView, pBuilder, bTakeOwnership)
-        , m_xIconView(pIconView)
-    {
-        m_xIconView->SetSelectHdl(LINK(this, SalInstanceIconView, SelectHdl));
-        m_xIconView->SetDeselectHdl(LINK(this, SalInstanceIconView, DeSelectHdl));
-        m_xIconView->SetDoubleClickHdl(LINK(this, SalInstanceIconView, DoubleClickHdl));
-    }
+void SalInstanceIconView::thaw()
+{
+    m_xIconView->SetUpdateMode(true);
+    SalInstanceWidget::thaw();
+}
 
-    virtual void freeze() override
+void SalInstanceIconView::insert(int pos, const OUString* pStr, const OUString* pId,
+                    const OUString* pIconName, weld::TreeIter* pRet)
+{
+    disable_notify_events();
+    auto nInsertPos = pos == -1 ? TREELIST_APPEND : pos;
+    void* pUserData;
+    if (pId)
     {
-        SalInstanceWidget::freeze();
-        m_xIconView->SetUpdateMode(false);
+        m_aUserData.emplace_back(std::make_unique<OUString>(*pId));
+        pUserData = m_aUserData.back().get();
     }
+    else
+        pUserData = nullptr;
 
-    virtual void thaw() override
+    SvTreeListEntry* pEntry = new SvTreeListEntry;
+    if (pIconName)
     {
-        m_xIconView->SetUpdateMode(true);
-        SalInstanceWidget::thaw();
+        Image aImage(createImage(*pIconName));
+        pEntry->AddItem(std::make_unique<SvLBoxContextBmp>(aImage, aImage, false));
     }
-
-    virtual void insert(int pos, const OUString* pStr, const OUString* pId,
-                        const OUString* pIconName, weld::TreeIter* pRet) override
+    else
     {
-        disable_notify_events();
-        auto nInsertPos = pos == -1 ? TREELIST_APPEND : pos;
-        void* pUserData;
-        if (pId)
-        {
-            m_aUserData.emplace_back(std::make_unique<OUString>(*pId));
-            pUserData = m_aUserData.back().get();
-        }
-        else
-            pUserData = nullptr;
-
-        SvTreeListEntry* pEntry = new SvTreeListEntry;
-        if (pIconName)
-        {
-            Image aImage(createImage(*pIconName));
-            pEntry->AddItem(std::make_unique<SvLBoxContextBmp>(aImage, aImage, false));
-        }
-        else
-        {
-            Image aDummy;
-            pEntry->AddItem(std::make_unique<SvLBoxContextBmp>(aDummy, aDummy, false));
-        }
-        if (pStr)
-            pEntry->AddItem(std::make_unique<SvLBoxString>(*pStr));
-        pEntry->SetUserData(pUserData);
-        m_xIconView->Insert(pEntry, nullptr, nInsertPos);
-
-        if (pRet)
-        {
-            SalInstanceTreeIter* pVclRetIter = static_cast<SalInstanceTreeIter*>(pRet);
-            pVclRetIter->iter = pEntry;
-        }
-
-        enable_notify_events();
+        Image aDummy;
+        pEntry->AddItem(std::make_unique<SvLBoxContextBmp>(aDummy, aDummy, false));
     }
+    if (pStr)
+        pEntry->AddItem(std::make_unique<SvLBoxString>(*pStr));
+    pEntry->SetUserData(pUserData);
+    m_xIconView->Insert(pEntry, nullptr, nInsertPos);
 
-    virtual void insert(int pos, const OUString* pStr, const OUString* pId, const VirtualDevice* pIcon, weld::TreeIter* pRet) override
+    if (pRet)
     {
-        disable_notify_events();
-        auto nInsertPos = pos == -1 ? TREELIST_APPEND : pos;
-        void* pUserData;
-        if (pId)
-        {
-            m_aUserData.emplace_back(std::make_unique<OUString>(*pId));
-            pUserData = m_aUserData.back().get();
-        }
-        else
-            pUserData = nullptr;
-
-        SvTreeListEntry* pEntry = new SvTreeListEntry;
-        if (pIcon)
-        {
-            const Point aNull(0, 0);
-            const Size aSize = pIcon->GetOutputSizePixel();
-            Image aImage(pIcon->GetBitmapEx(aNull, aSize));
-            pEntry->AddItem(std::make_unique<SvLBoxContextBmp>(aImage, aImage, false));
-        }
-        else
-        {
-            Image aDummy;
-            pEntry->AddItem(std::make_unique<SvLBoxContextBmp>(aDummy, aDummy, false));
-        }
-        if (pStr)
-            pEntry->AddItem(std::make_unique<SvLBoxString>(*pStr));
-        pEntry->SetUserData(pUserData);
-        m_xIconView->Insert(pEntry, nullptr, nInsertPos);
-
-        if (pRet)
-        {
-            SalInstanceTreeIter* pVclRetIter = static_cast<SalInstanceTreeIter*>(pRet);
-            pVclRetIter->iter = pEntry;
-        }
-
-        enable_notify_events();
+        SalInstanceTreeIter* pVclRetIter = static_cast<SalInstanceTreeIter*>(pRet);
+        pVclRetIter->iter = pEntry;
     }
 
-    virtual OUString get_selected_id() const override
-    {
-        assert(m_xIconView->IsUpdateMode() && "don't request selection when frozen");
-        if (SvTreeListEntry* pEntry = m_xIconView->FirstSelected())
-        {
-            if (const OUString* pStr = static_cast<const OUString*>(pEntry->GetUserData()))
-                return *pStr;
-        }
-        return OUString();
-    }
+    enable_notify_events();
+}
 
-    virtual OUString get_selected_text() const override
+void SalInstanceIconView::insert(int pos, const OUString* pStr, const OUString* pId, const VirtualDevice* pIcon, weld::TreeIter* pRet)
+{
+    disable_notify_events();
+    auto nInsertPos = pos == -1 ? TREELIST_APPEND : pos;
+    void* pUserData;
+    if (pId)
     {
-        assert(m_xIconView->IsUpdateMode() && "don't request selection when frozen");
-        if (SvTreeListEntry* pEntry = m_xIconView->FirstSelected())
-            return m_xIconView->GetEntryText(pEntry);
-        return OUString();
+        m_aUserData.emplace_back(std::make_unique<OUString>(*pId));
+        pUserData = m_aUserData.back().get();
     }
+    else
+        pUserData = nullptr;
 
-    virtual int count_selected_items() const override
+    SvTreeListEntry* pEntry = new SvTreeListEntry;
+    if (pIcon)
     {
-        return m_xIconView->GetSelectionCount();
+        const Point aNull(0, 0);
+        const Size aSize = pIcon->GetOutputSizePixel();
+        Image aImage(pIcon->GetBitmapEx(aNull, aSize));
+        pEntry->AddItem(std::make_unique<SvLBoxContextBmp>(aImage, aImage, false));
     }
-
-    virtual void select(int pos) override
+    else
     {
-        assert(m_xIconView->IsUpdateMode() && "don't select when frozen");
-        disable_notify_events();
-        if (pos == -1 || (pos == 0 && n_children() == 0))
-            m_xIconView->SelectAll(false);
-        else
-        {
-            SvTreeListEntry* pEntry = m_xIconView->GetEntry(nullptr, pos);
-            m_xIconView->Select(pEntry, true);
-            m_xIconView->MakeVisible(pEntry);
-        }
-        enable_notify_events();
+        Image aDummy;
+        pEntry->AddItem(std::make_unique<SvLBoxContextBmp>(aDummy, aDummy, false));
     }
+    if (pStr)
+        pEntry->AddItem(std::make_unique<SvLBoxString>(*pStr));
+    pEntry->SetUserData(pUserData);
+    m_xIconView->Insert(pEntry, nullptr, nInsertPos);
 
-    virtual void unselect(int pos) override
+    if (pRet)
     {
-        assert(m_xIconView->IsUpdateMode() && "don't select when frozen");
-        disable_notify_events();
-        if (pos == -1)
-            m_xIconView->SelectAll(true);
-        else
-        {
-            SvTreeListEntry* pEntry = m_xIconView->GetEntry(nullptr, pos);
-            m_xIconView->Select(pEntry, false);
-        }
-        enable_notify_events();
+        SalInstanceTreeIter* pVclRetIter = static_cast<SalInstanceTreeIter*>(pRet);
+        pVclRetIter->iter = pEntry;
     }
 
-    virtual int n_children() const override
-    {
-        return m_xIconView->GetModel()->GetChildList(nullptr).size();
-    }
+    enable_notify_events();
+}
 
-    virtual std::unique_ptr<weld::TreeIter> make_iterator(const weld::TreeIter* pOrig) const override
+OUString SalInstanceIconView::get_selected_id() const
+{
+    assert(m_xIconView->IsUpdateMode() && "don't request selection when frozen");
+    if (SvTreeListEntry* pEntry = m_xIconView->FirstSelected())
     {
-        return std::unique_ptr<weld::TreeIter>(new SalInstanceTreeIter(static_cast<const SalInstanceTreeIter*>(pOrig)));
+        if (const OUString* pStr = static_cast<const OUString*>(pEntry->GetUserData()))
+            return *pStr;
     }
+    return OUString();
+}
 
-    virtual bool get_selected(weld::TreeIter* pIter) const override
-    {
-        SvTreeListEntry* pEntry = m_xIconView->FirstSelected();
-        auto pVclIter = static_cast<SalInstanceTreeIter*>(pIter);
-        if (pVclIter)
-            pVclIter->iter = pEntry;
-        return pEntry != nullptr;
-    }
+OUString SalInstanceIconView::get_selected_text() const
+{
+    assert(m_xIconView->IsUpdateMode() && "don't request selection when frozen");
+    if (SvTreeListEntry* pEntry = m_xIconView->FirstSelected())
+        return m_xIconView->GetEntryText(pEntry);
+    return OUString();
+}
 
-    virtual bool get_cursor(weld::TreeIter* pIter) const override
-    {
-        SvTreeListEntry* pEntry = m_xIconView->GetCurEntry();
-        auto pVclIter = static_cast<SalInstanceTreeIter*>(pIter);
-        if (pVclIter)
-            pVclIter->iter = pEntry;
-        return pEntry != nullptr;
-    }
+int SalInstanceIconView::count_selected_items() const
+{
+    return m_xIconView->GetSelectionCount();
+}
 
-    virtual void set_cursor(const weld::TreeIter& rIter) override
+void SalInstanceIconView::select(int pos)
+{
+    assert(m_xIconView->IsUpdateMode() && "don't select when frozen");
+    disable_notify_events();
+    if (pos == -1 || (pos == 0 && n_children() == 0))
+        m_xIconView->SelectAll(false);
+    else
     {
-        const SalInstanceTreeIter& rVclIter = static_cast<const SalInstanceTreeIter&>(rIter);
-        disable_notify_events();
-        m_xIconView->SetCurEntry(rVclIter.iter);
-        enable_notify_events();
+        SvTreeListEntry* pEntry = m_xIconView->GetEntry(nullptr, pos);
+        m_xIconView->Select(pEntry, true);
+        m_xIconView->MakeVisible(pEntry);
     }
+    enable_notify_events();
+}
 
-    virtual bool get_iter_first(weld::TreeIter& rIter) const override
+void SalInstanceIconView::unselect(int pos)
+{
+    assert(m_xIconView->IsUpdateMode() && "don't select when frozen");
+    disable_notify_events();
+    if (pos == -1)
+        m_xIconView->SelectAll(true);
+    else
     {
-        SalInstanceTreeIter& rVclIter = static_cast<SalInstanceTreeIter&>(rIter);
-        rVclIter.iter = m_xIconView->GetEntry(0);
-        return rVclIter.iter != nullptr;
+        SvTreeListEntry* pEntry = m_xIconView->GetEntry(nullptr, pos);
+        m_xIconView->Select(pEntry, false);
     }
+    enable_notify_events();
+}
 
-    virtual void scroll_to_item(const weld::TreeIter& rIter) override
-    {
-        assert(m_xIconView->IsUpdateMode() && "don't select when frozen");
-        disable_notify_events();
-        const SalInstanceTreeIter& rVclIter = static_cast<const SalInstanceTreeIter&>(rIter);
-        m_xIconView->MakeVisible(rVclIter.iter);
-        enable_notify_events();
-    }
+int SalInstanceIconView::n_children() const
+{
+    return m_xIconView->GetModel()->GetChildList(nullptr).size();
+}
 
-    virtual void selected_foreach(const std::function<bool(weld::TreeIter&)>& func) override
-    {
-        SalInstanceTreeIter aVclIter(m_xIconView->FirstSelected());
-        while (aVclIter.iter)
-        {
-            if (func(aVclIter))
-                return;
-            aVclIter.iter = m_xIconView->NextSelected(aVclIter.iter);
-        }
-    }
+std::unique_ptr<weld::TreeIter> SalInstanceIconView::make_iterator(const weld::TreeIter* pOrig) const
+{
+    return std::unique_ptr<weld::TreeIter>(new SalInstanceTreeIter(static_cast<const SalInstanceTreeIter*>(pOrig)));
+}
 
-    virtual OUString get_id(const weld::TreeIter& rIter) const override
-    {
-        const SalInstanceTreeIter& rVclIter = static_cast<const SalInstanceTreeIter&>(rIter);
-        const OUString* pStr = static_cast<const OUString*>(rVclIter.iter->GetUserData());
-        if (pStr)
-            return *pStr;
-        return OUString();
-    }
+bool SalInstanceIconView::get_selected(weld::TreeIter* pIter) const
+{
+    SvTreeListEntry* pEntry = m_xIconView->FirstSelected();
+    auto pVclIter = static_cast<SalInstanceTreeIter*>(pIter);
+    if (pVclIter)
+        pVclIter->iter = pEntry;
+    return pEntry != nullptr;
+}
 
-    virtual void clear() override
-    {
-        disable_notify_events();
-        m_xIconView->Clear();
-        m_aUserData.clear();
-        enable_notify_events();
-    }
+bool SalInstanceIconView::get_cursor(weld::TreeIter* pIter) const
+{
+    SvTreeListEntry* pEntry = m_xIconView->GetCurEntry();
+    auto pVclIter = static_cast<SalInstanceTreeIter*>(pIter);
+    if (pVclIter)
+        pVclIter->iter = pEntry;
+    return pEntry != nullptr;
+}
+
+void SalInstanceIconView::set_cursor(const weld::TreeIter& rIter)
+{
+    const SalInstanceTreeIter& rVclIter = static_cast<const SalInstanceTreeIter&>(rIter);
+    disable_notify_events();
+    m_xIconView->SetCurEntry(rVclIter.iter);
+    enable_notify_events();
+}
+
+bool SalInstanceIconView::get_iter_first(weld::TreeIter& rIter) const
+{
+    SalInstanceTreeIter& rVclIter = static_cast<SalInstanceTreeIter&>(rIter);
+    rVclIter.iter = m_xIconView->GetEntry(0);
+    return rVclIter.iter != nullptr;
+}
+
+void SalInstanceIconView::scroll_to_item(const weld::TreeIter& rIter)
+{
+    assert(m_xIconView->IsUpdateMode() && "don't select when frozen");
+    disable_notify_events();
+    const SalInstanceTreeIter& rVclIter = static_cast<const SalInstanceTreeIter&>(rIter);
+    m_xIconView->MakeVisible(rVclIter.iter);
+    enable_notify_events();
+}
 
-    virtual ~SalInstanceIconView() override
+void SalInstanceIconView::selected_foreach(const std::function<bool(weld::TreeIter&)>& func)
+{
+    SalInstanceTreeIter aVclIter(m_xIconView->FirstSelected());
+    while (aVclIter.iter)
     {
-        m_xIconView->SetDoubleClickHdl(Link<SvTreeListBox*, bool>());
-        m_xIconView->SetSelectHdl(Link<SvTreeListBox*, void>());
-        m_xIconView->SetDeselectHdl(Link<SvTreeListBox*, void>());
+        if (func(aVclIter))
+            return;
+        aVclIter.iter = m_xIconView->NextSelected(aVclIter.iter);
     }
-};
+}
+
+OUString SalInstanceIconView::get_id(const weld::TreeIter& rIter) const
+{
+    const SalInstanceTreeIter& rVclIter = static_cast<const SalInstanceTreeIter&>(rIter);
+    const OUString* pStr = static_cast<const OUString*>(rVclIter.iter->GetUserData());
+    if (pStr)
+        return *pStr;
+    return OUString();
+}
+
+void SalInstanceIconView::clear()
+{
+    disable_notify_events();
+    m_xIconView->Clear();
+    m_aUserData.clear();
+    enable_notify_events();
+}
+
+SalInstanceIconView::~SalInstanceIconView()
+{
+    m_xIconView->SetDoubleClickHdl(Link<SvTreeListBox*, bool>());
+    m_xIconView->SetSelectHdl(Link<SvTreeListBox*, void>());
+    m_xIconView->SetDeselectHdl(Link<SvTreeListBox*, void>());
+}
 
 IMPL_LINK_NOARG(SalInstanceIconView, SelectHdl, SvTreeListBox*, void)
 {


More information about the Libreoffice-commits mailing list