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)