blob: ab15cb88cdb60c84b7b5a460c0b8593147ade48f [file] [log] [blame]
/**************************************************************
*
* 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