include/vcl/toolkit/svtabbx.hxx     |    6 +--
 include/vcl/toolkit/treelistbox.hxx |    2 -
 include/vcl/weld/IconView.hxx       |   11 ------
 include/vcl/weld/ItemView.hxx       |    9 +++++
 include/vcl/weld/TreeView.hxx       |   10 ------
 vcl/inc/salvtables.hxx              |   11 +-----
 vcl/source/app/salvtables.cxx       |   57 ++++++++++++------------------------
 vcl/source/treelist/svtabbx.cxx     |    6 +--
 vcl/source/treelist/treelistbox.cxx |    2 -
 9 files changed, 39 insertions(+), 75 deletions(-)

New commits:
commit 9d8009fc05946c908323d542d8868bc768d8aa46
Author:     Michael Weghorn <[email protected]>
AuthorDate: Wed Dec 17 23:16:11 2025 +0100
Commit:     Michael Weghorn <[email protected]>
CommitDate: Thu Dec 18 07:22:24 2025 +0100

    vcl: Switch void* to OUString* param
    
    These user data are always OUString*, so switch
    the param to that more specific type.
    
    Change-Id: I76a29625ce0bc92e7486ddcf71c00a8dd3b0e631
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195817
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <[email protected]>

diff --git a/include/vcl/toolkit/svtabbx.hxx b/include/vcl/toolkit/svtabbx.hxx
index dcea878ea85e..390774ef1cae 100644
--- a/include/vcl/toolkit/svtabbx.hxx
+++ b/include/vcl/toolkit/svtabbx.hxx
@@ -60,10 +60,10 @@ public:
 
     virtual SvTreeListEntry*    InsertEntry( const OUString& rText, 
SvTreeListEntry* pParent = nullptr,
                                          bool bChildrenOnDemand = false,
-                                         sal_uInt32 nPos=TREELIST_APPEND, 
void* pUserData = nullptr ) override;
+                                         sal_uInt32 nPos=TREELIST_APPEND, 
OUString* pUserData = nullptr ) override;
 
     virtual SvTreeListEntry* InsertEntryToColumn( const OUString&, 
SvTreeListEntry* pParent,
-                                 sal_uInt32 nPos, sal_uInt16 nCol, void* 
pUserData = nullptr );
+                                 sal_uInt32 nPos, sal_uInt16 nCol, OUString* 
pUserData = nullptr );
 
     virtual OUString GetEntryText( SvTreeListEntry* pEntry ) const override;
     static OUString  GetEntryText( const SvTreeListEntry*, sal_uInt16 nCol );
@@ -113,7 +113,7 @@ public:
     static bool     IsItemChecked( SvTreeListEntry* pEntry, sal_uInt16 nCol );
 
     virtual SvTreeListEntry* InsertEntryToColumn( const OUString&, 
SvTreeListEntry* pParent,
-                                 sal_uInt32 nPos, sal_uInt16 nCol, void* 
pUserData = nullptr ) override;
+                                 sal_uInt32 nPos, sal_uInt16 nCol, OUString* 
pUserData = nullptr ) override;
     virtual sal_uInt32 Insert( SvTreeListEntry* pEnt,SvTreeListEntry* 
pPar,sal_uInt32 nPos=TREELIST_APPEND) override;
     virtual sal_uInt32 Insert( SvTreeListEntry* pEntry, sal_uInt32 nRootPos = 
TREELIST_APPEND ) override;
 
diff --git a/include/vcl/toolkit/treelistbox.hxx 
b/include/vcl/toolkit/treelistbox.hxx
index 3c826a8bf605..6ccdf9797d08 100644
--- a/include/vcl/toolkit/treelistbox.hxx
+++ b/include/vcl/toolkit/treelistbox.hxx
@@ -551,7 +551,7 @@ public:
 
     virtual SvTreeListEntry*    InsertEntry( const OUString& rText, 
SvTreeListEntry* pParent = nullptr,
                                          bool bChildrenOnDemand = false,
-                                         sal_uInt32 nPos=TREELIST_APPEND, 
void* pUserData = nullptr);
+                                         sal_uInt32 nPos=TREELIST_APPEND, 
OUString* pUserData = nullptr);
 
     const Image&    GetDefaultExpandedEntryBmp( ) const;
     const Image&    GetDefaultCollapsedEntryBmp( ) const;
diff --git a/vcl/source/treelist/svtabbx.cxx b/vcl/source/treelist/svtabbx.cxx
index f38648a8eef9..5a3c42d947a8 100644
--- a/vcl/source/treelist/svtabbx.cxx
+++ b/vcl/source/treelist/svtabbx.cxx
@@ -302,13 +302,13 @@ void SvTabListBox::SetTabs(const 
std::vector<tools::Long>& rTabPositions, MapUni
 
 SvTreeListEntry* SvTabListBox::InsertEntry( const OUString& rText, 
SvTreeListEntry* pParent,
                                         bool /*bChildrenOnDemand*/,
-                                        sal_uInt32 nPos, void* pUserData )
+                                        sal_uInt32 nPos, OUString* pUserData )
 {
     return InsertEntryToColumn( rText, pParent, nPos, 0xffff, pUserData );
 }
 
 SvTreeListEntry* SvTabListBox::InsertEntryToColumn(const OUString& 
rStr,SvTreeListEntry* pParent,sal_uInt32 nPos,sal_uInt16 nCol,
-    void* pUser )
+    OUString* pUser )
 {
     OUString aStr;
     if( nCol != 0xffff )
@@ -584,7 +584,7 @@ bool SvHeaderTabListBox::IsItemChecked( SvTreeListEntry* 
pEntry, sal_uInt16 nCol
 }
 
 SvTreeListEntry* SvHeaderTabListBox::InsertEntryToColumn(
-    const OUString& rStr, SvTreeListEntry* pParent, sal_uInt32 nPos, 
sal_uInt16 nCol, void* pUserData )
+    const OUString& rStr, SvTreeListEntry* pParent, sal_uInt32 nPos, 
sal_uInt16 nCol, OUString* pUserData )
 {
     SvTreeListEntry* pEntry = SvTabListBox::InsertEntryToColumn( rStr, 
pParent, nPos, nCol, pUserData );
     RecalculateAccessibleChildren();
diff --git a/vcl/source/treelist/treelistbox.cxx 
b/vcl/source/treelist/treelistbox.cxx
index 92fca3bf1519..fa274dfa4300 100644
--- a/vcl/source/treelist/treelistbox.cxx
+++ b/vcl/source/treelist/treelistbox.cxx
@@ -1579,7 +1579,7 @@ SvTreeListEntry* SvTreeListBox::InsertEntry(
     const OUString& rText,
     SvTreeListEntry* pParent,
     bool bChildrenOnDemand, sal_uInt32 nPos,
-    void* pUser
+    OUString* pUser
 )
 {
     nTreeFlags |= SvTreeFlags::MANINS;
commit 6a35e664ff576d14e0b2a658c309df91d13016df
Author:     Michael Weghorn <[email protected]>
AuthorDate: Wed Dec 17 23:06:19 2025 +0100
Commit:     Michael Weghorn <[email protected]>
CommitDate: Thu Dec 18 07:22:17 2025 +0100

    vcl weld: Deduplicate ItemView::get_selected_{text,id} impls
    
    These are the same in SalinstanceTreeView and SalInstanceIconView.
    Deduplicate by moving the implementation to the common base class.
    
    Change-Id: If77ce84e14031cafb8f942b9ad5def6034c81b97
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195816
    Reviewed-by: Michael Weghorn <[email protected]>
    Tested-by: Jenkins

diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx
index 2004fca25dd1..bbd948c6327a 100644
--- a/vcl/inc/salvtables.hxx
+++ b/vcl/inc/salvtables.hxx
@@ -1503,6 +1503,9 @@ public:
 
     virtual std::unique_ptr<weld::TreeIter> get_iterator(int nPos) const 
override;
 
+    virtual OUString get_selected_id() const override;
+    virtual OUString get_selected_text() const override;
+
     virtual void select_all() override;
     virtual void unselect_all() override;
 
@@ -1735,10 +1738,6 @@ public:
 
     virtual int get_selected_index() const override;
 
-    virtual OUString get_selected_text() const override;
-
-    virtual OUString get_selected_id() const override;
-
     virtual void copy_iterator(const weld::TreeIter& rSource, weld::TreeIter& 
rDest) const override;
 
     virtual bool get_selected(weld::TreeIter* pIter) const override;
@@ -1935,10 +1934,6 @@ public:
     virtual void
     connect_get_image(const Link<const weld::encoded_image_query&, bool>& 
rLink) override;
 
-    virtual OUString get_selected_id() const override;
-
-    virtual OUString get_selected_text() const override;
-
     virtual int count_selected_items() const override;
 
     virtual bool get_selected(weld::TreeIter* pIter) const override;
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 7264c11d1ae6..c5ac94e6912b 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -3532,6 +3532,25 @@ std::unique_ptr<weld::TreeIter> 
SalInstanceItemView::get_iterator(int nPos) cons
     return {};
 }
 
+OUString SalInstanceItemView::get_selected_id() const
+{
+    assert(m_pTreeListBox->IsUpdateMode() && "don't request selection when 
frozen");
+    if (SvTreeListEntry* pEntry = m_pTreeListBox->FirstSelected())
+    {
+        if (const OUString* pStr = static_cast<const 
OUString*>(pEntry->GetUserData()))
+            return *pStr;
+    }
+    return OUString();
+}
+
+OUString SalInstanceItemView::get_selected_text() const
+{
+    assert(m_pTreeListBox->IsUpdateMode() && "don't request selection when 
frozen");
+    if (SvTreeListEntry* pEntry = m_pTreeListBox->FirstSelected())
+        return SvTabListBox::GetEntryText(pEntry, 0);
+    return OUString();
+}
+
 void SalInstanceItemView::select_all() { unselect(-1); }
 
 void SalInstanceItemView::unselect_all() { select(-1); }
@@ -4525,25 +4544,6 @@ int SalInstanceTreeView::get_selected_index() const
     return SvTreeList::GetRelPos(pEntry);
 }
 
-OUString SalInstanceTreeView::get_selected_text() const
-{
-    assert(m_xTreeView->IsUpdateMode() && "don't request selection when 
frozen");
-    if (SvTreeListEntry* pEntry = m_xTreeView->FirstSelected())
-        return SvTabListBox::GetEntryText(pEntry, 0);
-    return OUString();
-}
-
-OUString SalInstanceTreeView::get_selected_id() const
-{
-    assert(m_xTreeView->IsUpdateMode() && "don't request selection when 
frozen");
-    if (SvTreeListEntry* pEntry = m_xTreeView->FirstSelected())
-    {
-        if (const OUString* pStr = static_cast<const 
OUString*>(pEntry->GetUserData()))
-            return *pStr;
-    }
-    return OUString();
-}
-
 void SalInstanceTreeView::copy_iterator(const weld::TreeIter& rSource, 
weld::TreeIter& rDest) const
 {
     const SalInstanceTreeIter& rVclSource(static_cast<const 
SalInstanceTreeIter&>(rSource));
@@ -5386,25 +5386,6 @@ void SalInstanceIconView::connect_get_image(
     m_xIconView->SetDumpImageHdl(LINK(this, SalInstanceIconView, 
DumpImageHdl));
 }
 
-OUString SalInstanceIconView::get_selected_id() const
-{
-    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();
-}
-
-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();
-}
-
 int SalInstanceIconView::count_selected_items() const { return 
m_xIconView->GetSelectionCount(); }
 
 bool SalInstanceIconView::get_selected(weld::TreeIter* pIter) const
commit 9b85c7175cd9970514ee56fe589f5d44ca945876
Author:     Michael Weghorn <[email protected]>
AuthorDate: Wed Dec 17 22:54:15 2025 +0100
Commit:     Michael Weghorn <[email protected]>
CommitDate: Thu Dec 18 07:22:09 2025 +0100

    weld: Deduplicate more selection-related methods in ItemView subclasses
    
    This logic is the same in weld::TreeView and weld::IconView.
    Move it to the common weld::ItemView base class.
    
    Change-Id: Ia82491133c5d6223f8b9fcd73f1bcedb65e331b6
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195815
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <[email protected]>

diff --git a/include/vcl/weld/IconView.hxx b/include/vcl/weld/IconView.hxx
index b2e6a0029643..65d109c96fc1 100644
--- a/include/vcl/weld/IconView.hxx
+++ b/include/vcl/weld/IconView.hxx
@@ -20,9 +20,6 @@ class VCL_DLLPUBLIC IconView : virtual public ItemView
 {
     friend class ::LOKTrigger;
 
-private:
-    OUString m_sSavedValue;
-
 protected:
     Link<IconView&, void> m_aSelectionChangeHdl;
     Link<IconView&, bool> m_aItemActivatedHdl;
@@ -118,12 +115,8 @@ public:
         m_aGetPropertyTreeElemHdl = rLink;
     }
 
-    virtual OUString get_selected_id() const = 0;
-
     virtual int count_selected_items() const = 0;
 
-    virtual OUString get_selected_text() const = 0;
-
     //by index. Don't select when frozen, select after thaw. Note selection 
doesn't survive a freeze.
     virtual OUString get_id(int pos) const = 0;
 
@@ -166,10 +159,6 @@ public:
 
     // call func on each selected element until func returns true or we run 
out of elements
     virtual void selected_foreach(const std::function<bool(TreeIter&)>& func) 
= 0;
-
-    void save_value() { m_sSavedValue = get_selected_text(); }
-    OUString const& get_saved_value() const { return m_sSavedValue; }
-    bool get_value_changed_from_saved() const { return m_sSavedValue != 
get_selected_text(); }
 };
 }
 
diff --git a/include/vcl/weld/ItemView.hxx b/include/vcl/weld/ItemView.hxx
index 40e3e67cb597..91e2bbfd1c7c 100644
--- a/include/vcl/weld/ItemView.hxx
+++ b/include/vcl/weld/ItemView.hxx
@@ -17,6 +17,8 @@ namespace weld
 /* Abstract base class for TreeView and IconView. */
 class VCL_DLLPUBLIC ItemView : virtual public Widget
 {
+    OUString m_sSavedValue;
+
 protected:
     virtual void do_select(int pos) = 0;
     virtual void do_unselect(int pos) = 0;
@@ -27,6 +29,9 @@ public:
 
     virtual std::unique_ptr<TreeIter> get_iterator(int nPos) const = 0;
 
+    virtual OUString get_selected_id() const = 0;
+    virtual OUString get_selected_text() const = 0;
+
     virtual bool get_selected(TreeIter* pIter) const = 0;
     virtual bool get_cursor(TreeIter* pIter) const = 0;
 
@@ -40,6 +45,10 @@ public:
     virtual int n_children() const = 0;
 
     void clear();
+
+    void save_value() { m_sSavedValue = get_selected_text(); }
+    OUString const& get_saved_value() const { return m_sSavedValue; }
+    bool get_value_changed_from_saved() const { return m_sSavedValue != 
get_selected_text(); }
 };
 }
 
diff --git a/include/vcl/weld/TreeView.hxx b/include/vcl/weld/TreeView.hxx
index 047399bddc4c..e803c863b639 100644
--- a/include/vcl/weld/TreeView.hxx
+++ b/include/vcl/weld/TreeView.hxx
@@ -37,9 +37,6 @@ public:
     typedef std::tuple<vcl::RenderContext&, const tools::Rectangle&, bool, 
const OUString&>
         render_args;
 
-private:
-    OUString m_sSavedValue;
-
 protected:
     Link<TreeView&, void> m_aSelectionChangedHdl;
     Link<TreeView&, bool> m_aRowActivatedHdl;
@@ -223,9 +220,6 @@ public:
     void connect_column_clicked(const Link<int, void>& rLink) { 
m_aColumnClickedHdl = rLink; }
     void connect_model_changed(const Link<TreeView&, void>& rLink) { 
m_aModelChangedHdl = rLink; }
 
-    virtual OUString get_selected_text() const = 0;
-    virtual OUString get_selected_id() const = 0;
-
     // call before inserting any content and connecting to toggle signals,
     // an pre-inserted checkbutton column will exist at the start of every row
     // inserted after this call which can be accessed with col index -1
@@ -568,10 +562,6 @@ public:
     virtual void vadjustment_set_value(int value) = 0;
     virtual int vadjustment_get_value() const = 0;
 
-    void save_value() { m_sSavedValue = get_selected_text(); }
-    OUString const& get_saved_value() const { return m_sSavedValue; }
-    bool get_value_changed_from_saved() const { return m_sSavedValue != 
get_selected_text(); }
-
     // for custom rendering a cell
     void connect_custom_get_size(const Link<get_size_args, Size>& rLink) { 
m_aGetSizeHdl = rLink; }
     void connect_custom_render(const Link<render_args, void>& rLink) { 
m_aRenderHdl = rLink; }

Reply via email to