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; }
