vcl/inc/qt5/QtInstanceTreeView.hxx | 9 ++-- vcl/qt5/QtInstanceTreeView.cxx | 79 +++++++++++++++++++++++++++---------- 2 files changed, 64 insertions(+), 24 deletions(-)
New commits: commit 8710a20fabcb8892d8f1f2ae917101028db61e39 Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Fri Feb 21 00:31:02 2025 +0100 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Fri Feb 21 08:43:57 2025 +0100 tdf#130857 qt weld: Handle image/icon in QtInstanceTreeView::insert Change-Id: I681da4205302d86d3022e1b1099729fa6ed71d3a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/181978 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> diff --git a/vcl/qt5/QtInstanceTreeView.cxx b/vcl/qt5/QtInstanceTreeView.cxx index a6084ceb450d..effcfd66d03b 100644 --- a/vcl/qt5/QtInstanceTreeView.cxx +++ b/vcl/qt5/QtInstanceTreeView.cxx @@ -43,13 +43,9 @@ void QtInstanceTreeView::insert(const weld::TreeIter* pParent, int nPos, const O // assert only these are used at the moment and implement remaining cases // when needed to support more dialogs, then adjust/remove asserts below assert(!pParent && "Not implemented yet"); - assert(!pIconName && "Not implemented yet"); - assert(!pImageSurface && "Not implemented yet"); assert(!bChildrenOnDemand && "Not implemented yet"); // avoid -Werror=unused-parameter for release build (void)pParent; - (void)pIconName; - (void)pImageSurface; (void)bChildrenOnDemand; SolarMutexGuard g; @@ -60,6 +56,11 @@ void QtInstanceTreeView::insert(const weld::TreeIter* pParent, int nPos, const O if (pId) pItem->setData(toQString(*pId), ROLE_ID); + if (pIconName && !pIconName->isEmpty()) + pItem->setIcon(loadQPixmapIcon(*pIconName)); + else if (pImageSurface) + pItem->setIcon(toQPixmap(*pImageSurface)); + if (nPos == -1) nPos = m_pModel->rowCount(); m_pModel->insertRow(nPos, pItem); commit 9cf930e673178bfee0508ff0f3f374b7b210ef80 Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Fri Feb 21 00:24:48 2025 +0100 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Fri Feb 21 08:43:51 2025 +0100 tdf#130857 qt weld: Implement QtInstanceTreeView::{g,s}et_sensitive Use QStandardItem::setFlags [1] whose doc already mentions: > The item flags determine how the user can interact with the item. > This is often used to disable an item. [1] https://doc.qt.io/qt-6/qstandarditem.html#setFlags Change-Id: Ieb1fde2e9df124a42fce1e6c18a9998dd82ab94f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/181977 Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> Tested-by: Jenkins diff --git a/vcl/inc/qt5/QtInstanceTreeView.hxx b/vcl/inc/qt5/QtInstanceTreeView.hxx index b72e9fe27909..aa0249af6dcf 100644 --- a/vcl/inc/qt5/QtInstanceTreeView.hxx +++ b/vcl/inc/qt5/QtInstanceTreeView.hxx @@ -45,8 +45,8 @@ public: virtual void remove(int nPos) override; virtual OUString get_text(int nRow, int nCol = -1) const override; virtual void set_text(int nRow, const OUString& rText, int nCol = -1) override; - virtual void set_sensitive(int row, bool bSensitive, int col = -1) override; - virtual bool get_sensitive(int row, int col) const override; + virtual void set_sensitive(int nRow, bool bSensitive, int nCol = -1) override; + virtual bool get_sensitive(int nRow, int nCol) const override; virtual void set_id(int row, const OUString& rId) override; virtual void set_toggle(int row, TriState eState, int col = -1) override; virtual TriState get_toggle(int row, int col = -1) const override; @@ -94,8 +94,9 @@ public: 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 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_sensitive(const weld::TreeIter& rIter, bool bSensitive, + int nCol = -1) override; + virtual bool get_sensitive(const weld::TreeIter& rIter, int nCol) const override; virtual void set_text_emphasis(const weld::TreeIter& rIter, bool bOn, int col) override; virtual bool get_text_emphasis(const weld::TreeIter& rIter, int col) const override; virtual void set_text_align(const weld::TreeIter& rIter, double fAlign, int col) override; diff --git a/vcl/qt5/QtInstanceTreeView.cxx b/vcl/qt5/QtInstanceTreeView.cxx index 2ae4349544c2..a6084ceb450d 100644 --- a/vcl/qt5/QtInstanceTreeView.cxx +++ b/vcl/qt5/QtInstanceTreeView.cxx @@ -179,12 +179,42 @@ void QtInstanceTreeView::set_text(int nRow, const OUString& rText, int nCol) }); } -void QtInstanceTreeView::set_sensitive(int, bool, int) { assert(false && "Not implemented yet"); } +void QtInstanceTreeView::set_sensitive(int nRow, bool bSensitive, int nCol) +{ + SolarMutexGuard g; + + GetQtInstance().RunInMainThread([&] { + // column index -1 means "all columns" + if (nCol == -1) + { + for (int i = 0; i < m_pModel->columnCount(); ++i) + set_sensitive(nRow, bSensitive, i); + return; + } + + QStandardItem* pItem = m_pModel->item(nRow, nCol); + if (pItem) + { + if (bSensitive) + pItem->setFlags(pItem->flags() | Qt::ItemIsEnabled); + else + pItem->setFlags(pItem->flags() & ~Qt::ItemIsEnabled); + } + }); +} -bool QtInstanceTreeView::get_sensitive(int, int) const +bool QtInstanceTreeView::get_sensitive(int nRow, int nCol) const { - assert(false && "Not implemented yet"); - return false; + SolarMutexGuard g; + + bool bSensitive = false; + GetQtInstance().RunInMainThread([&] { + QStandardItem* pItem = m_pModel->item(nRow, nCol); + if (pItem) + bSensitive = pItem->flags() & Qt::ItemIsEnabled; + }); + + return bSensitive; } void QtInstanceTreeView::set_id(int nRow, const OUString& rId) @@ -500,15 +530,14 @@ void QtInstanceTreeView::set_text(const weld::TreeIter& rIter, const OUString& r set_text(rowIndex(rIter), rStr, nCol); } -void QtInstanceTreeView::set_sensitive(const weld::TreeIter&, bool, int) +void QtInstanceTreeView::set_sensitive(const weld::TreeIter& rIter, bool bSensitive, int nCol) { - assert(false && "Not implemented yet"); + set_sensitive(rowIndex(rIter), bSensitive, nCol); } -bool QtInstanceTreeView::get_sensitive(const weld::TreeIter&, int) const +bool QtInstanceTreeView::get_sensitive(const weld::TreeIter& rIter, int nCol) const { - assert(false && "Not implemented yet"); - return false; + return get_sensitive(rowIndex(rIter), nCol); } void QtInstanceTreeView::set_text_emphasis(const weld::TreeIter&, bool, int) commit e22f00d890c3160059e9e38220177d4ff0658336 Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Thu Feb 20 23:33:05 2025 +0100 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Fri Feb 21 08:43:43 2025 +0100 tdf#130857 qt weld: Implement TreeView methods to expand/collapse ... and get the current status. Change-Id: I175ffa67e49529dc62d58e9f8502b747691d84de Reviewed-on: https://gerrit.libreoffice.org/c/core/+/181976 Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> Tested-by: Jenkins diff --git a/vcl/qt5/QtInstanceTreeView.cxx b/vcl/qt5/QtInstanceTreeView.cxx index cba135b5421e..2ae4349544c2 100644 --- a/vcl/qt5/QtInstanceTreeView.cxx +++ b/vcl/qt5/QtInstanceTreeView.cxx @@ -622,20 +622,29 @@ void QtInstanceTreeView::bulk_insert_for_each( assert(false && "Not implemented yet"); } -bool QtInstanceTreeView::get_row_expanded(const weld::TreeIter&) const +bool QtInstanceTreeView::get_row_expanded(const weld::TreeIter& rIter) const { - assert(false && "Not implemented yet"); - return false; + SolarMutexGuard g; + + bool bExpanded = false; + GetQtInstance().RunInMainThread( + [&] { bExpanded = m_pTreeView->isExpanded(modelIndex(rIter)); }); + + return bExpanded; } -void QtInstanceTreeView::expand_row(const weld::TreeIter&) +void QtInstanceTreeView::expand_row(const weld::TreeIter& rIter) { - assert(false && "Not implemented yet"); + SolarMutexGuard g; + + GetQtInstance().RunInMainThread([&] { m_pTreeView->expand(modelIndex(rIter)); }); } -void QtInstanceTreeView::collapse_row(const weld::TreeIter&) +void QtInstanceTreeView::collapse_row(const weld::TreeIter& rIter) { - assert(false && "Not implemented yet"); + SolarMutexGuard g; + + GetQtInstance().RunInMainThread([&] { m_pTreeView->collapse(modelIndex(rIter)); }); } void QtInstanceTreeView::set_children_on_demand(const weld::TreeIter&, bool)