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

Reply via email to