vcl/inc/qt5/QtInstanceTreeView.hxx | 10 ++++--- vcl/qt5/QtInstanceTreeView.cxx | 52 +++++++++++++++++++++++++------------ 2 files changed, 42 insertions(+), 20 deletions(-)
New commits: commit 17967a3124524aebff28e60027214def5fcada88 Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Wed Feb 12 22:11:40 2025 +0100 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Thu Feb 13 08:51:27 2025 +0100 tdf#130857 qt weld: Unify/deduplicate the 2 QtInstanceTreeview::set_text Instead of duplicating the logic twice (once for the variant that takes an `int nRow` param, and once for the variant that takes a `const weld::TreeIter& rIter` param): * Add helper method QtInstanceTreeView::rowIndex that returns the row index for a weld::TreeIter * Use that in the QtInstanceTreeview::set_text variant that takes the weld::TreeIter& param to convert that to the row index and forward the call to the variant that takes the row index * Align the variant that takes the row index param with the previous implementation in the variant taking a weld::TreeIter&, as that one looks a little nicer. The idea is to use the same approach for other methods as well where such 2 variants exist. Change-Id: I9cb958bedce1b8926a10bc42dad032cc5f689989 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/181514 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> diff --git a/vcl/inc/qt5/QtInstanceTreeView.hxx b/vcl/inc/qt5/QtInstanceTreeView.hxx index 27e9089d6e0e..56bb10717cc4 100644 --- a/vcl/inc/qt5/QtInstanceTreeView.hxx +++ b/vcl/inc/qt5/QtInstanceTreeView.hxx @@ -188,6 +188,7 @@ public: private: QModelIndex modelIndex(int nRow, int nCol = 0) const; QModelIndex modelIndex(const weld::TreeIter& rIter, int nCol = 0) const; + static int rowIndex(const weld::TreeIter& rIter); OUString get_id(const QModelIndex& rModelIndex) const; static QAbstractItemView::SelectionMode mapSelectionMode(SelectionMode eMode); diff --git a/vcl/qt5/QtInstanceTreeView.cxx b/vcl/qt5/QtInstanceTreeView.cxx index 21c702b0c667..65575f807ce1 100644 --- a/vcl/qt5/QtInstanceTreeView.cxx +++ b/vcl/qt5/QtInstanceTreeView.cxx @@ -192,14 +192,10 @@ void QtInstanceTreeView::set_text(int nRow, const OUString& rText, int nCol) assert(nCol != -1 && "Support for special index -1 (first text column) not implemented yet"); SolarMutexGuard g; + GetQtInstance().RunInMainThread([&] { - QStandardItem* pItem = m_pModel->item(nRow, nCol); - if (!pItem) - { - pItem = new QStandardItem; - m_pModel->setItem(nRow, nCol, pItem); - } - pItem->setText(toQString(rText)); + QModelIndex aIndex = modelIndex(nRow, nCol); + m_pModel->setData(aIndex, toQString(rText)); }); } @@ -465,14 +461,7 @@ void QtInstanceTreeView::set_extra_row_indent(const weld::TreeIter&, int) void QtInstanceTreeView::set_text(const weld::TreeIter& rIter, const OUString& rStr, int nCol) { - assert(nCol != -1 && "Special column -1 not handled yet"); - - SolarMutexGuard g; - - GetQtInstance().RunInMainThread([&] { - QModelIndex aIndex = modelIndex(rIter, nCol); - m_pModel->setData(aIndex, toQString(rStr)); - }); + set_text(rowIndex(rIter), rStr, nCol); } void QtInstanceTreeView::set_sensitive(const weld::TreeIter&, bool, int) @@ -846,9 +835,14 @@ QModelIndex QtInstanceTreeView::modelIndex(int nRow, int nCol) const } QModelIndex QtInstanceTreeView::modelIndex(const weld::TreeIter& rIter, int nCol) const +{ + return modelIndex(rowIndex(rIter), nCol); +} + +int QtInstanceTreeView::rowIndex(const weld::TreeIter& rIter) { QModelIndex aModelIndex = static_cast<const QtInstanceTreeIter&>(rIter).m_aModelIndex; - return modelIndex(aModelIndex.row(), nCol); + return aModelIndex.row(); } OUString QtInstanceTreeView::get_id(const QModelIndex& rModelIndex) const commit 8f071b7b20697ff0167de7706e45f0b57a6b67ae Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Wed Feb 12 21:43:47 2025 +0100 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Thu Feb 13 08:51:20 2025 +0100 tdf#130857 qt weld: Implement some treeview methods to set data Extend the QtInstanceTreeView::modelIndex helper methods to also take a column index (default: 0). Implement the QtInstanceTreeView::set_text, QtInstanceTreeView::set_id and QtInstanceTreeView::set_image variants that were seen used in a WIP branch to support the "File" -> "Templates" -> "Manage Templates" dialog in Writer. (More is needed to actually support that dialog.) ListView::AppendItem/ListView::AppendRow (in sfx2/source/control/listview.cxx) calls weld::TreeView::set_image with an empty image/icon name, so return early if that happens. Change-Id: I53c2b096220b53e23e81f8979638696ed592addd Reviewed-on: https://gerrit.libreoffice.org/c/core/+/181512 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> diff --git a/vcl/inc/qt5/QtInstanceTreeView.hxx b/vcl/inc/qt5/QtInstanceTreeView.hxx index 2367afc815e0..27e9089d6e0e 100644 --- a/vcl/inc/qt5/QtInstanceTreeView.hxx +++ b/vcl/inc/qt5/QtInstanceTreeView.hxx @@ -92,7 +92,8 @@ public: virtual void select(const weld::TreeIter& rIter) override; virtual void 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, int col = -1) override; + virtual void set_text(const weld::TreeIter& rIter, const OUString& rStr, + int nCol = -1) override; virtual void set_sensitive(const weld::TreeIter& rIter, bool bSensitive, int col = -1) override; virtual bool get_sensitive(const weld::TreeIter& rIter, int col) const override; virtual void set_text_emphasis(const weld::TreeIter& rIter, bool bOn, int col) override; @@ -104,7 +105,7 @@ public: virtual void set_id(const weld::TreeIter& rIter, const OUString& rId) override; virtual OUString get_id(const weld::TreeIter& rIter) const override; virtual void set_image(const weld::TreeIter& rIter, const OUString& rImage, - int col = -1) override; + int nCol = -1) override; virtual void set_image(const weld::TreeIter& rIter, VirtualDevice& rImage, int col = -1) override; virtual void set_image(const weld::TreeIter& rIter, @@ -185,8 +186,8 @@ public: using QtInstanceWidget::get_sensitive; private: - QModelIndex modelIndex(int nPos) const; - static QModelIndex modelIndex(const weld::TreeIter& rIter); + QModelIndex modelIndex(int nRow, int nCol = 0) const; + QModelIndex modelIndex(const weld::TreeIter& rIter, int nCol = 0) const; OUString get_id(const QModelIndex& rModelIndex) const; static QAbstractItemView::SelectionMode mapSelectionMode(SelectionMode eMode); diff --git a/vcl/qt5/QtInstanceTreeView.cxx b/vcl/qt5/QtInstanceTreeView.cxx index e1e60e03bb44..21c702b0c667 100644 --- a/vcl/qt5/QtInstanceTreeView.cxx +++ b/vcl/qt5/QtInstanceTreeView.cxx @@ -463,9 +463,16 @@ void QtInstanceTreeView::set_extra_row_indent(const weld::TreeIter&, int) assert(false && "Not implemented yet"); } -void QtInstanceTreeView::set_text(const weld::TreeIter&, const OUString&, int) +void QtInstanceTreeView::set_text(const weld::TreeIter& rIter, const OUString& rStr, int nCol) { - assert(false && "Not implemented yet"); + assert(nCol != -1 && "Special column -1 not handled yet"); + + SolarMutexGuard g; + + GetQtInstance().RunInMainThread([&] { + QModelIndex aIndex = modelIndex(rIter, nCol); + m_pModel->setData(aIndex, toQString(rStr)); + }); } void QtInstanceTreeView::set_sensitive(const weld::TreeIter&, bool, int) @@ -512,9 +519,14 @@ OUString QtInstanceTreeView::get_text(const weld::TreeIter&, int) const return OUString(); } -void QtInstanceTreeView::set_id(const weld::TreeIter&, const OUString&) +void QtInstanceTreeView::set_id(const weld::TreeIter& rIter, const OUString& rId) { - assert(false && "Not implemented yet"); + SolarMutexGuard g; + + GetQtInstance().RunInMainThread([&] { + QModelIndex aIndex = modelIndex(rIter); + m_pModel->setData(aIndex, toQString(rId), ROLE_ID); + }); } OUString QtInstanceTreeView::get_id(const weld::TreeIter& rIter) const @@ -522,9 +534,19 @@ OUString QtInstanceTreeView::get_id(const weld::TreeIter& rIter) const return get_id(modelIndex(rIter)); } -void QtInstanceTreeView::set_image(const weld::TreeIter&, const OUString&, int) +void QtInstanceTreeView::set_image(const weld::TreeIter& rIter, const OUString& rImage, int nCol) { - assert(false && "Not implemented yet"); + assert(nCol != -1 && "Special column -1 not handled yet"); + + SolarMutexGuard g; + + GetQtInstance().RunInMainThread([&] { + if (rImage.isEmpty()) + return; + QModelIndex aIndex = modelIndex(rIter, nCol); + QIcon aIcon = loadQPixmapIcon(rImage); + m_pModel->setData(aIndex, aIcon, Qt::DecorationRole); + }); } void QtInstanceTreeView::set_image(const weld::TreeIter&, VirtualDevice&, int) @@ -818,11 +840,15 @@ QAbstractItemView::SelectionMode QtInstanceTreeView::mapSelectionMode(SelectionM } } -QModelIndex QtInstanceTreeView::modelIndex(int nPos) const { return m_pModel->index(nPos, 0); } +QModelIndex QtInstanceTreeView::modelIndex(int nRow, int nCol) const +{ + return m_pModel->index(nRow, nCol); +} -QModelIndex QtInstanceTreeView::modelIndex(const weld::TreeIter& rIter) +QModelIndex QtInstanceTreeView::modelIndex(const weld::TreeIter& rIter, int nCol) const { - return static_cast<const QtInstanceTreeIter&>(rIter).m_aModelIndex; + QModelIndex aModelIndex = static_cast<const QtInstanceTreeIter&>(rIter).m_aModelIndex; + return modelIndex(aModelIndex.row(), nCol); } OUString QtInstanceTreeView::get_id(const QModelIndex& rModelIndex) const