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