From 3e87a9dfe2763ab3eebfc7cf5b21f700b08a343f Mon Sep 17 00:00:00 2001 From: Szymon Kłos Date: Tue, 25 Feb 2020 13:03:34 +0100 Subject: jsdialog: weld::ComboBox MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I672d2fd170e94e0b3e05384461983e5ae4a0ab35 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94072 Tested-by: Jenkins CollaboraOffice Reviewed-by: Szymon Kłos --- vcl/inc/jsdialog/jsdialogbuilder.hxx | 24 +++++ vcl/inc/salvtables.hxx | 171 ++++++++++++++++++++++------------- vcl/jsdialog/jsdialogbuilder.cxx | 58 ++++++++++++ vcl/source/app/salvtables.cxx | 4 +- 4 files changed, 190 insertions(+), 67 deletions(-) (limited to 'vcl') 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 #include #include +#include class JSDialogSender { @@ -31,6 +32,8 @@ public: bool bTakeOwnership = false) override; virtual std::unique_ptr weld_entry(const OString& id, bool bTakeOwnership = false) override; + virtual std::unique_ptr 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 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 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 f9e0ebafcaba..977f8e343c99 100644 --- a/vcl/inc/salvtables.hxx +++ b/vcl/inc/salvtables.hxx @@ -20,73 +20,103 @@ class SalInstanceBuilder : public weld::Builder protected: std::unique_ptr m_xBuilder; VclPtr m_aOwnedToplevel; + public: SalInstanceBuilder(vcl::Window* pParent, const OUString& rUIRoot, const OUString& rUIFile); VclBuilder& get_builder() const; - virtual std::unique_ptr weld_message_dialog(const OString &id, bool bTakeOwnership = true) override; + virtual std::unique_ptr + weld_message_dialog(const OString& id, bool bTakeOwnership = true) override; - virtual std::unique_ptr weld_dialog(const OString &id, bool bTakeOwnership = true) override; + virtual std::unique_ptr weld_dialog(const OString& id, + bool bTakeOwnership = true) override; - virtual std::unique_ptr weld_window(const OString &id, bool bTakeOwnership = true) override; + virtual std::unique_ptr weld_window(const OString& id, + bool bTakeOwnership = true) override; - virtual std::unique_ptr weld_widget(const OString &id, bool bTakeOwnership = false) override; + virtual std::unique_ptr weld_widget(const OString& id, + bool bTakeOwnership = false) override; - virtual std::unique_ptr weld_container(const OString &id, bool bTakeOwnership = false) override; + virtual std::unique_ptr weld_container(const OString& id, + bool bTakeOwnership = false) override; - virtual std::unique_ptr weld_frame(const OString &id, bool bTakeOwnership = false) override; + virtual std::unique_ptr weld_frame(const OString& id, + bool bTakeOwnership = false) override; - virtual std::unique_ptr weld_scrolled_window(const OString &id, bool bTakeOwnership = false) override; + virtual std::unique_ptr + weld_scrolled_window(const OString& id, bool bTakeOwnership = false) override; - virtual std::unique_ptr weld_notebook(const OString &id, bool bTakeOwnership = false) override; + virtual std::unique_ptr weld_notebook(const OString& id, + bool bTakeOwnership = false) override; - virtual std::unique_ptr weld_button(const OString &id, bool bTakeOwnership = false) override; + virtual std::unique_ptr weld_button(const OString& id, + bool bTakeOwnership = false) override; - virtual std::unique_ptr weld_menu_button(const OString &id, bool bTakeOwnership = false) override; + virtual std::unique_ptr + weld_menu_button(const OString& id, bool bTakeOwnership = false) override; - virtual std::unique_ptr weld_toggle_button(const OString &id, bool bTakeOwnership = false) override; + virtual std::unique_ptr + weld_toggle_button(const OString& id, bool bTakeOwnership = false) override; - virtual std::unique_ptr weld_radio_button(const OString &id, bool bTakeOwnership = false) override; + virtual std::unique_ptr + weld_radio_button(const OString& id, bool bTakeOwnership = false) override; - virtual std::unique_ptr weld_check_button(const OString &id, bool bTakeOwnership = false) override; + virtual std::unique_ptr + weld_check_button(const OString& id, bool bTakeOwnership = false) override; - virtual std::unique_ptr weld_scale(const OString &id, bool bTakeOwnership = false) override; + virtual std::unique_ptr weld_scale(const OString& id, + bool bTakeOwnership = false) override; - virtual std::unique_ptr weld_progress_bar(const OString &id, bool bTakeOwnership = false) override; + virtual std::unique_ptr + weld_progress_bar(const OString& id, bool bTakeOwnership = false) override; - virtual std::unique_ptr weld_image(const OString &id, bool bTakeOwnership = false) override; + virtual std::unique_ptr weld_image(const OString& id, + bool bTakeOwnership = false) override; - virtual std::unique_ptr weld_entry(const OString &id, bool bTakeOwnership = false) override; + virtual std::unique_ptr weld_entry(const OString& id, + bool bTakeOwnership = false) override; - virtual std::unique_ptr weld_spin_button(const OString &id, bool bTakeOwnership = false) override; + virtual std::unique_ptr + weld_spin_button(const OString& id, bool bTakeOwnership = false) override; - virtual std::unique_ptr weld_metric_spin_button(const OString& id, FieldUnit eUnit, - bool bTakeOwnership = false) override; + virtual std::unique_ptr + weld_metric_spin_button(const OString& id, FieldUnit eUnit, + bool bTakeOwnership = false) override; - virtual std::unique_ptr weld_formatted_spin_button(const OString& id, - bool bTakeOwnership = false) override; + virtual std::unique_ptr + weld_formatted_spin_button(const OString& id, bool bTakeOwnership = false) override; - virtual std::unique_ptr weld_time_spin_button(const OString& id, TimeFieldFormat eFormat, - bool bTakeOwnership = false) override; + virtual std::unique_ptr + weld_time_spin_button(const OString& id, TimeFieldFormat eFormat, + bool bTakeOwnership = false) override; - virtual std::unique_ptr weld_combo_box(const OString &id, bool bTakeOwnership = false) override; + virtual std::unique_ptr weld_combo_box(const OString& id, + bool bTakeOwnership = false) override; - virtual std::unique_ptr weld_entry_tree_view(const OString& containerid, const OString& entryid, - const OString& treeviewid, bool bTakeOwnership = false) override; + virtual std::unique_ptr + weld_entry_tree_view(const OString& containerid, const OString& entryid, + const OString& treeviewid, bool bTakeOwnership = false) override; - virtual std::unique_ptr weld_tree_view(const OString &id, bool bTakeOwnership = false) override; + virtual std::unique_ptr weld_tree_view(const OString& id, + bool bTakeOwnership = false) override; - virtual std::unique_ptr weld_label(const OString &id, bool bTakeOwnership = false) override; + virtual std::unique_ptr weld_label(const OString& id, + bool bTakeOwnership = false) override; - virtual std::unique_ptr weld_text_view(const OString &id, bool bTakeOwnership = false) override; + virtual std::unique_ptr weld_text_view(const OString& id, + bool bTakeOwnership = false) override; - virtual std::unique_ptr weld_expander(const OString &id, bool bTakeOwnership = false) override; + virtual std::unique_ptr weld_expander(const OString& id, + bool bTakeOwnership = false) override; - virtual std::unique_ptr weld_drawing_area(const OString &id, const a11yref& rA11yImpl = nullptr, - FactoryFunction pUITestFactoryFunction = nullptr, void* pUserData = nullptr, bool bTakeOwnership = false) override; + virtual std::unique_ptr + weld_drawing_area(const OString& id, const a11yref& rA11yImpl = nullptr, + FactoryFunction pUITestFactoryFunction = nullptr, void* pUserData = nullptr, + bool bTakeOwnership = false) override; - virtual std::unique_ptr weld_menu(const OString &id, bool bTakeOwnership = true) override; + virtual std::unique_ptr weld_menu(const OString& id, + bool bTakeOwnership = true) override; virtual std::unique_ptr create_size_group() override; @@ -198,7 +228,8 @@ public: virtual void connect_key_release(const Link& rLink) override; - virtual bool get_extents_relative_to(Widget& rRelative, int& x, int &y, int& width, int &height) override; + virtual bool get_extents_relative_to(Widget& rRelative, int& x, int& y, int& width, + int& height) override; virtual void grab_add() override; @@ -228,7 +259,7 @@ public: virtual void help_hierarchy_foreach(const std::function& func) override; - virtual OUString strip_mnemonic(const OUString &rLabel) const override; + virtual OUString strip_mnemonic(const OUString& rLabel) const override; SystemWindow* getSystemWindow(); }; @@ -237,8 +268,9 @@ class SalInstanceLabel : public SalInstanceWidget, public virtual weld::Label { private: VclPtr m_xLabel; + public: - SalInstanceLabel(FixedText* pLabel, SalInstanceBuilder *pBuilder, bool bTakeOwnership); + SalInstanceLabel(FixedText* pLabel, SalInstanceBuilder* pBuilder, bool bTakeOwnership); virtual void set_label(const OUString& rText) override; @@ -251,8 +283,10 @@ class SalInstanceContainer : public SalInstanceWidget, public virtual weld::Cont { private: VclPtr m_xContainer; + public: - SalInstanceContainer(vcl::Window* pContainer, SalInstanceBuilder* pBuilder, bool bTakeOwnership); + SalInstanceContainer(vcl::Window* pContainer, SalInstanceBuilder* pBuilder, + bool bTakeOwnership); virtual void move(weld::Widget* pWidget, weld::Container* pNewParent) override; }; @@ -313,15 +347,18 @@ private: public: SalInstanceDialog(::Dialog* pDialog, SalInstanceBuilder* pBuilder, bool bTakeOwnership); - virtual bool runAsync(std::shared_ptr aOwner, const std::function &rEndDialogFn) override; + virtual bool runAsync(std::shared_ptr aOwner, + const std::function& rEndDialogFn) override; - virtual void SetInstallLOKNotifierHdl(const Link& rLink) override; + virtual void + SetInstallLOKNotifierHdl(const Link& rLink) override; virtual int run() override; virtual void response(int nResponse) override; - virtual void add_button(const OUString& rText, int nResponse, const OString& rHelpId = OString()) override; + virtual void add_button(const OUString& rText, int nResponse, + const OString& rHelpId = OString()) override; virtual weld::Button* get_widget_for_response(int nResponse) override; @@ -334,10 +371,11 @@ class WeldTextFilter : public TextFilter { private: Link& m_rInsertTextHdl; + public: WeldTextFilter(Link& rInsertTextHdl); - virtual OUString filter(const OUString &rText) override; + virtual OUString filter(const OUString& rText) override; }; class SalInstanceEntry : public SalInstanceWidget, public virtual weld::Entry @@ -350,6 +388,7 @@ private: DECL_LINK(ActivateHdl, Edit&, bool); WeldTextFilter m_aTextFilter; + public: SalInstanceEntry(Edit* pEntry, SalInstanceBuilder* pBuilder, bool bTakeOwnership); @@ -365,7 +404,7 @@ public: virtual void select_region(int nStartPos, int nEndPos) override; - bool get_selection_bounds(int& rStartPos, int &rEndPos) override; + bool get_selection_bounds(int& rStartPos, int& rEndPos) override; virtual void set_position(int nCursorPos) override; @@ -406,7 +445,8 @@ private: int fromField(double fValue) const; public: - SalInstanceSpinButton(FormattedField* pButton, SalInstanceBuilder* pBuilder, bool bTakeOwnership); + SalInstanceSpinButton(FormattedField* pButton, SalInstanceBuilder* pBuilder, + bool bTakeOwnership); virtual int get_value() const override; @@ -440,7 +480,7 @@ class SalInstanceComboBox : public SalInstanceContainer, public virtual weld::Co { protected: // owner for ListBox/ComboBox UserData - std::vector> m_aUserData; + std::vector> m_aUserData; VclPtr m_xComboBox; public: @@ -493,10 +533,7 @@ public: m_xComboBox->SelectEntryPos(pos); } - virtual OUString get_text(int pos) const override - { - return m_xComboBox->GetEntry(pos); - } + virtual OUString get_text(int pos) const override { return m_xComboBox->GetEntry(pos); } virtual OUString get_id(int pos) const override { @@ -508,11 +545,12 @@ public: virtual void set_id(int row, const OUString& rId) override { - m_aUserData.emplace_back(o3tl::make_unique(rId)); + m_aUserData.emplace_back(std::make_unique(rId)); m_xComboBox->SetEntryData(row, m_aUserData.back().get()); } - virtual void insert_vector(const std::vector& rItems, bool bKeepExisting) override + virtual void insert_vector(const std::vector& rItems, + bool bKeepExisting) override { freeze(); if (!bKeepExisting) @@ -525,10 +563,7 @@ public: thaw(); } - virtual int get_count() const override - { - return m_xComboBox->GetEntryCount(); - } + virtual int get_count() const override { return m_xComboBox->GetEntryCount(); } virtual int find_text(const OUString& rStr) const override { @@ -562,10 +597,7 @@ public: m_xComboBox->SetStyle(m_xComboBox->GetStyle() | WB_SORT); } - virtual bool get_popup_shown() const override - { - return m_xComboBox->IsInDropDown(); - } + virtual bool get_popup_shown() const override { return m_xComboBox->IsInDropDown(); } }; class SalInstanceComboBoxWithoutEdit : public SalInstanceComboBox @@ -574,13 +606,15 @@ private: DECL_LINK(SelectHdl, ListBox&, void); public: - SalInstanceComboBoxWithoutEdit(ListBox* pListBox, SalInstanceBuilder* pBuilder, bool bTakeOwnership); + SalInstanceComboBoxWithoutEdit(ListBox* pListBox, SalInstanceBuilder* pBuilder, + bool bTakeOwnership); virtual OUString get_active_text() const override; virtual void remove(int pos) override; - virtual void insert(int pos, const OUString& rStr, const OUString* pId, const OUString* pIconName, VirtualDevice* pImageSurface) override; + virtual void insert(int pos, const OUString& rStr, const OUString* pId, + const OUString* pIconName, VirtualDevice* pImageSurface) override; virtual void insert_separator(int pos) override; @@ -607,8 +641,10 @@ private: DECL_LINK(ChangeHdl, Edit&, void); DECL_LINK(EntryActivateHdl, Edit&, bool); WeldTextFilter m_aTextFilter; + public: - SalInstanceComboBoxWithEdit(::ComboBox* pComboBox, SalInstanceBuilder* pBuilder, bool bTakeOwnership); + SalInstanceComboBoxWithEdit(::ComboBox* pComboBox, SalInstanceBuilder* pBuilder, + bool bTakeOwnership); virtual bool has_entry() const override; @@ -618,7 +654,8 @@ public: virtual void remove(int pos) override; - virtual void insert(int pos, const OUString& rStr, const OUString* pId, const OUString* pIconName, VirtualDevice* pImageSurface) override; + virtual void insert(int pos, const OUString& rStr, const OUString* pId, + const OUString* pIconName, VirtualDevice* pImageSurface) override; virtual void insert_separator(int pos) override; @@ -639,9 +676,10 @@ class SalInstanceButton : public SalInstanceContainer, public virtual weld::Butt { private: VclPtr<::Button> m_xButton; - Link<::Button*,void> const m_aOldClickHdl; + Link<::Button*, void> const m_aOldClickHdl; DECL_LINK(ClickHdl, ::Button*, void); + public: SalInstanceButton(::Button* pButton, SalInstanceBuilder* pBuilder, bool bTakeOwnership); @@ -697,8 +735,10 @@ class SalInstanceMessageDialog : public SalInstanceDialog, public virtual weld:: { private: VclPtr<::MessageDialog> m_xMessageDialog; + public: - SalInstanceMessageDialog(::MessageDialog* pDialog, SalInstanceBuilder* pBuilder, bool bTakeOwnership); + SalInstanceMessageDialog(::MessageDialog* pDialog, SalInstanceBuilder* pBuilder, + bool bTakeOwnership); virtual void set_primary_text(const OUString& rText) override; @@ -717,6 +757,7 @@ private: VclPtr m_xCheckButton; DECL_LINK(ToggleHdl, CheckBox&, void); + public: SalInstanceCheckButton(CheckBox* pButton, SalInstanceBuilder* pBuilder, bool bTakeOwnership); diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx index fc1c7a0159e9..62fd9e16b24a 100644 --- a/vcl/jsdialog/jsdialogbuilder.cxx +++ b/vcl/jsdialog/jsdialogbuilder.cxx @@ -72,6 +72,18 @@ std::unique_ptr JSInstanceBuilder::weld_entry(const OString& id, bo : nullptr; } +std::unique_ptr JSInstanceBuilder::weld_combo_box(const OString& id, + bool bTakeOwnership) +{ + vcl::Window* pWidget = m_xBuilder->get(id); + ::ComboBox* pComboBox = dynamic_cast<::ComboBox*>(pWidget); + if (pComboBox) + return std::make_unique(m_aOwnedToplevel, pComboBox, this, bTakeOwnership); + ListBox* pListBox = dynamic_cast(pWidget); + return pListBox ? std::make_unique(m_aOwnedToplevel, pListBox, this, bTakeOwnership) + : nullptr; +} + JSLabel::JSLabel(VclPtr aOwnedToplevel, FixedText* pLabel, SalInstanceBuilder* pBuilder, bool bTakeOwnership) : SalInstanceLabel(pLabel, pBuilder, bTakeOwnership) @@ -97,3 +109,49 @@ void JSEntry::set_text(const OUString& rText) SalInstanceEntry::set_text(rText); notifyDialogState(); } + +JSListBox::JSListBox(VclPtr 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 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(); +} diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx index fb8d1a9b8354..4700e7acc73f 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -2922,7 +2922,7 @@ void SalInstanceComboBoxWithoutEdit::insert(int pos, const OUString& rStr, const nInsertedAt = m_xComboBox->InsertEntry(rStr, createImage(*pImageSurface), nInsertPos); if (pId) { - m_aUserData.emplace_back(o3tl::make_unique(*pId)); + m_aUserData.emplace_back(std::make_unique(*pId)); m_xComboBox->SetEntryData(nInsertedAt, m_aUserData.back().get()); } } @@ -3023,7 +3023,7 @@ void SalInstanceComboBoxWithEdit::insert(int pos, const OUString& rStr, const OU nInsertedAt = m_xComboBox->InsertEntryWithImage(rStr, createImage(*pImageSurface), nInsertPos); if (pId) { - m_aUserData.emplace_back(o3tl::make_unique(*pId)); + m_aUserData.emplace_back(std::make_unique(*pId)); m_xComboBox->SetEntryData(nInsertedAt, m_aUserData.back().get()); } } -- cgit v1.2.3