vcl/inc/jsdialog/jsdialogbuilder.hxx |    4 ++
 vcl/inc/salvtables.hxx               |    7 +++--
 vcl/jsdialog/jsdialogbuilder.cxx     |   47 +++++++++++++++++++++++++++++++++++
 vcl/source/control/wizardmachine.cxx |    1 
 4 files changed, 57 insertions(+), 2 deletions(-)

New commits:
commit 641fb015fcd81926ce9d556a6fdb9a19ab8e6e1b
Author:     Szymon Kłos <szymon.k...@collabora.com>
AuthorDate: Thu Mar 2 16:56:23 2023 +0100
Commit:     Szymon Kłos <szymon.k...@collabora.com>
CommitDate: Tue Mar 7 09:10:35 2023 +0000

    jsdialog: hide not-used tabpage in the wizard
    
    In the wizard initially we show only the first page.
    
    Change-Id: I18ff5362f9ceb9989bfba2d9fddebf95230331e6
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/148134
    Tested-by: Szymon Kłos <szymon.k...@collabora.com>
    Reviewed-by: Szymon Kłos <szymon.k...@collabora.com>

diff --git a/vcl/source/control/wizardmachine.cxx 
b/vcl/source/control/wizardmachine.cxx
index fc76037c5ae1..0071ecc089a0 100644
--- a/vcl/source/control/wizardmachine.cxx
+++ b/vcl/source/control/wizardmachine.cxx
@@ -531,6 +531,7 @@ namespace vcl
             mpFirstPage = pNewPageData;
         else
         {
+            pPage->Hide();
             ImplWizPageData* pPageData = mpFirstPage;
             while ( pPageData->mpNext )
                 pPageData = pPageData->mpNext;
commit 746eb9c52211e39b429d0b9efc23adfc6290a3be
Author:     Szymon Kłos <szymon.k...@collabora.com>
AuthorDate: Thu Mar 2 16:10:30 2023 +0100
Commit:     Szymon Kłos <szymon.k...@collabora.com>
CommitDate: Tue Mar 7 09:10:24 2023 +0000

    jsdialog: handle weld_widget_for_response
    
    Change-Id: I3b8d3911ff93bd26f8bdfb498b547fd335c3db8b
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/148132
    Tested-by: Szymon Kłos <szymon.k...@collabora.com>
    Reviewed-by: Szymon Kłos <szymon.k...@collabora.com>

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 97bab23c809a..6a96428fb494 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -225,6 +225,8 @@ class JSInstanceBuilder final : public SalInstanceBuilder, 
public JSDialogSender
     VclPtr<vcl::Window> m_aWindowToRelease;
 
     friend class JSMessageDialog; // static message boxes have to be 
registered outside
+    friend class JSDialog;
+    friend class JSAssistant;
 
     friend VCL_DLLPUBLIC bool jsdialog::ExecuteAction(const std::string& 
nWindowId,
                                                       const OString& rWidget, 
StringMap& rData);
@@ -480,6 +482,7 @@ public:
     virtual void collapse(weld::Widget* pEdit, weld::Widget* pButton) override;
     virtual void undo_collapse() override;
     virtual void response(int response) override;
+    virtual weld::Button* weld_widget_for_response(int response) override;
 };
 
 class JSAssistant final : public JSWidget<SalInstanceAssistant, 
vcl::RoadmapWizard>
@@ -491,6 +494,7 @@ public:
     virtual void set_current_page(int nPage) override;
     virtual void set_current_page(const OString& rIdent) override;
     virtual void response(int response) override;
+    virtual weld::Button* weld_widget_for_response(int response) override;
 };
 
 class JSContainer final : public JSWidget<SalInstanceContainer, vcl::Window>
diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx
index f0f79d1f58eb..a4727b4aad96 100644
--- a/vcl/inc/salvtables.hxx
+++ b/vcl/inc/salvtables.hxx
@@ -503,9 +503,10 @@ public:
 
 class SalInstanceDialog : public SalInstanceWindow, public virtual weld::Dialog
 {
-private:
+protected:
     VclPtr<::Dialog> m_xDialog;
 
+private:
     // for calc ref dialog that shrink to range selection widgets and resize 
back
     VclPtr<vcl::Window> m_xRefEdit;
     std::vector<VclPtr<vcl::Window>> m_aHiddenWidgets; // vector of hidden 
Controls
@@ -550,8 +551,10 @@ public:
 
 class SalInstanceAssistant : public SalInstanceDialog, public virtual 
weld::Assistant
 {
-private:
+protected:
     VclPtr<vcl::RoadmapWizard> m_xWizard;
+
+private:
     std::vector<std::unique_ptr<SalInstanceContainer>> m_aPages;
     std::vector<VclPtr<TabPage>> m_aAddedPages;
     std::vector<int> m_aIds;
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index ff562358abdc..b97ccd372359 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -1259,6 +1259,53 @@ void JSAssistant::response(int response)
     SalInstanceAssistant::response(response);
 }
 
+weld::Button* JSDialog::weld_widget_for_response(int nResponse)
+{
+    PushButton* pButton
+        = 
dynamic_cast<::PushButton*>(m_xDialog->get_widget_for_response(nResponse));
+    auto pWeldWidget = pButton ? new JSButton(m_pSender, pButton, nullptr, 
false) : nullptr;
+
+    if (pWeldWidget)
+    {
+        auto pParentDialog = m_xDialog->GetParentWithLOKNotifier();
+        if (pParentDialog)
+            JSInstanceBuilder::RememberWidget(
+                std::to_string(pParentDialog->GetLOKWindowId()),
+                OUStringToOString(pButton->get_id(), RTL_TEXTENCODING_UTF8), 
pWeldWidget);
+    }
+
+    return pWeldWidget;
+}
+
+weld::Button* JSAssistant::weld_widget_for_response(int nResponse)
+{
+    ::PushButton* pButton = nullptr;
+    JSButton* pWeldWidget = nullptr;
+    if (nResponse == RET_YES)
+        pButton = m_xWizard->m_pNextPage;
+    else if (nResponse == RET_NO)
+        pButton = m_xWizard->m_pPrevPage;
+    else if (nResponse == RET_OK)
+        pButton = m_xWizard->m_pFinish;
+    else if (nResponse == RET_CANCEL)
+        pButton = m_xWizard->m_pCancel;
+    else if (nResponse == RET_HELP)
+        pButton = m_xWizard->m_pHelp;
+    if (pButton)
+        pWeldWidget = new JSButton(m_pSender, pButton, nullptr, false);
+
+    if (pWeldWidget)
+    {
+        auto pParentDialog = m_xWizard->GetParentWithLOKNotifier();
+        if (pParentDialog)
+            JSInstanceBuilder::RememberWidget(
+                std::to_string(pParentDialog->GetLOKWindowId()),
+                OUStringToOString(pButton->get_id(), RTL_TEXTENCODING_UTF8), 
pWeldWidget);
+    }
+
+    return pWeldWidget;
+}
+
 JSAssistant::JSAssistant(JSDialogSender* pSender, vcl::RoadmapWizard* pDialog,
                          SalInstanceBuilder* pBuilder, bool bTakeOwnership)
     : JSWidget<SalInstanceAssistant, vcl::RoadmapWizard>(pSender, pDialog, 
pBuilder, bTakeOwnership)

Reply via email to