vcl/inc/jsdialog/jsdialogbuilder.hxx | 12 +++++++ vcl/jsdialog/jsdialogbuilder.cxx | 59 +++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+)
New commits: commit 60938693aa41df5319bc4d73e4c65c09beda19e6 Author: Szymon Kłos <szymon.k...@collabora.com> AuthorDate: Wed Mar 1 18:11:44 2023 +0100 Commit: Szymon Kłos <szymon.k...@collabora.com> CommitDate: Fri Mar 3 17:31:07 2023 +0000 jsdialog: add wrapper for weld:Assistant Signed-off-by: Szymon Kłos <szymon.k...@collabora.com> Change-Id: I82d045cbcc7fc4682c251ac51b19b3bd33f813f8 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/148190 Tested-by: Jenkins diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx b/vcl/inc/jsdialog/jsdialogbuilder.hxx index eca79153ff3a..f45a4a50f10f 100644 --- a/vcl/inc/jsdialog/jsdialogbuilder.hxx +++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx @@ -278,6 +278,7 @@ public: virtual ~JSInstanceBuilder() override; virtual std::unique_ptr<weld::MessageDialog> weld_message_dialog(const OString& id) override; virtual std::unique_ptr<weld::Dialog> weld_dialog(const OString& id) override; + virtual std::unique_ptr<weld::Assistant> weld_assistant(const OString& id) override; virtual std::unique_ptr<weld::Container> weld_container(const OString& id) override; virtual std::unique_ptr<weld::Label> weld_label(const OString& id) override; virtual std::unique_ptr<weld::Button> weld_button(const OString& id) override; @@ -482,6 +483,17 @@ public: virtual void response(int response) override; }; +class JSAssistant final : public JSWidget<SalInstanceAssistant, vcl::RoadmapWizard> +{ +public: + JSAssistant(JSDialogSender* pSender, vcl::RoadmapWizard* pDialog, SalInstanceBuilder* pBuilder, + bool bTakeOwnership); + + virtual void set_current_page(int nPage) override; + virtual void set_current_page(const OString& rIdent) override; + virtual void response(int response) override; +}; + class JSContainer final : public JSWidget<SalInstanceContainer, vcl::Window> { public: diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx index 389bd4528ccb..4da0a4461b2c 100644 --- a/vcl/jsdialog/jsdialogbuilder.cxx +++ b/vcl/jsdialog/jsdialogbuilder.cxx @@ -26,6 +26,7 @@ #include <vcl/toolkit/treelistentry.hxx> #include <vcl/jsdialog/executor.hxx> #include <cppuhelper/supportsservice.hxx> +#include <wizdlg.hxx> static std::map<std::string, vcl::Window*>& GetLOKPopupsMap() { @@ -843,6 +844,34 @@ std::unique_ptr<weld::Dialog> JSInstanceBuilder::weld_dialog(const OString& id) return pRet; } +std::unique_ptr<weld::Assistant> JSInstanceBuilder::weld_assistant(const OString& id) +{ + vcl::RoadmapWizard* pDialog = m_xBuilder->get<vcl::RoadmapWizard>(id); + std::unique_ptr<JSAssistant> pRet(pDialog ? new JSAssistant(this, pDialog, this, false) + : nullptr); + if (pDialog) + { + m_nWindowId = pDialog->GetLOKWindowId(); + pDialog->SetLOKTunnelingState(false); + + InsertWindowToMap(getMapIdFromWindowId()); + + assert(!m_aOwnedToplevel && "only one toplevel per .ui allowed"); + m_aOwnedToplevel.set(pDialog); + m_xBuilder->drop_ownership(pDialog); + m_bHasTopLevelDialog = true; + + pRet.reset(new JSAssistant(this, pDialog, this, false)); + + RememberWidget("__DIALOG__", pRet.get()); + + initializeSender(GetNotifierWindow(), GetContentWindow(), GetTypeOfJSON()); + sendFullUpdate(); + } + + return pRet; +} + std::unique_ptr<weld::MessageDialog> JSInstanceBuilder::weld_message_dialog(const OString& id) { std::unique_ptr<weld::MessageDialog> pRet; @@ -1230,6 +1259,36 @@ void JSDialog::response(int response) SalInstanceDialog::response(response); } +void JSAssistant::response(int response) +{ + if (response == RET_HELP) + { + response_help(m_xWidget.get()); + return; + } + + sendClose(); + SalInstanceAssistant::response(response); +} + +JSAssistant::JSAssistant(JSDialogSender* pSender, vcl::RoadmapWizard* pDialog, + SalInstanceBuilder* pBuilder, bool bTakeOwnership) + : JSWidget<SalInstanceAssistant, vcl::RoadmapWizard>(pSender, pDialog, pBuilder, bTakeOwnership) +{ +} + +void JSAssistant::set_current_page(int nPage) +{ + SalInstanceAssistant::set_current_page(nPage); + sendFullUpdate(); +} + +void JSAssistant::set_current_page(const OString& rIdent) +{ + SalInstanceAssistant::set_current_page(rIdent); + sendFullUpdate(); +} + JSContainer::JSContainer(JSDialogSender* pSender, vcl::Window* pContainer, SalInstanceBuilder* pBuilder, bool bTakeOwnership) : JSWidget<SalInstanceContainer, vcl::Window>(pSender, pContainer, pBuilder, bTakeOwnership)