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()