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 DBAUI_GENERICCONTROLLER_HXX
25*b1cdbd2cSJim Jagielski #define DBAUI_GENERICCONTROLLER_HXX
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include "AsyncronousLink.hxx"
28*b1cdbd2cSJim Jagielski #include "controllerframe.hxx"
29*b1cdbd2cSJim Jagielski #include "dbaccessdllapi.h"
30*b1cdbd2cSJim Jagielski #include "IController.hxx"
31*b1cdbd2cSJim Jagielski 
32*b1cdbd2cSJim Jagielski /** === begin UNO includes === **/
33*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XNameAccess.hpp>
34*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/CommandGroup.hpp>
35*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XController2.hpp>
36*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XDispatch.hpp>
37*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XDispatchInformationProvider.hpp>
38*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XDispatchProviderInterceptor.hpp>
39*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XFrameActionListener.hpp>
40*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XTitle.hpp>
41*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XTitleChangeBroadcaster.hpp>
42*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XLayoutManager.hpp>
43*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XInitialization.hpp>
44*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XServiceInfo.hpp>
45*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbc/XConnection.hpp>
46*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbc/XDataSource.hpp>
47*b1cdbd2cSJim Jagielski #include <com/sun/star/uno/XComponentContext.hpp>
48*b1cdbd2cSJim Jagielski #include <com/sun/star/util/XModifyListener.hpp>
49*b1cdbd2cSJim Jagielski #include <com/sun/star/util/XURLTransformer.hpp>
50*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XMultiServiceFactory.hpp>
51*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/XUserInputInterception.hpp>
52*b1cdbd2cSJim Jagielski /** === end UNO includes === **/
53*b1cdbd2cSJim Jagielski 
54*b1cdbd2cSJim Jagielski #include <comphelper/broadcasthelper.hxx>
55*b1cdbd2cSJim Jagielski #include <comphelper/sharedmutex.hxx>
56*b1cdbd2cSJim Jagielski #include <comphelper/namedvaluecollection.hxx>
57*b1cdbd2cSJim Jagielski #include <comphelper/stl_types.hxx>
58*b1cdbd2cSJim Jagielski #include <connectivity/dbexception.hxx>
59*b1cdbd2cSJim Jagielski #include <cppuhelper/compbase11.hxx>
60*b1cdbd2cSJim Jagielski #include <cppuhelper/interfacecontainer.h>
61*b1cdbd2cSJim Jagielski 
62*b1cdbd2cSJim Jagielski #include <boost/optional.hpp>
63*b1cdbd2cSJim Jagielski #include <sfx2/userinputinterception.hxx>
64*b1cdbd2cSJim Jagielski 
65*b1cdbd2cSJim Jagielski namespace dbtools
66*b1cdbd2cSJim Jagielski {
67*b1cdbd2cSJim Jagielski     class SQLExceptionInfo;
68*b1cdbd2cSJim Jagielski }
69*b1cdbd2cSJim Jagielski 
70*b1cdbd2cSJim Jagielski class Window;
71*b1cdbd2cSJim Jagielski class VCLXWindow;
72*b1cdbd2cSJim Jagielski namespace dbaui
73*b1cdbd2cSJim Jagielski {
74*b1cdbd2cSJim Jagielski 	class ODataView;
75*b1cdbd2cSJim Jagielski 
76*b1cdbd2cSJim Jagielski 	// ====================================================================
77*b1cdbd2cSJim Jagielski 	// = optional
78*b1cdbd2cSJim Jagielski 	// ====================================================================
79*b1cdbd2cSJim Jagielski     /** convenience wrapper around boost::optional, allowing typed assignments
80*b1cdbd2cSJim Jagielski     */
81*b1cdbd2cSJim Jagielski     template < typename T >
82*b1cdbd2cSJim Jagielski     class optional : public ::boost::optional< T >
83*b1cdbd2cSJim Jagielski     {
84*b1cdbd2cSJim Jagielski         typedef ::boost::optional< T >  base_type;
85*b1cdbd2cSJim Jagielski 
86*b1cdbd2cSJim Jagielski     public:
optional()87*b1cdbd2cSJim Jagielski                  optional ( ) : base_type( ) { }
optional(T const & val)88*b1cdbd2cSJim Jagielski         explicit optional ( T const& val ) : base_type( val ) { }
optional(optional const & rhs)89*b1cdbd2cSJim Jagielski                  optional ( optional const& rhs ) : base_type( (base_type const&)rhs ) { }
90*b1cdbd2cSJim Jagielski 
91*b1cdbd2cSJim Jagielski     public:
operator =(T const & rhs)92*b1cdbd2cSJim Jagielski         optional& operator= ( T const& rhs )
93*b1cdbd2cSJim Jagielski         {
94*b1cdbd2cSJim Jagielski             base_type::reset( rhs );
95*b1cdbd2cSJim Jagielski             return *this;
96*b1cdbd2cSJim Jagielski         }
operator =(optional<T> const & rhs)97*b1cdbd2cSJim Jagielski         optional& operator= ( optional< T > const& rhs )
98*b1cdbd2cSJim Jagielski         {
99*b1cdbd2cSJim Jagielski             if ( rhs.is_initialized() )
100*b1cdbd2cSJim Jagielski                 base_type::reset( rhs.get() );
101*b1cdbd2cSJim Jagielski             else
102*b1cdbd2cSJim Jagielski                 base_type::reset();
103*b1cdbd2cSJim Jagielski             return *this;
104*b1cdbd2cSJim Jagielski         }
105*b1cdbd2cSJim Jagielski     };
106*b1cdbd2cSJim Jagielski 
107*b1cdbd2cSJim Jagielski     template< typename T >
operator >>=(const::com::sun::star::uno::Any & _any,optional<T> & _value)108*b1cdbd2cSJim Jagielski     inline bool SAL_CALL operator >>= ( const ::com::sun::star::uno::Any & _any, optional< T >& _value )
109*b1cdbd2cSJim Jagielski     {
110*b1cdbd2cSJim Jagielski         _value.reset();  // de-init the optional value
111*b1cdbd2cSJim Jagielski 
112*b1cdbd2cSJim Jagielski         T directValue = T();
113*b1cdbd2cSJim Jagielski         if ( _any >>= directValue )
114*b1cdbd2cSJim Jagielski             _value.reset( directValue );
115*b1cdbd2cSJim Jagielski 
116*b1cdbd2cSJim Jagielski         return !!_value;
117*b1cdbd2cSJim Jagielski     }
118*b1cdbd2cSJim Jagielski 
119*b1cdbd2cSJim Jagielski 	// ====================================================================
120*b1cdbd2cSJim Jagielski 	// = FeatureState
121*b1cdbd2cSJim Jagielski 	// ====================================================================
122*b1cdbd2cSJim Jagielski     /** describes the state of a feature
123*b1cdbd2cSJim Jagielski 
124*b1cdbd2cSJim Jagielski         In opposite to the FeatureStateEvent in css.frame, this one allows for multiple states to be specified at once.
125*b1cdbd2cSJim Jagielski         With this, you can for instance specify that a toolbox item is checked, and has a certain title, at the same
126*b1cdbd2cSJim Jagielski         time.
127*b1cdbd2cSJim Jagielski     */
128*b1cdbd2cSJim Jagielski 	struct FeatureState
129*b1cdbd2cSJim Jagielski 	{
130*b1cdbd2cSJim Jagielski 		sal_Bool					bEnabled;
131*b1cdbd2cSJim Jagielski 
132*b1cdbd2cSJim Jagielski         optional< bool >            bChecked;
133*b1cdbd2cSJim Jagielski         optional< bool >            bInvisible;
134*b1cdbd2cSJim Jagielski         ::com::sun::star::uno::Any  aValue;
135*b1cdbd2cSJim Jagielski         optional< ::rtl::OUString > sTitle;
136*b1cdbd2cSJim Jagielski 
FeatureStatedbaui::FeatureState137*b1cdbd2cSJim Jagielski 		FeatureState() : bEnabled(sal_False) { }
138*b1cdbd2cSJim Jagielski 	};
139*b1cdbd2cSJim Jagielski 
140*b1cdbd2cSJim Jagielski 	// ====================================================================
141*b1cdbd2cSJim Jagielski 	// = helper
142*b1cdbd2cSJim Jagielski 	// ====================================================================
143*b1cdbd2cSJim Jagielski 
144*b1cdbd2cSJim Jagielski 	// ....................................................................
145*b1cdbd2cSJim Jagielski     struct ControllerFeature : public ::com::sun::star::frame::DispatchInformation
146*b1cdbd2cSJim Jagielski     {
147*b1cdbd2cSJim Jagielski         sal_uInt16 nFeatureId;
148*b1cdbd2cSJim Jagielski     };
149*b1cdbd2cSJim Jagielski 
150*b1cdbd2cSJim Jagielski 	// ....................................................................
151*b1cdbd2cSJim Jagielski     typedef ::std::map  <   ::rtl::OUString
152*b1cdbd2cSJim Jagielski                         ,   ControllerFeature
153*b1cdbd2cSJim Jagielski                         ,   ::std::less< ::rtl::OUString >
154*b1cdbd2cSJim Jagielski                         >   SupportedFeatures;
155*b1cdbd2cSJim Jagielski 
156*b1cdbd2cSJim Jagielski 	// ....................................................................
157*b1cdbd2cSJim Jagielski 	struct CompareFeatureById : ::std::binary_function< SupportedFeatures::value_type, sal_Int32, bool >
158*b1cdbd2cSJim Jagielski 	{
159*b1cdbd2cSJim Jagielski 		// ................................................................
operator ()dbaui::CompareFeatureById160*b1cdbd2cSJim Jagielski 		inline bool operator()( const SupportedFeatures::value_type& _aType, const sal_Int32& _nId ) const
161*b1cdbd2cSJim Jagielski 		{
162*b1cdbd2cSJim Jagielski 			return !!( _nId == _aType.second.nFeatureId );
163*b1cdbd2cSJim Jagielski 		}
164*b1cdbd2cSJim Jagielski 	};
165*b1cdbd2cSJim Jagielski 
166*b1cdbd2cSJim Jagielski 	// ....................................................................
167*b1cdbd2cSJim Jagielski 	struct FeatureListener
168*b1cdbd2cSJim Jagielski 	{
169*b1cdbd2cSJim Jagielski 		::com::sun::star::uno::Reference< ::com::sun::star::frame::XStatusListener >
170*b1cdbd2cSJim Jagielski 					xListener;
171*b1cdbd2cSJim Jagielski 		sal_Int32	nId;
172*b1cdbd2cSJim Jagielski 		sal_Bool	bForceBroadcast;
173*b1cdbd2cSJim Jagielski 	};
174*b1cdbd2cSJim Jagielski 
175*b1cdbd2cSJim Jagielski 	// ....................................................................
176*b1cdbd2cSJim Jagielski 	typedef ::std::deque< FeatureListener > FeatureListeners;
177*b1cdbd2cSJim Jagielski 
178*b1cdbd2cSJim Jagielski 	// ....................................................................
179*b1cdbd2cSJim Jagielski 	struct FindFeatureListener : ::std::binary_function< FeatureListener, ::com::sun::star::uno::Reference< ::com::sun::star::frame::XStatusListener >, bool >
180*b1cdbd2cSJim Jagielski 	{
181*b1cdbd2cSJim Jagielski 		// ................................................................
operator ()dbaui::FindFeatureListener182*b1cdbd2cSJim Jagielski 		inline bool operator()( const FeatureListener& lhs, const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XStatusListener >& rhs ) const
183*b1cdbd2cSJim Jagielski 		{
184*b1cdbd2cSJim Jagielski 			return !!( lhs.xListener == rhs );
185*b1cdbd2cSJim Jagielski 		}
186*b1cdbd2cSJim Jagielski 	};
187*b1cdbd2cSJim Jagielski 
188*b1cdbd2cSJim Jagielski 	// ....................................................................
189*b1cdbd2cSJim Jagielski 	typedef ::comphelper::SharedMutexBase   OGenericUnoController_MBASE;
190*b1cdbd2cSJim Jagielski 
191*b1cdbd2cSJim Jagielski     typedef ::cppu::WeakComponentImplHelper11   <   ::com::sun::star::frame::XDispatch
192*b1cdbd2cSJim Jagielski                                                 ,   ::com::sun::star::frame::XDispatchProviderInterceptor
193*b1cdbd2cSJim Jagielski                                                 ,   ::com::sun::star::util::XModifyListener
194*b1cdbd2cSJim Jagielski                                                 ,   ::com::sun::star::frame::XFrameActionListener
195*b1cdbd2cSJim Jagielski                                                 ,   ::com::sun::star::lang::XInitialization
196*b1cdbd2cSJim Jagielski                                                 ,   ::com::sun::star::lang::XServiceInfo
197*b1cdbd2cSJim Jagielski                                                 ,   ::com::sun::star::frame::XDispatchInformationProvider
198*b1cdbd2cSJim Jagielski                                                 ,   ::com::sun::star::frame::XController2
199*b1cdbd2cSJim Jagielski                                                 ,   ::com::sun::star::frame::XTitle
200*b1cdbd2cSJim Jagielski                                                 ,   ::com::sun::star::frame::XTitleChangeBroadcaster
201*b1cdbd2cSJim Jagielski                                                 ,   ::com::sun::star::awt::XUserInputInterception
202*b1cdbd2cSJim Jagielski                                                 >   OGenericUnoController_Base;
203*b1cdbd2cSJim Jagielski 
204*b1cdbd2cSJim Jagielski     struct OGenericUnoController_Data;
205*b1cdbd2cSJim Jagielski 	// ====================================================================
206*b1cdbd2cSJim Jagielski 	class DBACCESS_DLLPUBLIC OGenericUnoController
207*b1cdbd2cSJim Jagielski                                 :public OGenericUnoController_MBASE
208*b1cdbd2cSJim Jagielski 								,public OGenericUnoController_Base
209*b1cdbd2cSJim Jagielski 								,public IController
210*b1cdbd2cSJim Jagielski 	{
211*b1cdbd2cSJim Jagielski     private:
212*b1cdbd2cSJim Jagielski 		SupportedFeatures		        m_aSupportedFeatures;
213*b1cdbd2cSJim Jagielski         ::comphelper::NamedValueCollection
214*b1cdbd2cSJim Jagielski                                         m_aInitParameters;
215*b1cdbd2cSJim Jagielski 
216*b1cdbd2cSJim Jagielski         ::std::auto_ptr< OGenericUnoController_Data >
217*b1cdbd2cSJim Jagielski                                         m_pData;
218*b1cdbd2cSJim Jagielski 		ODataView*				        m_pView;				// our (VCL) "main window"
219*b1cdbd2cSJim Jagielski 
220*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL
221*b1cdbd2cSJim Jagielski         bool                            m_bDescribingSupportedFeatures;
222*b1cdbd2cSJim Jagielski #endif
223*b1cdbd2cSJim Jagielski 
224*b1cdbd2cSJim Jagielski 	protected:
225*b1cdbd2cSJim Jagielski         // ----------------------------------------------------------------
226*b1cdbd2cSJim Jagielski         // attributes
227*b1cdbd2cSJim Jagielski 		struct DispatchTarget
228*b1cdbd2cSJim Jagielski 		{
229*b1cdbd2cSJim Jagielski 			::com::sun::star::util::URL					aURL;
230*b1cdbd2cSJim Jagielski 			::com::sun::star::uno::Reference< ::com::sun::star::frame::XStatusListener > 	xListener;
231*b1cdbd2cSJim Jagielski 
DispatchTargetdbaui::OGenericUnoController::DispatchTarget232*b1cdbd2cSJim Jagielski 			DispatchTarget() { }
DispatchTargetdbaui::OGenericUnoController::DispatchTarget233*b1cdbd2cSJim Jagielski 			DispatchTarget(const ::com::sun::star::util::URL& rURL, const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XStatusListener >  xRef) : aURL(rURL), xListener(xRef) { }
234*b1cdbd2cSJim Jagielski 		};
235*b1cdbd2cSJim Jagielski 
236*b1cdbd2cSJim Jagielski 		DECLARE_STL_MAP( sal_uInt16, FeatureState, ::std::less< sal_uInt16 >, StateCache );
237*b1cdbd2cSJim Jagielski 		DECLARE_STL_VECTOR( DispatchTarget, Dispatch);
238*b1cdbd2cSJim Jagielski 
239*b1cdbd2cSJim Jagielski 		FeatureListeners        m_aFeaturesToInvalidate;
240*b1cdbd2cSJim Jagielski 
241*b1cdbd2cSJim Jagielski 		::osl::Mutex			m_aFeatureMutex;		// locked when features are append to or remove from deque
242*b1cdbd2cSJim Jagielski 		StateCache				m_aStateCache;			// save the current status of feature state
243*b1cdbd2cSJim Jagielski 		Dispatch				m_arrStatusListener;	// all our listeners where we dispatch status changes
244*b1cdbd2cSJim Jagielski 		OAsyncronousLink		m_aAsyncInvalidateAll;
245*b1cdbd2cSJim Jagielski 		OAsyncronousLink		m_aAsyncCloseTask;		// called when a task shoud be closed
246*b1cdbd2cSJim Jagielski 
247*b1cdbd2cSJim Jagielski 		::com::sun::star::uno::Reference< ::com::sun::star::util::XURLTransformer > 		m_xUrlTransformer;		// needed sometimes
248*b1cdbd2cSJim Jagielski 		::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >	m_xServiceFactory;
249*b1cdbd2cSJim Jagielski         ControllerFrame                                                                     m_aCurrentFrame;
250*b1cdbd2cSJim Jagielski 		::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider > 		m_xSlaveDispatcher;		// for intercepting dispatches
251*b1cdbd2cSJim Jagielski 		::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider > 		m_xMasterDispatcher;	// dito
252*b1cdbd2cSJim Jagielski 		::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >		m_xDatabaseContext;
253*b1cdbd2cSJim Jagielski         ::com::sun::star::uno::Reference< ::com::sun::star::frame::XTitle >                 m_xTitleHelper;
254*b1cdbd2cSJim Jagielski 
255*b1cdbd2cSJim Jagielski 		sal_Bool				m_bPreview;
256*b1cdbd2cSJim Jagielski 		sal_Bool				m_bReadOnly;
257*b1cdbd2cSJim Jagielski 
258*b1cdbd2cSJim Jagielski 		sal_Bool				m_bCurrentlyModified	: 1;
259*b1cdbd2cSJim Jagielski         sal_Bool				m_bExternalTitle : 1;
260*b1cdbd2cSJim Jagielski 
261*b1cdbd2cSJim Jagielski 
262*b1cdbd2cSJim Jagielski 
263*b1cdbd2cSJim Jagielski         // ----------------------------------------------------------------
264*b1cdbd2cSJim Jagielski         // attribute access
getMutex() const265*b1cdbd2cSJim Jagielski 		::osl::Mutex&				getMutex() const            { return OGenericUnoController_MBASE::getMutex(); }
getBroadcastHelper()266*b1cdbd2cSJim Jagielski 		::cppu::OBroadcastHelper&	getBroadcastHelper()        { return OGenericUnoController_Base::rBHelper; }
267*b1cdbd2cSJim Jagielski 
268*b1cdbd2cSJim Jagielski         // ----------------------------------------------------------------
269*b1cdbd2cSJim Jagielski         // methods
270*b1cdbd2cSJim Jagielski         OGenericUnoController( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rM );
271*b1cdbd2cSJim Jagielski         const ::comphelper::NamedValueCollection&
getInitParams() const272*b1cdbd2cSJim Jagielski                                     getInitParams() const   { return m_aInitParameters; }
273*b1cdbd2cSJim Jagielski 
274*b1cdbd2cSJim Jagielski 
275*b1cdbd2cSJim Jagielski 		/** open the help agent for the given help id.
276*b1cdbd2cSJim Jagielski 			@param	_nHelpId
277*b1cdbd2cSJim Jagielski 				The help id to dispatch.
278*b1cdbd2cSJim Jagielski 		*/
279*b1cdbd2cSJim Jagielski 		void openHelpAgent( const rtl::OString& _sHelpId );
280*b1cdbd2cSJim Jagielski 
281*b1cdbd2cSJim Jagielski         /** open the help agent for the given help url.
282*b1cdbd2cSJim Jagielski 			@param	_pHelpStringURL
283*b1cdbd2cSJim Jagielski 				The help url to dispatch.
284*b1cdbd2cSJim Jagielski 		*/
285*b1cdbd2cSJim Jagielski 		void openHelpAgent( const rtl::OUString& _suHelpStringURL );
286*b1cdbd2cSJim Jagielski 
287*b1cdbd2cSJim Jagielski         /** opens the given Help URL in the help agent
288*b1cdbd2cSJim Jagielski 
289*b1cdbd2cSJim Jagielski             The URL does not need to be parsed already, it is passed through
290*b1cdbd2cSJim Jagielski             XURLTransformer::parseStrict before it is used.
291*b1cdbd2cSJim Jagielski         */
292*b1cdbd2cSJim Jagielski         void openHelpAgent( const ::com::sun::star::util::URL& _rURL );
293*b1cdbd2cSJim Jagielski 
294*b1cdbd2cSJim Jagielski 		// closes the task when possible
295*b1cdbd2cSJim Jagielski 		void closeTask();
296*b1cdbd2cSJim Jagielski 
297*b1cdbd2cSJim Jagielski         // if getMenu returns a non empty string than this will be dispatched at the frame
298*b1cdbd2cSJim Jagielski 		virtual void			loadMenu(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& _xFrame);
299*b1cdbd2cSJim Jagielski 
300*b1cdbd2cSJim Jagielski 		/** called when our menu has been loaded into our frame, can be used to load sub toolbars
301*b1cdbd2cSJim Jagielski 
302*b1cdbd2cSJim Jagielski             @param _xLayoutManager
303*b1cdbd2cSJim Jagielski 				The layout manager.
304*b1cdbd2cSJim Jagielski 		*/
305*b1cdbd2cSJim Jagielski         virtual void			onLoadedMenu(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XLayoutManager >& _xLayoutManager);
306*b1cdbd2cSJim Jagielski 
307*b1cdbd2cSJim Jagielski 		// all the features which should be handled by this class
308*b1cdbd2cSJim Jagielski 		virtual void			describeSupportedFeatures();
309*b1cdbd2cSJim Jagielski 
310*b1cdbd2cSJim Jagielski 		// state of a feature. 'feature' may be the handle of a ::com::sun::star::util::URL somebody requested a dispatch interface for OR a toolbar slot.
311*b1cdbd2cSJim Jagielski 		virtual FeatureState	GetState(sal_uInt16 nId) const;
312*b1cdbd2cSJim Jagielski 		// execute a feature
313*b1cdbd2cSJim Jagielski 		virtual void			Execute(sal_uInt16 nId , const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue>& aArgs);
314*b1cdbd2cSJim Jagielski 
315*b1cdbd2cSJim Jagielski         /** describes a feature supported by the controller
316*b1cdbd2cSJim Jagielski 
317*b1cdbd2cSJim Jagielski             Must not be called outside <member>describeSupportedFeatures</member>.
318*b1cdbd2cSJim Jagielski 
319*b1cdbd2cSJim Jagielski             @param _pAsciiCommandURL
320*b1cdbd2cSJim Jagielski                 the URL of the feature command
321*b1cdbd2cSJim Jagielski             @param _nFeatureId
322*b1cdbd2cSJim Jagielski                 the id of the feature. Later references to this feature usually happen by id, not by
323*b1cdbd2cSJim Jagielski                 URL
324*b1cdbd2cSJim Jagielski             @param _nCommandGroup
325*b1cdbd2cSJim Jagielski                 the command group of the feature. This is important for configuring the controller UI
326*b1cdbd2cSJim Jagielski                 by the user, see also <type scope="com::sun::star::frame">CommandGroup</type>.
327*b1cdbd2cSJim Jagielski         */
328*b1cdbd2cSJim Jagielski         void    implDescribeSupportedFeature(
329*b1cdbd2cSJim Jagielski                     const sal_Char* _pAsciiCommandURL,
330*b1cdbd2cSJim Jagielski                     sal_uInt16 _nFeatureId,
331*b1cdbd2cSJim Jagielski                     sal_Int16 _nCommandGroup = ::com::sun::star::frame::CommandGroup::INTERNAL
332*b1cdbd2cSJim Jagielski                 );
333*b1cdbd2cSJim Jagielski 
334*b1cdbd2cSJim Jagielski 		/** returns <TRUE/> if the feature is supported, otherwise <FALSE/>
335*b1cdbd2cSJim Jagielski 			@param	_nId
336*b1cdbd2cSJim Jagielski 				The ID of the feature.
337*b1cdbd2cSJim Jagielski 		*/
338*b1cdbd2cSJim Jagielski 		sal_Bool isFeatureSupported( sal_Int32 _nId );
339*b1cdbd2cSJim Jagielski 
340*b1cdbd2cSJim Jagielski         // gets the URL which the given id is assigned to
341*b1cdbd2cSJim Jagielski 		::com::sun::star::util::URL getURLForId(sal_Int32 _nId) const;
342*b1cdbd2cSJim Jagielski 
343*b1cdbd2cSJim Jagielski         /** determines whether the given feature ID denotes a user-defined feature
344*b1cdbd2cSJim Jagielski 
345*b1cdbd2cSJim Jagielski             @see IController::registerCommandURL
346*b1cdbd2cSJim Jagielski         */
347*b1cdbd2cSJim Jagielski         bool    isUserDefinedFeature( const sal_uInt16 nFeatureId ) const;
348*b1cdbd2cSJim Jagielski 
349*b1cdbd2cSJim Jagielski         /** determines whether the given feature URL denotes a user-defined feature
350*b1cdbd2cSJim Jagielski 
351*b1cdbd2cSJim Jagielski             @see IController::registerCommandURL
352*b1cdbd2cSJim Jagielski         */
353*b1cdbd2cSJim Jagielski         bool    isUserDefinedFeature( const ::rtl::OUString& _rFeatureURL ) const;
354*b1cdbd2cSJim Jagielski 
355*b1cdbd2cSJim Jagielski 		// connect to a datasource
356*b1cdbd2cSJim Jagielski 		::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection > connect(
357*b1cdbd2cSJim Jagielski 			const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDataSource>& _xDataSource,
358*b1cdbd2cSJim Jagielski             ::dbtools::SQLExceptionInfo* _pErrorInfo
359*b1cdbd2cSJim Jagielski 		);
360*b1cdbd2cSJim Jagielski 
361*b1cdbd2cSJim Jagielski 		// connect to a datasource
362*b1cdbd2cSJim Jagielski 		::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection > connect(
363*b1cdbd2cSJim Jagielski 			const ::rtl::OUString& _rsDataSourceName,
364*b1cdbd2cSJim Jagielski 			const ::rtl::OUString& _rContextInformation,
365*b1cdbd2cSJim Jagielski             ::dbtools::SQLExceptionInfo* _pErrorInfo
366*b1cdbd2cSJim Jagielski 		);
367*b1cdbd2cSJim Jagielski 
368*b1cdbd2cSJim Jagielski 		void startConnectionListening(const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxConnection);
369*b1cdbd2cSJim Jagielski 		void stopConnectionListening(const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxConnection);
370*b1cdbd2cSJim Jagielski 
371*b1cdbd2cSJim Jagielski 		/** return the container window of the top most frame
372*b1cdbd2cSJim Jagielski 			@return
373*b1cdbd2cSJim Jagielski 				The top most container window, nmay be <NULL/>.
374*b1cdbd2cSJim Jagielski 		*/
375*b1cdbd2cSJim Jagielski 		::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow> getTopMostContainerWindow() const;
376*b1cdbd2cSJim Jagielski 
377*b1cdbd2cSJim Jagielski 		// XInitialize will be called inside initialize
378*b1cdbd2cSJim Jagielski 		virtual void impl_initialize();
379*b1cdbd2cSJim Jagielski 
getPrivateTitle() const380*b1cdbd2cSJim Jagielski         virtual ::rtl::OUString getPrivateTitle() const { return ::rtl::OUString(); }
381*b1cdbd2cSJim Jagielski 
382*b1cdbd2cSJim Jagielski         ::com::sun::star::uno::Reference< ::com::sun::star::frame::XTitle > impl_getTitleHelper_throw();
getPrivateModel() const383*b1cdbd2cSJim Jagielski         virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > getPrivateModel() const
384*b1cdbd2cSJim Jagielski         {
385*b1cdbd2cSJim Jagielski             return ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >();
386*b1cdbd2cSJim Jagielski         }
387*b1cdbd2cSJim Jagielski 
388*b1cdbd2cSJim Jagielski         virtual void    startFrameListening( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& _rxFrame );
389*b1cdbd2cSJim Jagielski         virtual void    stopFrameListening( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& _rxFrame );
390*b1cdbd2cSJim Jagielski 
391*b1cdbd2cSJim Jagielski         void releaseNumberForComponent();
392*b1cdbd2cSJim Jagielski 
393*b1cdbd2cSJim Jagielski         virtual ~OGenericUnoController();
394*b1cdbd2cSJim Jagielski 
395*b1cdbd2cSJim Jagielski     private:
396*b1cdbd2cSJim Jagielski         void fillSupportedFeatures();
397*b1cdbd2cSJim Jagielski 
398*b1cdbd2cSJim Jagielski 		void InvalidateAll_Impl();
399*b1cdbd2cSJim Jagielski 		void InvalidateFeature_Impl();
400*b1cdbd2cSJim Jagielski 
401*b1cdbd2cSJim Jagielski 		void ImplInvalidateFeature( sal_Int32 _nId, const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XStatusListener >& _xListener, sal_Bool _bForceBroadcast );
402*b1cdbd2cSJim Jagielski 
403*b1cdbd2cSJim Jagielski 		sal_Bool ImplInvalidateTBItem(sal_uInt16 nId, const FeatureState& rState);
404*b1cdbd2cSJim Jagielski 		void ImplBroadcastFeatureState(const ::rtl::OUString& _rFeature, const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XStatusListener > & xListener, sal_Bool _bIgnoreCache);
405*b1cdbd2cSJim Jagielski 
406*b1cdbd2cSJim Jagielski 		// link methods
407*b1cdbd2cSJim Jagielski 		DECL_LINK(OnAsyncInvalidateAll, void*);
408*b1cdbd2cSJim Jagielski 		DECL_LINK(OnAsyncCloseTask, void*);
409*b1cdbd2cSJim Jagielski 
410*b1cdbd2cSJim Jagielski 	public:
getORB() const411*b1cdbd2cSJim Jagielski 		::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >  getORB() const { return m_xServiceFactory; }
getView() const412*b1cdbd2cSJim Jagielski 		ODataView*  getView() const { return m_pView; }
setView(ODataView & i_rView)413*b1cdbd2cSJim Jagielski         void        setView( ODataView& i_rView ) { m_pView = &i_rView; }
clearView()414*b1cdbd2cSJim Jagielski         void        clearView() { m_pView = NULL; }
415*b1cdbd2cSJim Jagielski 		// shows a error box if the SQLExceptionInfo is valid
416*b1cdbd2cSJim Jagielski 		void showError(const ::dbtools::SQLExceptionInfo& _rInfo);
417*b1cdbd2cSJim Jagielski 
418*b1cdbd2cSJim Jagielski 		// if xListener is NULL the change will be forwarded to all listeners to the given ::com::sun::star::util::URL
419*b1cdbd2cSJim Jagielski 		// if _bForceBroadcast is sal_True, the current feature state is broadcasted no matter if it is the same as the cached state
420*b1cdbd2cSJim Jagielski 		virtual void InvalidateFeature(const ::rtl::OUString& rURLPath, const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XStatusListener > & xListener = NULL, sal_Bool _bForceBroadcast = sal_False);
421*b1cdbd2cSJim Jagielski 		// if there is an ::com::sun::star::util::URL translation for the id ('handle') the preceding InvalidateFeature is used.
422*b1cdbd2cSJim Jagielski 		// if there is a toolbar slot with the given id it is updated (the new state is determined via GetState)
423*b1cdbd2cSJim Jagielski 		// if _bForceBroadcast is sal_True, the current feature state is broadcasted no matter if it is the same as the cached state
424*b1cdbd2cSJim Jagielski         virtual void InvalidateFeature(sal_uInt16 nId, const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XStatusListener > & xListener = NULL, sal_Bool _bForceBroadcast = sal_False);
425*b1cdbd2cSJim Jagielski 
426*b1cdbd2cSJim Jagielski 		/** InvalidateAll invalidates all features currently known
427*b1cdbd2cSJim Jagielski 		*/
428*b1cdbd2cSJim Jagielski 		virtual void InvalidateAll();
429*b1cdbd2cSJim Jagielski 		// late construction
430*b1cdbd2cSJim Jagielski 		virtual sal_Bool Construct(Window* pParent);
431*b1cdbd2cSJim Jagielski 
432*b1cdbd2cSJim Jagielski 		/** get the layout manager
433*b1cdbd2cSJim Jagielski 			@param	_xFrame
434*b1cdbd2cSJim Jagielski 				The frame to ask for the layout manager.
435*b1cdbd2cSJim Jagielski 			@return
436*b1cdbd2cSJim Jagielski 				The layout manager of the frame, can be <NULL/> if the frame isn't initialized.
437*b1cdbd2cSJim Jagielski 		*/
438*b1cdbd2cSJim Jagielski         ::com::sun::star::uno::Reference< ::com::sun::star::frame::XLayoutManager > getLayoutManager(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& _xFrame) const;
439*b1cdbd2cSJim Jagielski 
440*b1cdbd2cSJim Jagielski 		// IController
441*b1cdbd2cSJim Jagielski 		virtual void executeUnChecked(const ::com::sun::star::util::URL& _rCommand, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue>& aArgs);
442*b1cdbd2cSJim Jagielski 		virtual void executeChecked(const ::com::sun::star::util::URL& _rCommand, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue>& aArgs);
443*b1cdbd2cSJim Jagielski 		virtual void executeUnChecked(sal_uInt16 _nCommandId, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue>& aArgs);
444*b1cdbd2cSJim Jagielski 		virtual void executeChecked(sal_uInt16 _nCommandId, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue>& aArgs);
445*b1cdbd2cSJim Jagielski 		virtual sal_Bool isCommandEnabled(sal_uInt16 _nCommandId) const;
446*b1cdbd2cSJim Jagielski         virtual sal_Bool isCommandEnabled(const ::rtl::OUString& _rCompleteCommandURL) const;
447*b1cdbd2cSJim Jagielski         virtual sal_uInt16 registerCommandURL( const ::rtl::OUString& _rCompleteCommandURL );
448*b1cdbd2cSJim Jagielski         virtual void notifyHiContrastChanged();
449*b1cdbd2cSJim Jagielski 		virtual sal_Bool isDataSourceReadOnly() const;
450*b1cdbd2cSJim Jagielski 		virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XController > getXController() throw( ::com::sun::star::uno::RuntimeException );
451*b1cdbd2cSJim Jagielski         virtual bool interceptUserInput( const NotifyEvent& _rEvent );
452*b1cdbd2cSJim Jagielski 
453*b1cdbd2cSJim Jagielski         // misc
454*b1cdbd2cSJim Jagielski         virtual sal_Bool isCommandChecked(sal_uInt16 _nCommandId) const;
455*b1cdbd2cSJim Jagielski 
456*b1cdbd2cSJim Jagielski 	    // ::com::sun::star::lang::XEventListener
457*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw( ::com::sun::star::uno::RuntimeException );
458*b1cdbd2cSJim Jagielski 
459*b1cdbd2cSJim Jagielski 		// ::com::sun::star::util::XModifyListener
460*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL modified(const ::com::sun::star::lang::EventObject& aEvent) throw( ::com::sun::star::uno::RuntimeException );
461*b1cdbd2cSJim Jagielski 
462*b1cdbd2cSJim Jagielski 		// XInterface
463*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL acquire(  ) throw ();
464*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL release(  ) throw ();
465*b1cdbd2cSJim Jagielski 
466*b1cdbd2cSJim Jagielski         // ::com::sun::star::frame::XController2
467*b1cdbd2cSJim Jagielski         virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > SAL_CALL getComponentWindow() throw (::com::sun::star::uno::RuntimeException);
468*b1cdbd2cSJim Jagielski         virtual ::rtl::OUString SAL_CALL getViewControllerName() throw (::com::sun::star::uno::RuntimeException);
469*b1cdbd2cSJim Jagielski         virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > SAL_CALL getCreationArguments() throw (::com::sun::star::uno::RuntimeException);
470*b1cdbd2cSJim Jagielski 
471*b1cdbd2cSJim Jagielski 		// ::com::sun::star::frame::XController
472*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL attachFrame(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame > & xFrame) throw( ::com::sun::star::uno::RuntimeException );
473*b1cdbd2cSJim Jagielski 		virtual sal_Bool SAL_CALL attachModel(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > & xModel) throw( ::com::sun::star::uno::RuntimeException );
474*b1cdbd2cSJim Jagielski 		virtual sal_Bool SAL_CALL suspend(sal_Bool bSuspend) throw( ::com::sun::star::uno::RuntimeException ) = 0;
475*b1cdbd2cSJim Jagielski 		virtual ::com::sun::star::uno::Any SAL_CALL getViewData(void) throw( ::com::sun::star::uno::RuntimeException );
476*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL restoreViewData(const ::com::sun::star::uno::Any& Data) throw( ::com::sun::star::uno::RuntimeException );
477*b1cdbd2cSJim Jagielski 		virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >  SAL_CALL getModel(void) throw( ::com::sun::star::uno::RuntimeException );
478*b1cdbd2cSJim Jagielski 		virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >  SAL_CALL getFrame(void) throw( ::com::sun::star::uno::RuntimeException );
479*b1cdbd2cSJim Jagielski 
480*b1cdbd2cSJim Jagielski 		// ::com::sun::star::frame::XDispatch
481*b1cdbd2cSJim Jagielski 		virtual void 		SAL_CALL dispatch(const ::com::sun::star::util::URL& aURL, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue>& aArgs) throw(::com::sun::star::uno::RuntimeException);
482*b1cdbd2cSJim Jagielski 		virtual void 		SAL_CALL addStatusListener(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XStatusListener > & aListener, const ::com::sun::star::util::URL& aURL) throw(::com::sun::star::uno::RuntimeException);
483*b1cdbd2cSJim Jagielski 		virtual void 		SAL_CALL removeStatusListener(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XStatusListener > & aListener, const ::com::sun::star::util::URL& aURL) throw(::com::sun::star::uno::RuntimeException);
484*b1cdbd2cSJim Jagielski 
485*b1cdbd2cSJim Jagielski 		// ::com::sun::star::frame::XDispatchProviderInterceptor
486*b1cdbd2cSJim Jagielski 		virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider >  SAL_CALL getSlaveDispatchProvider(void) throw(::com::sun::star::uno::RuntimeException);
487*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL setSlaveDispatchProvider(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider > & _xNewProvider) throw(::com::sun::star::uno::RuntimeException);
488*b1cdbd2cSJim Jagielski 		virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider >  SAL_CALL getMasterDispatchProvider(void) throw(::com::sun::star::uno::RuntimeException);
489*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL setMasterDispatchProvider(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider > & _xNewProvider) throw(::com::sun::star::uno::RuntimeException);
490*b1cdbd2cSJim Jagielski 
491*b1cdbd2cSJim Jagielski 		// ::com::sun::star::frame::XDispatchProvider
492*b1cdbd2cSJim Jagielski 		virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch >  SAL_CALL queryDispatch(const ::com::sun::star::util::URL& aURL, const ::rtl::OUString& aTargetFrameName, sal_Int32 nSearchFlags) throw( ::com::sun::star::uno::RuntimeException );
493*b1cdbd2cSJim Jagielski 		virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch >  > SAL_CALL queryDispatches(const ::com::sun::star::uno::Sequence< ::com::sun::star::frame::DispatchDescriptor >& aDescripts) throw( ::com::sun::star::uno::RuntimeException );
494*b1cdbd2cSJim Jagielski 
495*b1cdbd2cSJim Jagielski 		// ::com::sun::star::lang::XComponent
496*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL dispose() throw(::com::sun::star::uno::RuntimeException); //LLA: need solar mutex {OGenericUnoController_COMPBASE::dispose(); }
497*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL disposing();
498*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL addEventListener(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener > & aListener) throw(::com::sun::star::uno::RuntimeException);
499*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL removeEventListener(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener > & aListener) throw(::com::sun::star::uno::RuntimeException);
500*b1cdbd2cSJim Jagielski 
501*b1cdbd2cSJim Jagielski 		// ::com::sun::star::frame::XFrameActionListener
502*b1cdbd2cSJim Jagielski 		virtual void		SAL_CALL frameAction(const ::com::sun::star::frame::FrameActionEvent& aEvent) throw( ::com::sun::star::uno::RuntimeException );
503*b1cdbd2cSJim Jagielski 		// lang::XInitialization
504*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments ) throw(::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
505*b1cdbd2cSJim Jagielski 
506*b1cdbd2cSJim Jagielski         // XServiceInfo
507*b1cdbd2cSJim Jagielski         virtual ::rtl::OUString SAL_CALL getImplementationName() throw(::com::sun::star::uno::RuntimeException) = 0;
508*b1cdbd2cSJim Jagielski 		virtual sal_Bool SAL_CALL supportsService(const ::rtl::OUString& ServiceName) throw(::com::sun::star::uno::RuntimeException);
509*b1cdbd2cSJim Jagielski 		virtual ::com::sun::star::uno::Sequence< ::rtl::OUString> SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException) = 0;
510*b1cdbd2cSJim Jagielski 
511*b1cdbd2cSJim Jagielski         // XDispatchInformationProvider
512*b1cdbd2cSJim Jagielski         virtual ::com::sun::star::uno::Sequence< ::sal_Int16 > SAL_CALL getSupportedCommandGroups() throw (::com::sun::star::uno::RuntimeException);
513*b1cdbd2cSJim Jagielski         virtual ::com::sun::star::uno::Sequence< ::com::sun::star::frame::DispatchInformation > SAL_CALL getConfigurableDispatchInformation( ::sal_Int16 ) throw (::com::sun::star::uno::RuntimeException);
514*b1cdbd2cSJim Jagielski 
515*b1cdbd2cSJim Jagielski         // XTitle
516*b1cdbd2cSJim Jagielski         virtual ::rtl::OUString SAL_CALL getTitle(  ) throw (::com::sun::star::uno::RuntimeException);
517*b1cdbd2cSJim Jagielski         virtual void SAL_CALL setTitle( const ::rtl::OUString& sTitle ) throw (::com::sun::star::uno::RuntimeException);
518*b1cdbd2cSJim Jagielski 
519*b1cdbd2cSJim Jagielski         // XTitleChangeBroadcaster
520*b1cdbd2cSJim Jagielski         virtual void SAL_CALL addTitleChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XTitleChangeListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
521*b1cdbd2cSJim Jagielski         virtual void SAL_CALL removeTitleChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XTitleChangeListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
522*b1cdbd2cSJim Jagielski 
523*b1cdbd2cSJim Jagielski         // XUserInputInterception
524*b1cdbd2cSJim Jagielski         virtual void SAL_CALL addKeyHandler( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XKeyHandler >& xHandler ) throw (::com::sun::star::uno::RuntimeException);
525*b1cdbd2cSJim Jagielski         virtual void SAL_CALL removeKeyHandler( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XKeyHandler >& xHandler ) throw (::com::sun::star::uno::RuntimeException);
526*b1cdbd2cSJim Jagielski         virtual void SAL_CALL addMouseClickHandler( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseClickHandler >& xHandler ) throw (::com::sun::star::uno::RuntimeException);
527*b1cdbd2cSJim Jagielski         virtual void SAL_CALL removeMouseClickHandler( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseClickHandler >& xHandler ) throw (::com::sun::star::uno::RuntimeException);
528*b1cdbd2cSJim Jagielski 
529*b1cdbd2cSJim Jagielski     protected:
530*b1cdbd2cSJim Jagielski #ifdef WNT
531*b1cdbd2cSJim Jagielski         OGenericUnoController();    // never implemented
532*b1cdbd2cSJim Jagielski #endif
533*b1cdbd2cSJim Jagielski 	};
534*b1cdbd2cSJim Jagielski }
535*b1cdbd2cSJim Jagielski 
536*b1cdbd2cSJim Jagielski #endif //DBAUI_GENERICCONTROLLER_HXX
537*b1cdbd2cSJim Jagielski 
538*b1cdbd2cSJim Jagielski 
539