vcl/inc/jsdialog/jsdialogbuilder.hxx |   24 ++++++++++++++
 vcl/inc/salvtables.hxx               |    2 -
 vcl/jsdialog/jsdialogbuilder.cxx     |   58 +++++++++++++++++++++++++++++++++++
 3 files changed, 83 insertions(+), 1 deletion(-)

New commits:
commit c529dd9b964e4176fed67d3c1594978c7d26ad7b
Author:     Szymon Kłos <szymon.k...@collabora.com>
AuthorDate: Tue Feb 25 13:03:34 2020 +0100
Commit:     Szymon Kłos <szymon.k...@collabora.com>
CommitDate: Tue May 19 16:59:34 2020 +0200

    jsdialog: weld::ComboBox
    
    Change-Id: I672d2fd170e94e0b3e05384461983e5ae4a0ab35
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94072
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Szymon Kłos <szymon.k...@collabora.com>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94488
    Tested-by: Jenkins

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 956c3001fc22..a82732d05f5a 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -7,6 +7,7 @@
 #include <vcl/virdev.hxx>
 #include <vcl/builder.hxx>
 #include <salvtables.hxx>
+#include <vcl/combobox.hxx>
 
 class JSDialogSender
 {
@@ -31,6 +32,8 @@ public:
                                                     bool bTakeOwnership = 
false) override;
     virtual std::unique_ptr<weld::Entry> weld_entry(const OString& id,
                                                     bool bTakeOwnership = 
false) override;
+    virtual std::unique_ptr<weld::ComboBox> weld_combo_box(const OString& id,
+                                                           bool bTakeOwnership 
= false) override;
 };
 
 class VCL_DLLPUBLIC JSLabel : public SalInstanceLabel, public JSDialogSender
@@ -49,4 +52,25 @@ public:
     virtual void set_text(const OUString& rText) override;
 };
 
+class VCL_DLLPUBLIC JSListBox : public SalInstanceComboBoxWithoutEdit, public 
JSDialogSender
+{
+public:
+    JSListBox(VclPtr<vcl::Window> aOwnedToplevel, ::ListBox* pListBox, 
SalInstanceBuilder* pBuilder,
+              bool bTakeOwnership);
+    virtual void insert(int pos, const OUString& rStr, const OUString* pId,
+                        const OUString* pIconName, VirtualDevice* 
pImageSurface) override;
+    virtual void remove(int pos) override;
+};
+
+class VCL_DLLPUBLIC JSComboBox : public SalInstanceComboBoxWithEdit, public 
JSDialogSender
+{
+public:
+    JSComboBox(VclPtr<vcl::Window> aOwnedToplevel, ::ComboBox* pComboBox,
+               SalInstanceBuilder* pBuilder, bool bTakeOwnership);
+    virtual void insert(int pos, const OUString& rStr, const OUString* pId,
+                        const OUString* pIconName, VirtualDevice* 
pImageSurface) override;
+    virtual void remove(int pos) override;
+    virtual void set_entry_text(const OUString& rText) override;
+};
+
 #endif
\ No newline at end of file
diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx
index 9aa01bcd81c9..2d6acb6d38c1 100644
--- a/vcl/inc/salvtables.hxx
+++ b/vcl/inc/salvtables.hxx
@@ -666,7 +666,7 @@ class SalInstanceComboBox : public SalInstanceContainer, 
public virtual weld::Co
 {
 protected:
     // owner for ListBox/ComboBox UserData
-    std::vector<std::unique_ptr<OUString>> m_aUserData;
+    std::vector<std::shared_ptr<OUString>> m_aUserData;
     VclPtr<vcl_type> m_xComboBox;
     ScopedVclPtr<::MenuButton> m_xMenuButton;
     OUString m_sMenuButtonRow;
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 8429eae74e11..a3a8457b3145 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -70,6 +70,18 @@ std::unique_ptr<weld::Entry> 
JSInstanceBuilder::weld_entry(const OString& id, bo
                   : nullptr;
 }
 
+std::unique_ptr<weld::ComboBox> JSInstanceBuilder::weld_combo_box(const 
OString& id,
+                                                                  bool 
bTakeOwnership)
+{
+    vcl::Window* pWidget = m_xBuilder->get<vcl::Window>(id);
+    ::ComboBox* pComboBox = dynamic_cast<::ComboBox*>(pWidget);
+    if (pComboBox)
+        return std::make_unique<JSComboBox>(m_aOwnedToplevel, pComboBox, this, 
bTakeOwnership);
+    ListBox* pListBox = dynamic_cast<ListBox*>(pWidget);
+    return pListBox ? std::make_unique<JSListBox>(m_aOwnedToplevel, pListBox, 
this, bTakeOwnership)
+                    : nullptr;
+}
+
 JSLabel::JSLabel(VclPtr<vcl::Window> aOwnedToplevel, FixedText* pLabel,
                  SalInstanceBuilder* pBuilder, bool bTakeOwnership)
     : SalInstanceLabel(pLabel, pBuilder, bTakeOwnership)
@@ -95,3 +107,49 @@ void JSEntry::set_text(const OUString& rText)
     SalInstanceEntry::set_text(rText);
     notifyDialogState();
 }
+
+JSListBox::JSListBox(VclPtr<vcl::Window> aOwnedToplevel, ::ListBox* pListBox,
+                     SalInstanceBuilder* pBuilder, bool bTakeOwnership)
+    : SalInstanceComboBoxWithoutEdit(pListBox, pBuilder, bTakeOwnership)
+    , JSDialogSender(aOwnedToplevel)
+{
+}
+
+void JSListBox::insert(int pos, const OUString& rStr, const OUString* pId,
+                       const OUString* pIconName, VirtualDevice* pImageSurface)
+{
+    SalInstanceComboBoxWithoutEdit::insert(pos, rStr, pId, pIconName, 
pImageSurface);
+    notifyDialogState();
+}
+
+void JSListBox::remove(int pos)
+{
+    SalInstanceComboBoxWithoutEdit::remove(pos);
+    notifyDialogState();
+}
+
+JSComboBox::JSComboBox(VclPtr<vcl::Window> aOwnedToplevel, ::ComboBox* 
pComboBox,
+                       SalInstanceBuilder* pBuilder, bool bTakeOwnership)
+    : SalInstanceComboBoxWithEdit(pComboBox, pBuilder, bTakeOwnership)
+    , JSDialogSender(aOwnedToplevel)
+{
+}
+
+void JSComboBox::insert(int pos, const OUString& rStr, const OUString* pId,
+                        const OUString* pIconName, VirtualDevice* 
pImageSurface)
+{
+    SalInstanceComboBoxWithEdit::insert(pos, rStr, pId, pIconName, 
pImageSurface);
+    notifyDialogState();
+}
+
+void JSComboBox::remove(int pos)
+{
+    SalInstanceComboBoxWithEdit::remove(pos);
+    notifyDialogState();
+}
+
+void JSComboBox::set_entry_text(const OUString& rText)
+{
+    SalInstanceComboBoxWithEdit::set_entry_text(rText);
+    notifyDialogState();
+}
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to