1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski #ifndef __FRAMEWORK_DISPATCH_STARTMODULEDISPATCHER_HXX_
25*b1cdbd2cSJim Jagielski #define __FRAMEWORK_DISPATCH_STARTMODULEDISPATCHER_HXX_
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski //_______________________________________________
28*b1cdbd2cSJim Jagielski // my own includes
29*b1cdbd2cSJim Jagielski 
30*b1cdbd2cSJim Jagielski #include <threadhelp/threadhelpbase.hxx>
31*b1cdbd2cSJim Jagielski #include <macros/xinterface.hxx>
32*b1cdbd2cSJim Jagielski #include <macros/xtypeprovider.hxx>
33*b1cdbd2cSJim Jagielski #include <macros/debug.hxx>
34*b1cdbd2cSJim Jagielski #include <macros/generic.hxx>
35*b1cdbd2cSJim Jagielski #include <stdtypes.h>
36*b1cdbd2cSJim Jagielski #include <general.h>
37*b1cdbd2cSJim Jagielski 
38*b1cdbd2cSJim Jagielski //_______________________________________________
39*b1cdbd2cSJim Jagielski // interface includes
40*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XTypeProvider.hpp>
41*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XFrame.hpp>
42*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XStatusListener.hpp>
43*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XNotifyingDispatch.hpp>
44*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XDispatchInformationProvider.hpp>
45*b1cdbd2cSJim Jagielski #include <com/sun/star/util/URL.hpp>
46*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XDispatchResultListener.hpp>
47*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XMultiServiceFactory.hpp>
48*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/DispatchResultState.hpp>
49*b1cdbd2cSJim Jagielski 
50*b1cdbd2cSJim Jagielski //_______________________________________________
51*b1cdbd2cSJim Jagielski // other includes
52*b1cdbd2cSJim Jagielski #include <cppuhelper/weak.hxx>
53*b1cdbd2cSJim Jagielski #include <vcl/evntpost.hxx>
54*b1cdbd2cSJim Jagielski 
55*b1cdbd2cSJim Jagielski //_______________________________________________
56*b1cdbd2cSJim Jagielski // namespace
57*b1cdbd2cSJim Jagielski 
58*b1cdbd2cSJim Jagielski namespace framework{
59*b1cdbd2cSJim Jagielski 
60*b1cdbd2cSJim Jagielski //-----------------------------------------------
61*b1cdbd2cSJim Jagielski /**
62*b1cdbd2cSJim Jagielski     @short          helper to handle all URLs related to the StartModule
63*b1cdbd2cSJim Jagielski  */
64*b1cdbd2cSJim Jagielski class StartModuleDispatcher : public css::lang::XTypeProvider
65*b1cdbd2cSJim Jagielski                             , public css::frame::XNotifyingDispatch             // => XDispatch
66*b1cdbd2cSJim Jagielski                             , public css::frame::XDispatchInformationProvider
67*b1cdbd2cSJim Jagielski                             // baseclasses ... order is neccessary for right initialization!
68*b1cdbd2cSJim Jagielski                             , private ThreadHelpBase
69*b1cdbd2cSJim Jagielski                             , public  ::cppu::OWeakObject
70*b1cdbd2cSJim Jagielski {
71*b1cdbd2cSJim Jagielski     //-------------------------------------------
72*b1cdbd2cSJim Jagielski     // member
73*b1cdbd2cSJim Jagielski 
74*b1cdbd2cSJim Jagielski     private:
75*b1cdbd2cSJim Jagielski 
76*b1cdbd2cSJim Jagielski         //---------------------------------------
77*b1cdbd2cSJim Jagielski         /** @short reference to an uno service manager,
78*b1cdbd2cSJim Jagielski                    which can be used to create own needed
79*b1cdbd2cSJim Jagielski                    uno resources. */
80*b1cdbd2cSJim Jagielski         css::uno::Reference< css::lang::XMultiServiceFactory > m_xSMGR;
81*b1cdbd2cSJim Jagielski 
82*b1cdbd2cSJim Jagielski         //---------------------------------------
83*b1cdbd2cSJim Jagielski         /** @short  our "context" frame. */
84*b1cdbd2cSJim Jagielski         css::uno::WeakReference< css::frame::XFrame > m_xOwner;
85*b1cdbd2cSJim Jagielski 
86*b1cdbd2cSJim Jagielski         //---------------------------------------
87*b1cdbd2cSJim Jagielski         /** @short  the original queryDispatch() target. */
88*b1cdbd2cSJim Jagielski         ::rtl::OUString m_sDispatchTarget;
89*b1cdbd2cSJim Jagielski 
90*b1cdbd2cSJim Jagielski         //---------------------------------------
91*b1cdbd2cSJim Jagielski         /** @short  list of registered status listener */
92*b1cdbd2cSJim Jagielski         ListenerHash m_lStatusListener;
93*b1cdbd2cSJim Jagielski 
94*b1cdbd2cSJim Jagielski     //-------------------------------------------
95*b1cdbd2cSJim Jagielski     // native interface
96*b1cdbd2cSJim Jagielski 
97*b1cdbd2cSJim Jagielski 	public:
98*b1cdbd2cSJim Jagielski 
99*b1cdbd2cSJim Jagielski         //---------------------------------------
100*b1cdbd2cSJim Jagielski         /** @short  connect a new StartModuleDispatcher instance to its "owner frame".
101*b1cdbd2cSJim Jagielski 
102*b1cdbd2cSJim Jagielski             @descr  Such "owner frame" is used as context for all related operations.
103*b1cdbd2cSJim Jagielski 
104*b1cdbd2cSJim Jagielski             @param  xSMGR
105*b1cdbd2cSJim Jagielski                     an uno service manager, which is needed to create uno resource
106*b1cdbd2cSJim Jagielski                     internaly.
107*b1cdbd2cSJim Jagielski 
108*b1cdbd2cSJim Jagielski             @param  xFrame
109*b1cdbd2cSJim Jagielski                     the frame where the corresponding dispatch was started.
110*b1cdbd2cSJim Jagielski 
111*b1cdbd2cSJim Jagielski             @param  sTarget
112*b1cdbd2cSJim Jagielski                     the original target information used for the related queryDispatch() call.
113*b1cdbd2cSJim Jagielski          */
114*b1cdbd2cSJim Jagielski         StartModuleDispatcher(const css::uno::Reference< css::lang::XMultiServiceFactory >& xSMGR  ,
115*b1cdbd2cSJim Jagielski                               const css::uno::Reference< css::frame::XFrame >&              xFrame ,
116*b1cdbd2cSJim Jagielski                               const ::rtl::OUString&                                        sTarget);
117*b1cdbd2cSJim Jagielski 
118*b1cdbd2cSJim Jagielski         //---------------------------------------
119*b1cdbd2cSJim Jagielski         /** @short  does nothing real. */
120*b1cdbd2cSJim Jagielski         virtual ~StartModuleDispatcher();
121*b1cdbd2cSJim Jagielski 
122*b1cdbd2cSJim Jagielski     //-------------------------------------------
123*b1cdbd2cSJim Jagielski     // uno interface
124*b1cdbd2cSJim Jagielski 
125*b1cdbd2cSJim Jagielski     public:
126*b1cdbd2cSJim Jagielski 
127*b1cdbd2cSJim Jagielski         //---------------------------------------
128*b1cdbd2cSJim Jagielski         FWK_DECLARE_XINTERFACE
129*b1cdbd2cSJim Jagielski         FWK_DECLARE_XTYPEPROVIDER
130*b1cdbd2cSJim Jagielski 
131*b1cdbd2cSJim Jagielski         //---------------------------------------
132*b1cdbd2cSJim Jagielski         // XNotifyingDispatch
133*b1cdbd2cSJim Jagielski         virtual void SAL_CALL dispatchWithNotification( const css::util::URL&                                             aURL      ,
134*b1cdbd2cSJim Jagielski                                                         const css::uno::Sequence< css::beans::PropertyValue >&            lArguments,
135*b1cdbd2cSJim Jagielski                                                         const css::uno::Reference< css::frame::XDispatchResultListener >& xListener ) throw(css::uno::RuntimeException);
136*b1cdbd2cSJim Jagielski 
137*b1cdbd2cSJim Jagielski         //---------------------------------------
138*b1cdbd2cSJim Jagielski         // XDispatch
139*b1cdbd2cSJim Jagielski         virtual void SAL_CALL dispatch            ( const css::util::URL&                                     aURL      ,
140*b1cdbd2cSJim Jagielski                                                     const css::uno::Sequence< css::beans::PropertyValue >&    lArguments) throw(css::uno::RuntimeException);
141*b1cdbd2cSJim Jagielski         virtual void SAL_CALL addStatusListener   ( const css::uno::Reference< css::frame::XStatusListener >& xListener ,
142*b1cdbd2cSJim Jagielski                                                     const css::util::URL&                                     aURL      ) throw(css::uno::RuntimeException);
143*b1cdbd2cSJim Jagielski         virtual void SAL_CALL removeStatusListener( const css::uno::Reference< css::frame::XStatusListener >& xListener ,
144*b1cdbd2cSJim Jagielski                                                     const css::util::URL&                                     aURL      ) throw(css::uno::RuntimeException);
145*b1cdbd2cSJim Jagielski 
146*b1cdbd2cSJim Jagielski         //---------------------------------------
147*b1cdbd2cSJim Jagielski         // XDispatchInformationProvider
148*b1cdbd2cSJim Jagielski         virtual css::uno::Sequence< sal_Int16 >                       SAL_CALL getSupportedCommandGroups         (                         ) throw (css::uno::RuntimeException);
149*b1cdbd2cSJim Jagielski         virtual css::uno::Sequence< css::frame::DispatchInformation > SAL_CALL getConfigurableDispatchInformation( sal_Int16 nCommandGroup ) throw (css::uno::RuntimeException);
150*b1cdbd2cSJim Jagielski 
151*b1cdbd2cSJim Jagielski     //-------------------------------------------
152*b1cdbd2cSJim Jagielski     // internal helper
153*b1cdbd2cSJim Jagielski 
154*b1cdbd2cSJim Jagielski     private:
155*b1cdbd2cSJim Jagielski 
156*b1cdbd2cSJim Jagielski         //---------------------------------------
157*b1cdbd2cSJim Jagielski         /** @short  check if StartModule can be shown.
158*b1cdbd2cSJim Jagielski          */
159*b1cdbd2cSJim Jagielski         ::sal_Bool implts_isBackingModePossible();
160*b1cdbd2cSJim Jagielski 
161*b1cdbd2cSJim Jagielski         //---------------------------------------
162*b1cdbd2cSJim Jagielski         /** @short  open the special BackingComponent (now StartModule)
163*b1cdbd2cSJim Jagielski 
164*b1cdbd2cSJim Jagielski             @return [bool]
165*b1cdbd2cSJim Jagielski                     sal_True if operation was successfully.
166*b1cdbd2cSJim Jagielski          */
167*b1cdbd2cSJim Jagielski         ::sal_Bool implts_establishBackingMode();
168*b1cdbd2cSJim Jagielski 
169*b1cdbd2cSJim Jagielski         //---------------------------------------
170*b1cdbd2cSJim Jagielski         /** @short  notify a DispatchResultListener.
171*b1cdbd2cSJim Jagielski 
172*b1cdbd2cSJim Jagielski             @descr  We check the listener reference before we use it.
173*b1cdbd2cSJim Jagielski                     So this method can be called everytimes!
174*b1cdbd2cSJim Jagielski 
175*b1cdbd2cSJim Jagielski             @parama xListener
176*b1cdbd2cSJim Jagielski                     the listener, which should be notified.
177*b1cdbd2cSJim Jagielski                     Can be null!
178*b1cdbd2cSJim Jagielski 
179*b1cdbd2cSJim Jagielski             @param  nState
180*b1cdbd2cSJim Jagielski                     directly used as css::frame::DispatchResultState value.
181*b1cdbd2cSJim Jagielski 
182*b1cdbd2cSJim Jagielski             @param  aResult
183*b1cdbd2cSJim Jagielski                     not used yet realy ...
184*b1cdbd2cSJim Jagielski          */
185*b1cdbd2cSJim Jagielski         void implts_notifyResultListener(const css::uno::Reference< css::frame::XDispatchResultListener >& xListener,
186*b1cdbd2cSJim Jagielski                                                sal_Int16                                                   nState   ,
187*b1cdbd2cSJim Jagielski                                          const css::uno::Any&                                              aResult  );
188*b1cdbd2cSJim Jagielski 
189*b1cdbd2cSJim Jagielski }; // class StartModuleDispatcher
190*b1cdbd2cSJim Jagielski 
191*b1cdbd2cSJim Jagielski } // namespace framework
192*b1cdbd2cSJim Jagielski 
193*b1cdbd2cSJim Jagielski #endif // #ifndef __FRAMEWORK_DISPATCH_STARTMODULEDISPATCHER_HXX_
194