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 // MARKER(update_precomp.py): autogen include statement, do not remove 29 #include "precompiled_framework.hxx" 30 31 //_________________________________________________________________________________________________________________ 32 // my own includes 33 //_________________________________________________________________________________________________________________ 34 35 #ifndef __FRAMEWORK_HELPER_OINSTANCEPROVIDER_HXX_ 36 #include <helper/oinstanceprovider.hxx> 37 #endif 38 #include <classes/servicemanager.hxx> 39 #include <macros/debug.hxx> 40 41 #ifndef __FRAMEWORK_DEFINES_HXX_ 42 #include <defines.hxx> 43 #endif 44 45 //_________________________________________________________________________________________________________________ 46 // interface includes 47 //_________________________________________________________________________________________________________________ 48 #include <com/sun/star/frame/XDesktop.hpp> 49 #include <com/sun/star/frame/XFrame.hpp> 50 #include <com/sun/star/awt/XWindow.hpp> 51 #include <com/sun/star/frame/XFrameLoader.hpp> 52 #include <com/sun/star/beans/PropertyValue.hpp> 53 #include <com/sun/star/frame/XLoadEventListener.hpp> 54 #include <com/sun/star/frame/XDispatchProvider.hpp> 55 #include <com/sun/star/util/URL.hpp> 56 #include <com/sun/star/frame/FrameSearchFlag.hpp> 57 #include <com/sun/star/frame/XFrames.hpp> 58 59 #ifndef _COM_SUN_STAR_CONNECTION_XConnection_HPP_ 60 #include <com/sun/star/connection/XConnection.hpp> 61 #endif 62 63 #ifndef _COM_SUN_STAR_BRIDGE_XBridgeFactory_HPP_ 64 #include <com/sun/star/bridge/XBridgeFactory.hpp> 65 #endif 66 67 //_________________________________________________________________________________________________________________ 68 // other includes 69 //_________________________________________________________________________________________________________________ 70 #include <comphelper/processfactory.hxx> 71 #include <com/sun/star/uno/Reference.hxx> 72 #include <rtl/ustring.hxx> 73 #include <rtl/ustrbuf.hxx> 74 #include <toolkit/helper/vclunohelper.hxx> 75 #include <svtools/unoiface.hxx> 76 #include <vcl/svapp.hxx> 77 #include <vcl/wrkwin.hxx> 78 #include <vos/process.hxx> 79 80 //_________________________________________________________________________________________________________________ 81 // namespace 82 //_________________________________________________________________________________________________________________ 83 84 using namespace ::rtl ; 85 using namespace ::vos ; 86 using namespace ::comphelper ; 87 using namespace ::framework ; 88 using namespace ::com::sun::star::uno ; 89 using namespace ::com::sun::star::lang ; 90 using namespace ::com::sun::star::frame ; 91 using namespace ::com::sun::star::awt ; 92 using namespace ::com::sun::star::beans ; 93 using namespace ::com::sun::star::util ; 94 using namespace ::com::sun::star::connection ; 95 using namespace ::com::sun::star::bridge ; 96 97 //_________________________________________________________________________________________________________________ 98 // const 99 //_________________________________________________________________________________________________________________ 100 101 #define APPLICATIONNAME "FrameWork" 102 #define COMMANDARGUMENT_PLUGIN DECLARE_ASCII("-plugin" ) 103 #define NAME_PLUGINBRIDGE DECLARE_ASCII("mozilla plugin bridge" ) 104 #define PROTOCOL_PLUGINBRIDGE DECLARE_ASCII("urp" ) 105 106 //_________________________________________________________________________________________________________________ 107 // declarations 108 //_________________________________________________________________________________________________________________ 109 110 /*-************************************************************************************************************//** 111 @short normal application 112 @descr An instance of these class can be a normal node in frame tree only. The highest level to be allowed is 3! 113 On 1 stand the desktop himself as the only one, on 2 are all tasks present ... and then comes frames only. 114 A frame support influencing of his subtree, find of subframes, activate- and deactivate-mechanism as well as 115 set/get of a frame window, component or controller. 116 117 @implements XInterface 118 XTypeProvider 119 XServiceInfo 120 XFramesSupplier 121 XFrame 122 XComponent 123 XStatusIndicatorSupplier 124 XDispatchProvider 125 XDispatchProviderInterception 126 XBrowseHistoryRegistry 127 XLoadEventListener 128 XEventListener 129 XWindowListener 130 XTopWindowListener 131 [ XDebugging, if TEST_TREE is defined! ] 132 @base OMutexMember 133 OWeakObject 134 135 @devstatus deprecated 136 *//*-*************************************************************************************************************/ 137 class FrameWork : public Application 138 { 139 //------------------------------------------------------------------------------------------------------------- 140 // public methods 141 //------------------------------------------------------------------------------------------------------------- 142 143 public: 144 void Main(); 145 146 private: 147 void impl_analyzeCommandArguments(); 148 149 private: 150 sal_Bool m_bUsePlugIn ; 151 152 }; // class FrameWork 153 154 //_________________________________________________________________________________________________________________ 155 // definitions 156 //_________________________________________________________________________________________________________________ 157 158 //_________________________________________________________________________________________________________________ 159 // global variables 160 //_________________________________________________________________________________________________________________ 161 162 FrameWork aFrameWork ; 163 164 //_________________________________________________________________________________________________________________ 165 // definitions 166 //_________________________________________________________________________________________________________________ 167 168 //***************************************************************************************************************** 169 // private methods 170 //***************************************************************************************************************** 171 void FrameWork::impl_analyzeCommandArguments() 172 { 173 // First reset all member variables which present states of incoming arguments! 174 m_bUsePlugIn = sal_False; // depends from "/plugin" 175 176 // Then step over all given arguments and search for supported one. 177 OStartupInfo aInfo ; 178 OUString sArgument ; 179 sal_uInt32 nCount = aInfo.getCommandArgCount(); 180 for ( sal_uInt32 nArgument=0; nArgument<nCount; ++nArgument ) 181 { 182 // If extraction of current argument successfull ... 183 if ( aInfo.getCommandArg( nArgument, sArgument ) == osl_Process_E_None ) 184 { 185 // ... search for matching with supported values. 186 if ( sArgument == COMMANDARGUMENT_PLUGIN ) 187 { 188 // We found "/plugin" => set internal equivalent. 189 m_bUsePlugIn = sal_True; 190 } 191 } 192 } 193 } 194 195 //_________________________________________________________________________________________________________________ 196 // main 197 //_________________________________________________________________________________________________________________ 198 199 void FrameWork::Main() 200 { 201 //------------------------------------------------------------------------------------------------------------- 202 // a) Initialize ouer application 203 204 // Analyze command arguments. 205 impl_analyzeCommandArguments(); 206 207 // Create new global servicemanager. 208 ServiceManager aManager; 209 Reference< XMultiServiceFactory > xGlobalServiceManager = aManager.getGlobalUNOServiceManager(); 210 211 if ( xGlobalServiceManager.is() == sal_True ) 212 { 213 // If it was successful - set in as static value in UNOTOOLS! 214 setProcessServiceFactory( xGlobalServiceManager ); 215 216 //--------------------------------------------------------------------------------------------------------- 217 // b) Create root of ouer frame tree 218 219 // Create top of frame hierarchy - the desktop. 220 Reference< XDesktop > xDesktop( xGlobalServiceManager->createInstance( SERVICENAME_DESKTOP ), UNO_QUERY ); 221 // Safe impossible cases 222 // We need the desktop for working. 223 LOG_ASSERT( !(xDesktop.is()==sal_False), "FrameWork::Main()\nCan't instanciate desktop!Servicename unknown?\n" ) 224 225 //--------------------------------------------------------------------------------------------------------- 226 // c) Initialize connection to possible PlugIn dll. 227 228 // OPipeConnection removed, connection to plugin now uses acceptor service 229 #if 0 230 if ( m_bUsePlugIn == sal_True ) 231 { 232 Reference< XConnection > xConnection = new OPipeConnection( xGlobalServiceManager ); 233 Reference< XBridgeFactory > xBridgeFactory ( xGlobalServiceManager->createInstance( SERVICENAME_BRIDGEFACTORY ), UNO_QUERY ); 234 if ( 235 ( xConnection.is() == sal_True ) && 236 ( xBridgeFactory.is() == sal_True ) 237 ) 238 { 239 Reference< XBridge > xBridge = xBridgeFactory->createBridge( NAME_PLUGINBRIDGE , 240 PROTOCOL_PLUGINBRIDGE , 241 xConnection , 242 new OInstanceProvider( xGlobalServiceManager ) ); 243 } 244 else 245 { 246 // Error handling ... !? 247 LOG_ASSERT( sal_False, "FrameWork::Main()\nNo connection to plugin. Initialization of bridge failed.\n" ) 248 } 249 } 250 #endif 251 //--------------------------------------------------------------------------------------------------------- 252 // d) Initialize new task with a HTML-URL in it. 253 254 // Cast desktop to right interface to do this. 255 Reference< XDispatchProvider > xDispatchProvider( xDesktop, UNO_QUERY ); 256 // Safe impossible cases. 257 // Desktop MUST support these interface! 258 LOG_ASSERT( !(xDispatchProvider.is()==sal_False), "FrameWork::Main()\nDesktop don't support XDispatchProvider interface.\n" ) 259 if ( xDispatchProvider.is() == sal_True ) 260 { 261 // Build URL ... 262 OUString sURL( RTL_CONSTASCII_USTRINGPARAM( "file://e|/dokumentation/Documentation/projekte/services/inimanager/inimanager/index.html" )); 263 URL aURL; 264 aURL.Complete = sURL; 265 // ... and dispatch it. 266 Reference< XDispatch > xDispatch = xDispatchProvider->queryDispatch( aURL, FRAMETYPE_BLANK, 0 ); 267 xDispatch->dispatch( aURL, Sequence< PropertyValue >() ); 268 269 // Use special feature of desktop service and log current tree state in file. 270 // LOG_TREE( xDesktop ) 271 272 // Build URL ... 273 sURL = OUString( RTL_CONSTASCII_USTRINGPARAM( "file://d|/menu.htm" )); 274 aURL.Complete = sURL; 275 // ... and dispatch it. 276 xDispatch = xDispatchProvider->queryDispatch( aURL, FRAMETYPE_BLANK, 0 ); 277 xDispatch->dispatch( aURL, Sequence< PropertyValue >() ); 278 279 // Use special feature of desktop service and log current tree state in file. 280 // LOG_TREE( xDesktop ) 281 } 282 283 // Set running-mode for application. 284 Execute(); 285 } 286 } 287