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)

Reply via email to