desktop/source/lib/init.cxx | 13 +++++++++++++ include/vcl/jsdialog/jsdialogbuilder.hxx | 13 +++++++++++++ include/vcl/weld.hxx | 3 +-- vcl/jsdialog/jsdialogbuilder.cxx | 28 ++++++++++++++++++++++++++++ 4 files changed, 55 insertions(+), 2 deletions(-)
New commits: commit 272efec844e37ec8a37872d6bed0f5b4a6d59d42 Author: Szymon Kłos <szymon.k...@collabora.com> AuthorDate: Tue Jun 16 14:07:32 2020 +0200 Commit: Szymon Kłos <szymon.k...@collabora.com> CommitDate: Wed Jun 24 11:36:53 2020 +0200 jsdialog: weld toolbar Change-Id: If105d6716fc43f471f63f4eb60fa85498cb3dcc6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/96934 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> Reviewed-by: Szymon Kłos <szymon.k...@collabora.com> diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx index 771bc2e72b02..bb2307363ab0 100644 --- a/desktop/source/lib/init.cxx +++ b/desktop/source/lib/init.cxx @@ -3689,6 +3689,19 @@ static void doc_sendDialogEvent(LibreOfficeKitDocument* /*pThis*/, unsigned nWin bContinueWithLOKWindow = true; } } + else if (sControlType == "toolbox") + { + auto pToolbar = dynamic_cast<weld::Toolbar*>(pWidget); + if (pToolbar) + { + if (sAction == "click") + { + pToolbar->signal_clicked(OUStringToOString(aMap["data"], RTL_TEXTENCODING_ASCII_US)); + } + else + bContinueWithLOKWindow = true; + } + } else { bContinueWithLOKWindow = true; diff --git a/include/vcl/jsdialog/jsdialogbuilder.hxx b/include/vcl/jsdialog/jsdialogbuilder.hxx index 52ada2848472..380226e43937 100644 --- a/include/vcl/jsdialog/jsdialogbuilder.hxx +++ b/include/vcl/jsdialog/jsdialogbuilder.hxx @@ -20,6 +20,8 @@ #include <vcl/button.hxx> #include <vcl/fmtfield.hxx> +class ToolBox; + typedef std::map<OString, weld::Widget*> WidgetMap; class JSDialogNotifyIdle : public Idle @@ -82,6 +84,8 @@ public: weld_drawing_area(const OString& id, const a11yref& rA11yImpl = nullptr, FactoryFunction pUITestFactoryFunction = nullptr, void* pUserData = nullptr, bool bTakeOwnership = false) override; + std::unique_ptr<weld::Toolbar> weld_toolbar(const OString& id, + bool bTakeOwnership = true) override; static weld::MessageDialog* CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType, @@ -221,6 +225,15 @@ public: virtual void queue_draw_area(int x, int y, int width, int height) override; }; +class VCL_DLLPUBLIC JSToolbar : public JSWidget<SalInstanceToolbar, ::ToolBox> +{ +public: + JSToolbar(VclPtr<vcl::Window> aOwnedToplevel, ::ToolBox* pToolbox, SalInstanceBuilder* pBuilder, + bool bTakeOwnership); + + void signal_clicked(const OString& rIdent) override; +}; + #endif /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx index 2f5509f74edd..7905a286e24c 100644 --- a/include/vcl/weld.hxx +++ b/include/vcl/weld.hxx @@ -1921,8 +1921,6 @@ class VCL_DLLPUBLIC Toolbar : virtual public Widget protected: Link<const OString&, void> m_aClickHdl; - void signal_clicked(const OString& rIdent) { m_aClickHdl.Call(rIdent); } - public: virtual void set_item_sensitive(const OString& rIdent, bool bSensitive) = 0; virtual bool get_item_sensitive(const OString& rIdent) const = 0; @@ -1950,6 +1948,7 @@ public: virtual vcl::ImageType get_icon_size() const = 0; void connect_clicked(const Link<const OString&, void>& rLink) { m_aClickHdl = rLink; } + virtual void signal_clicked(const OString& rIdent) { m_aClickHdl.Call(rIdent); } }; class VCL_DLLPUBLIC SizeGroup diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx index 3fba10ad2bc3..ba19912db0a2 100644 --- a/vcl/jsdialog/jsdialogbuilder.cxx +++ b/vcl/jsdialog/jsdialogbuilder.cxx @@ -13,6 +13,7 @@ #include <comphelper/lok.hxx> #include <vcl/dialog.hxx> #include <LibreOfficeKit/LibreOfficeKitEnums.h> +#include <vcl/toolbox.hxx> using namespace weld; @@ -301,6 +302,21 @@ JSInstanceBuilder::weld_drawing_area(const OString& id, const a11yref& rA11yImpl return pWeldWidget; } +std::unique_ptr<weld::Toolbar> JSInstanceBuilder::weld_toolbar(const OString& id, + bool bTakeOwnership) +{ + ToolBox* pToolBox = m_xBuilder->get<ToolBox>(id); + auto pWeldWidget = pToolBox ? std::make_unique<JSToolbar>( + m_bHasTopLevelDialog ? m_aOwnedToplevel : m_aParentDialog, + pToolBox, this, bTakeOwnership) + : nullptr; + + if (pWeldWidget) + RememberWidget(id, pWeldWidget.get()); + + return pWeldWidget; +} + weld::MessageDialog* JSInstanceBuilder::CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType, VclButtonsType eButtonType, @@ -511,4 +527,16 @@ void JSDrawingArea::queue_draw_area(int x, int y, int width, int height) notifyDialogState(); } +JSToolbar::JSToolbar(VclPtr<vcl::Window> aOwnedToplevel, ::ToolBox* pToolbox, + SalInstanceBuilder* pBuilder, bool bTakeOwnership) + : JSWidget<SalInstanceToolbar, ::ToolBox>(aOwnedToplevel, pToolbox, pBuilder, bTakeOwnership) +{ +} + +void JSToolbar::signal_clicked(const OString& rIdent) +{ + SalInstanceToolbar::signal_clicked(rIdent); + notifyDialogState(); +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits