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