xref: /AOO41X/main/desktop/inc/app.hxx (revision aa94018d58c9ca9f4f31d38a566134dc9a894d4e)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef _DESKTOP_APP_HXX_
25 #define _DESKTOP_APP_HXX_
26 
27 // stl includes first
28 #include <map>
29 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
30 #include <vcl/svapp.hxx>
31 #ifndef _VCL_TIMER_HXX_
32 #include <vcl/timer.hxx>
33 #endif
34 #include <tools/resmgr.hxx>
35 #include <unotools/bootstrap.hxx>
36 #include <com/sun/star/lang/XInitialization.hpp>
37 #include <com/sun/star/task/XStatusIndicator.hpp>
38 #include <com/sun/star/uno/Reference.h>
39 #include <osl/mutex.hxx>
40 
41 using namespace com::sun::star::task;
42 using namespace com::sun::star::uno;
43 using namespace com::sun::star::lang;
44 using namespace rtl;
45 
46 #define DESKTOP_SAVETASKS_MOD 0x1
47 #define DESKTOP_SAVETASKS_UNMOD 0x2
48 #define DESKTOP_SAVETASKS_ALL 0x3
49 
50 namespace desktop
51 {
52 
53 /*--------------------------------------------------------------------
54     Description:    Application-class
55  --------------------------------------------------------------------*/
56 class CommandLineArgs;
57 class Lockfile;
58 class AcceptorMap : public std::map< OUString, Reference<XInitialization> > {};
59 struct ConvertData;
60 class Desktop : public Application
61 {
62     friend class UserInstall;
63 
64     void doShutdown();
65 
66     public:
67         enum BootstrapError
68         {
69             BE_OK,
70             BE_UNO_SERVICEMANAGER,
71             BE_UNO_SERVICE_CONFIG_MISSING,
72             BE_PATHINFO_MISSING,
73             BE_USERINSTALL_FAILED,
74             BE_LANGUAGE_MISSING,
75             BE_USERINSTALL_NOTENOUGHDISKSPACE,
76             BE_USERINSTALL_NOWRITEACCESS,
77             BE_MUTLISESSION_NOT_SUPPROTED,
78             BE_OFFICECONFIG_BROKEN
79         };
80         enum BootstrapStatus
81         {
82             BS_OK,
83             BS_TERMINATE
84         };
85 
86                                 Desktop();
87                                 ~Desktop();
88         virtual void            Main( );
89         virtual void            Init();
90         virtual void            DeInit();
91         virtual sal_Bool            QueryExit();
92         virtual sal_uInt16          Exception(sal_uInt16 nError);
93         virtual void            SystemSettingsChanging( AllSettings& rSettings, Window* pFrame );
94         virtual void            AppEvent( const ApplicationEvent& rAppEvent );
95 
96         DECL_LINK(          OpenClients_Impl, void* );
97 
98         static void             OpenClients();
99         static void             OpenDefault();
100 
101         DECL_LINK( EnableAcceptors_Impl, void*);
102 
103         static void             HandleAppEvent( const ApplicationEvent& rAppEvent );
104         static ResMgr*          GetDesktopResManager();
105         static CommandLineArgs* GetCommandLineArgs();
106 
107         void                    HandleBootstrapErrors( BootstrapError );
SetBootstrapError(BootstrapError nError)108         void                    SetBootstrapError( BootstrapError nError )
109         {
110             if ( m_aBootstrapError == BE_OK )
111                 m_aBootstrapError = nError;
112         }
GetBootstrapError() const113         BootstrapError          GetBootstrapError() const
114         {
115             return m_aBootstrapError;
116         }
117 
SetBootstrapStatus(BootstrapStatus nStatus)118         void                    SetBootstrapStatus( BootstrapStatus nStatus )
119         {
120             m_aBootstrapStatus = nStatus;
121         }
GetBootstrapStatus() const122         BootstrapStatus          GetBootstrapStatus() const
123         {
124             return m_aBootstrapStatus;
125         }
126 
127         static sal_Bool         CheckOEM();
128         static sal_Bool         isCrashReporterEnabled();
129 
130         // first-start (ever) & license relate methods
131         static rtl::OUString    GetLicensePath();
132         static sal_Bool         LicenseNeedsAcceptance();
133         static sal_Bool         IsFirstStartWizardNeeded();
134         static sal_Bool         CheckExtensionDependencies();
135         static void             EnableQuickstart();
136         static void             FinishFirstStart();
137 
138         static void             DoRestartActionsIfNecessary( sal_Bool bQuickStart );
139         static void             SetRestartState();
140 
141         void                    SynchronizeExtensionRepositories();
142         void                    SetSplashScreenText( const ::rtl::OUString& rText );
143         void                    SetSplashScreenProgress( sal_Int32 );
144 
145     private:
146         // Bootstrap methods
147         ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > CreateApplicationServiceManager();
148 
149         void                    RegisterServices( ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xSMgr );
150         void                    DeregisterServices();
151 
152         void                    DestroyApplicationServiceManager( ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xSMgr );
153 
154         void                    CreateTemporaryDirectory();
155         void                    RemoveTemporaryDirectory();
156 
157         sal_Bool                InitializeInstallation( const rtl::OUString& rAppFilename );
158         sal_Bool                InitializeConfiguration();
159         void                    FlushConfiguration();
160         sal_Bool                InitializeQuickstartMode( com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >& rSMgr );
161 
162         void                    HandleBootstrapPathErrors( ::utl::Bootstrap::Status, const ::rtl::OUString& aMsg );
163         void                    StartSetup( const ::rtl::OUString& aParameters );
164 
165         // Get a resource message string securely e.g. if resource cannot be retrieved return aFaultBackMsg
166         ::rtl::OUString         GetMsgString( sal_uInt16 nId, const ::rtl::OUString& aFaultBackMsg );
167 
168         // Create a error message depending on bootstrap failure code and an optional file url
169         ::rtl::OUString         CreateErrorMsgString( utl::Bootstrap::FailureCode nFailureCode,
170                                                       const ::rtl::OUString& aFileURL );
171 
172         static void             PreloadModuleData( CommandLineArgs* );
173         static void             PreloadConfigurationData();
174 
175         Reference<XStatusIndicator> m_rSplashScreen;
176         void                    OpenSplashScreen();
177         void                    CloseSplashScreen();
178 
179         void                    EnableOleAutomation();
180                                 DECL_LINK( ImplInitFilterHdl, ConvertData* );
181         DECL_LINK(          AsyncInitFirstRun, void* );
182         /** checks if the office is run the first time
183             <p>If so, <method>DoFirstRunInitializations</method> is called (asynchronously and delayed) and the
184             respective flag in the configuration is reset.</p>
185         */
186         void                    CheckFirstRun( );
187 
188         /// does initializations which are necessary for the first run of the office
189         void                    DoFirstRunInitializations();
190 
191         static sal_Bool         SaveTasks();
192         static sal_Bool         _bTasksSaved;
193 
194         static void             retrieveCrashReporterState();
195         static sal_Bool         isUIOnSessionShutdownAllowed();
196 
197         // on-demand acceptors
198         static void                         createAcceptor(const OUString& aDescription);
199         static void                         enableAcceptors();
200         static void                         destroyAcceptor(const OUString& aDescription);
201 
202         sal_Bool                        m_bMinimized;
203         sal_Bool                        m_bInvisible;
204         bool                            m_bServicesRegistered;
205         sal_uInt16                          m_nAppEvents;
206         BootstrapError                  m_aBootstrapError;
207         BootstrapStatus                 m_aBootstrapStatus;
208 
209         Lockfile *m_pLockfile;
210         Timer    m_firstRunTimer;
211 
212         static ResMgr*                  pResMgr;
213         static sal_Bool                 bSuppressOpenDefault;
214 };
215 
216 }
217 
218 #endif // _DESKTOP_APP_HXX_
219