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

Reply via email to