From 910b8b04325e0103941b6c6d152e4ee5f0388fc2 Mon Sep 17 00:00:00 2001 From: Caolán McNamara Date: Sun, 15 Sep 2019 17:42:39 +0100 Subject: make WizardShell use RoadmapWizardMachine MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Id7e1e163f17cd4866c37bbd6cad73b8c721f4dae Reviewed-on: https://gerrit.libreoffice.org/78969 Reviewed-by: Caolán McNamara Tested-by: Caolán McNamara --- svtools/UIConfig_svt.mk | 1 + svtools/source/uno/wizard/unowizard.cxx | 52 +++++++--------------- svtools/source/uno/wizard/wizardpagecontroller.cxx | 8 ++-- svtools/source/uno/wizard/wizardpagecontroller.hxx | 2 +- svtools/source/uno/wizard/wizardshell.cxx | 31 +++++++------ svtools/source/uno/wizard/wizardshell.hxx | 6 +-- svtools/uiconfig/ui/emptypage.ui | 16 +++++++ 7 files changed, 57 insertions(+), 59 deletions(-) create mode 100644 svtools/uiconfig/ui/emptypage.ui (limited to 'svtools') diff --git a/svtools/UIConfig_svt.mk b/svtools/UIConfig_svt.mk index 44963c37a1ca..dd4744f620b8 100644 --- a/svtools/UIConfig_svt.mk +++ b/svtools/UIConfig_svt.mk @@ -12,6 +12,7 @@ $(eval $(call gb_UIConfig_UIConfig,svt)) $(eval $(call gb_UIConfig_add_uifiles,svt,\ svtools/uiconfig/ui/addresstemplatedialog \ svtools/uiconfig/ui/datewindow \ + svtools/uiconfig/ui/emptypage \ svtools/uiconfig/ui/fileviewmenu \ svtools/uiconfig/ui/graphicexport \ svtools/uiconfig/ui/inputbox \ diff --git a/svtools/source/uno/wizard/unowizard.cxx b/svtools/source/uno/wizard/unowizard.cxx index d52a69b39e0f..856d0ba3dafc 100644 --- a/svtools/source/uno/wizard/unowizard.cxx +++ b/svtools/source/uno/wizard/unowizard.cxx @@ -247,10 +247,10 @@ namespace { svt::OGenericUnoDialog::Dialog Wizard::createDialog(const css::uno::Reference& rParent) { - VclPtrInstance pDialog(VCLUnoHelper::GetWindow(rParent), m_xController, m_aWizardSteps); - pDialog->SetHelpId( lcl_getHelpId( m_sHelpURL ) ); - pDialog->setTitleBase( m_sTitle ); - return OGenericUnoDialog::Dialog(pDialog); + auto xDialog = std::make_unique(Application::GetFrameWeld(rParent), m_xController, m_aWizardSteps); + xDialog->set_help_id(lcl_getHelpId(m_sHelpURL)); + xDialog->setTitleBase( m_sTitle ); + return OGenericUnoDialog::Dialog(std::move(xDialog)); } OUString SAL_CALL Wizard::getImplementationName() @@ -258,26 +258,22 @@ namespace { return "com.sun.star.comp.svtools.uno.Wizard"; } - Sequence< OUString > SAL_CALL Wizard::getSupportedServiceNames() { Sequence< OUString > aServices { "com.sun.star.ui.dialogs.Wizard" }; return aServices; } - Reference< XPropertySetInfo > SAL_CALL Wizard::getPropertySetInfo() { return createPropertySetInfo( getInfoHelper() ); } - ::cppu::IPropertyArrayHelper& SAL_CALL Wizard::getInfoHelper() { return *getArrayHelper(); } - ::cppu::IPropertyArrayHelper* Wizard::createArrayHelper( ) const { Sequence< Property > aProps; @@ -285,7 +281,6 @@ namespace { return new ::cppu::OPropertyArrayHelper( aProps ); } - OUString SAL_CALL Wizard::getHelpURL() { SolarMutexGuard aSolarGuard; @@ -297,7 +292,6 @@ namespace { return lcl_getHelpURL(m_aDialog.get_help_id()); } - void SAL_CALL Wizard::setHelpURL( const OUString& i_HelpURL ) { SolarMutexGuard aSolarGuard; @@ -309,71 +303,65 @@ namespace { m_aDialog.set_help_id(lcl_getHelpId(i_HelpURL)); } - Reference< XWindow > SAL_CALL Wizard::getDialogWindow() { SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - ENSURE_OR_RETURN( m_aDialog.m_xVclDialog, "Wizard::getDialogWindow: illegal call (execution did not start, yet)!", nullptr ); - return Reference< XWindow >( m_aDialog.m_xVclDialog->GetComponentInterface(), UNO_QUERY ); + ENSURE_OR_RETURN( m_aDialog.m_xWeldDialog, "Wizard::getDialogWindow: illegal call (execution did not start, yet)!", nullptr ); + return m_aDialog.m_xWeldDialog->getDialog()->GetXWindow(); } - void SAL_CALL Wizard::enableButton( ::sal_Int16 i_WizardButton, sal_Bool i_Enable ) { SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - WizardShell* pWizardImpl = dynamic_cast< WizardShell* >( m_aDialog.m_xVclDialog.get() ); + WizardShell* pWizardImpl = dynamic_cast< WizardShell* >( m_aDialog.m_xWeldDialog.get() ); ENSURE_OR_RETURN_VOID( pWizardImpl, "Wizard::enableButtons: invalid dialog implementation!" ); pWizardImpl->enableButtons( lcl_convertWizardButtonToWZB( i_WizardButton ), i_Enable ); } - void SAL_CALL Wizard::setDefaultButton( ::sal_Int16 i_WizardButton ) { SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - WizardShell* pWizardImpl = dynamic_cast< WizardShell* >( m_aDialog.m_xVclDialog.get() ); + WizardShell* pWizardImpl = dynamic_cast< WizardShell* >( m_aDialog.m_xWeldDialog.get() ); ENSURE_OR_RETURN_VOID( pWizardImpl, "Wizard::setDefaultButton: invalid dialog implementation!" ); pWizardImpl->defaultButton( lcl_convertWizardButtonToWZB( i_WizardButton ) ); } - sal_Bool SAL_CALL Wizard::travelNext( ) { SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - WizardShell* pWizardImpl = dynamic_cast< WizardShell* >( m_aDialog.m_xVclDialog.get() ); + WizardShell* pWizardImpl = dynamic_cast< WizardShell* >( m_aDialog.m_xWeldDialog.get() ); ENSURE_OR_RETURN_FALSE( pWizardImpl, "Wizard::travelNext: invalid dialog implementation!" ); return pWizardImpl->travelNext(); } - sal_Bool SAL_CALL Wizard::travelPrevious( ) { SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - WizardShell* pWizardImpl = dynamic_cast< WizardShell* >( m_aDialog.m_xVclDialog.get() ); + WizardShell* pWizardImpl = dynamic_cast< WizardShell* >( m_aDialog.m_xWeldDialog.get() ); ENSURE_OR_RETURN_FALSE( pWizardImpl, "Wizard::travelPrevious: invalid dialog implementation!" ); return pWizardImpl->travelPrevious(); } - void SAL_CALL Wizard::enablePage( ::sal_Int16 i_PageID, sal_Bool i_Enable ) { SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - WizardShell* pWizardImpl = dynamic_cast< WizardShell* >( m_aDialog.m_xVclDialog.get() ); + WizardShell* pWizardImpl = dynamic_cast< WizardShell* >( m_aDialog.m_xWeldDialog.get() ); ENSURE_OR_RETURN_VOID( pWizardImpl, "Wizard::enablePage: invalid dialog implementation!" ); if ( !pWizardImpl->knowsPage( i_PageID ) ) @@ -385,55 +373,50 @@ namespace { pWizardImpl->enablePage( i_PageID, i_Enable ); } - void SAL_CALL Wizard::updateTravelUI( ) { SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - WizardShell* pWizardImpl = dynamic_cast< WizardShell* >( m_aDialog.m_xVclDialog.get() ); + WizardShell* pWizardImpl = dynamic_cast< WizardShell* >( m_aDialog.m_xWeldDialog.get() ); ENSURE_OR_RETURN_VOID( pWizardImpl, "Wizard::updateTravelUI: invalid dialog implementation!" ); pWizardImpl->updateTravelUI(); } - sal_Bool SAL_CALL Wizard::advanceTo( ::sal_Int16 i_PageId ) { SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - WizardShell* pWizardImpl = dynamic_cast< WizardShell* >( m_aDialog.m_xVclDialog.get() ); + WizardShell* pWizardImpl = dynamic_cast< WizardShell* >( m_aDialog.m_xWeldDialog.get() ); ENSURE_OR_RETURN_FALSE( pWizardImpl, "Wizard::advanceTo: invalid dialog implementation!" ); return pWizardImpl->advanceTo( i_PageId ); } - sal_Bool SAL_CALL Wizard::goBackTo( ::sal_Int16 i_PageId ) { SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - WizardShell* pWizardImpl = dynamic_cast< WizardShell* >( m_aDialog.m_xVclDialog.get() ); + WizardShell* pWizardImpl = dynamic_cast< WizardShell* >( m_aDialog.m_xWeldDialog.get() ); ENSURE_OR_RETURN_FALSE( pWizardImpl, "Wizard::goBackTo: invalid dialog implementation!" ); return pWizardImpl->goBackTo( i_PageId ); } - Reference< XWizardPage > SAL_CALL Wizard::getCurrentPage( ) { SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - WizardShell* pWizardImpl = dynamic_cast< WizardShell* >( m_aDialog.m_xVclDialog.get() ); + WizardShell* pWizardImpl = dynamic_cast< WizardShell* >( m_aDialog.m_xWeldDialog.get() ); ENSURE_OR_RETURN( pWizardImpl, "Wizard::getCurrentPage: invalid dialog implementation!", Reference< XWizardPage >() ); return pWizardImpl->getCurrentWizardPage(); } - void SAL_CALL Wizard::activatePath( ::sal_Int16 i_PathIndex, sal_Bool i_Final ) { SolarMutexGuard aSolarGuard; @@ -442,25 +425,22 @@ namespace { if ( ( i_PathIndex < 0 ) || ( i_PathIndex >= m_aWizardSteps.getLength() ) ) throw NoSuchElementException( OUString(), *this ); - WizardShell* pWizardImpl = dynamic_cast< WizardShell* >( m_aDialog.m_xVclDialog.get() ); + WizardShell* pWizardImpl = dynamic_cast< WizardShell* >( m_aDialog.m_xWeldDialog.get() ); ENSURE_OR_RETURN_VOID( pWizardImpl, "Wizard::activatePath: invalid dialog implementation!" ); pWizardImpl->activatePath( i_PathIndex, i_Final ); } - void SAL_CALL Wizard::setTitle( const OUString& i_Title ) { // simply disambiguate Wizard_Base::OGenericUnoDialog::setTitle( i_Title ); } - ::sal_Int16 SAL_CALL Wizard::execute( ) { return Wizard_Base::OGenericUnoDialog::execute(); } - } extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * diff --git a/svtools/source/uno/wizard/wizardpagecontroller.cxx b/svtools/source/uno/wizard/wizardpagecontroller.cxx index 5c5a4a725b6a..35f3d171f9aa 100644 --- a/svtools/source/uno/wizard/wizardpagecontroller.cxx +++ b/svtools/source/uno/wizard/wizardpagecontroller.cxx @@ -45,7 +45,7 @@ namespace svt { namespace uno //= WizardPageController - WizardPageController::WizardPageController( WizardShell& i_rParent, const Reference< XWizardController >& i_rController, + WizardPageController::WizardPageController( TabPageParent aParent, const Reference< XWizardController >& i_rController, const sal_Int16 i_nPageId ) :m_xController( i_rController ) ,m_xWizardPage() @@ -53,10 +53,8 @@ namespace svt { namespace uno ENSURE_OR_THROW( m_xController.is(), "no controller" ); try { - m_xWizardPage.set( m_xController->createPage( - Reference< XWindow >( i_rParent.GetComponentInterface(), UNO_QUERY_THROW ), - i_nPageId - ), UNO_SET_THROW ); + // Plug a toplevel SalFrame into the native page which can host our awt widgetry + m_xWizardPage.set(m_xController->createPage(aParent.pPage->CreateChildFrame(), i_nPageId), UNO_SET_THROW); Reference< XWindow > xPageWindow( m_xWizardPage->getWindow(), UNO_SET_THROW ); xPageWindow->setVisible( true ); diff --git a/svtools/source/uno/wizard/wizardpagecontroller.hxx b/svtools/source/uno/wizard/wizardpagecontroller.hxx index b81421372e82..0ce9f479067d 100644 --- a/svtools/source/uno/wizard/wizardpagecontroller.hxx +++ b/svtools/source/uno/wizard/wizardpagecontroller.hxx @@ -38,7 +38,7 @@ namespace svt { namespace uno { public: WizardPageController( - WizardShell& i_rParent, + TabPageParent aParent, const css::uno::Reference< css::ui::dialogs::XWizardController >& i_rController, const sal_Int16 i_nPageId ); diff --git a/svtools/source/uno/wizard/wizardshell.cxx b/svtools/source/uno/wizard/wizardshell.cxx index 4b8b6e9052a9..6cca7478f0ce 100644 --- a/svtools/source/uno/wizard/wizardshell.cxx +++ b/svtools/source/uno/wizard/wizardshell.cxx @@ -50,10 +50,9 @@ namespace svt { namespace uno } } - //= WizardShell - WizardShell::WizardShell( vcl::Window* i_pParent, const Reference< XWizardController >& i_rController, - const Sequence< Sequence< sal_Int16 > >& i_rPaths ) + WizardShell::WizardShell(weld::Window* i_pParent, const Reference< XWizardController >& i_rController, + const Sequence< Sequence< sal_Int16 > >& i_rPaths) :WizardShell_Base( i_pParent ) ,m_xController( i_rController ) ,m_nFirstPageID( lcl_determineFirstPageID( i_rPaths ) ) @@ -71,22 +70,19 @@ namespace svt { namespace uno } // create the first page, to know the page size - TabPage* pStartPage = GetOrCreatePage( impl_pageIdToState( i_rPaths[0][0] ) ); - SetPageSizePixel( pStartPage->GetSizePixel() ); + GetOrCreatePage( impl_pageIdToState( i_rPaths[0][0] ) ); + m_xAssistant->set_current_page(0); // some defaults - SetRoadmapInteractive( true ); enableAutomaticNextButtonState(); } - - short WizardShell::Execute() + short WizardShell::run() { ActivatePage(); - return WizardShell_Base::Execute(); + return WizardShell_Base::run(); } - sal_Int16 WizardShell::convertCommitReasonToTravelType( const CommitPageReason i_eReason ) { switch ( i_eReason ) @@ -176,14 +172,21 @@ namespace svt { namespace uno { ENSURE_OR_RETURN( m_xController.is(), "WizardShell::createPage: no WizardController!", nullptr ); - std::shared_ptr< WizardPageController > pController( new WizardPageController( *this, m_xController, impl_stateToPageId( i_nState ) ) ); + sal_Int16 nPageId = impl_stateToPageId(i_nState); + + OString sIdent(OString::number(nPageId)); + weld::Container* pPageContainer = m_xAssistant->append_page(sIdent); + // TODO eventually pass DialogController as distinct argument instead of bundling into TabPageParent + TabPageParent aParent(pPageContainer, this); + + std::shared_ptr< WizardPageController > pController(new WizardPageController(aParent, m_xController, nPageId)); VclPtr pPage = pController->getTabPage(); OSL_ENSURE( pPage, "WizardShell::createPage: illegal tab page!" ); - if ( !pPage ) + if (!pPage) { // fallback for ill-behaved clients: empty page - pPage = VclPtr::Create( this, 0 ); - pPage->SetSizePixel(LogicToPixel(Size(280, 185), MapMode(MapUnit::MapAppFont))); + pPage = VclPtr::Create(aParent, "svt/ui/emptypage.ui", "EmptyPage"); + pPage->SetSizePixel(pPage->LogicToPixel(Size(280, 185), MapMode(MapUnit::MapAppFont))); } m_aPageControllers[ pPage ] = pController; diff --git a/svtools/source/uno/wizard/wizardshell.hxx b/svtools/source/uno/wizard/wizardshell.hxx index f56451397d25..9f6fddc7977a 100644 --- a/svtools/source/uno/wizard/wizardshell.hxx +++ b/svtools/source/uno/wizard/wizardshell.hxx @@ -39,18 +39,18 @@ namespace svt { namespace uno //= WizardShell - typedef ::vcl::RoadmapWizard WizardShell_Base; + typedef ::vcl::RoadmapWizardMachine WizardShell_Base; class WizardShell : public WizardShell_Base { public: WizardShell( - vcl::Window* _pParent, + weld::Window* pParent, const css::uno::Reference< css::ui::dialogs::XWizardController >& i_rController, const css::uno::Sequence< css::uno::Sequence< sal_Int16 > >& i_rPaths ); // Dialog overridables - virtual short Execute() override; + virtual short run() override; // OWizardMachine overridables virtual VclPtr createPage( WizardState i_nState ) override; diff --git a/svtools/uiconfig/ui/emptypage.ui b/svtools/uiconfig/ui/emptypage.ui new file mode 100644 index 000000000000..c793016c20d9 --- /dev/null +++ b/svtools/uiconfig/ui/emptypage.ui @@ -0,0 +1,16 @@ + + + + + + True + False + True + True + 6 + 6 + + + + + -- cgit