vcl/inc/qt5/QtInstanceIconView.hxx | 3 - vcl/inc/qt5/QtInstanceItemView.hxx | 9 +++++ vcl/inc/qt5/QtInstanceTreeView.hxx | 3 - vcl/qt5/QtInstanceIconView.cxx | 19 ------------ vcl/qt5/QtInstanceItemView.cxx | 56 ++++++++++++++++++++++++++++++++++++- vcl/qt5/QtInstanceTreeView.cxx | 47 ------------------------------- 6 files changed, 63 insertions(+), 74 deletions(-)
New commits: commit 51bd210886cd66dd8ddad4bf5b7d317c98b2b3c1 Author: Michael Weghorn <[email protected]> AuthorDate: Sat Dec 20 11:34:01 2025 +0100 Commit: Michael Weghorn <[email protected]> CommitDate: Sat Dec 20 16:47:43 2025 +0100 tdf#130857 qt weld: Deduplicate weld::ItemView::do_select impls Move the QtInstanceTreeView implementation to the QtInstanceItemView base class and reuse for QtInstanceIconView as well. While the IconView only has a single column anyways, the extra flags set in the QtInstanceTreeView implementation are fine. Change-Id: Ic5c46e68a52e7eea9d703cb5c9f3af3d78f7f3ad Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195964 Tested-by: Jenkins Reviewed-by: Michael Weghorn <[email protected]> diff --git a/vcl/inc/qt5/QtInstanceIconView.hxx b/vcl/inc/qt5/QtInstanceIconView.hxx index e05d7e16629e..406bc693276b 100644 --- a/vcl/inc/qt5/QtInstanceIconView.hxx +++ b/vcl/inc/qt5/QtInstanceIconView.hxx @@ -44,7 +44,6 @@ public: virtual OUString get_selected_text() const override; - virtual void do_select(const weld::TreeIter& rIter) override; virtual void do_unselect(const weld::TreeIter& rIter) override; virtual void set_image(int nPos, VirtualDevice& rDevice) override; diff --git a/vcl/inc/qt5/QtInstanceItemView.hxx b/vcl/inc/qt5/QtInstanceItemView.hxx index 41613af54501..bfe9feb2672a 100644 --- a/vcl/inc/qt5/QtInstanceItemView.hxx +++ b/vcl/inc/qt5/QtInstanceItemView.hxx @@ -29,6 +29,8 @@ protected: virtual void do_set_cursor(const weld::TreeIter& rIter) override; + virtual void do_select(const weld::TreeIter& rIter) override; + virtual void do_select_all() override; virtual void do_unselect_all() override; diff --git a/vcl/inc/qt5/QtInstanceTreeView.hxx b/vcl/inc/qt5/QtInstanceTreeView.hxx index a85969b02e2b..a6a6296e25bb 100644 --- a/vcl/inc/qt5/QtInstanceTreeView.hxx +++ b/vcl/inc/qt5/QtInstanceTreeView.hxx @@ -93,7 +93,6 @@ public: virtual bool iter_has_child(const weld::TreeIter& rIter) const override; virtual int iter_n_children(const weld::TreeIter& rIter) const override; virtual void do_remove(const weld::TreeIter& rIter) override; - virtual void do_select(const weld::TreeIter& rIter) override; virtual void do_unselect(const weld::TreeIter& rIter) override; virtual void set_extra_row_indent(const weld::TreeIter& rIter, int nIndentLevel) override; virtual void set_text(const weld::TreeIter& rIter, const OUString& rStr, diff --git a/vcl/qt5/QtInstanceIconView.cxx b/vcl/qt5/QtInstanceIconView.cxx index dc0e0ce7b872..d1c1159b33b5 100644 --- a/vcl/qt5/QtInstanceIconView.cxx +++ b/vcl/qt5/QtInstanceIconView.cxx @@ -128,13 +128,6 @@ OUString QtInstanceIconView::get_selected_text() const return OUString(); } -void QtInstanceIconView::do_select(const weld::TreeIter& rIter) -{ - SolarMutexGuard g; - GetQtInstance().RunInMainThread( - [&] { m_pSelectionModel->select(modelIndex(rIter), QItemSelectionModel::Select); }); -} - void QtInstanceIconView::do_unselect(const weld::TreeIter& rIter) { SolarMutexGuard g; diff --git a/vcl/qt5/QtInstanceItemView.cxx b/vcl/qt5/QtInstanceItemView.cxx index b842a73cd10d..c9b0d2e712a6 100644 --- a/vcl/qt5/QtInstanceItemView.cxx +++ b/vcl/qt5/QtInstanceItemView.cxx @@ -124,6 +124,20 @@ void QtInstanceItemView::do_set_cursor(const weld::TreeIter& rIter) GetQtInstance().RunInMainThread([&] { getItemView().setCurrentIndex(modelIndex(rIter)); }); } +void QtInstanceItemView::do_select(const weld::TreeIter& rIter) +{ + SolarMutexGuard g; + + GetQtInstance().RunInMainThread([&] { + QItemSelectionModel::SelectionFlags eFlags + = QItemSelectionModel::Select | QItemSelectionModel::Rows; + if (getItemView().selectionMode() == QAbstractItemView::SingleSelection) + eFlags |= QItemSelectionModel::Clear; + + getSelectionModel().select(modelIndex(rIter), eFlags); + }); +} + void QtInstanceItemView::do_select_all() { SolarMutexGuard g; diff --git a/vcl/qt5/QtInstanceTreeView.cxx b/vcl/qt5/QtInstanceTreeView.cxx index 13f740bc21c1..c9a11cac8fe5 100644 --- a/vcl/qt5/QtInstanceTreeView.cxx +++ b/vcl/qt5/QtInstanceTreeView.cxx @@ -415,20 +415,6 @@ void QtInstanceTreeView::do_remove(const weld::TreeIter& rIter) }); } -void QtInstanceTreeView::do_select(const weld::TreeIter& rIter) -{ - SolarMutexGuard g; - - GetQtInstance().RunInMainThread([&] { - QItemSelectionModel::SelectionFlags eFlags - = QItemSelectionModel::Select | QItemSelectionModel::Rows; - if (m_pTreeView->selectionMode() == QAbstractItemView::SingleSelection) - eFlags |= QItemSelectionModel::Clear; - - m_pSelectionModel->select(modelIndex(rIter), eFlags); - }); -} - void QtInstanceTreeView::do_unselect(const weld::TreeIter& rIter) { SolarMutexGuard g; commit 92a20e6bac4904e27b7e3ec206f7bf46f1cfbf52 Author: Michael Weghorn <[email protected]> AuthorDate: Sat Dec 20 11:27:44 2025 +0100 Commit: Michael Weghorn <[email protected]> CommitDate: Sat Dec 20 16:47:37 2025 +0100 tdf#130857 qt weld: Implement QtInstanceItemView::get_selected Move the QtInstanceTreeView::get_selected logic to QtInstanceItemView, so it can be reused for QtInstanceIconView as well. Change-Id: I5ecb4f4fb071a2301fdbd553bdc9ff53f3c1c203 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195963 Reviewed-by: Michael Weghorn <[email protected]> Tested-by: Jenkins diff --git a/vcl/inc/qt5/QtInstanceIconView.hxx b/vcl/inc/qt5/QtInstanceIconView.hxx index 721174150315..e05d7e16629e 100644 --- a/vcl/inc/qt5/QtInstanceIconView.hxx +++ b/vcl/inc/qt5/QtInstanceIconView.hxx @@ -54,7 +54,6 @@ public: virtual void do_remove(int pos) override; virtual tools::Rectangle get_rect(const weld::TreeIter& rIter) const override; - virtual bool get_selected(weld::TreeIter* pIter) const override; virtual OUString get_text(const weld::TreeIter& rIter) const override; virtual void do_scroll_to_item(const weld::TreeIter& rIter) override; diff --git a/vcl/inc/qt5/QtInstanceItemView.hxx b/vcl/inc/qt5/QtInstanceItemView.hxx index d67a632250b6..41613af54501 100644 --- a/vcl/inc/qt5/QtInstanceItemView.hxx +++ b/vcl/inc/qt5/QtInstanceItemView.hxx @@ -52,6 +52,8 @@ public: using weld::ItemView::set_id; virtual void set_id(const weld::TreeIter& rIter, const OUString& rId) override; + virtual bool get_selected(weld::TreeIter* pIter) const override; + virtual bool get_cursor(weld::TreeIter* pIter) const override; protected: @@ -62,6 +64,7 @@ protected: private: QAbstractItemView& getItemView() const; + QItemSelectionModel& getSelectionModel() const; }; /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/vcl/inc/qt5/QtInstanceTreeView.hxx b/vcl/inc/qt5/QtInstanceTreeView.hxx index e7d118d53df0..a85969b02e2b 100644 --- a/vcl/inc/qt5/QtInstanceTreeView.hxx +++ b/vcl/inc/qt5/QtInstanceTreeView.hxx @@ -82,7 +82,6 @@ public: virtual int find_id(const OUString& rId) const override; virtual void copy_iterator(const weld::TreeIter& rSource, weld::TreeIter& rDest) const override; - virtual bool get_selected(weld::TreeIter* pIter) const override; virtual bool iter_previous_sibling(weld::TreeIter& rIter) const override; virtual bool iter_next(weld::TreeIter& rIter) const override; virtual bool iter_previous(weld::TreeIter& rIter) const override; diff --git a/vcl/qt5/QtInstanceIconView.cxx b/vcl/qt5/QtInstanceIconView.cxx index 3276b32e1166..dc0e0ce7b872 100644 --- a/vcl/qt5/QtInstanceIconView.cxx +++ b/vcl/qt5/QtInstanceIconView.cxx @@ -192,12 +192,6 @@ tools::Rectangle QtInstanceIconView::get_rect(const weld::TreeIter&) const return tools::Rectangle(); } -bool QtInstanceIconView::get_selected(weld::TreeIter*) const -{ - assert(false && "Not implemented yet"); - return false; -} - OUString QtInstanceIconView::get_text(const weld::TreeIter& rIter) const { SolarMutexGuard g; diff --git a/vcl/qt5/QtInstanceItemView.cxx b/vcl/qt5/QtInstanceItemView.cxx index f453997d0dcf..b842a73cd10d 100644 --- a/vcl/qt5/QtInstanceItemView.cxx +++ b/vcl/qt5/QtInstanceItemView.cxx @@ -84,6 +84,23 @@ void QtInstanceItemView::set_id(const weld::TreeIter& rIter, const OUString& rId [&] { m_rModel.setData(modelIndex(rIter), toQString(rId), ROLE_ID); }); } +bool QtInstanceItemView::get_selected(weld::TreeIter* pIter) const +{ + SolarMutexGuard g; + + bool bHasSelection = false; + GetQtInstance().RunInMainThread([&] { + const QModelIndexList aSelectedIndexes = getSelectionModel().selectedIndexes(); + if (aSelectedIndexes.empty()) + return; + + bHasSelection = true; + if (pIter) + static_cast<QtInstanceTreeIter*>(pIter)->setModelIndex(aSelectedIndexes.first()); + }); + return bHasSelection; +} + bool QtInstanceItemView::get_cursor(weld::TreeIter* pIter) const { SolarMutexGuard g; @@ -150,4 +167,11 @@ QAbstractItemView& QtInstanceItemView::getItemView() const return *pView; } +QItemSelectionModel& QtInstanceItemView::getSelectionModel() const +{ + QItemSelectionModel* pSelectionModel = getItemView().selectionModel(); + assert(pSelectionModel); + return *pSelectionModel; +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/vcl/qt5/QtInstanceTreeView.cxx b/vcl/qt5/QtInstanceTreeView.cxx index dcc5a8aa72ad..13f740bc21c1 100644 --- a/vcl/qt5/QtInstanceTreeView.cxx +++ b/vcl/qt5/QtInstanceTreeView.cxx @@ -314,23 +314,6 @@ void QtInstanceTreeView::copy_iterator(const weld::TreeIter& rSource, weld::Tree static_cast<QtInstanceTreeIter&>(rDest).setModelIndex(aModelIndex); } -bool QtInstanceTreeView::get_selected(weld::TreeIter* pIter) const -{ - SolarMutexGuard g; - - bool bHasSelection = false; - GetQtInstance().RunInMainThread([&] { - const QModelIndexList aSelectedIndexes = m_pSelectionModel->selectedIndexes(); - if (aSelectedIndexes.empty()) - return; - - bHasSelection = true; - if (pIter) - static_cast<QtInstanceTreeIter*>(pIter)->setModelIndex(aSelectedIndexes.first()); - }); - return bHasSelection; -} - bool QtInstanceTreeView::iter_previous_sibling(weld::TreeIter& rIter) const { QtInstanceTreeIter& rQtIter = static_cast<QtInstanceTreeIter&>(rIter); commit f7694a4ba82fec1a7797e91c70097ec58fd8ff20 Author: Michael Weghorn <[email protected]> AuthorDate: Sat Dec 20 11:19:37 2025 +0100 Commit: Michael Weghorn <[email protected]> CommitDate: Sat Dec 20 16:47:31 2025 +0100 tdf#130857 qt weld: Move ItemView::get_cursor impl to base The QtInstanceTreeView::get_cursor logic is appropriate for QtInstanceIconView as well. Move it to the base class and drop overrides in subclasses. Change-Id: I3d1156ada97f1fd8a7ff38d8b2d21a762cf066eb Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195962 Tested-by: Jenkins Reviewed-by: Michael Weghorn <[email protected]> diff --git a/vcl/inc/qt5/QtInstanceIconView.hxx b/vcl/inc/qt5/QtInstanceIconView.hxx index 6501665d874e..721174150315 100644 --- a/vcl/inc/qt5/QtInstanceIconView.hxx +++ b/vcl/inc/qt5/QtInstanceIconView.hxx @@ -55,7 +55,6 @@ public: virtual tools::Rectangle get_rect(const weld::TreeIter& rIter) const override; virtual bool get_selected(weld::TreeIter* pIter) const override; - virtual bool get_cursor(weld::TreeIter* pIter) const override; virtual OUString get_text(const weld::TreeIter& rIter) const override; virtual void do_scroll_to_item(const weld::TreeIter& rIter) override; diff --git a/vcl/inc/qt5/QtInstanceItemView.hxx b/vcl/inc/qt5/QtInstanceItemView.hxx index e577196c3c51..d67a632250b6 100644 --- a/vcl/inc/qt5/QtInstanceItemView.hxx +++ b/vcl/inc/qt5/QtInstanceItemView.hxx @@ -52,6 +52,8 @@ public: using weld::ItemView::set_id; virtual void set_id(const weld::TreeIter& rIter, const OUString& rId) override; + virtual bool get_cursor(weld::TreeIter* pIter) const override; + protected: QModelIndex modelIndex(int nRow, int nCol = 0, const QModelIndex& rParentIndex = QModelIndex()) const; @@ -59,7 +61,7 @@ protected: QtInstanceTreeIter treeIter(int nRow, const QModelIndex& rParentIndex = QModelIndex()) const; private: - QAbstractItemView& getItemView(); + QAbstractItemView& getItemView() const; }; /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/vcl/inc/qt5/QtInstanceTreeView.hxx b/vcl/inc/qt5/QtInstanceTreeView.hxx index 9b95c79c3efe..e7d118d53df0 100644 --- a/vcl/inc/qt5/QtInstanceTreeView.hxx +++ b/vcl/inc/qt5/QtInstanceTreeView.hxx @@ -83,7 +83,6 @@ public: virtual void copy_iterator(const weld::TreeIter& rSource, weld::TreeIter& rDest) const override; virtual bool get_selected(weld::TreeIter* pIter) const override; - virtual bool get_cursor(weld::TreeIter* pIter) const override; virtual bool iter_previous_sibling(weld::TreeIter& rIter) const override; virtual bool iter_next(weld::TreeIter& rIter) const override; virtual bool iter_previous(weld::TreeIter& rIter) const override; diff --git a/vcl/qt5/QtInstanceIconView.cxx b/vcl/qt5/QtInstanceIconView.cxx index c9ebd12e5411..3276b32e1166 100644 --- a/vcl/qt5/QtInstanceIconView.cxx +++ b/vcl/qt5/QtInstanceIconView.cxx @@ -198,12 +198,6 @@ bool QtInstanceIconView::get_selected(weld::TreeIter*) const return false; } -bool QtInstanceIconView::get_cursor(weld::TreeIter*) const -{ - assert(false && "Not implemented yet"); - return false; -} - OUString QtInstanceIconView::get_text(const weld::TreeIter& rIter) const { SolarMutexGuard g; diff --git a/vcl/qt5/QtInstanceItemView.cxx b/vcl/qt5/QtInstanceItemView.cxx index 43ad906a2c78..f453997d0dcf 100644 --- a/vcl/qt5/QtInstanceItemView.cxx +++ b/vcl/qt5/QtInstanceItemView.cxx @@ -84,6 +84,22 @@ void QtInstanceItemView::set_id(const weld::TreeIter& rIter, const OUString& rId [&] { m_rModel.setData(modelIndex(rIter), toQString(rId), ROLE_ID); }); } +bool QtInstanceItemView::get_cursor(weld::TreeIter* pIter) const +{ + SolarMutexGuard g; + + bool bRet = false; + GetQtInstance().RunInMainThread([&] { + const QModelIndex aCurrentIndex = getItemView().currentIndex(); + QtInstanceTreeIter* pQtIter = static_cast<QtInstanceTreeIter*>(pIter); + if (pQtIter) + pQtIter->setModelIndex(aCurrentIndex); + bRet = aCurrentIndex.isValid(); + }); + + return bRet; +} + void QtInstanceItemView::do_set_cursor(const weld::TreeIter& rIter) { SolarMutexGuard g; @@ -127,7 +143,7 @@ QtInstanceTreeIter QtInstanceItemView::treeIter(int nRow, const QModelIndex& rPa return QtInstanceTreeIter(m_rModel.index(nRow, 0, rParentIndex)); } -QAbstractItemView& QtInstanceItemView::getItemView() +QAbstractItemView& QtInstanceItemView::getItemView() const { QAbstractItemView* pView = qobject_cast<QAbstractItemView*>(getQWidget()); assert(pView); diff --git a/vcl/qt5/QtInstanceTreeView.cxx b/vcl/qt5/QtInstanceTreeView.cxx index 8c590f3ad09d..dcc5a8aa72ad 100644 --- a/vcl/qt5/QtInstanceTreeView.cxx +++ b/vcl/qt5/QtInstanceTreeView.cxx @@ -331,22 +331,6 @@ bool QtInstanceTreeView::get_selected(weld::TreeIter* pIter) const return bHasSelection; } -bool QtInstanceTreeView::get_cursor(weld::TreeIter* pIter) const -{ - SolarMutexGuard g; - - bool bRet = false; - GetQtInstance().RunInMainThread([&] { - const QModelIndex aCurrentIndex = m_pTreeView->currentIndex(); - QtInstanceTreeIter* pQtIter = static_cast<QtInstanceTreeIter*>(pIter); - if (pQtIter) - pQtIter->setModelIndex(aCurrentIndex); - bRet = aCurrentIndex.isValid(); - }); - - return bRet; -} - bool QtInstanceTreeView::iter_previous_sibling(weld::TreeIter& rIter) const { QtInstanceTreeIter& rQtIter = static_cast<QtInstanceTreeIter&>(rIter);
