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 _SFX_SFXBASECONTROLLER_HXX_
25 #define _SFX_SFXBASECONTROLLER_HXX_
26 
27 #include "sal/config.h"
28 #include "sfx2/dllapi.h"
29 #include "sal/types.h"
30 #include <com/sun/star/frame/XDispatch.hpp>
31 #include <com/sun/star/frame/XDispatchProvider.hpp>
32 #include <com/sun/star/frame/DispatchDescriptor.hpp>
33 #include <com/sun/star/frame/XDispatchInformationProvider.hpp>
34 #include <com/sun/star/frame/XController2.hpp>
35 #include <com/sun/star/frame/XControllerBorder.hpp>
36 #include <com/sun/star/frame/XModel.hpp>
37 #include <com/sun/star/frame/XFrame.hpp>
38 #include <com/sun/star/frame/XTitle.hpp>
39 #include <com/sun/star/frame/XTitleChangeBroadcaster.hpp>
40 #include <com/sun/star/util/URL.hpp>
41 #include <com/sun/star/lang/XTypeProvider.hpp>
42 #include <cppuhelper/implbase9.hxx>
43 #include <cppuhelper/basemutex.hxx>
44 #include <osl/mutex.hxx>
45 #include <com/sun/star/task/XStatusIndicatorSupplier.hpp>
46 #include <com/sun/star/ui/XContextMenuInterception.hpp>
47 #include <com/sun/star/ui/XContextMenuInterceptor.hpp>
48 #include <com/sun/star/awt/XMouseClickHandler.hpp>
49 #include <com/sun/star/awt/XKeyHandler.hpp>
50 #include <com/sun/star/awt/XUserInputInterception.hpp>
51 
52 //________________________________________________________________________________________________________
53 //	include of my own project
54 //________________________________________________________________________________________________________
55 #include <sfx2/viewsh.hxx>
56 #include <sfx2/sfxuno.hxx>
57 
58 //________________________________________________________________________________________________________
59 //	defines
60 //________________________________________________________________________________________________________
61 
62 // Some defines to write better code :-)
63 #define	REFERENCE				::com::sun::star::uno::Reference
64 #define	ANY						::com::sun::star::uno::Any
65 #define	XDISPATCH				::com::sun::star::frame::XDispatch
66 #define	DISPATCHDESCRIPTOR		::com::sun::star::frame::DispatchDescriptor
67 #define	XMODEL					::com::sun::star::frame::XModel
68 #define	XFRAME					::com::sun::star::frame::XFrame
69 #define	XEVENTLISTENER			::com::sun::star::lang::XEventListener
70 #define	MUTEX					::osl::Mutex
71 #define	RUNTIMEEXCEPTION		::com::sun::star::uno::RuntimeException
72 #define	UNOTYPE					::com::sun::star::uno::Type
73 #define	UNOURL					::com::sun::star::util::URL
74 #define	OUSTRING				::rtl::OUString
75 #define XCONTEXTMENUINTERCEPTOR ::com::sun::star::ui::XContextMenuInterceptor
76 
77 //________________________________________________________________________________________________________
78 //	forwards
79 //________________________________________________________________________________________________________
80 
81 struct	IMPL_SfxBaseController_DataContainer	;	// impl. struct to hold member of class SfxBaseController
82 
83 class SfxViewFrame;
84 
85 sal_Int16 MapGroupIDToCommandGroup( sal_Int16 nGroupID );
86 sal_Bool SupportsCommandGroup( sal_Int16 nCommandGroup );
87 sal_Int16 MapCommandGroupToGroupID( sal_Int16 nCommandGroup );
88 
89 //________________________________________________________________________________________________________
90 //	class declarations
91 //________________________________________________________________________________________________________
92 
93 typedef ::cppu::WeakImplHelper9 <   ::com::sun::star::frame::XController2
94                                 ,   ::com::sun::star::frame::XControllerBorder
95                                 ,   ::com::sun::star::frame::XDispatchProvider
96                                 ,   ::com::sun::star::task::XStatusIndicatorSupplier
97                                 ,   ::com::sun::star::ui::XContextMenuInterception
98                                 ,   ::com::sun::star::awt::XUserInputInterception
99                                 ,   ::com::sun::star::frame::XDispatchInformationProvider
100                                 ,   ::com::sun::star::frame::XTitle
101                                 ,   ::com::sun::star::frame::XTitleChangeBroadcaster
102                                 >   SfxBaseController_Base;
103 
104 class SFX2_DLLPUBLIC SfxBaseController  :public SfxBaseController_Base
105                                         ,public ::cppu::BaseMutex
106 {
107 //________________________________________________________________________________________________________
108 //	public methods
109 //________________________________________________________________________________________________________
110 
111 public:
112 
113 	//____________________________________________________________________________________________________
114 	//	constructor/destructor
115 	//____________________________________________________________________________________________________
116 
117 	/**___________________________________________________________________________________________________
118 		@short		-
119 		@descr		-
120 
121 		@seealso	-
122 
123 		@param		-
124 
125 		@return		-
126 
127 		@onerror	-
128 	*/
129 
130 	SfxBaseController( SfxViewShell* pView ) ;
131 
132 	/**___________________________________________________________________________________________________
133 		@short		-
134 		@descr		-
135 
136 		@seealso	-
137 
138 		@param		-
139 
140 		@return		-
141 
142 		@onerror	-
143 	*/
144 
145 	~SfxBaseController() ;
146 
147     SAL_DLLPRIVATE void ReleaseShell_Impl();
148     SAL_DLLPRIVATE void BorderWidthsChanged_Impl();
149 
150     ::com::sun::star::uno::Reference< ::com::sun::star::task::XStatusIndicator > SAL_CALL getStatusIndicator(  ) throw (::com::sun::star::uno::RuntimeException);
151 
152 	//____________________________________________________________________________________________________
153 	//	XController2
154 	//____________________________________________________________________________________________________
155     virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > SAL_CALL getComponentWindow() throw (::com::sun::star::uno::RuntimeException);
156     virtual ::rtl::OUString SAL_CALL getViewControllerName() throw (::com::sun::star::uno::RuntimeException);
157     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > SAL_CALL getCreationArguments() throw (::com::sun::star::uno::RuntimeException);
158 
159 	//____________________________________________________________________________________________________
160 	//	XController
161 	//____________________________________________________________________________________________________
162 
163 	/**___________________________________________________________________________________________________
164 		@short		-
165 		@descr		-
166 
167 		@seealso	-
168 
169 		@param		-
170 
171 		@return		-
172 
173 		@onerror	-
174 	*/
175 
176 	virtual void SAL_CALL attachFrame( const REFERENCE< XFRAME >& xFrame ) throw( RUNTIMEEXCEPTION ) ;
177 
178 	/**___________________________________________________________________________________________________
179 		@short		-
180 		@descr		-
181 
182 		@seealso	-
183 
184 		@param		-
185 
186 		@return		-
187 
188 		@onerror	-
189 	*/
190 
191 	virtual sal_Bool SAL_CALL attachModel( const REFERENCE< XMODEL >& xModel ) throw( RUNTIMEEXCEPTION ) ;
192 
193 	/**___________________________________________________________________________________________________
194 		@short		-
195 		@descr		-
196 
197 		@seealso	-
198 
199 		@param		-
200 
201 		@return		-
202 
203 		@onerror	-
204 	*/
205 
206 	virtual sal_Bool SAL_CALL suspend( sal_Bool bSuspend ) throw( RUNTIMEEXCEPTION ) ;
207 
208 	/**___________________________________________________________________________________________________
209 		@short		-
210 		@descr		-
211 
212 		@seealso	-
213 
214 		@param		-
215 
216 		@return		-
217 
218 		@onerror	-
219 	*/
220 
221 	ANY SAL_CALL getViewData() throw( RUNTIMEEXCEPTION ) ;
222 
223 	/**___________________________________________________________________________________________________
224 		@short		-
225 		@descr		-
226 
227 		@seealso	-
228 
229 		@param		-
230 
231 		@return		-
232 
233 		@onerror	-
234 	*/
235 
236 	void SAL_CALL restoreViewData( const ANY& aValue ) throw( RUNTIMEEXCEPTION ) ;
237 
238 	/**___________________________________________________________________________________________________
239 		@short		-
240 		@descr		-
241 
242 		@seealso	-
243 
244 		@param		-
245 
246 		@return		-
247 
248 		@onerror	-
249 	*/
250 
251 	REFERENCE< XFRAME > SAL_CALL getFrame() throw( RUNTIMEEXCEPTION ) ;
252 
253 	/**___________________________________________________________________________________________________
254 		@short		-
255 		@descr		-
256 
257 		@seealso	-
258 
259 		@param		-
260 
261 		@return		-
262 
263 		@onerror	-
264 	*/
265 
266 	REFERENCE< XMODEL > SAL_CALL getModel() throw( RUNTIMEEXCEPTION ) ;
267 
268 	//____________________________________________________________________________________________________
269 	//	XDispatchProvider
270 	//____________________________________________________________________________________________________
271 
272 	/**___________________________________________________________________________________________________
273 		@short		-
274 		@descr		-
275 
276 		@seealso	-
277 
278 		@param		-
279 
280 		@return		-
281 
282 		@onerror	-
283 	*/
284 
285 	virtual REFERENCE< XDISPATCH > SAL_CALL queryDispatch(	const	UNOURL &			aURL			,
286 															const	OUSTRING &			sTargetFrameName,
287 																	FrameSearchFlags	eSearchFlags	) throw( RUNTIMEEXCEPTION ) ;
288 
289 	/**___________________________________________________________________________________________________
290 		@short		-
291 		@descr		-
292 
293 		@seealso	-
294 
295 		@param		-
296 
297 		@return		-
298 
299 		@onerror	-
300 	*/
301 
302 	virtual ::com::sun::star::uno::Sequence< REFERENCE< XDISPATCH > > SAL_CALL queryDispatches( const ::com::sun::star::uno::Sequence< DISPATCHDESCRIPTOR >& seqDescriptor ) throw( RUNTIMEEXCEPTION ) ;
303 
304 	//____________________________________________________________________________________________________
305 	//	XControllerBorder
306 	//____________________________________________________________________________________________________
307 
308     virtual ::com::sun::star::frame::BorderWidths SAL_CALL getBorder() throw (::com::sun::star::uno::RuntimeException);
309     virtual void SAL_CALL addBorderResizeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XBorderResizeListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
310     virtual void SAL_CALL removeBorderResizeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XBorderResizeListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
311     virtual ::com::sun::star::awt::Rectangle SAL_CALL queryBorderedArea( const ::com::sun::star::awt::Rectangle& aPreliminaryRectangle ) throw (::com::sun::star::uno::RuntimeException);
312 
313 	//____________________________________________________________________________________________________
314 	//	XComponent
315 	//____________________________________________________________________________________________________
316 
317 	/**___________________________________________________________________________________________________
318 		@short		-
319 		@descr		-
320 
321 		@seealso	-
322 
323 		@param		-
324 
325 		@return		-
326 
327 		@onerror	-
328 	*/
329 
330 	virtual void SAL_CALL dispose() throw( RUNTIMEEXCEPTION ) ;
331 
332 	/**___________________________________________________________________________________________________
333 		@short		-
334 		@descr		-
335 
336 		@seealso	-
337 
338 		@param		-
339 
340 		@return		-
341 
342 		@onerror	-
343 	*/
344 
345 	virtual void SAL_CALL addEventListener( const REFERENCE< XEVENTLISTENER >& aListener ) throw( RUNTIMEEXCEPTION ) ;
346 
347 	/**___________________________________________________________________________________________________
348 		@short		-
349 		@descr		-
350 
351 		@seealso	-
352 
353 		@param		-
354 
355 		@return		-
356 
357 		@onerror	-
358 	*/
359 
360 	virtual void SAL_CALL removeEventListener( const REFERENCE< XEVENTLISTENER >& aListener ) throw( RUNTIMEEXCEPTION ) ;
361     virtual void SAL_CALL registerContextMenuInterceptor( const REFERENCE< XCONTEXTMENUINTERCEPTOR >& xInterceptor ) throw( RUNTIMEEXCEPTION );
362     virtual void SAL_CALL releaseContextMenuInterceptor( const REFERENCE< XCONTEXTMENUINTERCEPTOR >& xInterceptor ) throw( RUNTIMEEXCEPTION );
363 
364     virtual void SAL_CALL addKeyHandler( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XKeyHandler >& xHandler ) throw (::com::sun::star::uno::RuntimeException);
365     virtual void SAL_CALL removeKeyHandler( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XKeyHandler >& xHandler ) throw (::com::sun::star::uno::RuntimeException);
366     virtual void SAL_CALL addMouseClickHandler( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseClickHandler >& xHandler ) throw (::com::sun::star::uno::RuntimeException);
367     virtual void SAL_CALL removeMouseClickHandler( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseClickHandler >& xHandler ) throw (::com::sun::star::uno::RuntimeException);
368 
369 	//____________________________________________________________________________________________________
370 	//	XDispatchInformationProvider
371 	//____________________________________________________________________________________________________
372     virtual ::com::sun::star::uno::Sequence< sal_Int16 > SAL_CALL getSupportedCommandGroups() throw (::com::sun::star::uno::RuntimeException);
373     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::frame::DispatchInformation > SAL_CALL getConfigurableDispatchInformation( sal_Int16 nCommandGroup ) throw (::com::sun::star::uno::RuntimeException);
374 
375     // css::frame::XTitle
376     virtual ::rtl::OUString SAL_CALL getTitle(  ) throw (::com::sun::star::uno::RuntimeException);
377     virtual void SAL_CALL setTitle( const ::rtl::OUString& sTitle ) throw (::com::sun::star::uno::RuntimeException);
378 
379     // css::frame::XTitleChangeBroadcaster
380     virtual void SAL_CALL addTitleChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XTitleChangeListener >& xListener )     throw (::com::sun::star::uno::RuntimeException);
381     virtual void SAL_CALL removeTitleChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XTitleChangeListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
382 
383 //#if 0 // _SOLAR__PRIVATE
384     // FIXME: TL needs this in sw/source/ui/uno/unotxdoc.cxx now;
385     // either the _Impl name should vanish or there should be an "official" API
386     SfxViewShell* GetViewShell_Impl() const;
387 	SAL_DLLPRIVATE sal_Bool HandleEvent_Impl( NotifyEvent& rEvent );
388 	SAL_DLLPRIVATE sal_Bool HasKeyListeners_Impl();
389 	SAL_DLLPRIVATE sal_Bool HasMouseClickListeners_Impl();
390     SAL_DLLPRIVATE void SetCreationArguments_Impl( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& i_rCreationArgs );
391     SAL_DLLPRIVATE ::com::sun::star::uno::Reference< ::com::sun::star::frame::XTitle > impl_getTitleHelper ();
392 //#endif
393 private:
394     enum ConnectSfxFrame
395     {
396         E_CONNECT,
397         E_DISCONNECT,
398         E_RECONNECT
399     };
400     SAL_DLLPRIVATE void ConnectSfxFrame_Impl( const ConnectSfxFrame i_eConnect );
401     SAL_DLLPRIVATE SfxViewFrame& GetViewFrame_Impl() const;
402 
403 //________________________________________________________________________________________________________
404 //	private variables
405 //________________________________________________________________________________________________________
406 
407 private:
408 
409 	IMPL_SfxBaseController_DataContainer*	m_pData	;
410 
411 } ;	// class SfxBaseController
412 
413 #endif	// _SFX_SFXBASECONTROLLER_HXX
414