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)

Reply via email to