/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ #ifndef INCLUDED_DP_GUI_DIALOG2_HXX #define INCLUDED_DP_GUI_DIALOG2_HXX #include "vcl/dialog.hxx" #include "vcl/button.hxx" #include "vcl/fixed.hxx" #include "vcl/timer.hxx" #include "svtools/fixedhyper.hxx" #include "svtools/prgsbar.hxx" #include "svtools/svmedit.hxx" #include "osl/conditn.hxx" #include "osl/mutex.hxx" #include "rtl/ref.hxx" #include "rtl/ustring.hxx" #include "cppuhelper/implbase1.hxx" #include "com/sun/star/awt/XWindow.hpp" #include "com/sun/star/deployment/XPackage.hpp" #include "com/sun/star/uno/XComponentContext.hpp" #include "com/sun/star/ui/dialogs/XExecutableDialog.hpp" #include "com/sun/star/util/XModifyListener.hpp" namespace dp_gui { //============================================================================== class ExtBoxWithBtns_Impl; class ExtensionBox_Impl; class TheExtensionManager; //============================================================================== class DialogHelper { ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > m_xContext; Dialog* m_pVCLWindow; sal_uLong m_nEventID; bool m_bIsBusy; public: DialogHelper( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > &, Dialog *pWindow ); virtual ~DialogHelper(); void openWebBrowser( const ::rtl::OUString & sURL, const ::rtl::OUString & sTitle ) const; Dialog* getWindow() const { return m_pVCLWindow; }; void PostUserEvent( const Link& rLink, void* pCaller ); void clearEventID() { m_nEventID = 0; } virtual void showProgress( bool bStart ) = 0; virtual void updateProgress( const ::rtl::OUString &rText, const ::com::sun::star::uno::Reference< ::com::sun::star::task::XAbortChannel > &xAbortChannel) = 0; virtual void updateProgress( const long nProgress ) = 0; virtual void updatePackageInfo( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage ) = 0; virtual long addPackageToList( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage, bool bLicenseMissing = false ) = 0; virtual void prepareChecking() = 0; virtual void checkEntries() = 0; static ResId getResId( sal_uInt16 nId ); static String getResourceString( sal_uInt16 id ); static bool IsSharedPkgMgr( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &); static bool continueOnSharedExtension( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &, Window *pParent, const sal_uInt16 nResID, bool &bHadWarning ); void setBusy( const bool bBusy ) { m_bIsBusy = bBusy; } bool isBusy() const { return m_bIsBusy; } bool installExtensionWarn( const ::rtl::OUString &rExtensionURL ) const; bool installForAllUsers( bool &bInstallForAll ) const; }; //============================================================================== class ExtMgrDialog : public ModelessDialog, public DialogHelper { ExtBoxWithBtns_Impl *m_pExtensionBox; PushButton m_aAddBtn; PushButton m_aUpdateBtn; OKButton m_aCloseBtn; HelpButton m_aHelpBtn; FixedLine m_aDivider; svt::FixedHyperlink m_aGetExtensions; FixedText m_aProgressText; ProgressBar m_aProgressBar; CancelButton m_aCancelBtn; const String m_sAddPackages; String m_sProgressText; String m_sLastFolderURL; ::osl::Mutex m_aMutex; bool m_bHasProgress; bool m_bProgressChanged; bool m_bStartProgress; bool m_bStopProgress; bool m_bUpdateWarning; bool m_bEnableWarning; bool m_bDisableWarning; bool m_bDeleteWarning; long m_nProgress; Timer m_aTimeoutTimer; TheExtensionManager *m_pManager; ::com::sun::star::uno::Reference< ::com::sun::star::task::XAbortChannel > m_xAbortChannel; bool removeExtensionWarn( const ::rtl::OUString &rExtensionTitle ) const; DECL_DLLPRIVATE_LINK( HandleAddBtn, void * ); DECL_DLLPRIVATE_LINK( HandleUpdateBtn, void * ); DECL_DLLPRIVATE_LINK( HandleCancelBtn, void * ); DECL_DLLPRIVATE_LINK( HandleHyperlink, svt::FixedHyperlink * ); DECL_DLLPRIVATE_LINK( TimeOutHdl, Timer* ); DECL_DLLPRIVATE_LINK( startProgress, void * ); public: ExtMgrDialog( Window * pParent, TheExtensionManager *pManager ); virtual ~ExtMgrDialog(); virtual void Resize(); virtual long Notify( NotifyEvent& rNEvt ); virtual sal_Bool Close(); virtual void showProgress( bool bStart ); virtual void updateProgress( const ::rtl::OUString &rText, const ::com::sun::star::uno::Reference< ::com::sun::star::task::XAbortChannel > &xAbortChannel); virtual void updateProgress( const long nProgress ); virtual void updatePackageInfo( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage ); void setGetExtensionsURL( const ::rtl::OUString &rURL ); virtual long addPackageToList( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &, bool bLicenseMissing = false ); bool enablePackage(const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage, bool bEnable ); bool removePackage(const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage ); bool updatePackage(const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage ); bool acceptLicense(const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage ); virtual void prepareChecking(); virtual void checkEntries(); ::com::sun::star::uno::Sequence< ::rtl::OUString > raiseAddPicker(); }; //============================================================================== class UpdateRequiredDialog : public ModalDialog, public DialogHelper { ExtensionBox_Impl *m_pExtensionBox; FixedText m_aUpdateNeeded; PushButton m_aUpdateBtn; PushButton m_aCloseBtn; HelpButton m_aHelpBtn; CancelButton m_aCancelBtn; FixedLine m_aDivider; FixedText m_aProgressText; ProgressBar m_aProgressBar; const String m_sAddPackages; const String m_sCloseText; String m_sProgressText; ::osl::Mutex m_aMutex; bool m_bHasProgress; bool m_bProgressChanged; bool m_bStartProgress; bool m_bStopProgress; bool m_bUpdateWarning; bool m_bDisableWarning; bool m_bHasLockedEntries; long m_nProgress; Timer m_aTimeoutTimer; TheExtensionManager *m_pManager; ::com::sun::star::uno::Reference< ::com::sun::star::task::XAbortChannel > m_xAbortChannel; DECL_DLLPRIVATE_LINK( HandleUpdateBtn, void * ); DECL_DLLPRIVATE_LINK( HandleCloseBtn, void * ); DECL_DLLPRIVATE_LINK( HandleCancelBtn, void * ); DECL_DLLPRIVATE_LINK( TimeOutHdl, Timer* ); DECL_DLLPRIVATE_LINK( startProgress, void * ); DECL_DLLPRIVATE_LINK( HandleHyperlink, svt::FixedHyperlink * ); bool isEnabled( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage ) const; bool checkDependencies( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage ) const; bool hasActiveEntries(); void disableAllEntries(); public: UpdateRequiredDialog( Window * pParent, TheExtensionManager *pManager ); virtual ~UpdateRequiredDialog(); virtual short Execute(); virtual void Resize(); virtual sal_Bool Close(); // virtual long Notify( NotifyEvent& rNEvt ); virtual void showProgress( bool bStart ); virtual void updateProgress( const ::rtl::OUString &rText, const ::com::sun::star::uno::Reference< ::com::sun::star::task::XAbortChannel > &xAbortChannel); virtual void updateProgress( const long nProgress ); virtual void updatePackageInfo( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage ); void selectEntry( long nPos ); virtual long addPackageToList( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &, bool bLicenseMissing = false ); bool enablePackage( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage, bool bEnable ); bool updatePackage( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage ); virtual void prepareChecking(); virtual void checkEntries(); ::com::sun::star::uno::Sequence< ::rtl::OUString > raiseAddPicker(); bool installForAllUsers( bool &bInstallForAll ) const; bool installExtensionWarn( const ::rtl::OUString &rExtensionURL ) const; }; //============================================================================== class ShowLicenseDialog : public ModalDialog { MultiLineEdit m_aLicenseText; OKButton m_aCloseBtn; public: ShowLicenseDialog( Window * pParent, const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage ); virtual ~ShowLicenseDialog(); virtual void Resize(); }; //============================================================================== class UpdateRequiredDialogService : public ::cppu::WeakImplHelper1< ::com::sun::star::ui::dialogs::XExecutableDialog > { ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > const m_xComponentContext; ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > m_xParent; ::rtl::OUString m_sInitialTitle; public: UpdateRequiredDialogService( ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > const & args, ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext> const & xComponentContext ); // XExecutableDialog virtual void SAL_CALL setTitle( rtl::OUString const & title ) throw ( ::com::sun::star::uno::RuntimeException ); virtual sal_Int16 SAL_CALL execute() throw ( ::com::sun::star::uno::RuntimeException ); }; } // namespace dp_gui #endif