From daa1ab5d59e3cee21324cdfa1329f2d36c4eda05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= Date: Wed, 12 Jun 2019 11:32:40 +0100 Subject: [PATCH] weld ExtMgrDialog and UpdateRequiredDialog MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I97e5cda847fd7f98990a87d0b1ca6d6b8b3f9d0f Reviewed-on: https://gerrit.libreoffice.org/73899 Tested-by: Jenkins Reviewed-by: Caolán McNamara Tested-by: Caolán McNamara --- cui/source/factory/dlgfact.cxx | 4 +- cui/source/factory/dlgfact.hxx | 2 +- desktop/UIConfig_deployment.mk | 1 + .../source/deployment/gui/dp_gui_dialog2.cxx | 579 +++++++----------- .../source/deployment/gui/dp_gui_dialog2.hxx | 111 ++-- .../gui/dp_gui_extensioncmdqueue.cxx | 62 +- .../deployment/gui/dp_gui_extlistbox.cxx | 312 +++++----- .../deployment/gui/dp_gui_extlistbox.hxx | 29 +- .../source/deployment/gui/dp_gui_service.cxx | 4 +- .../deployment/gui/dp_gui_theextmgr.cxx | 99 +-- .../deployment/gui/dp_gui_theextmgr.hxx | 26 +- desktop/uiconfig/ui/extensionmanager.ui | 55 +- desktop/uiconfig/ui/extensionmenu.ui | 9 + desktop/uiconfig/ui/updaterequireddialog.ui | 189 +++--- .../source/glade/libreoffice-catalog.xml.in | 6 - include/sfx2/sfxdlg.hxx | 2 +- solenv/bin/native-code.py | 2 - solenv/sanitizers/ui/desktop.suppr | 4 +- 18 files changed, 717 insertions(+), 779 deletions(-) create mode 100644 desktop/uiconfig/ui/extensionmenu.ui diff --git a/cui/source/factory/dlgfact.cxx b/cui/source/factory/dlgfact.cxx index 0c1fbe4612c8..af99be370a81 100644 --- a/cui/source/factory/dlgfact.cxx +++ b/cui/source/factory/dlgfact.cxx @@ -1565,9 +1565,9 @@ VclPtr AbstractDialogFactory_Impl::CreateSvxNewTableD } VclPtr AbstractDialogFactory_Impl::CreateOptionsDialog( - vcl::Window* pParent, const OUString& rExtensionId ) + weld::Window* /*pParent*/, const OUString& rExtensionId ) { - return VclPtr::Create( VclPtr::Create( pParent, rExtensionId ) ); + return VclPtr::Create( VclPtr::Create(nullptr /* TODO: pParent*/, rExtensionId ) ); } VclPtr AbstractDialogFactory_Impl::CreateSvxInsRowColDlg(weld::Window* pParent, bool bCol, const OString& rHelpId) diff --git a/cui/source/factory/dlgfact.hxx b/cui/source/factory/dlgfact.hxx index 58548d82463b..ca07530a4f94 100644 --- a/cui/source/factory/dlgfact.hxx +++ b/cui/source/factory/dlgfact.hxx @@ -844,7 +844,7 @@ public: virtual VclPtr CreateSvxNewTableDialog(weld::Window* pParent) override ; virtual VclPtr CreateOptionsDialog( - vcl::Window* pParent, const OUString& rExtensionId ) override; + weld::Window* pParent, const OUString& rExtensionId ) override; virtual VclPtr CreateSvxInsRowColDlg(weld::Window* pParent, bool bCol, const OString& rHelpId) override; diff --git a/desktop/UIConfig_deployment.mk b/desktop/UIConfig_deployment.mk index a1e08c8b599b..80e5e96c121a 100644 --- a/desktop/UIConfig_deployment.mk +++ b/desktop/UIConfig_deployment.mk @@ -12,6 +12,7 @@ $(eval $(call gb_UIConfig_UIConfig,desktop)) $(eval $(call gb_UIConfig_add_uifiles,desktop,\ desktop/uiconfig/ui/dependenciesdialog \ desktop/uiconfig/ui/extensionmanager \ + desktop/uiconfig/ui/extensionmenu \ desktop/uiconfig/ui/installforalldialog \ desktop/uiconfig/ui/licensedialog \ desktop/uiconfig/ui/showlicensedialog \ diff --git a/desktop/source/deployment/gui/dp_gui_dialog2.cxx b/desktop/source/deployment/gui/dp_gui_dialog2.cxx index da0a3cf3a1a8..0de89e91d050 100644 --- a/desktop/source/deployment/gui/dp_gui_dialog2.cxx +++ b/desktop/source/deployment/gui/dp_gui_dialog2.cxx @@ -101,35 +101,23 @@ struct StrAllFiles : public rtl::StaticWithInit< OUString, StrAllFiles > } }; -// ExtBoxWithBtns_Impl - -enum MENU_COMMAND -{ - CMD_NONE = 0, - CMD_REMOVE = 1, - CMD_ENABLE, - CMD_DISABLE, - CMD_UPDATE, - CMD_SHOW_LICENSE -}; - +// ExtBoxWithBtns_Impl class ExtBoxWithBtns_Impl : public ExtensionBox_Impl { bool m_bInterfaceLocked; - VclPtr m_pParent; + ExtMgrDialog* m_pParent; void SetButtonStatus( const TEntry_Impl& rEntry ); - MENU_COMMAND ShowPopupMenu( const Point &rPos, const long nPos ); + OString ShowPopupMenu( const Point &rPos, const long nPos ); public: - explicit ExtBoxWithBtns_Impl(vcl::Window* pParent); - virtual ~ExtBoxWithBtns_Impl() override; - virtual void dispose() override; + explicit ExtBoxWithBtns_Impl(std::unique_ptr xScroll); void InitFromDialog(ExtMgrDialog *pParentDialog); - virtual void MouseButtonDown( const MouseEvent& rMEvt ) override; + virtual bool MouseButtonDown( const MouseEvent& rMEvt ) override; + virtual bool ContextMenu( const CommandEvent& rCEvt ) override; virtual void RecalcAll() override; virtual void selectEntry( const long nPos ) override; @@ -137,8 +125,8 @@ public: void enableButtons( bool bEnable ); }; -ExtBoxWithBtns_Impl::ExtBoxWithBtns_Impl(vcl::Window* pParent) - : ExtensionBox_Impl(pParent) +ExtBoxWithBtns_Impl::ExtBoxWithBtns_Impl(std::unique_ptr xScroll) + : ExtensionBox_Impl(std::move(xScroll)) , m_bInterfaceLocked(false) , m_pParent(nullptr) { @@ -151,23 +139,6 @@ void ExtBoxWithBtns_Impl::InitFromDialog(ExtMgrDialog *pParentDialog) m_pParent = pParentDialog; } -extern "C" SAL_DLLPUBLIC_EXPORT void makeExtBoxWithBtns(VclPtr & rRet, VclPtr & pParent, VclBuilder::stringmap &) -{ - rRet = VclPtr::Create(pParent); -} - -ExtBoxWithBtns_Impl::~ExtBoxWithBtns_Impl() -{ - disposeOnce(); -} - -void ExtBoxWithBtns_Impl::dispose() -{ - m_pParent.clear(); - ExtensionBox_Impl::dispose(); -} - - void ExtBoxWithBtns_Impl::RecalcAll() { const sal_Int32 nActive = getSelIndex(); @@ -243,15 +214,44 @@ void ExtBoxWithBtns_Impl::SetButtonStatus(const TEntry_Impl& rEntry) } } -MENU_COMMAND ExtBoxWithBtns_Impl::ShowPopupMenu( const Point & rPos, const long nPos ) +bool ExtBoxWithBtns_Impl::ContextMenu(const CommandEvent& rCEvt) +{ + if (rCEvt.GetCommand() != CommandEventId::ContextMenu) + return false; + + const Point aMousePos(rCEvt.GetMousePosPixel()); + const auto nPos = PointToPos(aMousePos); + OString sCommand = ShowPopupMenu(aMousePos, nPos); + + if (sCommand == "CMD_ENABLE") + m_pParent->enablePackage( GetEntryData( nPos )->m_xPackage, true ); + else if (sCommand == "CMD_DISABLE") + m_pParent->enablePackage( GetEntryData( nPos )->m_xPackage, false ); + else if (sCommand == "CMD_UPDATE") + m_pParent->updatePackage( GetEntryData( nPos )->m_xPackage ); + else if (sCommand == "CMD_REMOVE") + m_pParent->removePackage( GetEntryData( nPos )->m_xPackage ); + else if (sCommand == "CMD_SHOW_LICENSE") + { + m_pParent->incBusy(); + ShowLicenseDialog aLicenseDlg(m_pParent->getDialog(), GetEntryData(nPos)->m_xPackage); + aLicenseDlg.run(); + m_pParent->decBusy(); + } + + return true; +} + +OString ExtBoxWithBtns_Impl::ShowPopupMenu( const Point & rPos, const long nPos ) { if ( nPos >= static_cast(getItemCount()) ) - return CMD_NONE; + return "CMD_NONE"; - ScopedVclPtrInstance aPopup; + std::unique_ptr xBuilder(Application::CreateBuilder(nullptr, "desktop/ui/extensionmenu.ui")); + std::unique_ptr xPopup(xBuilder->weld_menu("menu")); #if ENABLE_EXTENSION_UPDATE - aPopup->InsertItem( CMD_UPDATE, DpResId( RID_CTX_ITEM_CHECK_UPDATE ) ); + xPopup->append("CMD_UPDATE", DpResId( RID_CTX_ITEM_CHECK_UPDATE ) ); #endif if ( ! GetEntryData( nPos )->m_bLocked ) @@ -259,61 +259,27 @@ MENU_COMMAND ExtBoxWithBtns_Impl::ShowPopupMenu( const Point & rPos, const long if ( GetEntryData( nPos )->m_bUser ) { if ( GetEntryData( nPos )->m_eState == REGISTERED ) - aPopup->InsertItem( CMD_DISABLE, DpResId( RID_CTX_ITEM_DISABLE ) ); + xPopup->append("CMD_DISABLE", DpResId(RID_CTX_ITEM_DISABLE)); else if ( GetEntryData( nPos )->m_eState != NOT_AVAILABLE ) - aPopup->InsertItem( CMD_ENABLE, DpResId( RID_CTX_ITEM_ENABLE ) ); + xPopup->append("CMD_ENABLE", DpResId(RID_CTX_ITEM_ENABLE)); } if (!officecfg::Office::ExtensionManager::ExtensionSecurity::DisableExtensionRemoval::get()) { - aPopup->InsertItem( CMD_REMOVE, DpResId( RID_CTX_ITEM_REMOVE ) ); + xPopup->append("CMD_REMOVE", DpResId(RID_CTX_ITEM_REMOVE)); } } if ( !GetEntryData( nPos )->m_sLicenseText.isEmpty() ) - aPopup->InsertItem( CMD_SHOW_LICENSE, DpResId( RID_STR_SHOW_LICENSE_CMD ) ); + xPopup->append("CMD_SHOW_LICENSE", DpResId(RID_STR_SHOW_LICENSE_CMD)); - return static_cast(aPopup->Execute( this, rPos )); + return xPopup->popup_at_rect(GetDrawingArea(), tools::Rectangle(rPos, Size(1, 1))); } - -void ExtBoxWithBtns_Impl::MouseButtonDown( const MouseEvent& rMEvt ) +bool ExtBoxWithBtns_Impl::MouseButtonDown( const MouseEvent& rMEvt ) { - if ( m_bInterfaceLocked ) - return; - - const Point aMousePos( rMEvt.GetPosPixel() ); - const long nPos = PointToPos( aMousePos ); - - if ( rMEvt.IsRight() ) - { - switch( ShowPopupMenu( aMousePos, nPos ) ) - { - case CMD_NONE: break; - case CMD_ENABLE: m_pParent->enablePackage( GetEntryData( nPos )->m_xPackage, true ); - break; - case CMD_DISABLE: m_pParent->enablePackage( GetEntryData( nPos )->m_xPackage, false ); - break; - case CMD_UPDATE: m_pParent->updatePackage( GetEntryData( nPos )->m_xPackage ); - break; - case CMD_REMOVE: m_pParent->removePackage( GetEntryData( nPos )->m_xPackage ); - break; - case CMD_SHOW_LICENSE: - { - ShowLicenseDialog aLicenseDlg(m_pParent->GetFrameWeld(), GetEntryData(nPos)->m_xPackage); - aLicenseDlg.run(); - break; - } - } - } - else if ( rMEvt.IsLeft() ) - { - const SolarMutexGuard aGuard; - if ( rMEvt.IsMod1() && HasActive() ) - selectEntry( ExtensionBox_Impl::ENTRY_NOTFOUND ); - // selecting a not existing entry will deselect the current one - else - selectEntry( nPos ); - } + if (m_bInterfaceLocked) + return false; + return ExtensionBox_Impl::MouseButtonDown(rMEvt); } void ExtBoxWithBtns_Impl::enableButtons( bool bEnable ) @@ -337,8 +303,8 @@ void ExtBoxWithBtns_Impl::enableButtons( bool bEnable ) // DialogHelper DialogHelper::DialogHelper(const uno::Reference< uno::XComponentContext > &xContext, - Dialog *pWindow) - : m_xVCLWindow(pWindow) + weld::Window* pWindow) + : m_pWindow(pWindow) , m_nEventID(nullptr) { m_xContext = xContext; @@ -458,14 +424,13 @@ void DialogHelper::PostUserEvent( const Link& rLink, void* pCaller ) if ( m_nEventID ) Application::RemoveUserEvent( m_nEventID ); - m_nEventID = Application::PostUserEvent( rLink, pCaller, true/*bReferenceLink*/ ); + m_nEventID = Application::PostUserEvent(rLink, pCaller); } // ExtMgrDialog -ExtMgrDialog::ExtMgrDialog(vcl::Window *pParent, TheExtensionManager *pManager, Dialog::InitFlag eFlag) - : ModelessDialog(pParent, "ExtensionManagerDialog", "desktop/ui/extensionmanager.ui", eFlag) - , DialogHelper(pManager->getContext(), static_cast(this)) - , m_xRestartParent(pParent ? pParent : Application::GetDefDialogParent()) +ExtMgrDialog::ExtMgrDialog(weld::Window *pParent, TheExtensionManager *pManager) + : GenericDialogController(pParent, "desktop/ui/extensionmanager.ui", "ExtensionManagerDialog") + , DialogHelper(pManager->getContext(), m_xDialog.get()) , m_sAddPackages(DpResId(RID_STR_ADD_PACKAGES)) , m_bHasProgress(false) , m_bProgressChanged(false) @@ -477,60 +442,60 @@ ExtMgrDialog::ExtMgrDialog(vcl::Window *pParent, TheExtensionManager *pManager, , m_bClosed(false) , m_nProgress(0) , m_pManager(pManager) + , m_xExtensionBox(new ExtBoxWithBtns_Impl(m_xBuilder->weld_scrolled_window("scroll"))) + , m_xExtensionBoxWnd(new weld::CustomWeld(*m_xBuilder, "extensions", *m_xExtensionBox)) + , m_xOptionsBtn(m_xBuilder->weld_button("optionsbtn")) + , m_xAddBtn(m_xBuilder->weld_button("addbtn")) + , m_xRemoveBtn(m_xBuilder->weld_button("removebtn")) + , m_xEnableBtn(m_xBuilder->weld_button("enablebtn")) + , m_xUpdateBtn(m_xBuilder->weld_button("updatebtn")) + , m_xCloseBtn(m_xBuilder->weld_button("close")) + , m_xBundledCbx(m_xBuilder->weld_check_button("bundled")) + , m_xSharedCbx(m_xBuilder->weld_check_button("shared")) + , m_xUserCbx(m_xBuilder->weld_check_button("user")) + , m_xGetExtensions(m_xBuilder->weld_link_button("getextensions")) + , m_xProgressText(m_xBuilder->weld_label("progressft")) + , m_xProgressBar(m_xBuilder->weld_progress_bar("progressbar")) + , m_xCancelBtn(m_xBuilder->weld_button("cancel")) { - get(m_pExtensionBox, "extensions"); - get(m_pOptionsBtn, "optionsbtn"); - get(m_pAddBtn, "addbtn"); - get(m_pRemoveBtn, "removebtn"); - get(m_pEnableBtn, "enablebtn"); - get(m_pUpdateBtn, "updatebtn"); - get(m_pCloseBtn, "close"); - get(m_pBundledCbx, "bundled"); - get(m_pSharedCbx, "shared"); - get(m_pUserCbx, "user"); - get(m_pGetExtensions, "getextensions"); - get(m_pProgressText, "progressft"); - get(m_pProgressBar, "progressbar"); - get(m_pCancelBtn, "cancel"); + m_xExtensionBox->InitFromDialog(this); - m_pExtensionBox->InitFromDialog(this); + m_xEnableBtn->set_help_id(HID_EXTENSION_MANAGER_LISTBOX_ENABLE); - m_pEnableBtn->SetHelpId( HID_EXTENSION_MANAGER_LISTBOX_ENABLE ); + m_xOptionsBtn->connect_clicked( LINK( this, ExtMgrDialog, HandleOptionsBtn ) ); + m_xAddBtn->connect_clicked( LINK( this, ExtMgrDialog, HandleAddBtn ) ); + m_xRemoveBtn->connect_clicked( LINK( this, ExtMgrDialog, HandleRemoveBtn ) ); + m_xEnableBtn->connect_clicked( LINK( this, ExtMgrDialog, HandleEnableBtn ) ); + m_xCloseBtn->connect_clicked( LINK( this, ExtMgrDialog, HandleCloseBtn ) ); - m_pOptionsBtn->SetClickHdl( LINK( this, ExtMgrDialog, HandleOptionsBtn ) ); - m_pAddBtn->SetClickHdl( LINK( this, ExtMgrDialog, HandleAddBtn ) ); - m_pRemoveBtn->SetClickHdl( LINK( this, ExtMgrDialog, HandleRemoveBtn ) ); - m_pEnableBtn->SetClickHdl( LINK( this, ExtMgrDialog, HandleEnableBtn ) ); - m_pCloseBtn->SetClickHdl( LINK( this, ExtMgrDialog, HandleCloseBtn ) ); + m_xCancelBtn->connect_clicked( LINK( this, ExtMgrDialog, HandleCancelBtn ) ); - m_pCancelBtn->SetClickHdl( LINK( this, ExtMgrDialog, HandleCancelBtn ) ); + m_xBundledCbx->connect_clicked( LINK( this, ExtMgrDialog, HandleExtTypeCbx ) ); + m_xSharedCbx->connect_clicked( LINK( this, ExtMgrDialog, HandleExtTypeCbx ) ); + m_xUserCbx->connect_clicked( LINK( this, ExtMgrDialog, HandleExtTypeCbx ) ); - m_pBundledCbx->SetClickHdl( LINK( this, ExtMgrDialog, HandleExtTypeCbx ) ); - m_pSharedCbx->SetClickHdl( LINK( this, ExtMgrDialog, HandleExtTypeCbx ) ); - m_pUserCbx->SetClickHdl( LINK( this, ExtMgrDialog, HandleExtTypeCbx ) ); + m_xBundledCbx->set_active(true); + m_xSharedCbx->set_active(true); + m_xUserCbx->set_active(true); - m_pBundledCbx->Check(); - m_pSharedCbx->Check(); - m_pUserCbx->Check(); - - m_pProgressBar->Hide(); + m_xProgressBar->hide(); #if ENABLE_EXTENSION_UPDATE - m_pUpdateBtn->SetClickHdl( LINK( this, ExtMgrDialog, HandleUpdateBtn ) ); - m_pUpdateBtn->Enable(false); + m_xUpdateBtn->connect_clicked( LINK( this, ExtMgrDialog, HandleUpdateBtn ) ); + m_xUpdateBtn->set_sensitive(false); #else - m_pUpdateBtn->Hide(); + m_xUpdateBtn->hide(); #endif if (officecfg::Office::ExtensionManager::ExtensionSecurity::DisableExtensionInstallation::get()) { - m_pAddBtn->Disable(); - m_pAddBtn->SetQuickHelpText(DpResId(RID_STR_WARNING_INSTALL_EXTENSION_DISABLED)); + m_xAddBtn->set_sensitive(false); + m_xAddBtn->set_tooltip_text(DpResId(RID_STR_WARNING_INSTALL_EXTENSION_DISABLED)); } if (officecfg::Office::ExtensionManager::ExtensionSecurity::DisableExtensionRemoval::get()) { - m_pRemoveBtn->Disable(); - m_pRemoveBtn->SetQuickHelpText(DpResId(RID_STR_WARNING_REMOVE_EXTENSION_DISABLED)); + m_xRemoveBtn->set_sensitive(false); + m_xRemoveBtn->set_tooltip_text(DpResId(RID_STR_WARNING_REMOVE_EXTENSION_DISABLED)); } m_aIdle.SetPriority(TaskPriority::LOWEST); @@ -538,75 +503,52 @@ ExtMgrDialog::ExtMgrDialog(vcl::Window *pParent, TheExtensionManager *pManager, m_aIdle.SetInvokeHandler( LINK( this, ExtMgrDialog, TimeOutHdl ) ); } - ExtMgrDialog::~ExtMgrDialog() -{ - disposeOnce(); -} - -void ExtMgrDialog::dispose() { m_aIdle.Stop(); - m_pExtensionBox.clear(); - m_pOptionsBtn.clear(); - m_pAddBtn.clear(); - m_pRemoveBtn.clear(); - m_pEnableBtn.clear(); - m_pUpdateBtn.clear(); - m_pCloseBtn.clear(); - m_pBundledCbx.clear(); - m_pSharedCbx.clear(); - m_pUserCbx.clear(); - m_pGetExtensions.clear(); - m_pProgressText.clear(); - m_pProgressBar.clear(); - m_pCancelBtn.clear(); - m_xRestartParent.clear(); - ModelessDialog::dispose(); } - void ExtMgrDialog::setGetExtensionsURL( const OUString &rURL ) { - m_pGetExtensions->SetURL( rURL ); + m_xGetExtensions->set_uri( rURL ); } void ExtMgrDialog::addPackageToList( const uno::Reference< deployment::XPackage > &xPackage, bool bLicenseMissing ) { const SolarMutexGuard aGuard; - m_pUpdateBtn->Enable(); + m_xUpdateBtn->set_sensitive(true); - if (m_pBundledCbx->IsChecked() && (xPackage->getRepositoryName() == BUNDLED_PACKAGE_MANAGER) ) + if (m_xBundledCbx->get_active() && (xPackage->getRepositoryName() == BUNDLED_PACKAGE_MANAGER) ) { - m_pExtensionBox->addEntry( xPackage, bLicenseMissing ); + m_xExtensionBox->addEntry( xPackage, bLicenseMissing ); } - else if (m_pSharedCbx->IsChecked() && (xPackage->getRepositoryName() == SHARED_PACKAGE_MANAGER) ) + else if (m_xSharedCbx->get_active() && (xPackage->getRepositoryName() == SHARED_PACKAGE_MANAGER) ) { - m_pExtensionBox->addEntry( xPackage, bLicenseMissing ); + m_xExtensionBox->addEntry( xPackage, bLicenseMissing ); } - else if (m_pUserCbx->IsChecked() && (xPackage->getRepositoryName() == USER_PACKAGE_MANAGER )) + else if (m_xUserCbx->get_active() && (xPackage->getRepositoryName() == USER_PACKAGE_MANAGER )) { - m_pExtensionBox->addEntry( xPackage, bLicenseMissing ); + m_xExtensionBox->addEntry( xPackage, bLicenseMissing ); } } void ExtMgrDialog::prepareChecking() { - m_pExtensionBox->prepareChecking(); + m_xExtensionBox->prepareChecking(); } void ExtMgrDialog::checkEntries() { const SolarMutexGuard guard; - m_pExtensionBox->checkEntries(); + m_xExtensionBox->checkEntries(); } bool ExtMgrDialog::removeExtensionWarn(const OUString &rExtensionName) { const SolarMutexGuard guard; incBusy(); - std::unique_ptr xInfoBox(Application::CreateMessageDialog(GetFrameWeld(), + std::unique_ptr xInfoBox(Application::CreateMessageDialog(m_xDialog.get(), VclMessageType::Warning, VclButtonsType::OkCancel, DpResId(RID_STR_WARNING_REMOVE_EXTENSION))); @@ -629,12 +571,12 @@ void ExtMgrDialog::enablePackage( const uno::Reference< deployment::XPackage > & if ( bEnable ) { - if (!continueOnSharedExtension(xPackage, GetFrameWeld(), RID_STR_WARNING_ENABLE_SHARED_EXTENSION, m_bEnableWarning)) + if (!continueOnSharedExtension(xPackage, m_xDialog.get(), RID_STR_WARNING_ENABLE_SHARED_EXTENSION, m_bEnableWarning)) return; } else { - if (!continueOnSharedExtension(xPackage, GetFrameWeld(), RID_STR_WARNING_DISABLE_SHARED_EXTENSION, m_bDisableWarning)) + if (!continueOnSharedExtension(xPackage, m_xDialog.get(), RID_STR_WARNING_DISABLE_SHARED_EXTENSION, m_bDisableWarning)) return; } @@ -653,7 +595,7 @@ void ExtMgrDialog::removePackage( const uno::Reference< deployment::XPackage > & return; } - if (!continueOnSharedExtension(xPackage, GetFrameWeld(), RID_STR_WARNING_REMOVE_SHARED_EXTENSION, m_bDeleteWarning)) + if (!continueOnSharedExtension(xPackage, m_xDialog.get(), RID_STR_WARNING_REMOVE_SHARED_EXTENSION, m_bDeleteWarning)) return; m_pManager->getCmdQueue()->removeExtension( xPackage ); @@ -692,7 +634,7 @@ bool ExtMgrDialog::acceptLicense( const uno::Reference< deployment::XPackage > & uno::Sequence< OUString > ExtMgrDialog::raiseAddPicker() { - sfx2::FileDialogHelper aDlgHelper(ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE, FileDialogFlags::NONE, GetFrameWeld()); + sfx2::FileDialogHelper aDlgHelper(ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE, FileDialogFlags::NONE, m_xDialog.get()); const uno::Reference& xFilePicker = aDlgHelper.GetFilePicker(); xFilePicker->setTitle( m_sAddPackages ); @@ -757,43 +699,43 @@ uno::Sequence< OUString > ExtMgrDialog::raiseAddPicker() void ExtMgrDialog::enableOptionsButton( bool bEnable ) { - m_pOptionsBtn->Enable( bEnable ); + m_xOptionsBtn->set_sensitive( bEnable ); } void ExtMgrDialog::enableRemoveButton( bool bEnable ) { - m_pRemoveBtn->Enable( bEnable && !officecfg::Office::ExtensionManager::ExtensionSecurity::DisableExtensionRemoval::get()); + m_xRemoveBtn->set_sensitive( bEnable && !officecfg::Office::ExtensionManager::ExtensionSecurity::DisableExtensionRemoval::get()); if (officecfg::Office::ExtensionManager::ExtensionSecurity::DisableExtensionRemoval::get()) { - m_pRemoveBtn->SetQuickHelpText(DpResId(RID_STR_WARNING_REMOVE_EXTENSION_DISABLED)); + m_xRemoveBtn->set_tooltip_text(DpResId(RID_STR_WARNING_REMOVE_EXTENSION_DISABLED)); } else { - m_pRemoveBtn->SetQuickHelpText(""); + m_xRemoveBtn->set_tooltip_text(""); } } void ExtMgrDialog::enableEnableButton( bool bEnable ) { - m_pEnableBtn->Enable( bEnable ); + m_xEnableBtn->set_sensitive( bEnable ); } void ExtMgrDialog::enableButtontoEnable( bool bEnable ) { if (bEnable) { - m_pEnableBtn->SetText( DpResId( RID_CTX_ITEM_ENABLE ) ); - m_pEnableBtn->SetHelpId( HID_EXTENSION_MANAGER_LISTBOX_ENABLE ); + m_xEnableBtn->set_label( DpResId( RID_CTX_ITEM_ENABLE ) ); + m_xEnableBtn->set_help_id( HID_EXTENSION_MANAGER_LISTBOX_ENABLE ); } else { - m_pEnableBtn->SetText( DpResId( RID_CTX_ITEM_DISABLE ) ); - m_pEnableBtn->SetHelpId( HID_EXTENSION_MANAGER_LISTBOX_DISABLE ); + m_xEnableBtn->set_label( DpResId( RID_CTX_ITEM_DISABLE ) ); + m_xEnableBtn->set_help_id( HID_EXTENSION_MANAGER_LISTBOX_DISABLE ); } } -IMPL_LINK_NOARG(ExtMgrDialog, HandleCancelBtn, Button*, void) +IMPL_LINK_NOARG(ExtMgrDialog, HandleCancelBtn, weld::Button&, void) { if ( m_xAbortChannel.is() ) { @@ -808,11 +750,28 @@ IMPL_LINK_NOARG(ExtMgrDialog, HandleCancelBtn, Button*, void) } } -IMPL_LINK_NOARG(ExtMgrDialog, HandleCloseBtn, Button*, void) +IMPL_LINK_NOARG(ExtMgrDialog, HandleCloseBtn, weld::Button&, void) { - Close(); -} + bool bCallClose = true; + //only suggest restart if modified and this is the first close attempt + if (!m_bClosed && m_pManager->isModified()) + { + m_pManager->clearModified(); + + //only suggest restart if we're actually running, e.g. not from standalone unopkg gui + if (dp_misc::office_is_running()) + { + SolarMutexGuard aGuard; + bCallClose = !::svtools::executeRestartDialog(comphelper::getProcessComponentContext(), + m_xDialog.get(), + svtools::RESTART_REASON_EXTENSION_INSTALL); + } + } + + if (bCallClose) + m_xDialog->response(RET_CANCEL); +} IMPL_LINK( ExtMgrDialog, startProgress, void*, _bLockInterface, void ) { @@ -824,8 +783,8 @@ IMPL_LINK( ExtMgrDialog, startProgress, void*, _bLockInterface, void ) if ( m_bStopProgress ) { - if ( m_pProgressBar->IsVisible() ) - m_pProgressBar->SetValue( 100 ); + if ( m_xProgressBar->get_visible() ) + m_xProgressBar->set_percentage( 100 ); m_xAbortChannel.clear(); SAL_INFO( "desktop.deployment", " startProgress handler: stop" ); @@ -835,19 +794,19 @@ IMPL_LINK( ExtMgrDialog, startProgress, void*, _bLockInterface, void ) SAL_INFO( "desktop.deployment", " startProgress handler: start" ); } - m_pCancelBtn->Enable( bLockInterface ); - m_pAddBtn->Enable( !bLockInterface && !officecfg::Office::ExtensionManager::ExtensionSecurity::DisableExtensionInstallation::get()); + m_xCancelBtn->set_sensitive( bLockInterface ); + m_xAddBtn->set_sensitive( !bLockInterface && !officecfg::Office::ExtensionManager::ExtensionSecurity::DisableExtensionInstallation::get()); if (officecfg::Office::ExtensionManager::ExtensionSecurity::DisableExtensionInstallation::get()) { - m_pAddBtn->SetQuickHelpText(DpResId(RID_STR_WARNING_INSTALL_EXTENSION_DISABLED)); + m_xAddBtn->set_tooltip_text(DpResId(RID_STR_WARNING_INSTALL_EXTENSION_DISABLED)); } else { - m_pAddBtn->SetQuickHelpText(""); + m_xAddBtn->set_tooltip_text(""); } - m_pUpdateBtn->Enable( !bLockInterface && m_pExtensionBox->getItemCount() ); - m_pExtensionBox->enableButtons( !bLockInterface ); + m_xUpdateBtn->set_sensitive( !bLockInterface && m_xExtensionBox->getItemCount() ); + m_xExtensionBox->enableButtons( !bLockInterface ); clearEventID(); } @@ -903,25 +862,25 @@ void ExtMgrDialog::updateProgress( const OUString &rText, void ExtMgrDialog::updatePackageInfo( const uno::Reference< deployment::XPackage > &xPackage ) { const SolarMutexGuard aGuard; - m_pExtensionBox->updateEntry( xPackage ); + m_xExtensionBox->updateEntry( xPackage ); } -IMPL_LINK_NOARG(ExtMgrDialog, HandleOptionsBtn, Button*, void) +IMPL_LINK_NOARG(ExtMgrDialog, HandleOptionsBtn, weld::Button&, void) { - const sal_Int32 nActive = m_pExtensionBox->getSelIndex(); + const sal_Int32 nActive = m_xExtensionBox->getSelIndex(); if ( nActive != ExtensionBox_Impl::ENTRY_NOTFOUND ) { SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create(); - OUString sExtensionId = m_pExtensionBox->GetEntryData( nActive )->m_xPackage->getIdentifier().Value; - ScopedVclPtr pDlg(pFact->CreateOptionsDialog( this, sExtensionId )); + OUString sExtensionId = m_xExtensionBox->GetEntryData( nActive )->m_xPackage->getIdentifier().Value; + ScopedVclPtr pDlg(pFact->CreateOptionsDialog(m_xDialog.get(), sExtensionId)); pDlg->Execute(); } } -IMPL_LINK_NOARG(ExtMgrDialog, HandleAddBtn, Button*, void) +IMPL_LINK_NOARG(ExtMgrDialog, HandleAddBtn, weld::Button&, void) { incBusy(); @@ -935,24 +894,24 @@ IMPL_LINK_NOARG(ExtMgrDialog, HandleAddBtn, Button*, void) decBusy(); } -IMPL_LINK_NOARG(ExtMgrDialog, HandleRemoveBtn, Button*, void) +IMPL_LINK_NOARG(ExtMgrDialog, HandleRemoveBtn, weld::Button&, void) { - const sal_Int32 nActive = m_pExtensionBox->getSelIndex(); + const sal_Int32 nActive = m_xExtensionBox->getSelIndex(); if ( nActive != ExtensionBox_Impl::ENTRY_NOTFOUND ) { - TEntry_Impl pEntry = m_pExtensionBox->GetEntryData( nActive ); + TEntry_Impl pEntry = m_xExtensionBox->GetEntryData( nActive ); removePackage( pEntry->m_xPackage ); } } -IMPL_LINK_NOARG(ExtMgrDialog, HandleEnableBtn, Button*, void) +IMPL_LINK_NOARG(ExtMgrDialog, HandleEnableBtn, weld::Button&, void) { - const sal_Int32 nActive = m_pExtensionBox->getSelIndex(); + const sal_Int32 nActive = m_xExtensionBox->getSelIndex(); if ( nActive != ExtensionBox_Impl::ENTRY_NOTFOUND ) { - TEntry_Impl pEntry = m_pExtensionBox->GetEntryData( nActive ); + TEntry_Impl pEntry = m_xExtensionBox->GetEntryData( nActive ); if ( pEntry->m_bMissingLic ) acceptLicense( pEntry->m_xPackage ); @@ -964,7 +923,7 @@ IMPL_LINK_NOARG(ExtMgrDialog, HandleEnableBtn, Button*, void) } } -IMPL_LINK_NOARG(ExtMgrDialog, HandleExtTypeCbx, Button*, void) +IMPL_LINK_NOARG(ExtMgrDialog, HandleExtTypeCbx, weld::Button&, void) { // re-creates the list of packages with addEntry selecting the packages prepareChecking(); @@ -972,7 +931,7 @@ IMPL_LINK_NOARG(ExtMgrDialog, HandleExtTypeCbx, Button*, void) checkEntries(); } -IMPL_LINK_NOARG(ExtMgrDialog, HandleUpdateBtn, Button*, void) +IMPL_LINK_NOARG(ExtMgrDialog, HandleUpdateBtn, weld::Button&, void) { #if ENABLE_EXTENSION_UPDATE m_pManager->checkUpdates(); @@ -987,83 +946,43 @@ IMPL_LINK_NOARG(ExtMgrDialog, TimeOutHdl, Timer *, void) { m_bHasProgress = false; m_bStopProgress = false; - m_pProgressText->Hide(); - m_pProgressBar->Hide(); - m_pCancelBtn->Hide(); + m_xProgressText->hide(); + m_xProgressBar->hide(); + m_xCancelBtn->hide(); } else { if ( m_bProgressChanged ) { m_bProgressChanged = false; - m_pProgressText->SetText(m_sProgressText); + m_xProgressText->set_label(m_sProgressText); } if ( m_bStartProgress ) { m_bStartProgress = false; m_bHasProgress = true; - m_pProgressBar->Show(); - m_pProgressText->Show(); - m_pCancelBtn->Enable(); - m_pCancelBtn->Show(); + m_xProgressBar->show(); + m_xProgressText->show(); + m_xCancelBtn->set_sensitive(true); + m_xCancelBtn->show(); } - if ( m_pProgressBar->IsVisible() ) - m_pProgressBar->SetValue( static_cast(m_nProgress) ); + if ( m_xProgressBar->get_visible() ) + m_xProgressBar->set_percentage( static_cast(m_nProgress) ); } } - -// VCL::Window / Dialog - -bool ExtMgrDialog::EventNotify( NotifyEvent& rNEvt ) +void ExtMgrDialog::Close() { - bool bHandled = false; - - if ( rNEvt.GetType() == MouseNotifyEvent::KEYINPUT ) - { - const KeyEvent* pKEvt = rNEvt.GetKeyEvent(); - vcl::KeyCode aKeyCode = pKEvt->GetKeyCode(); - - if ( aKeyCode.GetGroup() == KEYGROUP_CURSOR ) - bHandled = m_pExtensionBox->EventNotify(rNEvt); - } -// VclEventId::WindowClose - if ( !bHandled ) - return ModelessDialog::EventNotify(rNEvt); - else - return true; -} - -IMPL_STATIC_LINK(ExtMgrDialog, Restart, void*, pParent, void) -{ - SolarMutexGuard aGuard; - ::svtools::executeRestartDialog(comphelper::getProcessComponentContext(), - pParent ? static_cast(pParent)->GetFrameWeld() : nullptr, - svtools::RESTART_REASON_EXTENSION_INSTALL); -} - -bool ExtMgrDialog::Close() -{ - bool bRet = ModelessDialog::Close(); m_pManager->terminateDialog(); - //only suggest restart if modified and this is the first close attempt - if (!m_bClosed && m_pManager->isModified()) - { - m_pManager->clearModified(); - //only suggest restart if we're actually running, e.g. not from standalone unopkg gui - if (dp_misc::office_is_running()) - Application::PostUserEvent(LINK(nullptr, ExtMgrDialog, Restart), m_xRestartParent); - } m_bClosed = true; - return bRet; } //UpdateRequiredDialog -UpdateRequiredDialog::UpdateRequiredDialog(vcl::Window *pParent, TheExtensionManager *pManager) - : ModalDialog(pParent, "UpdateRequiredDialog", "desktop/ui/updaterequireddialog.ui") - , DialogHelper(pManager->getContext(), static_cast(this)) +UpdateRequiredDialog::UpdateRequiredDialog(weld::Window *pParent, TheExtensionManager *pManager) + : GenericDialogController(pParent, "desktop/ui/updaterequireddialog.ui", "UpdateRequiredDialog") + , DialogHelper(pManager->getContext(), m_xDialog.get()) , m_sCloseText(DpResId(RID_STR_CLOSE_BTN)) , m_bHasProgress(false) , m_bProgressChanged(false) @@ -1072,28 +991,29 @@ UpdateRequiredDialog::UpdateRequiredDialog(vcl::Window *pParent, TheExtensionMan , m_bHasLockedEntries(false) , m_nProgress(0) , m_pManager(pManager) + , m_xExtensionBox(new ExtensionBox_Impl(m_xBuilder->weld_scrolled_window("scroll"))) + , m_xExtensionBoxWnd(new weld::CustomWeld(*m_xBuilder, "extensions", *m_xExtensionBox)) + , m_xUpdateNeeded(m_xBuilder->weld_label("updatelabel")) + , m_xUpdateBtn(m_xBuilder->weld_button("ok")) + , m_xCloseBtn(m_xBuilder->weld_button("disable")) + , m_xCancelBtn(m_xBuilder->weld_button("cancel")) + , m_xProgressText(m_xBuilder->weld_label("progresslabel")) + , m_xProgressBar(m_xBuilder->weld_progress_bar("progress")) { - get(m_pExtensionBox, "extensions"); - m_pExtensionBox->setExtensionManager(pManager); - get(m_pUpdateNeeded, "updatelabel"); - get(m_pUpdateBtn, "check"); - get(m_pCloseBtn, "disable"); - get(m_pCancelBtn, "cancel"); - get(m_pProgressText, "progresslabel"); - get(m_pProgressBar, "progress"); + m_xExtensionBox->setExtensionManager(pManager); - m_pUpdateBtn->SetClickHdl( LINK( this, UpdateRequiredDialog, HandleUpdateBtn ) ); - m_pCloseBtn->SetClickHdl( LINK( this, UpdateRequiredDialog, HandleCloseBtn ) ); - m_pCancelBtn->SetClickHdl( LINK( this, UpdateRequiredDialog, HandleCancelBtn ) ); + m_xUpdateBtn->connect_clicked( LINK( this, UpdateRequiredDialog, HandleUpdateBtn ) ); + m_xCloseBtn->connect_clicked( LINK( this, UpdateRequiredDialog, HandleCloseBtn ) ); + m_xCancelBtn->connect_clicked( LINK( this, UpdateRequiredDialog, HandleCancelBtn ) ); - OUString aText = m_pUpdateNeeded->GetText(); + OUString aText = m_xUpdateNeeded->get_label(); aText = aText.replaceAll( "%PRODUCTNAME", utl::ConfigManager::getProductName()); - m_pUpdateNeeded->SetText(aText); + m_xUpdateNeeded->set_label(aText); - m_pProgressBar->Hide(); - m_pUpdateBtn->Enable( false ); - m_pCloseBtn->GrabFocus(); + m_xProgressBar->hide(); + m_xUpdateBtn->set_sensitive( false ); + m_xCloseBtn->grab_focus(); m_aIdle.SetPriority( TaskPriority::LOWEST ); m_aIdle.SetDebugName( "UpdateRequiredDialog m_aIdle TimeOutHdl" ); @@ -1101,21 +1021,8 @@ UpdateRequiredDialog::UpdateRequiredDialog(vcl::Window *pParent, TheExtensionMan } UpdateRequiredDialog::~UpdateRequiredDialog() -{ - disposeOnce(); -} - -void UpdateRequiredDialog::dispose() { m_aIdle.Stop(); - m_pExtensionBox.clear(); - m_pUpdateNeeded.clear(); - m_pUpdateBtn.clear(); - m_pCloseBtn.clear(); - m_pCancelBtn.clear(); - m_pProgressText.clear(); - m_pProgressBar.clear(); - ModalDialog::dispose(); } void UpdateRequiredDialog::addPackageToList( const uno::Reference< deployment::XPackage > &xPackage, @@ -1126,32 +1033,32 @@ void UpdateRequiredDialog::addPackageToList( const uno::Reference< deployment::X { m_bHasLockedEntries |= m_pManager->isReadOnly( xPackage ); const SolarMutexGuard aGuard; - m_pUpdateBtn->Enable(); - m_pExtensionBox->addEntry( xPackage ); + m_xUpdateBtn->set_sensitive(true); + m_xExtensionBox->addEntry( xPackage ); } } void UpdateRequiredDialog::prepareChecking() { - m_pExtensionBox->prepareChecking(); + m_xExtensionBox->prepareChecking(); } void UpdateRequiredDialog::checkEntries() { const SolarMutexGuard guard; - m_pExtensionBox->checkEntries(); + m_xExtensionBox->checkEntries(); if ( ! hasActiveEntries() ) { - m_pCloseBtn->SetText( m_sCloseText ); - m_pCloseBtn->GrabFocus(); + m_xCloseBtn->set_label( m_sCloseText ); + m_xCloseBtn->grab_focus(); } } -IMPL_LINK_NOARG(UpdateRequiredDialog, HandleCancelBtn, Button*, void) +IMPL_LINK_NOARG(UpdateRequiredDialog, HandleCancelBtn, weld::Button&, void) { if ( m_xAbortChannel.is() ) { @@ -1177,8 +1084,8 @@ IMPL_LINK( UpdateRequiredDialog, startProgress, void*, _bLockInterface, void ) if ( m_bStopProgress ) { - if ( m_pProgressBar->IsVisible() ) - m_pProgressBar->SetValue( 100 ); + if ( m_xProgressBar->get_visible() ) + m_xProgressBar->set_percentage( 100 ); m_xAbortChannel.clear(); SAL_INFO( "desktop.deployment", " startProgress handler: stop" ); } @@ -1187,8 +1094,8 @@ IMPL_LINK( UpdateRequiredDialog, startProgress, void*, _bLockInterface, void ) SAL_INFO( "desktop.deployment", " startProgress handler: start" ); } - m_pCancelBtn->Enable( bLockInterface ); - m_pUpdateBtn->Enable( false ); + m_xCancelBtn->set_sensitive( bLockInterface ); + m_xUpdateBtn->set_sensitive( false ); clearEventID(); } @@ -1247,28 +1154,28 @@ void UpdateRequiredDialog::updatePackageInfo( const uno::Reference< deployment:: // of the 'disable all' button const SolarMutexGuard aGuard; if ( isEnabled( xPackage ) && checkDependencies( xPackage ) ) - m_pExtensionBox->removeEntry( xPackage ); + m_xExtensionBox->removeEntry( xPackage ); else - m_pExtensionBox->updateEntry( xPackage ); + m_xExtensionBox->updateEntry( xPackage ); if ( ! hasActiveEntries() ) { - m_pCloseBtn->SetText( m_sCloseText ); - m_pCloseBtn->GrabFocus(); + m_xCloseBtn->set_label( m_sCloseText ); + m_xCloseBtn->grab_focus(); } } -IMPL_LINK_NOARG(UpdateRequiredDialog, HandleUpdateBtn, Button*, void) +IMPL_LINK_NOARG(UpdateRequiredDialog, HandleUpdateBtn, weld::Button&, void) { ::osl::ClearableMutexGuard aGuard( m_aMutex ); std::vector< uno::Reference< deployment::XPackage > > vUpdateEntries; - sal_Int32 nCount = m_pExtensionBox->GetEntryCount(); + sal_Int32 nCount = m_xExtensionBox->GetEntryCount(); for ( sal_Int32 i = 0; i < nCount; ++i ) { - TEntry_Impl pEntry = m_pExtensionBox->GetEntryData( i ); + TEntry_Impl pEntry = m_xExtensionBox->GetEntryData( i ); vUpdateEntries.push_back( pEntry->m_xPackage ); } @@ -1278,18 +1185,18 @@ IMPL_LINK_NOARG(UpdateRequiredDialog, HandleUpdateBtn, Button*, void) } -IMPL_LINK_NOARG(UpdateRequiredDialog, HandleCloseBtn, Button*, void) +IMPL_LINK_NOARG(UpdateRequiredDialog, HandleCloseBtn, weld::Button&, void) { ::osl::MutexGuard aGuard( m_aMutex ); if ( !isBusy() ) { if ( m_bHasLockedEntries ) - EndDialog( -1 ); + m_xDialog->response(-1); else if ( hasActiveEntries() ) disableAllEntries(); else - EndDialog(); + m_xDialog->response(RET_CANCEL); } } @@ -1300,35 +1207,35 @@ IMPL_LINK_NOARG(UpdateRequiredDialog, TimeOutHdl, Timer *, void) { m_bHasProgress = false; m_bStopProgress = false; - m_pProgressText->Hide(); - m_pProgressBar->Hide(); - m_pCancelBtn->Hide(); + m_xProgressText->hide(); + m_xProgressBar->hide(); + m_xCancelBtn->hide(); } else { if ( m_bProgressChanged ) { m_bProgressChanged = false; - m_pProgressText->SetText( m_sProgressText ); + m_xProgressText->set_label( m_sProgressText ); } if ( m_bStartProgress ) { m_bStartProgress = false; m_bHasProgress = true; - m_pProgressBar->Show(); - m_pProgressText->Show(); - m_pCancelBtn->Enable(); - m_pCancelBtn->Show(); + m_xProgressBar->show(); + m_xProgressText->show(); + m_xCancelBtn->set_sensitive(true); + m_xCancelBtn->show(); } - if ( m_pProgressBar->IsVisible() ) - m_pProgressBar->SetValue( static_cast(m_nProgress) ); + if (m_xProgressBar->get_visible()) + m_xProgressBar->set_percentage(m_nProgress); } } // VCL::Dialog -short UpdateRequiredDialog::Execute() +short UpdateRequiredDialog::run() { //ToDo //I believe m_bHasLockedEntries was used to prevent showing extensions which cannot @@ -1340,35 +1247,15 @@ short UpdateRequiredDialog::Execute() if ( m_bHasLockedEntries ) { // Set other text, disable update btn, remove not shared entries from list; - m_pUpdateNeeded->SetText( DpResId( RID_STR_NO_ADMIN_PRIVILEGE ) ); - m_pCloseBtn->SetText( DpResId( RID_STR_EXIT_BTN ) ); - m_pUpdateBtn->Enable( false ); - m_pExtensionBox->RemoveUnlocked(); - Resize(); + m_xUpdateNeeded->set_label( DpResId( RID_STR_NO_ADMIN_PRIVILEGE ) ); + m_xCloseBtn->set_label( DpResId( RID_STR_EXIT_BTN ) ); + m_xUpdateBtn->set_sensitive( false ); + m_xExtensionBox->RemoveUnlocked(); } - return Dialog::Execute(); + return GenericDialogController::run(); } -// VCL::Dialog -bool UpdateRequiredDialog::Close() -{ - ::osl::MutexGuard aGuard( m_aMutex ); - - if ( !isBusy() ) - { - if ( m_bHasLockedEntries ) - EndDialog( -1 ); - else if ( hasActiveEntries() ) - disableAllEntries(); - else - EndDialog(); - } - - return false; -} - - // Check dependencies of all packages bool UpdateRequiredDialog::isEnabled( const uno::Reference< deployment::XPackage > &xPackage ) @@ -1415,10 +1302,10 @@ bool UpdateRequiredDialog::hasActiveEntries() ::osl::MutexGuard aGuard( m_aMutex ); bool bRet = false; - long nCount = m_pExtensionBox->GetEntryCount(); + long nCount = m_xExtensionBox->GetEntryCount(); for ( long nIndex = 0; nIndex < nCount; nIndex++ ) { - TEntry_Impl pEntry = m_pExtensionBox->GetEntryData( nIndex ); + TEntry_Impl pEntry = m_xExtensionBox->GetEntryData( nIndex ); if ( isEnabled(pEntry->m_xPackage) && !checkDependencies( pEntry->m_xPackage ) ) { @@ -1437,17 +1324,17 @@ void UpdateRequiredDialog::disableAllEntries() incBusy(); - long nCount = m_pExtensionBox->GetEntryCount(); + long nCount = m_xExtensionBox->GetEntryCount(); for ( long nIndex = 0; nIndex < nCount; nIndex++ ) { - TEntry_Impl pEntry = m_pExtensionBox->GetEntryData( nIndex ); + TEntry_Impl pEntry = m_xExtensionBox->GetEntryData( nIndex ); m_pManager->getCmdQueue()->enableExtension( pEntry->m_xPackage, false ); } decBusy(); if ( ! hasActiveEntries() ) - m_pCloseBtn->SetText( m_sCloseText ); + m_xCloseBtn->set_label( m_sCloseText ); } // ShowLicenseDialog diff --git a/desktop/source/deployment/gui/dp_gui_dialog2.hxx b/desktop/source/deployment/gui/dp_gui_dialog2.hxx index afb375fb16cd..84a755677843 100644 --- a/desktop/source/deployment/gui/dp_gui_dialog2.hxx +++ b/desktop/source/deployment/gui/dp_gui_dialog2.hxx @@ -22,14 +22,10 @@ #include -#include -#include -#include -#include -#include #include #include #include +#include #include #include @@ -60,18 +56,17 @@ class TheExtensionManager; class DialogHelper { css::uno::Reference< css::uno::XComponentContext > m_xContext; - VclPtr m_xVCLWindow; + weld::Window* m_pWindow; ImplSVEvent * m_nEventID; TopLevelWindowLocker m_aBusy; public: - DialogHelper( const css::uno::Reference< css::uno::XComponentContext > &, - Dialog *pWindow ); + DialogHelper(const css::uno::Reference< css::uno::XComponentContext > &, + weld::Window* pWindow); virtual ~DialogHelper(); void openWebBrowser(const OUString& rURL, const OUString& rTitle); - Dialog* getWindow() const { return m_xVCLWindow; }; - weld::Window* getFrameWeld() const { return m_xVCLWindow ? m_xVCLWindow->GetFrameWeld() : nullptr; } + weld::Window* getFrameWeld() const { return m_pWindow; } void PostUserEvent( const Link& rLink, void* pCaller ); void clearEventID() { m_nEventID = nullptr; } @@ -93,31 +88,16 @@ public: const char* pResID, bool &bHadWarning ); - void incBusy() { m_aBusy.incBusy(m_xVCLWindow->GetFrameWeld()); } + void incBusy() { m_aBusy.incBusy(m_pWindow); } void decBusy() { m_aBusy.decBusy(); } bool isBusy() const { return m_aBusy.isBusy(); } bool installExtensionWarn(const OUString &rExtensionURL); bool installForAllUsers(bool &bInstallForAll); }; -class ExtMgrDialog : public ModelessDialog, - public DialogHelper +class ExtMgrDialog : public weld::GenericDialogController + , public DialogHelper { - VclPtr m_xRestartParent; - VclPtr m_pExtensionBox; - VclPtr m_pOptionsBtn; - VclPtr m_pAddBtn; - VclPtr m_pRemoveBtn; - VclPtr m_pEnableBtn; - VclPtr m_pUpdateBtn; - VclPtr m_pCloseBtn; - VclPtr m_pBundledCbx; - VclPtr m_pSharedCbx; - VclPtr m_pUserCbx; - VclPtr m_pGetExtensions; - VclPtr m_pProgressText; - VclPtr m_pProgressBar; - VclPtr m_pCancelBtn; const OUString m_sAddPackages; OUString m_sProgressText; OUString m_sLastFolderURL; @@ -136,27 +116,38 @@ class ExtMgrDialog : public ModelessDialog, css::uno::Reference< css::task::XAbortChannel > m_xAbortChannel; + std::unique_ptr m_xExtensionBox; + std::unique_ptr m_xExtensionBoxWnd; + std::unique_ptr m_xOptionsBtn; + std::unique_ptr m_xAddBtn; + std::unique_ptr m_xRemoveBtn; + std::unique_ptr m_xEnableBtn; + std::unique_ptr m_xUpdateBtn; + std::unique_ptr m_xCloseBtn; + std::unique_ptr m_xBundledCbx; + std::unique_ptr m_xSharedCbx; + std::unique_ptr m_xUserCbx; + std::unique_ptr m_xGetExtensions; + std::unique_ptr m_xProgressText; + std::unique_ptr m_xProgressBar; + std::unique_ptr m_xCancelBtn; + bool removeExtensionWarn(const OUString &rExtensionTitle); - DECL_LINK( HandleOptionsBtn, Button*, void ); - DECL_LINK( HandleAddBtn, Button*, void ); - DECL_LINK( HandleRemoveBtn, Button*, void ); - DECL_LINK( HandleEnableBtn, Button*, void ); - DECL_LINK( HandleUpdateBtn, Button*, void ); - DECL_LINK( HandleCancelBtn, Button*, void ); - DECL_LINK( HandleCloseBtn, Button*, void ); - DECL_LINK( HandleExtTypeCbx, Button*, void ); + DECL_LINK( HandleOptionsBtn, weld::Button&, void ); + DECL_LINK( HandleAddBtn, weld::Button&, void ); + DECL_LINK( HandleRemoveBtn, weld::Button&, void ); + DECL_LINK( HandleEnableBtn, weld::Button&, void ); + DECL_LINK( HandleUpdateBtn, weld::Button&, void ); + DECL_LINK( HandleCancelBtn, weld::Button&, void ); + DECL_LINK( HandleCloseBtn, weld::Button&, void ); + DECL_LINK( HandleExtTypeCbx, weld::Button&, void ); DECL_LINK( TimeOutHdl, Timer *, void ); DECL_LINK( startProgress, void *, void ); - DECL_STATIC_LINK( ExtMgrDialog, Restart, void *, void ); public: - ExtMgrDialog( vcl::Window * pParent, TheExtensionManager *pManager, Dialog::InitFlag eFlag = Dialog::InitFlag::Default ); - virtual ~ExtMgrDialog() override; - virtual void dispose() override; - - virtual bool EventNotify( NotifyEvent& rNEvt ) override; - virtual bool Close() override; + ExtMgrDialog(weld::Window * pParent, TheExtensionManager *pManager); + virtual ~ExtMgrDialog() override; virtual void showProgress( bool bStart ) override; virtual void updateProgress( const OUString &rText, @@ -174,6 +165,8 @@ public: void updatePackage(const css::uno::Reference< css::deployment::XPackage > &xPackage ); bool acceptLicense(const css::uno::Reference< css::deployment::XPackage > &xPackage ); + void Close(); + TheExtensionManager* getExtensionManager() const { return m_pManager; } virtual void prepareChecking() override; @@ -192,16 +185,9 @@ public: }; -class UpdateRequiredDialog : public ModalDialog, - public DialogHelper +class UpdateRequiredDialog : public weld::GenericDialogController + , public DialogHelper { - VclPtr m_pExtensionBox; - VclPtr m_pUpdateNeeded; - VclPtr m_pUpdateBtn; - VclPtr m_pCloseBtn; - VclPtr m_pCancelBtn; - VclPtr m_pProgressText; - VclPtr m_pProgressBar; const OUString m_sCloseText; OUString m_sProgressText; ::osl::Mutex m_aMutex; @@ -216,9 +202,18 @@ class UpdateRequiredDialog : public ModalDialog, css::uno::Reference< css::task::XAbortChannel > m_xAbortChannel; - DECL_LINK( HandleUpdateBtn, Button*, void ); - DECL_LINK( HandleCloseBtn, Button*, void ); - DECL_LINK( HandleCancelBtn, Button*, void ); + std::unique_ptr m_xExtensionBox; + std::unique_ptr m_xExtensionBoxWnd; + std::unique_ptr m_xUpdateNeeded; + std::unique_ptr m_xUpdateBtn; + std::unique_ptr m_xCloseBtn; + std::unique_ptr m_xCancelBtn; + std::unique_ptr m_xProgressText; + std::unique_ptr m_xProgressBar; + + DECL_LINK( HandleUpdateBtn, weld::Button&, void ); + DECL_LINK( HandleCloseBtn, weld::Button&, void ); + DECL_LINK( HandleCancelBtn, weld::Button&, void ); DECL_LINK( TimeOutHdl, Timer *, void ); DECL_LINK( startProgress, void *, void ); @@ -228,12 +223,10 @@ class UpdateRequiredDialog : public ModalDialog, void disableAllEntries(); public: - UpdateRequiredDialog( vcl::Window * pParent, TheExtensionManager *pManager ); + UpdateRequiredDialog(weld::Window * pParent, TheExtensionManager *pManager); virtual ~UpdateRequiredDialog() override; - virtual void dispose() override; - virtual short Execute() override; - virtual bool Close() override; + virtual short run() override; virtual void showProgress( bool bStart ) override; virtual void updateProgress( const OUString &rText, diff --git a/desktop/source/deployment/gui/dp_gui_extensioncmdqueue.cxx b/desktop/source/deployment/gui/dp_gui_extensioncmdqueue.cxx index 9d60a0a607db..9fada8ce9db3 100644 --- a/desktop/source/deployment/gui/dp_gui_extensioncmdqueue.cxx +++ b/desktop/source/deployment/gui/dp_gui_extensioncmdqueue.cxx @@ -375,8 +375,12 @@ void ProgressCmdEnv::handle( uno::Reference< task::XInteractionRequest > const & } { SolarMutexGuard guard; - DependencyDialog aDlg(m_pDialogHelper ? m_pDialogHelper->getFrameWeld() : nullptr, deps); + if (m_pDialogHelper) + m_pDialogHelper->incBusy(); + DependencyDialog aDlg(activeDialog(), deps); short n = aDlg.run(); + if (m_pDialogHelper) + m_pDialogHelper->decBusy(); // Distinguish between closing the dialog and programmatically // canceling the dialog (headless VCL): approve = n == RET_OK @@ -386,11 +390,17 @@ void ProgressCmdEnv::handle( uno::Reference< task::XInteractionRequest > const & else if (request >>= licExc) { SolarMutexGuard guard; + + weld::Window *pTopLevel = activeDialog(); + if (m_pDialogHelper) + m_pDialogHelper->incBusy(); uno::Reference< ui::dialogs::XExecutableDialog > xDialog( deployment::ui::LicenseDialog::create( - m_xContext, VCLUnoHelper::GetInterface( m_pDialogHelper? m_pDialogHelper->getWindow() : nullptr ), + m_xContext, pTopLevel ? pTopLevel->GetXWindow() : nullptr, licExc.ExtensionName, licExc.Text ) ); sal_Int16 res = xDialog->execute(); + if (m_pDialogHelper) + m_pDialogHelper->decBusy(); if ( res == ui::dialogs::ExecutableDialogResults::CANCEL ) abort = true; else if ( res == ui::dialogs::ExecutableDialogResults::OK ) @@ -421,7 +431,11 @@ void ProgressCmdEnv::handle( uno::Reference< task::XInteractionRequest > const & verExc.Deployed->getDisplayName(); { SolarMutexGuard guard; - std::unique_ptr xBox(Application::CreateMessageDialog(m_pDialogHelper ? m_pDialogHelper->getFrameWeld() : nullptr, + + if (m_pDialogHelper) + m_pDialogHelper->incBusy(); + + std::unique_ptr xBox(Application::CreateMessageDialog(activeDialog(), VclMessageType::Warning, VclButtonsType::OkCancel, DpResId(id))); OUString s; if (bEqualNames) @@ -449,6 +463,8 @@ void ProgressCmdEnv::handle( uno::Reference< task::XInteractionRequest > const & s = s.replaceAll("$DEPLOYED", getVersion(verExc.Deployed)); xBox->set_primary_text(s); approve = xBox->run() == RET_OK; + if (m_pDialogHelper) + m_pDialogHelper->decBusy(); abort = !approve; } } @@ -476,9 +492,13 @@ void ProgressCmdEnv::handle( uno::Reference< task::XInteractionRequest > const & SolarMutexGuard guard; OUString sMsg(DpResId(RID_STR_UNSUPPORTED_PLATFORM)); sMsg = sMsg.replaceAll("%Name", platExc.package->getDisplayName()); - std::unique_ptr xBox(Application::CreateMessageDialog(m_pDialogHelper ? m_pDialogHelper->getFrameWeld() : nullptr, + if (m_pDialogHelper) + m_pDialogHelper->incBusy(); + std::unique_ptr xBox(Application::CreateMessageDialog(activeDialog(), VclMessageType::Warning, VclButtonsType::Ok, sMsg)); xBox->run(); + if (m_pDialogHelper) + m_pDialogHelper->decBusy(); approve = true; } @@ -540,9 +560,13 @@ void ProgressCmdEnv::update_( uno::Any const & rStatus ) text = ::comphelper::anyToString( rStatus ); // fallback const SolarMutexGuard aGuard; - std::unique_ptr xBox(Application::CreateMessageDialog(m_pDialogHelper ? m_pDialogHelper->getFrameWeld() : nullptr, + if (m_pDialogHelper) + m_pDialogHelper->incBusy(); + std::unique_ptr xBox(Application::CreateMessageDialog(activeDialog(), VclMessageType::Warning, VclButtonsType::Ok, text)); xBox->run(); + if (m_pDialogHelper) + m_pDialogHelper->decBusy(); } ++m_nCurrentProgress; updateProgress(); @@ -783,12 +807,17 @@ void ExtensionCmdQueue::Thread::execute() msg = ::comphelper::anyToString(exc); const SolarMutexGuard guard; + if (m_pDialogHelper) + m_pDialogHelper->incBusy(); + std::unique_ptr xBox(Application::CreateMessageDialog(currentCmdEnv->activeDialog(), VclMessageType::Warning, VclButtonsType::Ok, msg)); if (m_pDialogHelper) - xBox->set_title(m_pDialogHelper->getWindow()->GetText()); + xBox->set_title(m_pDialogHelper->getFrameWeld()->get_title()); xBox->run(); - //Continue with installation of the remaining extensions + if (m_pDialogHelper) + m_pDialogHelper->decBusy(); + //Continue with installation of the remaining extensions } { osl::MutexGuard aGuard( m_mutex ); @@ -895,12 +924,19 @@ void ExtensionCmdQueue::Thread::_checkForUpdates( { const SolarMutexGuard guard; + if (m_pDialogHelper) + m_pDialogHelper->incBusy(); + std::vector< UpdateData > vData; - UpdateDialog aUpdateDialog(m_xContext, m_pDialogHelper? m_pDialogHelper->getFrameWeld() : nullptr, vExtensionList, &vData); + UpdateDialog aUpdateDialog(m_xContext, m_pDialogHelper ? m_pDialogHelper->getFrameWeld() : nullptr, vExtensionList, &vData); aUpdateDialog.notifyMenubar( true, false ); // prepare the checking, if there updates to be notified via menu bar icon - if (aUpdateDialog.run() == RET_OK && !vData.empty()) + bool bOk = aUpdateDialog.run() == RET_OK; + if (m_pDialogHelper) + m_pDialogHelper->decBusy(); + + if (bOk && !vData.empty()) { // If there is at least one directly downloadable extension then we // open the install dialog. @@ -915,8 +951,12 @@ void ExtensionCmdQueue::Thread::_checkForUpdates( short nDialogResult = RET_OK; if ( !dataDownload.empty() ) { - UpdateInstallDialog aDlg(m_pDialogHelper? m_pDialogHelper->getFrameWeld() : nullptr, dataDownload, m_xContext); + if (m_pDialogHelper) + m_pDialogHelper->incBusy(); + UpdateInstallDialog aDlg(m_pDialogHelper ? m_pDialogHelper->getFrameWeld() : nullptr, dataDownload, m_xContext); nDialogResult = aDlg.run(); + if (m_pDialogHelper) + m_pDialogHelper->decBusy(); aUpdateDialog.notifyMenubar( false, true ); // Check, if there are still pending updates to be notified via menu bar icon } else @@ -928,7 +968,7 @@ void ExtensionCmdQueue::Thread::_checkForUpdates( for (auto const& data : vData) { if ( m_pDialogHelper && ( !data.sWebsiteURL.isEmpty() ) ) - m_pDialogHelper->openWebBrowser( data.sWebsiteURL, m_pDialogHelper->getWindow()->GetText() ); + m_pDialogHelper->openWebBrowser( data.sWebsiteURL, m_pDialogHelper->getFrameWeld()->get_title() ); } } } diff --git a/desktop/source/deployment/gui/dp_gui_extlistbox.cxx b/desktop/source/deployment/gui/dp_gui_extlistbox.cxx index 9d987b18bfce..e0691e6430ee 100644 --- a/desktop/source/deployment/gui/dp_gui_extlistbox.cxx +++ b/desktop/source/deployment/gui/dp_gui_extlistbox.cxx @@ -33,11 +33,14 @@ #include #include #include +#include +#include +#include #include #include #include +#include #include -#include #include #include @@ -81,7 +84,6 @@ Entry_Impl::Entry_Impl( const uno::Reference< deployment::XPackage > &xPackage, m_bHasButtons( false ), m_bMissingLic( false ), m_eState( eState ), - m_pPublisher( nullptr ), m_xPackage( xPackage ) { try @@ -175,37 +177,32 @@ ExtensionRemovedListener::~ExtensionRemovedListener() // ExtensionBox_Impl -ExtensionBox_Impl::ExtensionBox_Impl(vcl::Window* pParent) : - Control( pParent, WB_BORDER | WB_TABSTOP ), - m_bHasScrollBar( false ), - m_bHasActive( false ), - m_bNeedsRecalc( true ), - m_bInCheckMode( false ), - m_bAdjustActive( false ), - m_bInDelete( false ), - m_nActive( 0 ), - m_nTopIndex( 0 ), - m_nActiveHeight( 0 ), - m_aSharedImage(StockImage::Yes, RID_BMP_SHARED), - m_aLockedImage(StockImage::Yes, RID_BMP_LOCKED), - m_aWarningImage(StockImage::Yes, RID_BMP_WARNING), - m_aDefaultImage(StockImage::Yes, RID_BMP_EXTENSION), - m_pScrollBar( nullptr ), - m_pManager( nullptr ) +ExtensionBox_Impl::ExtensionBox_Impl(std::unique_ptr xScroll) + : m_bHasScrollBar( false ) + , m_bHasActive( false ) + , m_bNeedsRecalc( true ) + , m_bInCheckMode( false ) + , m_bAdjustActive( false ) + , m_bInDelete( false ) + , m_nActive( 0 ) + , m_nTopIndex( 0 ) + , m_nActiveHeight( 0 ) + , m_aSharedImage(StockImage::Yes, RID_BMP_SHARED) + , m_aLockedImage(StockImage::Yes, RID_BMP_LOCKED) + , m_aWarningImage(StockImage::Yes, RID_BMP_WARNING) + , m_aDefaultImage(StockImage::Yes, RID_BMP_EXTENSION) + , m_pManager( nullptr ) + , m_xScrollBar(std::move(xScroll)) { - Init(); } void ExtensionBox_Impl::Init() { - m_pScrollBar = VclPtr::Create( this, WB_VERT ); - m_pScrollBar->SetScrollHdl( LINK( this, ExtensionBox_Impl, ScrollHdl ) ); - m_pScrollBar->EnableDrag(); + m_xScrollBar->set_user_managed_scrolling(); + m_xScrollBar->connect_vadjustment_changed( LINK( this, ExtensionBox_Impl, ScrollHdl ) ); - SetPaintTransparent( true ); - SetPosPixel( Point( RSC_SP_DLG_INNERBORDER_LEFT, RSC_SP_DLG_INNERBORDER_TOP ) ); - long nIconHeight = 2*TOP_OFFSET + SMALL_ICON_SIZE; - long nTitleHeight = 2*TOP_OFFSET + GetTextHeight(); + auto nIconHeight = 2*TOP_OFFSET + SMALL_ICON_SIZE; + auto nTitleHeight = 2*TOP_OFFSET + GetTextHeight(); if ( nIconHeight < nTitleHeight ) m_nStdHeight = nTitleHeight; else @@ -218,28 +215,14 @@ void ExtensionBox_Impl::Init() m_nActiveHeight = m_nStdHeight; - const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); - if( IsControlBackground() ) - SetBackground( GetControlBackground() ); - else - SetBackground( rStyleSettings.GetFieldColor() ); - m_xRemoveListener = new ExtensionRemovedListener( this ); m_pLocale.reset( new lang::Locale( Application::GetSettings().GetLanguageTag().getLocale() ) ); m_pCollator.reset( new CollatorWrapper( ::comphelper::getProcessComponentContext() ) ); m_pCollator->loadDefaultCollator( *m_pLocale, i18n::CollatorOptions::CollatorOptions_IGNORE_CASE ); - - Show(); } - ExtensionBox_Impl::~ExtensionBox_Impl() -{ - disposeOnce(); -} - -void ExtensionBox_Impl::dispose() { if ( ! m_bInDelete ) DeleteRemoved(); @@ -248,22 +231,17 @@ void ExtensionBox_Impl::dispose() for (auto const& entry : m_vEntries) { - entry->m_pPublisher.disposeAndClear(); entry->m_xPackage->removeEventListener( m_xRemoveListener.get() ); } m_vEntries.clear(); - m_pScrollBar.disposeAndClear(); - m_xRemoveListener.clear(); m_pLocale.reset(); m_pCollator.reset(); - Control::dispose(); } - sal_Int32 ExtensionBox_Impl::getItemCount() const { return static_cast< sal_Int32 >( m_vEntries.size() ); @@ -299,7 +277,7 @@ void ExtensionBox_Impl::CalcActiveHeight( const long nPos ) // calc description height Size aSize = GetOutputSizePixel(); if ( m_bHasScrollBar ) - aSize.AdjustWidth( -(m_pScrollBar->GetSizePixel().Width()) ); + aSize.AdjustWidth(-m_xScrollBar->get_vscroll_width()); aSize.AdjustWidth( -(ICON_OFFSET) ); aSize.setHeight( 10000 ); @@ -309,8 +287,8 @@ void ExtensionBox_Impl::CalcActiveHeight( const long nPos ) aText += "\n"; aText += m_vEntries[ nPos ]->m_sDescription; - tools::Rectangle aRect = GetTextRect( tools::Rectangle( Point(), aSize ), aText, - DrawTextFlags::MultiLine | DrawTextFlags::WordBreak ); + tools::Rectangle aRect = GetDrawingArea()->get_ref_device().GetTextRect(tools::Rectangle( Point(), aSize ), aText, + DrawTextFlags::MultiLine | DrawTextFlags::WordBreak); aTextHeight += aRect.GetHeight(); if ( aTextHeight < m_nStdHeight ) @@ -329,7 +307,7 @@ tools::Rectangle ExtensionBox_Impl::GetEntryRect( const long nPos ) const Size aSize( GetOutputSizePixel() ); if ( m_bHasScrollBar ) - aSize.AdjustWidth( -(m_pScrollBar->GetSizePixel().Width()) ); + aSize.AdjustWidth(-m_xScrollBar->get_vscroll_width()); if ( m_vEntries[ nPos ]->m_bActive ) aSize.setHeight( m_nActiveHeight ); @@ -350,15 +328,7 @@ void ExtensionBox_Impl::DeleteRemoved() m_bInDelete = true; - if ( ! m_vRemovedEntries.empty() ) - { - for (auto const& removedEntry : m_vRemovedEntries) - { - removedEntry->m_pPublisher.disposeAndClear(); - } - - m_vRemovedEntries.clear(); - } + m_vRemovedEntries.clear(); m_bInDelete = false; } @@ -424,8 +394,6 @@ void ExtensionBox_Impl::DrawRow(vcl::RenderContext& rRenderContext, const tools: rRenderContext.SetTextColor(rStyleSettings.GetHighlightTextColor()); else if ((rEntry->m_eState != REGISTERED) && (rEntry->m_eState != NOT_AVAILABLE)) rRenderContext.SetTextColor(rStyleSettings.GetDisableColor()); - else if (IsControlForeground()) - rRenderContext.SetTextColor(GetControlForeground()); else rRenderContext.SetTextColor(rStyleSettings.GetFieldTextColor()); @@ -437,11 +405,7 @@ void ExtensionBox_Impl::DrawRow(vcl::RenderContext& rRenderContext, const tools: } else { - if (IsControlBackground()) - rRenderContext.SetBackground(GetControlBackground()); - else - rRenderContext.SetBackground(rStyleSettings.GetFieldColor()); - + rRenderContext.SetBackground(rStyleSettings.GetFieldColor()); rRenderContext.SetTextFillColor(); rRenderContext.Erase(rRect); } @@ -463,37 +427,31 @@ void ExtensionBox_Impl::DrawRow(vcl::RenderContext& rRenderContext, const tools: rRenderContext.DrawImage(aPos, Size(ICON_WIDTH, ICON_HEIGHT), aImage); // Setup fonts + // expand the point size of the desired font to the equivalent pixel size + if (vcl::Window* pDefaultDevice = dynamic_cast(Application::GetDefaultDevice())) + pDefaultDevice->SetPointFont(rRenderContext, GetDrawingArea()->get_font()); vcl::Font aStdFont(rRenderContext.GetFont()); vcl::Font aBoldFont(aStdFont); aBoldFont.SetWeight(WEIGHT_BOLD); rRenderContext.SetFont(aBoldFont); - long aTextHeight = rRenderContext.GetTextHeight(); - - // Init publisher link here - if (!rEntry->m_pPublisher && !rEntry->m_sPublisher.isEmpty()) - { - rEntry->m_pPublisher = VclPtr::Create(this); - rEntry->m_pPublisher->SetBackground(); - rEntry->m_pPublisher->SetPaintTransparent(true); - rEntry->m_pPublisher->SetURL(rEntry->m_sPublisherURL); - rEntry->m_pPublisher->SetText(rEntry->m_sPublisher); - Size aSize = FixedText::CalcMinimumTextSize(rEntry->m_pPublisher); - rEntry->m_pPublisher->SetSizePixel(aSize); - } + auto aTextHeight = rRenderContext.GetTextHeight(); // Get max title width - long nMaxTitleWidth = rRect.GetWidth() - ICON_OFFSET; + auto nMaxTitleWidth = rRect.GetWidth() - ICON_OFFSET; nMaxTitleWidth -= (2 * SMALL_ICON_SIZE) + (4 * SPACE_BETWEEN); - if (rEntry->m_pPublisher) + rRenderContext.SetFont(aStdFont); + long nLinkWidth = 0; + if (!rEntry->m_sPublisher.isEmpty()) { - nMaxTitleWidth -= rEntry->m_pPublisher->GetSizePixel().Width() + (2 * SPACE_BETWEEN); + nLinkWidth = rRenderContext.GetTextWidth(rEntry->m_sPublisher); + nMaxTitleWidth -= nLinkWidth + (2 * SPACE_BETWEEN); } - long aVersionWidth = rRenderContext.GetTextWidth(rEntry->m_sVersion); long aTitleWidth = rRenderContext.GetTextWidth(rEntry->m_sTitle) + (aTextHeight / 3); aPos = rRect.TopLeft() + Point(ICON_OFFSET, TOP_OFFSET); + rRenderContext.SetFont(aBoldFont); if (aTitleWidth > nMaxTitleWidth - aVersionWidth) { aTitleWidth = nMaxTitleWidth - aVersionWidth - (aTextHeight / 3); @@ -541,18 +499,27 @@ void ExtensionBox_Impl::DrawRow(vcl::RenderContext& rRenderContext, const tools: { //replace LF to space, so words do not stick together in one line view sDescription = sDescription.replace(0x000A, ' '); - const long nWidth = GetTextWidth( sDescription ); + const long nWidth = rRenderContext.GetTextWidth( sDescription ); if (nWidth > rRect.GetWidth() - aPos.X()) sDescription = rRenderContext.GetEllipsisString(sDescription, rRect.GetWidth() - aPos.X()); rRenderContext.DrawText(aPos, sDescription); } // Draw publisher link - if (rEntry->m_pPublisher) + if (!rEntry->m_sPublisher.isEmpty()) { - rEntry->m_pPublisher->Show(); aPos = rRect.TopLeft() + Point( ICON_OFFSET + nMaxTitleWidth + (2*SPACE_BETWEEN), TOP_OFFSET ); - rEntry->m_pPublisher->SetPosPixel(aPos); + + rRenderContext.Push(PushFlags::FONT | PushFlags::TEXTCOLOR | PushFlags::TEXTFILLCOLOR); + rRenderContext.SetTextColor(rStyleSettings.GetLinkColor()); + rRenderContext.SetTextFillColor(rStyleSettings.GetFieldColor()); + vcl::Font aFont = rRenderContext.GetFont(); + // to underline + aFont.SetUnderline(LINESTYLE_SINGLE); + rRenderContext.SetFont(aFont); + rRenderContext.DrawText(aPos, rEntry->m_sPublisher); + rEntry->m_aLinkRect = tools::Rectangle(aPos, Size(nLinkWidth, aTextHeight)); + rRenderContext.Pop(); } // Draw status icons @@ -618,7 +585,7 @@ void ExtensionBox_Impl::RecalcAll() } if ( m_bHasScrollBar ) - m_pScrollBar->SetThumbPos( m_nTopIndex ); + m_xScrollBar->vadjustment_set_value( m_nTopIndex ); } } @@ -683,7 +650,7 @@ void ExtensionBox_Impl::Paint(vcl::RenderContext& rRenderContext, const tools::R Size aSize(GetOutputSizePixel()); if ( m_bHasScrollBar ) - aSize.AdjustWidth( -(m_pScrollBar->GetSizePixel().Width()) ); + aSize.AdjustWidth(-m_xScrollBar->get_vscroll_width()); const ::osl::MutexGuard aGuard( m_entriesMutex ); @@ -713,8 +680,7 @@ long ExtensionBox_Impl::GetTotalHeight() const void ExtensionBox_Impl::SetupScrollBar() { const Size aSize = GetOutputSizePixel(); - const long nScrBarSize = GetSettings().GetStyleSettings().GetScrollBarSize(); - const long nTotalHeight = GetTotalHeight(); + const auto nTotalHeight = GetTotalHeight(); const bool bNeedsScrollBar = ( nTotalHeight > aSize.Height() ); if ( bNeedsScrollBar ) @@ -722,20 +688,16 @@ void ExtensionBox_Impl::SetupScrollBar() if ( m_nTopIndex + aSize.Height() > nTotalHeight ) m_nTopIndex = nTotalHeight - aSize.Height(); - m_pScrollBar->SetPosSizePixel( Point( aSize.Width() - nScrBarSize, 0 ), - Size( nScrBarSize, aSize.Height() ) ); - m_pScrollBar->SetRangeMax( nTotalHeight ); - m_pScrollBar->SetVisibleSize( aSize.Height() ); - m_pScrollBar->SetPageSize( ( aSize.Height() * 4 ) / 5 ); - m_pScrollBar->SetLineSize( m_nStdHeight ); - m_pScrollBar->SetThumbPos( m_nTopIndex ); + m_xScrollBar->vadjustment_configure(m_nTopIndex, 0, nTotalHeight, + m_nStdHeight, ( aSize.Height() * 4 ) / 5, + aSize.Height()); - if ( !m_bHasScrollBar ) - m_pScrollBar->Show(); + if (!m_bHasScrollBar) + m_xScrollBar->set_vpolicy(VclPolicyType::ALWAYS); } else if ( m_bHasScrollBar ) { - m_pScrollBar->Hide(); + m_xScrollBar->set_vpolicy(VclPolicyType::NEVER); m_nTopIndex = 0; } @@ -748,14 +710,14 @@ void ExtensionBox_Impl::Resize() RecalcAll(); } -Size ExtensionBox_Impl::GetOptimalSize() const +void ExtensionBox_Impl::SetDrawingArea(weld::DrawingArea* pDrawingArea) { - return LogicToPixel(Size(250, 150), MapMode(MapUnit::MapAppFont)); -} + Size aSize = pDrawingArea->get_ref_device().LogicToPixel(Size(250, 150), MapMode(MapUnit::MapAppFont)); + pDrawingArea->set_size_request(aSize.Width(), aSize.Height()); + CustomWidgetController::SetDrawingArea(pDrawingArea); + SetOutputSizePixel(aSize); -extern "C" SAL_DLLPUBLIC_EXPORT void makeExtensionBox(VclPtr & rRet, VclPtr & pParent, VclBuilder::stringmap &) -{ - rRet = VclPtr::Create(pParent); + Init(); } long ExtensionBox_Impl::PointToPos( const Point& rPos ) @@ -773,65 +735,94 @@ long ExtensionBox_Impl::PointToPos( const Point& rPos ) return nPos; } - -void ExtensionBox_Impl::MouseButtonDown( const MouseEvent& rMEvt ) +bool ExtensionBox_Impl::MouseMove( const MouseEvent& rMEvt ) { - long nPos = PointToPos( rMEvt.GetPosPixel() ); + bool bOverHyperlink = false; - if ( rMEvt.IsLeft() ) + auto nPos = PointToPos( rMEvt.GetPosPixel() ); + if ( ( nPos >= 0 ) && ( nPos < static_cast(m_vEntries.size()) ) ) { - if ( rMEvt.IsMod1() && m_bHasActive ) - selectEntry( m_vEntries.size() ); // Selecting a not existing entry will deselect the current one - else - selectEntry( nPos ); + const auto& rEntry = m_vEntries[nPos]; + bOverHyperlink = !rEntry->m_sPublisher.isEmpty() && rEntry->m_aLinkRect.IsInside(rMEvt.GetPosPixel()); } + + if (bOverHyperlink) + SetPointer(PointerStyle::RefHand); + else + SetPointer(PointerStyle::Arrow); + + return false; } +OUString ExtensionBox_Impl::RequestHelp(tools::Rectangle& rRect) +{ + auto nPos = PointToPos( rRect.TopLeft() ); + if ( ( nPos >= 0 ) && ( nPos < static_cast(m_vEntries.size()) ) ) + { + const auto& rEntry = m_vEntries[nPos]; + bool bOverHyperlink = !rEntry->m_sPublisher.isEmpty() && rEntry->m_aLinkRect.IsInside(rRect); + if (bOverHyperlink) + { + rRect = rEntry->m_aLinkRect; + return rEntry->m_sPublisherURL; + } + } -bool ExtensionBox_Impl::EventNotify( NotifyEvent& rNEvt ) + return OUString(); +} + +bool ExtensionBox_Impl::MouseButtonDown( const MouseEvent& rMEvt ) +{ + if ( rMEvt.IsLeft() ) + { + if (rMEvt.IsMod1() && m_bHasActive) + selectEntry(ExtensionBox_Impl::ENTRY_NOTFOUND); // Selecting a not existing entry will deselect the current one + else + { + auto nPos = PointToPos( rMEvt.GetPosPixel() ); + + if ( ( nPos >= 0 ) && ( nPos < static_cast(m_vEntries.size()) ) ) + { + const auto& rEntry = m_vEntries[nPos]; + if (!rEntry->m_sPublisher.isEmpty() && rEntry->m_aLinkRect.IsInside(rMEvt.GetPosPixel())) + { + try + { + css::uno::Reference xSystemShellExecute( + css::system::SystemShellExecute::create(comphelper::getProcessComponentContext())); + //throws css::lang::IllegalArgumentException, css::system::SystemShellExecuteException + xSystemShellExecute->execute(rEntry->m_sPublisherURL, OUString(), css::system::SystemShellExecuteFlags::URIS_ONLY); + } + catch (...) + { + } + return true; + } + } + + selectEntry( nPos ); + } + return true; + } + + return false; +} + +bool ExtensionBox_Impl::KeyInput(const KeyEvent& rKEvt) { if ( !m_bInDelete ) DeleteRemoved(); + vcl::KeyCode aKeyCode = rKEvt.GetKeyCode(); + sal_uInt16 nKeyCode = aKeyCode.GetCode(); + bool bHandled = false; + if (nKeyCode != KEY_TAB && aKeyCode.GetGroup() == KEYGROUP_CURSOR) + bHandled = HandleCursorKey(nKeyCode); - if ( rNEvt.GetType() == MouseNotifyEvent::KEYINPUT ) - { - const KeyEvent* pKEvt = rNEvt.GetKeyEvent(); - vcl::KeyCode aKeyCode = pKEvt->GetKeyCode(); - sal_uInt16 nKeyCode = aKeyCode.GetCode(); - - if ( nKeyCode == KEY_TAB ) - ; - else if ( aKeyCode.GetGroup() == KEYGROUP_CURSOR ) - bHandled = HandleCursorKey( nKeyCode ); - } - - if ( rNEvt.GetType() == MouseNotifyEvent::COMMAND ) - { - if ( m_bHasScrollBar && - ( rNEvt.GetCommandEvent()->GetCommand() == CommandEventId::Wheel ) ) - { - const CommandWheelData* pData = rNEvt.GetCommandEvent()->GetWheelData(); - if ( pData->GetMode() == CommandWheelMode::SCROLL ) - { - long nThumbPos = m_pScrollBar->GetThumbPos(); - if ( pData->GetDelta() < 0 ) - m_pScrollBar->DoScroll( nThumbPos + m_nStdHeight ); - else - m_pScrollBar->DoScroll( nThumbPos - m_nStdHeight ); - bHandled = true; - } - } - } - - if ( !bHandled ) - return Control::EventNotify(rNEvt); - else - return true; + return bHandled; } - bool ExtensionBox_Impl::FindEntryPos( const TEntry_Impl& rEntry, const long nStart, const long nEnd, long &nPos ) { @@ -1149,23 +1140,10 @@ void ExtensionBox_Impl::checkEntries() } } - -void ExtensionBox_Impl::DoScroll( long nDelta ) +IMPL_LINK(ExtensionBox_Impl, ScrollHdl, weld::ScrolledWindow&, rScrBar, void) { - m_nTopIndex += nDelta; - Point aNewSBPt( m_pScrollBar->GetPosPixel() ); - - tools::Rectangle aScrRect( Point(), GetOutputSizePixel() ); - aScrRect.AdjustRight( -(m_pScrollBar->GetSizePixel().Width()) ); - Scroll( 0, -nDelta, aScrRect ); - - m_pScrollBar->SetPosPixel( aNewSBPt ); -} - - -IMPL_LINK( ExtensionBox_Impl, ScrollHdl, ScrollBar*, pScrBar, void ) -{ - DoScroll( pScrBar->GetDelta() ); + m_nTopIndex = rScrBar.vadjustment_get_value(); + Invalidate(); } } //namespace dp_gui diff --git a/desktop/source/deployment/gui/dp_gui_extlistbox.hxx b/desktop/source/deployment/gui/dp_gui_extlistbox.hxx index 79397f30ddbb..ccdc63e42526 100644 --- a/desktop/source/deployment/gui/dp_gui_extlistbox.hxx +++ b/desktop/source/deployment/gui/dp_gui_extlistbox.hxx @@ -25,6 +25,8 @@ #include #include #include +#include +#include #include #include @@ -74,7 +76,7 @@ struct Entry_Impl OUString m_sErrorText; OUString m_sLicenseText; Image m_aIcon; - VclPtr m_pPublisher; + tools::Rectangle m_aLinkRect; css::uno::Reference m_xPackage; @@ -91,7 +93,7 @@ class ExtensionBox_Impl; class ExtensionRemovedListener : public ::cppu::WeakImplHelper { - VclPtr m_pParent; + ExtensionBox_Impl* m_pParent; public: @@ -103,7 +105,7 @@ public: virtual void SAL_CALL disposing(css::lang::EventObject const& evt) override; }; -class ExtensionBox_Impl : public Control +class ExtensionBox_Impl : public weld::CustomWidgetController { bool m_bHasScrollBar : 1; bool m_bHasActive : 1; @@ -122,8 +124,6 @@ class ExtensionBox_Impl : public Control Image m_aWarningImage; Image m_aDefaultImage; - VclPtr m_pScrollBar; - rtl::Reference m_xRemoveListener; TheExtensionManager *m_pManager; @@ -144,6 +144,9 @@ class ExtensionBox_Impl : public Control //Holds weak references to extensions to which is we have added an XEventListener std::vector< css::uno::WeakReference< css::deployment::XPackage> > m_vListenerAdded; + + std::unique_ptr m_xScrollBar; + //Removes the dead weak references from m_vListenerAdded void cleanVecListenerAdded(); void addEventListenerOnce(css::uno::Reference const & extension); @@ -156,27 +159,27 @@ class ExtensionBox_Impl : public Control bool FindEntryPos( const TEntry_Impl& rEntry, long nStart, long nEnd, long &nFound ); void DeleteRemoved(); - - DECL_LINK( ScrollHdl, ScrollBar*, void ); + DECL_LINK( ScrollHdl, weld::ScrolledWindow&, void ); void Init(); public: - explicit ExtensionBox_Impl(vcl::Window* pParent); + explicit ExtensionBox_Impl(std::unique_ptr xScroll); virtual ~ExtensionBox_Impl() override; - virtual void dispose() override; - virtual void MouseButtonDown( const MouseEvent& rMEvt ) override; + virtual bool MouseButtonDown( const MouseEvent& rMEvt ) override; + virtual bool MouseMove( const MouseEvent& rMEvt ) override; + virtual bool KeyInput(const KeyEvent& rKEvt) override; virtual void Paint( vcl::RenderContext& rRenderContext, const tools::Rectangle &rPaintRect ) override; virtual void Resize() override; - virtual bool EventNotify( NotifyEvent& rNEvt ) override; - virtual Size GetOptimalSize() const override; + virtual OUString RequestHelp(tools::Rectangle& rRect) override; + + virtual void SetDrawingArea(weld::DrawingArea* pDrawingArea) override; TEntry_Impl const & GetEntryData( long nPos ) { return m_vEntries[ nPos ]; } long GetEntryCount() { return static_cast(m_vEntries.size()); } tools::Rectangle GetEntryRect( const long nPos ) const; bool HasActive() { return m_bHasActive; } long PointToPos( const Point& rPos ); - void DoScroll( long nDelta ); virtual void RecalcAll(); void RemoveUnlocked(); diff --git a/desktop/source/deployment/gui/dp_gui_service.cxx b/desktop/source/deployment/gui/dp_gui_service.cxx index a8e0f37b1388..12683e6af260 100644 --- a/desktop/source/deployment/gui/dp_gui_service.cxx +++ b/desktop/source/deployment/gui/dp_gui_service.cxx @@ -262,12 +262,12 @@ void ServiceImpl::startExecuteModal( if ( bCloseDialog ) myExtMgr->Close(); else - myExtMgr->ToTop( ToTopFlags::RestoreWhenMin ); + myExtMgr->ToTop(); } else { myExtMgr->Show(); - myExtMgr->ToTop( ToTopFlags::RestoreWhenMin ); + myExtMgr->ToTop(); } } diff --git a/desktop/source/deployment/gui/dp_gui_theextmgr.cxx b/desktop/source/deployment/gui/dp_gui_theextmgr.cxx index 2693d44836ce..65b4e1c0592c 100644 --- a/desktop/source/deployment/gui/dp_gui_theextmgr.cxx +++ b/desktop/source/deployment/gui/dp_gui_theextmgr.cxx @@ -59,8 +59,6 @@ TheExtensionManager::TheExtensionManager( const uno::Reference< awt::XWindow > & const uno::Reference< uno::XComponentContext > &xContext ) : m_xContext( xContext ), m_xParent( xParent ), - m_pExtMgrDialog( nullptr ), - m_pUpdReqDialog( nullptr ), m_bModified(false) { m_xExtensionManager = deployment::ExtensionManager::get( xContext ); @@ -102,72 +100,72 @@ TheExtensionManager::TheExtensionManager( const uno::Reference< awt::XWindow > & } } - TheExtensionManager::~TheExtensionManager() { - m_pUpdReqDialog.disposeAndClear(); - m_pExtMgrDialog.disposeAndClear(); + if (m_xUpdReqDialog) + m_xUpdReqDialog->response(RET_CANCEL); + assert(!m_xUpdReqDialog); + if (m_xExtMgrDialog) + m_xExtMgrDialog->response(RET_CANCEL); + assert(!m_xExtMgrDialog); } - void TheExtensionManager::createDialog( const bool bCreateUpdDlg ) { const SolarMutexGuard guard; if ( bCreateUpdDlg ) { - if ( !m_pUpdReqDialog ) + if ( !m_xUpdReqDialog ) { - m_pUpdReqDialog = VclPtr::Create( nullptr, this ); - m_pExecuteCmdQueue.reset( new ExtensionCmdQueue( m_pUpdReqDialog.get(), this, m_xContext ) ); + m_xUpdReqDialog.reset(new UpdateRequiredDialog(Application::GetFrameWeld(m_xParent), this)); + m_xExecuteCmdQueue.reset( new ExtensionCmdQueue( m_xUpdReqDialog.get(), this, m_xContext ) ); createPackageList(); } } - else if ( !m_pExtMgrDialog ) + else if ( !m_xExtMgrDialog ) { - if (m_xParent.is()) - m_pExtMgrDialog = VclPtr::Create( VCLUnoHelper::GetWindow(m_xParent), this ); - else - m_pExtMgrDialog = VclPtr::Create( nullptr, this, Dialog::InitFlag::NoParent ); - m_pExecuteCmdQueue.reset( new ExtensionCmdQueue( m_pExtMgrDialog.get(), this, m_xContext ) ); - m_pExtMgrDialog->setGetExtensionsURL( m_sGetExtensionsURL ); + m_xExtMgrDialog.reset(new ExtMgrDialog(Application::GetFrameWeld(m_xParent), this)); + m_xExecuteCmdQueue.reset( new ExtensionCmdQueue( m_xExtMgrDialog.get(), this, m_xContext ) ); + m_xExtMgrDialog->setGetExtensionsURL( m_sGetExtensionsURL ); createPackageList(); } } - void TheExtensionManager::Show() { const SolarMutexGuard guard; - getDialog()->Show(); + weld::DialogController::runAsync(m_xExtMgrDialog, [this](sal_Int32 /*nResult*/) { + auto xExtMgrDialog = m_xExtMgrDialog; + m_xExtMgrDialog.reset(); + xExtMgrDialog->Close(); + }); } - void TheExtensionManager::SetText( const OUString &rTitle ) { const SolarMutexGuard guard; - getDialog()->SetText( rTitle ); + getDialog()->set_title( rTitle ); } -void TheExtensionManager::ToTop( ToTopFlags nFlags ) +void TheExtensionManager::ToTop() { const SolarMutexGuard guard; - getDialog()->ToTop( nFlags ); + getDialog()->present(); } bool TheExtensionManager::Close() { - if ( m_pExtMgrDialog ) - return m_pExtMgrDialog->Close(); - else if ( m_pUpdReqDialog ) - return m_pUpdReqDialog->Close(); - else - return true; + if (m_xExtMgrDialog) + m_xExtMgrDialog->response(RET_CANCEL); + else if (m_xUpdReqDialog) + m_xUpdReqDialog->response(RET_CANCEL); + return true; } @@ -175,10 +173,10 @@ sal_Int16 TheExtensionManager::execute() { sal_Int16 nRet = 0; - if ( m_pUpdReqDialog ) + if ( m_xUpdReqDialog ) { - nRet = m_pUpdReqDialog->Execute(); - m_pUpdReqDialog.disposeAndClear(); + nRet = m_xUpdReqDialog->run(); + m_xUpdReqDialog.reset(); } return nRet; @@ -187,7 +185,7 @@ sal_Int16 TheExtensionManager::execute() bool TheExtensionManager::isVisible() { - return getDialog()->IsVisible(); + return getDialog()->get_visible(); } @@ -221,7 +219,7 @@ void TheExtensionManager::checkUpdates() } } - m_pExecuteCmdQueue->checkForUpdates( vEntries ); + m_xExecuteCmdQueue->checkForUpdates( vEntries ); } @@ -243,9 +241,9 @@ bool TheExtensionManager::installPackage( const OUString &rPackageURL, bool bWar return false; if ( bInstallForAll ) - m_pExecuteCmdQueue->addExtension( rPackageURL, SHARED_PACKAGE_MANAGER, false ); + m_xExecuteCmdQueue->addExtension( rPackageURL, SHARED_PACKAGE_MANAGER, false ); else - m_pExecuteCmdQueue->addExtension( rPackageURL, USER_PACKAGE_MANAGER, bWarnUser ); + m_xExecuteCmdQueue->addExtension( rPackageURL, USER_PACKAGE_MANAGER, bWarnUser ); return true; } @@ -256,8 +254,12 @@ void TheExtensionManager::terminateDialog() if ( ! dp_misc::office_is_running() ) { const SolarMutexGuard guard; - m_pExtMgrDialog.disposeAndClear(); - m_pUpdReqDialog.disposeAndClear(); + if (m_xExtMgrDialog) + m_xExtMgrDialog->response(RET_CANCEL); + assert(!m_xExtMgrDialog); + if (m_xUpdReqDialog) + m_xUpdReqDialog->response(RET_CANCEL); + assert(!m_xUpdReqDialog); Application::Quit(); } } @@ -421,22 +423,25 @@ void TheExtensionManager::disposing( lang::EventObject const & rEvt ) if ( dp_misc::office_is_running() ) { const SolarMutexGuard guard; - m_pExtMgrDialog.disposeAndClear(); - m_pUpdReqDialog.disposeAndClear(); + if (m_xExtMgrDialog) + m_xExtMgrDialog->response(RET_CANCEL); + assert(!m_xExtMgrDialog); + if (m_xUpdReqDialog) + m_xUpdReqDialog->response(RET_CANCEL); + assert(!m_xUpdReqDialog); } s_ExtMgr.clear(); } } - // XTerminateListener void TheExtensionManager::queryTermination( ::lang::EventObject const & ) { DialogHelper *pDialogHelper = getDialogHelper(); - if ( m_pExecuteCmdQueue->isBusy() || ( pDialogHelper && pDialogHelper->isBusy() ) ) + if ( m_xExecuteCmdQueue->isBusy() || ( pDialogHelper && pDialogHelper->isBusy() ) ) { - ToTop( ToTopFlags::RestoreWhenMin ); + ToTop(); throw frame::TerminationVetoException( "The office cannot be closed while the Extension Manager is running", static_cast(this)); @@ -444,20 +449,18 @@ void TheExtensionManager::queryTermination( ::lang::EventObject const & ) else { clearModified(); - if ( m_pExtMgrDialog ) - m_pExtMgrDialog->Close(); - if ( m_pUpdReqDialog ) - m_pUpdReqDialog->Close(); + if (m_xExtMgrDialog) + m_xExtMgrDialog->response(RET_CANCEL); + if (m_xUpdReqDialog) + m_xUpdReqDialog->response(RET_CANCEL); } } - void TheExtensionManager::notifyTermination( ::lang::EventObject const & rEvt ) { disposing( rEvt ); } - // XModifyListener void TheExtensionManager::modified( ::lang::EventObject const & /*rEvt*/ ) { diff --git a/desktop/source/deployment/gui/dp_gui_theextmgr.hxx b/desktop/source/deployment/gui/dp_gui_theextmgr.hxx index 4980458f0dfd..c75ec34872b0 100644 --- a/desktop/source/deployment/gui/dp_gui_theextmgr.hxx +++ b/desktop/source/deployment/gui/dp_gui_theextmgr.hxx @@ -51,9 +51,9 @@ private: css::uno::Reference< css::deployment::XExtensionManager > m_xExtensionManager; css::uno::Reference< css::container::XNameAccess > m_xNameAccessNodes; css::uno::Reference< css::awt::XWindow > m_xParent; - VclPtr m_pExtMgrDialog; - VclPtr m_pUpdReqDialog; - std::unique_ptr m_pExecuteCmdQueue; + std::shared_ptr m_xExtMgrDialog; + std::unique_ptr m_xUpdReqDialog; + std::unique_ptr m_xExecuteCmdQueue; OUString m_sGetExtensionsURL; bool m_bModified; @@ -71,23 +71,25 @@ public: bool isModified() const { return m_bModified; } void clearModified() { m_bModified = false; } - Dialog* getDialog() + weld::Window* getDialog() { - if (m_pExtMgrDialog) - return m_pExtMgrDialog.get(); - return m_pUpdReqDialog.get(); + if (m_xExtMgrDialog) + return m_xExtMgrDialog->getDialog(); + if (m_xUpdReqDialog) + return m_xUpdReqDialog->getDialog(); + return nullptr; } DialogHelper* getDialogHelper() { - if (m_pExtMgrDialog) - return m_pExtMgrDialog.get(); - return m_pUpdReqDialog.get(); + if (m_xExtMgrDialog) + return m_xExtMgrDialog.get(); + return m_xUpdReqDialog.get(); } - ExtensionCmdQueue* getCmdQueue() const { return m_pExecuteCmdQueue.get(); } + ExtensionCmdQueue* getCmdQueue() const { return m_xExecuteCmdQueue.get(); } void SetText( const OUString &rTitle ); void Show(); - void ToTop( ToTopFlags nFlags ); + void ToTop(); bool Close(); bool isVisible(); diff --git a/desktop/uiconfig/ui/extensionmanager.ui b/desktop/uiconfig/ui/extensionmanager.ui index da108c5c6d0a..b749f057d806 100644 --- a/desktop/uiconfig/ui/extensionmanager.ui +++ b/desktop/uiconfig/ui/extensionmanager.ui @@ -1,13 +1,17 @@ - + - False 6 Extension Manager + 0 + 0 dialog + + + False @@ -61,9 +65,28 @@ vertical 12 - + True - False + True + True + True + never + in + + + True + False + + + True + True + GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_STRUCTURE_MASK + True + True + + + + True @@ -188,8 +211,8 @@ True True False - True center + True 0 True True @@ -205,8 +228,8 @@ True True False - True start + True 0 True True @@ -222,8 +245,8 @@ True True False - True end + True 0 True True @@ -269,7 +292,6 @@ 0 0 - 2 @@ -281,7 +303,7 @@ True - 3 + 2 0 @@ -289,10 +311,11 @@ False True + center True - 2 + 1 0 @@ -309,17 +332,9 @@ 0 1 + 3 - - - - - - - - - False @@ -338,7 +353,7 @@ help - close + close diff --git a/desktop/uiconfig/ui/extensionmenu.ui b/desktop/uiconfig/ui/extensionmenu.ui new file mode 100644 index 000000000000..c4f51b5240b0 --- /dev/null +++ b/desktop/uiconfig/ui/extensionmenu.ui @@ -0,0 +1,9 @@ + + + + + + True + False + + diff --git a/desktop/uiconfig/ui/updaterequireddialog.ui b/desktop/uiconfig/ui/updaterequireddialog.ui index 3ef75c016a06..d130cbdb1265 100644 --- a/desktop/uiconfig/ui/updaterequireddialog.ui +++ b/desktop/uiconfig/ui/updaterequireddialog.ui @@ -1,5 +1,5 @@ - + @@ -7,102 +7,24 @@ False 5 Extension Update Required + True + 0 + 0 dialog + + + False vertical 12 - - - True - False - 12 - - - True - False - 0 - %PRODUCTNAME has been updated to a new version. Some installed %PRODUCTNAME extensions are not compatible with this version and need to be updated before they can be used. - True - 95 - - - 0 - 0 - 1 - 1 - - - - - True - False - True - True - - - 0 - 1 - 1 - 1 - - - - - True - False - True - 6 - - - False - True - 0 - Adding %EXTENSION_NAME - True - - - 0 - 0 - 1 - 1 - - - - - False - True - True - - - 0 - 1 - 1 - 1 - - - - - 0 - 2 - 1 - 1 - - - - - False - True - 0 - - False end - + Check for _Updates... True True @@ -157,6 +79,7 @@ False True 3 + True @@ -167,10 +90,102 @@ 1 + + + True + False + 12 + + + True + False + %PRODUCTNAME has been updated to a new version. Some installed %PRODUCTNAME extensions are not compatible with this version and need to be updated before they can be used. + True + 95 + 95 + 0 + + + 0 + 0 + + + + + True + True + True + True + never + in + + + True + False + + + True + True + GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_STRUCTURE_MASK + True + True + + + + + + + 0 + 1 + + + + + True + False + True + 6 + + + False + True + Adding %EXTENSION_NAME + True + 0 + + + 0 + 0 + + + + + False + True + True + + + 0 + 1 + + + + + 0 + 2 + + + + + False + True + 0 + + - check + ok disable help diff --git a/extras/source/glade/libreoffice-catalog.xml.in b/extras/source/glade/libreoffice-catalog.xml.in index 71bd5c0c670c..7d526232b2ce 100644 --- a/extras/source/glade/libreoffice-catalog.xml.in +++ b/extras/source/glade/libreoffice-catalog.xml.in @@ -176,12 +176,6 @@ - - diff --git a/include/sfx2/sfxdlg.hxx b/include/sfx2/sfxdlg.hxx index ad71369ba961..d4296c413524 100644 --- a/include/sfx2/sfxdlg.hxx +++ b/include/sfx2/sfxdlg.hxx @@ -140,7 +140,7 @@ public: virtual VclPtr CreateScriptErrorDialog( const css::uno::Any& rException ) = 0; virtual VclPtr CreateOptionsDialog( - vcl::Window* pParent, const OUString& rExtensionId ) = 0; + weld::Window* pParent, const OUString& rExtensionId ) = 0; }; #endif diff --git a/solenv/bin/native-code.py b/solenv/bin/native-code.py index 8773c5dc2bff..b514ca3d503c 100755 --- a/solenv/bin/native-code.py +++ b/solenv/bin/native-code.py @@ -455,8 +455,6 @@ custom_widgets = [ 'DriverListControl', 'DropdownBox', 'EmojiView', - 'ExtBoxWithBtns', - 'ExtensionBox', 'FontNameBox', 'FontSizeBox', 'FontStyleBox', diff --git a/solenv/sanitizers/ui/desktop.suppr b/solenv/sanitizers/ui/desktop.suppr index 75c93cdb1484..8914020f21de 100644 --- a/solenv/sanitizers/ui/desktop.suppr +++ b/solenv/sanitizers/ui/desktop.suppr @@ -1,6 +1,6 @@ desktop/uiconfig/ui/dependenciesdialog.ui://GtkLabel[@id='label1'] orphan-label desktop/uiconfig/ui/dependenciesdialog.ui://GtkTreeView[@id='depListTreeview'] no-labelled-by -desktop/uiconfig/ui/extensionmanager.ui://deploymentgui-ExtBoxWithBtns[@id='extensions'] no-labelled-by +desktop/uiconfig/ui/extensionmanager.ui://GtkDrawingArea[@id='extensions'] no-labelled-by desktop/uiconfig/ui/extensionmanager.ui://GtkLabel[@id='progressft'] orphan-label desktop/uiconfig/ui/extensionmanager.ui://GtkProgressBar[@id='progressbar'] no-labelled-by desktop/uiconfig/ui/licensedialog.ui://GtkLabel[@id='head'] orphan-label @@ -17,6 +17,6 @@ desktop/uiconfig/ui/updatedialog.ui://GtkLabel[@id='DESCRIPTION_LABEL'] orphan-l desktop/uiconfig/ui/updatedialog.ui://GtkTextView[@id='DESCRIPTIONS:border'] no-labelled-by desktop/uiconfig/ui/updateinstalldialog.ui://GtkLabel[@id='EXTENSION_NAME'] orphan-label desktop/uiconfig/ui/updaterequireddialog.ui://GtkLabel[@id='updatelabel'] orphan-label -desktop/uiconfig/ui/updaterequireddialog.ui://deploymentgui-ExtensionBox[@id='extensions'] no-labelled-by +desktop/uiconfig/ui/updaterequireddialog.ui://GtkDrawingArea[@id='extensions'] no-labelled-by desktop/uiconfig/ui/updaterequireddialog.ui://GtkLabel[@id='progresslabel'] orphan-label desktop/uiconfig/ui/updaterequireddialog.ui://GtkProgressBar[@id='progress'] no-labelled-by