vcl/inc/qt5/QtInstanceTreeView.hxx | 11 +++-- vcl/qt5/QtInstanceTreeView.cxx | 68 ++++++++++++++++++++++++++++++++----- 2 files changed, 66 insertions(+), 13 deletions(-)
New commits: commit bb6a98f5dad7bf99eaa690d52b21c1f51e42fca3 Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Fri Feb 21 14:43:01 2025 +0100 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Sat Feb 22 10:52:12 2025 +0100 tdf#130857 qt weld: Implement QtInstanceTreeView::{g,s}et_toggle Use QStandardItem::checkState [1] and QStandardItem::setCheckState [2] to retrieve/set the state. Add 2 static helper methods to map between vcl Tristate and Qt::CheckState. [1] https://doc.qt.io/qt-6/qstandarditem.html#checkState [2] https://doc.qt.io/qt-6/qstandarditem.html#setCheckState Change-Id: I4a77f3cd0ed69c879beca81821c8c2546923006d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/182004 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 aa0249af6dcf..0edcf22d6095 100644 --- a/vcl/inc/qt5/QtInstanceTreeView.hxx +++ b/vcl/inc/qt5/QtInstanceTreeView.hxx @@ -48,8 +48,8 @@ public: 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; + virtual void set_toggle(int nRow, TriState eState, int nCol = -1) override; + virtual TriState get_toggle(int nRow, int nCol = -1) const override; virtual void set_image(int nRow, const OUString& rImage, int nCol = -1) override; virtual void set_image(int nRow, VirtualDevice& rImage, int nCol = -1) override; virtual void set_image(int nRow, const css::uno::Reference<css::graphic::XGraphic>& rImage, @@ -100,8 +100,8 @@ public: 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; - virtual void set_toggle(const weld::TreeIter& rIter, TriState bOn, int col = -1) override; - virtual TriState get_toggle(const weld::TreeIter& rIter, int col = -1) const override; + virtual void set_toggle(const weld::TreeIter& rIter, TriState bOn, int nCol = -1) override; + virtual TriState get_toggle(const weld::TreeIter& rIter, int nCol = -1) const override; virtual OUString get_text(const weld::TreeIter& rIter, int nCol = -1) const override; virtual void set_id(const weld::TreeIter& rIter, const OUString& rId) override; virtual OUString get_id(const weld::TreeIter& rIter) const override; @@ -193,6 +193,9 @@ private: QModelIndex firstTextColumnModelIndex(int nRow) const; static QAbstractItemView::SelectionMode mapSelectionMode(SelectionMode eMode); + static Qt::CheckState toQtCheckState(TriState eTristate); + static TriState toVclTriState(Qt::CheckState eCheckState); + private Q_SLOTS: void handleActivated(); void handleSelectionChanged(); diff --git a/vcl/qt5/QtInstanceTreeView.cxx b/vcl/qt5/QtInstanceTreeView.cxx index effcfd66d03b..2a87f398f5af 100644 --- a/vcl/qt5/QtInstanceTreeView.cxx +++ b/vcl/qt5/QtInstanceTreeView.cxx @@ -228,12 +228,31 @@ void QtInstanceTreeView::set_id(int nRow, const OUString& rId) }); } -void QtInstanceTreeView::set_toggle(int, TriState, int) { assert(false && "Not implemented yet"); } +void QtInstanceTreeView::set_toggle(int nRow, TriState eState, int nCol) +{ + assert(nCol != -1 && "Special column index -1 not handled yet"); + + SolarMutexGuard g; + + GetQtInstance().RunInMainThread([&] { + const QModelIndex aIndex = modelIndex(nRow, nCol); + m_pModel->itemFromIndex(aIndex)->setCheckState(toQtCheckState(eState)); + }); +} -TriState QtInstanceTreeView::get_toggle(int, int) const +TriState QtInstanceTreeView::get_toggle(int nRow, int nCol) const { - assert(false && "Not implemented yet"); - return TRISTATE_INDET; + assert(nCol != -1 && "Special column index -1 not handled yet"); + + SolarMutexGuard g; + + TriState eState = TRISTATE_INDET; + GetQtInstance().RunInMainThread([&] { + const QModelIndex aIndex = modelIndex(nRow, nCol); + eState = toVclTriState(m_pModel->itemFromIndex(aIndex)->checkState()); + }); + + return eState; } void QtInstanceTreeView::set_image(int nRow, const OUString& rImage, int nCol) @@ -557,15 +576,14 @@ void QtInstanceTreeView::set_text_align(const weld::TreeIter&, double, int) assert(false && "Not implemented yet"); } -void QtInstanceTreeView::set_toggle(const weld::TreeIter&, TriState, int) +void QtInstanceTreeView::set_toggle(const weld::TreeIter& rIter, TriState bOn, int nCol) { - assert(false && "Not implemented yet"); + set_toggle(rowIndex(rIter), bOn, nCol); } -TriState QtInstanceTreeView::get_toggle(const weld::TreeIter&, int) const +TriState QtInstanceTreeView::get_toggle(const weld::TreeIter& rIter, int nCol) const { - assert(false && "Not implemented yet"); - return TRISTATE_INDET; + return get_toggle(rowIndex(rIter), nCol); } OUString QtInstanceTreeView::get_text(const weld::TreeIter& rIter, int nCol) const @@ -914,6 +932,38 @@ QModelIndex QtInstanceTreeView::firstTextColumnModelIndex(int nRow) const return QModelIndex(); } +Qt::CheckState QtInstanceTreeView::toQtCheckState(TriState eTristate) +{ + switch (eTristate) + { + case TRISTATE_FALSE: + return Qt::CheckState::Unchecked; + case TRISTATE_TRUE: + return Qt::CheckState::Checked; + case TRISTATE_INDET: + return Qt::CheckState::PartiallyChecked; + default: + assert(false && "unhandled Tristate value"); + return Qt::CheckState::PartiallyChecked; + } +} + +TriState QtInstanceTreeView::toVclTriState(Qt::CheckState eTristate) +{ + switch (eTristate) + { + case Qt::CheckState::Unchecked: + return TRISTATE_FALSE; + case Qt::CheckState::Checked: + return TRISTATE_TRUE; + case Qt::CheckState::PartiallyChecked: + return TRISTATE_INDET; + default: + assert(false && "unhandled Qt::CheckState value"); + return TRISTATE_INDET; + } +} + void QtInstanceTreeView::handleActivated() { SolarMutexGuard g;