vcl/inc/qt5/QtInstanceComboBox.hxx | 6 +- vcl/qt5/QtInstanceComboBox.cxx | 78 ++++++++++++++++++++++++++++++------- 2 files changed, 68 insertions(+), 16 deletions(-)
New commits: commit ff1543fcd2db91e10f3aa6c42ceb3251d8fa092b Author: Michael Weghorn <[email protected]> AuthorDate: Thu Oct 24 01:25:23 2024 +0200 Commit: Michael Weghorn <[email protected]> CommitDate: Thu Oct 24 09:10:44 2024 +0200 tdf#130857 qt weld: Implement QtInstanceComboBox::insert_vector Change-Id: I71b1e8c596ca1f6790e93bdd7d73a9e5c583c278 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/175529 Tested-by: Jenkins Reviewed-by: Michael Weghorn <[email protected]> diff --git a/vcl/qt5/QtInstanceComboBox.cxx b/vcl/qt5/QtInstanceComboBox.cxx index 46c8e2ba9316..c623104c8a38 100644 --- a/vcl/qt5/QtInstanceComboBox.cxx +++ b/vcl/qt5/QtInstanceComboBox.cxx @@ -41,9 +41,29 @@ void QtInstanceComboBox::insert(int nPos, const OUString& rStr, const OUString* }); } -void QtInstanceComboBox::insert_vector(const std::vector<weld::ComboBoxEntry>&, bool) +void QtInstanceComboBox::insert_vector(const std::vector<weld::ComboBoxEntry>& rItems, + bool bKeepExisting) { - assert(false && "Not implemented yet"); + SolarMutexGuard g; + GetQtInstance().RunInMainThread([&] { + if (!bKeepExisting) + m_pComboBox->clear(); + + // if sorted, only sort once at the end + const bool bSorted = m_bSorted; + m_bSorted = false; + + for (const weld::ComboBoxEntry& rEntry : rItems) + { + const OUString* pId = rEntry.sId.isEmpty() ? nullptr : &rEntry.sId; + const OUString* pImage = rEntry.sImage.isEmpty() ? nullptr : &rEntry.sImage; + insert(m_pComboBox->count(), rEntry.sString, pId, pImage, nullptr); + } + + m_bSorted = bSorted; + if (m_bSorted) + sortItems(); + }); } void QtInstanceComboBox::insert_separator(int nPos, const OUString&) commit 6cc411801138f93b5b25b0822b1fdd723dc75869 Author: Michael Weghorn <[email protected]> AuthorDate: Thu Oct 24 01:09:41 2024 +0200 Commit: Michael Weghorn <[email protected]> CommitDate: Thu Oct 24 09:10:36 2024 +0200 tdf#130857 qt weld: Implement QtInstanceComboBox::insert_separator As can be seen in the SalInstanceComboBoxWithoutEdit::insert_separator implementation, -1 for the index means "Insert at the end", so do likewise. And also ignore the ID parameter, as QComboBox::insertSeparator (other than (QComboBox::insertItem) doesn't take a QVariant for user data. Change-Id: I98959abf61ec670d78bf341a726b9854127d95e3 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/175528 Reviewed-by: Michael Weghorn <[email protected]> Tested-by: Jenkins diff --git a/vcl/inc/qt5/QtInstanceComboBox.hxx b/vcl/inc/qt5/QtInstanceComboBox.hxx index 4a3fbce99e4f..159f5ce84072 100644 --- a/vcl/inc/qt5/QtInstanceComboBox.hxx +++ b/vcl/inc/qt5/QtInstanceComboBox.hxx @@ -28,7 +28,7 @@ public: virtual void insert_vector(const std::vector<weld::ComboBoxEntry>& rItems, bool bKeepExisting) override; - virtual void insert_separator(int pos, const OUString& rId) override; + virtual void insert_separator(int nPos, const OUString& rId) override; virtual int get_count() const override; virtual void make_sorted() override; diff --git a/vcl/qt5/QtInstanceComboBox.cxx b/vcl/qt5/QtInstanceComboBox.cxx index 5f361aa72c0c..46c8e2ba9316 100644 --- a/vcl/qt5/QtInstanceComboBox.cxx +++ b/vcl/qt5/QtInstanceComboBox.cxx @@ -46,9 +46,14 @@ void QtInstanceComboBox::insert_vector(const std::vector<weld::ComboBoxEntry>&, assert(false && "Not implemented yet"); } -void QtInstanceComboBox::insert_separator(int, const OUString&) +void QtInstanceComboBox::insert_separator(int nPos, const OUString&) { - assert(false && "Not implemented yet"); + SolarMutexGuard g; + GetQtInstance().RunInMainThread([&] { + if (nPos == -1) + nPos = m_pComboBox->count(); + m_pComboBox->insertSeparator(nPos); + }); } int QtInstanceComboBox::get_count() const commit 787c305271b7abaa1bc43241f4c0ab3bb280d94a Author: Michael Weghorn <[email protected]> AuthorDate: Thu Oct 24 00:58:46 2024 +0200 Commit: Michael Weghorn <[email protected]> CommitDate: Thu Oct 24 09:10:29 2024 +0200 tdf#130857 qt weld: Implement ID handling for combobox entries Implement methods related to IDs for combobox entries by handling OUString ID as a QString variant for the user data of the combobox item. Change-Id: I57750df203c333aa9dcc99c960c64de5f4ff50d6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/175527 Reviewed-by: Michael Weghorn <[email protected]> Tested-by: Jenkins diff --git a/vcl/inc/qt5/QtInstanceComboBox.hxx b/vcl/inc/qt5/QtInstanceComboBox.hxx index 2c1ea133df23..4a3fbce99e4f 100644 --- a/vcl/inc/qt5/QtInstanceComboBox.hxx +++ b/vcl/inc/qt5/QtInstanceComboBox.hxx @@ -44,8 +44,8 @@ public: virtual OUString get_active_id() const override; virtual void set_active_id(const OUString& rStr) override; - virtual OUString get_id(int pos) const override; - virtual void set_id(int row, const OUString& rId) override; + virtual OUString get_id(int nPos) const override; + virtual void set_id(int nRow, const OUString& rId) override; virtual int find_id(const OUString& rId) const override; virtual bool changed_by_direct_pick() const override; diff --git a/vcl/qt5/QtInstanceComboBox.cxx b/vcl/qt5/QtInstanceComboBox.cxx index 7c01889579ad..5f361aa72c0c 100644 --- a/vcl/qt5/QtInstanceComboBox.cxx +++ b/vcl/qt5/QtInstanceComboBox.cxx @@ -26,12 +26,16 @@ QtInstanceComboBox::QtInstanceComboBox(QComboBox* pComboBox) void QtInstanceComboBox::insert(int nPos, const OUString& rStr, const OUString* pId, const OUString* pIconName, VirtualDevice* pImageSurface) { - if (pId || pIconName || pImageSurface) + if (pIconName || pImageSurface) assert(false && "Handling for these not implemented yet"); SolarMutexGuard g; GetQtInstance().RunInMainThread([&] { - m_pComboBox->insertItem(nPos, toQString(rStr)); + QVariant aUserData; + if (pId) + aUserData = QVariant::fromValue(toQString(*pId)); + + m_pComboBox->insertItem(nPos, toQString(rStr), aUserData); if (m_bSorted) sortItems(); }); @@ -120,18 +124,41 @@ OUString QtInstanceComboBox::get_active_id() const void QtInstanceComboBox::set_active_id(const OUString&) { assert(false && "Not implemented yet"); } -OUString QtInstanceComboBox::get_id(int) const +OUString QtInstanceComboBox::get_id(int nPos) const { - assert(false && "Not implemented yet"); - return OUString(); + SolarMutexGuard g; + + OUString sId; + GetQtInstance().RunInMainThread([&] { + QVariant aUserData = m_pComboBox->itemData(nPos); + if (aUserData.canConvert<QString>()) + sId = toOUString(aUserData.toString()); + }); + + return sId; } -void QtInstanceComboBox::set_id(int, const OUString&) { assert(false && "Not implemented yet"); } +void QtInstanceComboBox::set_id(int nRow, const OUString& rId) +{ + SolarMutexGuard g; -int QtInstanceComboBox::find_id(const OUString&) const + GetQtInstance().RunInMainThread([&] { + QVariant aUserData = QVariant::fromValue(toQString(rId)); + m_pComboBox->setItemData(nRow, aUserData); + }); +} + +int QtInstanceComboBox::find_id(const OUString& rId) const { - assert(false && "Not implemented yet"); - return -1; + SolarMutexGuard g; + + int nIndex; + GetQtInstance().RunInMainThread([&] { + QVariant aUserData = toQString(rId); + nIndex = m_pComboBox->findData(aUserData); + }); + + return nIndex; } bool QtInstanceComboBox::changed_by_direct_pick() const
