1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 #ifndef _DESKTOP_APP_HXX_ 29 #define _DESKTOP_APP_HXX_ 30 31 // stl includes first 32 #include <map> 33 #include <com/sun/star/lang/XMultiServiceFactory.hpp> 34 #include <vcl/svapp.hxx> 35 #ifndef _VCL_TIMER_HXX_ 36 #include <vcl/timer.hxx> 37 #endif 38 #include <tools/resmgr.hxx> 39 #include <unotools/bootstrap.hxx> 40 #include <com/sun/star/lang/XInitialization.hpp> 41 #include <com/sun/star/task/XStatusIndicator.hpp> 42 #include <com/sun/star/uno/Reference.h> 43 #include <osl/mutex.hxx> 44 45 using namespace com::sun::star::task; 46 using namespace com::sun::star::uno; 47 using namespace com::sun::star::lang; 48 using namespace rtl; 49 50 #define DESKTOP_SAVETASKS_MOD 0x1 51 #define DESKTOP_SAVETASKS_UNMOD 0x2 52 #define DESKTOP_SAVETASKS_ALL 0x3 53 54 namespace desktop 55 { 56 57 /*-------------------------------------------------------------------- 58 Description: Application-class 59 --------------------------------------------------------------------*/ 60 class CommandLineArgs; 61 class Lockfile; 62 class AcceptorMap : public std::map< OUString, Reference<XInitialization> > {}; 63 struct ConvertData; 64 class Desktop : public Application 65 { 66 friend class UserInstall; 67 68 void doShutdown(); 69 70 public: 71 enum BootstrapError 72 { 73 BE_OK, 74 BE_UNO_SERVICEMANAGER, 75 BE_UNO_SERVICE_CONFIG_MISSING, 76 BE_PATHINFO_MISSING, 77 BE_USERINSTALL_FAILED, 78 BE_LANGUAGE_MISSING, 79 BE_USERINSTALL_NOTENOUGHDISKSPACE, 80 BE_USERINSTALL_NOWRITEACCESS, 81 BE_OFFICECONFIG_BROKEN 82 }; 83 enum BootstrapStatus 84 { 85 BS_OK, 86 BS_TERMINATE 87 }; 88 89 Desktop(); 90 ~Desktop(); 91 virtual void Main( ); 92 virtual void Init(); 93 virtual void DeInit(); 94 virtual sal_Bool QueryExit(); 95 virtual sal_uInt16 Exception(sal_uInt16 nError); 96 virtual void SystemSettingsChanging( AllSettings& rSettings, Window* pFrame ); 97 virtual void AppEvent( const ApplicationEvent& rAppEvent ); 98 99 DECL_LINK( OpenClients_Impl, void* ); 100 101 static void OpenClients(); 102 static void OpenDefault(); 103 104 DECL_LINK( EnableAcceptors_Impl, void*); 105 106 static void HandleAppEvent( const ApplicationEvent& rAppEvent ); 107 static ResMgr* GetDesktopResManager(); 108 static CommandLineArgs* GetCommandLineArgs(); 109 110 void HandleBootstrapErrors( BootstrapError ); 111 void SetBootstrapError( BootstrapError nError ) 112 { 113 if ( m_aBootstrapError == BE_OK ) 114 m_aBootstrapError = nError; 115 } 116 BootstrapError GetBootstrapError() const 117 { 118 return m_aBootstrapError; 119 } 120 121 void SetBootstrapStatus( BootstrapStatus nStatus ) 122 { 123 m_aBootstrapStatus = nStatus; 124 } 125 BootstrapStatus GetBootstrapStatus() const 126 { 127 return m_aBootstrapStatus; 128 } 129 130 static sal_Bool CheckOEM(); 131 static sal_Bool isCrashReporterEnabled(); 132 133 // first-start (ever) & license relate methods 134 static rtl::OUString GetLicensePath(); 135 static sal_Bool LicenseNeedsAcceptance(); 136 static sal_Bool IsFirstStartWizardNeeded(); 137 static sal_Bool CheckExtensionDependencies(); 138 139 static void DoRestartActionsIfNecessary( sal_Bool bQuickStart ); 140 static void SetRestartState(); 141 142 void SynchronizeExtensionRepositories(); 143 void SetSplashScreenText( const ::rtl::OUString& rText ); 144 void SetSplashScreenProgress( sal_Int32 ); 145 146 private: 147 // Bootstrap methods 148 ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > CreateApplicationServiceManager(); 149 150 void RegisterServices( ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xSMgr ); 151 void DeregisterServices(); 152 153 void DestroyApplicationServiceManager( ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xSMgr ); 154 155 void CreateTemporaryDirectory(); 156 void RemoveTemporaryDirectory(); 157 158 sal_Bool InitializeInstallation( const rtl::OUString& rAppFilename ); 159 sal_Bool InitializeConfiguration(); 160 void FlushConfiguration(); 161 sal_Bool InitializeQuickstartMode( com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >& rSMgr ); 162 163 void HandleBootstrapPathErrors( ::utl::Bootstrap::Status, const ::rtl::OUString& aMsg ); 164 void StartSetup( const ::rtl::OUString& aParameters ); 165 166 // Get a resource message string securely e.g. if resource cannot be retrieved return aFaultBackMsg 167 ::rtl::OUString GetMsgString( sal_uInt16 nId, const ::rtl::OUString& aFaultBackMsg ); 168 169 // Create a error message depending on bootstrap failure code and an optional file url 170 ::rtl::OUString CreateErrorMsgString( utl::Bootstrap::FailureCode nFailureCode, 171 const ::rtl::OUString& aFileURL ); 172 173 static void PreloadModuleData( CommandLineArgs* ); 174 static void PreloadConfigurationData(); 175 176 Reference<XStatusIndicator> m_rSplashScreen; 177 void OpenSplashScreen(); 178 void CloseSplashScreen(); 179 180 void EnableOleAutomation(); 181 DECL_LINK( ImplInitFilterHdl, ConvertData* ); 182 DECL_LINK( AsyncInitFirstRun, void* ); 183 /** checks if the office is run the first time 184 <p>If so, <method>DoFirstRunInitializations</method> is called (asynchronously and delayed) and the 185 respective flag in the configuration is reset.</p> 186 */ 187 void CheckFirstRun( ); 188 189 /// does initializations which are necessary for the first run of the office 190 void DoFirstRunInitializations(); 191 192 static sal_Bool SaveTasks(); 193 static sal_Bool _bTasksSaved; 194 195 static void retrieveCrashReporterState(); 196 static sal_Bool isUIOnSessionShutdownAllowed(); 197 198 // on-demand acceptors 199 static void createAcceptor(const OUString& aDescription); 200 static void enableAcceptors(); 201 static void destroyAcceptor(const OUString& aDescription); 202 203 sal_Bool m_bMinimized; 204 sal_Bool m_bInvisible; 205 bool m_bServicesRegistered; 206 sal_uInt16 m_nAppEvents; 207 BootstrapError m_aBootstrapError; 208 BootstrapStatus m_aBootstrapStatus; 209 210 Lockfile *m_pLockfile; 211 Timer m_firstRunTimer; 212 213 static ResMgr* pResMgr; 214 static sal_Bool bSuppressOpenDefault; 215 }; 216 217 } 218 219 #endif // _DESKTOP_APP_HXX_ 220