vcl/inc/qt5/QtInstanceIconView.hxx |    6 +--
 vcl/qt5/QtInstanceIconView.cxx     |   65 +++++++++++++++++++++++++++++++------
 2 files changed, 59 insertions(+), 12 deletions(-)

New commits:
commit 06bc2dfc23da1b8ae6fe690b6d8e3557b7419f1e
Author:     Michael Weghorn <m.wegh...@posteo.de>
AuthorDate: Mon Dec 9 21:59:18 2024 +0100
Commit:     Michael Weghorn <m.wegh...@posteo.de>
CommitDate: Tue Dec 10 07:10:35 2024 +0100

    tdf#130857 qt weld: Implement some QtInstanceIconView methods
    
    Just enough to make Writer's "Insert" -> "Fontwork"
    dialog generally work in a WIP branch where support for
    that dialog is declared.
    
    Change-Id: I4610db085b1e1ca57f63e86012373b2890454447
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178180
    Reviewed-by: Michael Weghorn <m.wegh...@posteo.de>
    Tested-by: Jenkins

diff --git a/vcl/inc/qt5/QtInstanceIconView.hxx 
b/vcl/inc/qt5/QtInstanceIconView.hxx
index e60f63ee946f..fb1d762f5dfe 100644
--- a/vcl/inc/qt5/QtInstanceIconView.hxx
+++ b/vcl/inc/qt5/QtInstanceIconView.hxx
@@ -28,10 +28,10 @@ public:
     virtual int get_item_width() const override;
     virtual void set_item_width(int width) override;
 
-    virtual void insert(int pos, const OUString* pStr, const OUString* pId,
+    virtual void insert(int nPos, const OUString* pStr, const OUString* pId,
                         const OUString* pIconName, weld::TreeIter* pRet) 
override;
 
-    virtual void insert(int pos, const OUString* pStr, const OUString* pId,
+    virtual void insert(int nPos, const OUString* pStr, const OUString* pId,
                         const VirtualDevice* pIcon, weld::TreeIter* pRet) 
override;
 
     virtual void insert_separator(int pos, const OUString* pId) override;
@@ -45,7 +45,7 @@ public:
     virtual OUString get_selected_text() const override;
 
     virtual OUString get_id(int pos) const override;
-    virtual void select(int pos) override;
+    virtual void select(int nPos) override;
     virtual void unselect(int pos) override;
     virtual void set_image(int pos, VirtualDevice* pDevice) override;
     virtual void set_text(int pos, const OUString& rText) override;
diff --git a/vcl/qt5/QtInstanceIconView.cxx b/vcl/qt5/QtInstanceIconView.cxx
index 9c3c9f25e7e2..d8bb72d10473 100644
--- a/vcl/qt5/QtInstanceIconView.cxx
+++ b/vcl/qt5/QtInstanceIconView.cxx
@@ -12,6 +12,9 @@
 
 #include <vcl/qt/QtUtils.hxx>
 
+// role used for the ID in the QStandardItem
+constexpr int ROLE_ID = Qt::UserRole + 1000;
+
 QtInstanceIconView::QtInstanceIconView(QListView* pListView)
     : QtInstanceWidget(pListView)
     , m_pListView(pListView)
@@ -43,10 +46,28 @@ void QtInstanceIconView::insert(int, const OUString*, const 
OUString*, const OUS
     assert(false && "Not implemented yet");
 }
 
-void QtInstanceIconView::insert(int, const OUString*, const OUString*, const 
VirtualDevice*,
-                                weld::TreeIter*)
+void QtInstanceIconView::insert(int nPos, const OUString* pStr, const 
OUString* pId,
+                                const VirtualDevice* pIcon, weld::TreeIter* 
pRet)
 {
-    assert(false && "Not implemented yet");
+    assert(!pRet && "Support for pRet param not implemented yet");
+    (void)pRet;
+
+    SolarMutexGuard g;
+
+    GetQtInstance().RunInMainThread([&] {
+        if (nPos == -1)
+            nPos = m_pModel->rowCount();
+
+        QStandardItem* pItem = new QStandardItem;
+        if (pStr)
+            pItem->setText(toQString(*pStr));
+        if (pId)
+            pItem->setData(toQString(*pId), ROLE_ID);
+        if (pIcon)
+            pItem->setIcon(QIcon(toQPixmap(*pIcon)));
+
+        m_pModel->insertRow(nPos, pItem);
+    });
 }
 
 void QtInstanceIconView::insert_separator(int, const OUString*)
@@ -56,11 +77,28 @@ void QtInstanceIconView::insert_separator(int, const 
OUString*)
 
 OUString QtInstanceIconView::get_selected_id() const
 {
-    assert(false && "Not implemented yet");
-    return OUString();
+    SolarMutexGuard g;
+
+    OUString sId;
+    GetQtInstance().RunInMainThread([&] {
+        const QModelIndexList aSelectedIndexes = 
m_pSelectionModel->selectedIndexes();
+        if (aSelectedIndexes.empty())
+            return;
+
+        QVariant aIdData = aSelectedIndexes.first().data(ROLE_ID);
+        if (aIdData.canConvert<QString>())
+            sId = toOUString(aIdData.toString());
+    });
+
+    return sId;
 }
 
-void QtInstanceIconView::clear() { assert(false && "Not implemented yet"); }
+void QtInstanceIconView::clear()
+{
+    SolarMutexGuard g;
+
+    GetQtInstance().RunInMainThread([&] { m_pModel->clear(); });
+}
 
 int QtInstanceIconView::count_selected_items() const
 {
@@ -80,7 +118,12 @@ OUString QtInstanceIconView::get_id(int) const
     return OUString();
 }
 
-void QtInstanceIconView::select(int) { assert(false && "Not implemented yet"); 
}
+void QtInstanceIconView::select(int nPos)
+{
+    SolarMutexGuard g;
+    GetQtInstance().RunInMainThread(
+        [&] { m_pSelectionModel->select(m_pModel->index(nPos, 0), 
QItemSelectionModel::Select); });
+}
 
 void QtInstanceIconView::unselect(int) { assert(false && "Not implemented 
yet"); }
 
@@ -157,8 +200,12 @@ void QtInstanceIconView::selected_foreach(const 
std::function<bool(weld::TreeIte
 
 int QtInstanceIconView::n_children() const
 {
-    assert(false && "Not implemented yet");
-    return 0;
+    SolarMutexGuard g;
+
+    int nChildren = 0;
+    GetQtInstance().RunInMainThread([&] { nChildren = m_pModel->rowCount(); });
+
+    return nChildren;
 }
 
 void QtInstanceIconView::handleActivated()

Reply via email to