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 FORMS_SOURCE_CLICKABLEIMAGE_HXX
25*b1cdbd2cSJim Jagielski #define FORMS_SOURCE_CLICKABLEIMAGE_HXX
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include "FormComponent.hxx"
28*b1cdbd2cSJim Jagielski #include "EventThread.hxx"
29*b1cdbd2cSJim Jagielski #include "imgprod.hxx"
30*b1cdbd2cSJim Jagielski #include <tools/link.hxx>
31*b1cdbd2cSJim Jagielski #include <comphelper/propmultiplex.hxx>
32*b1cdbd2cSJim Jagielski #include <com/sun/star/form/XImageProducerSupplier.hpp>
33*b1cdbd2cSJim Jagielski #include <com/sun/star/form/FormButtonType.hpp>
34*b1cdbd2cSJim Jagielski #include <com/sun/star/form/XApproveActionListener.hpp>
35*b1cdbd2cSJim Jagielski #include <com/sun/star/form/XApproveActionBroadcaster.hpp>
36*b1cdbd2cSJim Jagielski #include <com/sun/star/form/submission/XSubmissionSupplier.hpp>
37*b1cdbd2cSJim Jagielski #include <com/sun/star/form/submission/XSubmission.hpp>
38*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XModel.hpp>
39*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XDispatchProviderInterception.hpp>
40*b1cdbd2cSJim Jagielski #include <cppuhelper/implbase3.hxx>
41*b1cdbd2cSJim Jagielski 
42*b1cdbd2cSJim Jagielski 
43*b1cdbd2cSJim Jagielski class SfxMedium;
44*b1cdbd2cSJim Jagielski 
45*b1cdbd2cSJim Jagielski //.........................................................................
46*b1cdbd2cSJim Jagielski namespace frm
47*b1cdbd2cSJim Jagielski {
48*b1cdbd2cSJim Jagielski //.........................................................................
49*b1cdbd2cSJim Jagielski 
50*b1cdbd2cSJim Jagielski     class OImageProducerThread_Impl;
51*b1cdbd2cSJim Jagielski     class ControlFeatureInterception;
52*b1cdbd2cSJim Jagielski     //==================================================================
53*b1cdbd2cSJim Jagielski     // OClickableImageBaseModel
54*b1cdbd2cSJim Jagielski     //==================================================================
55*b1cdbd2cSJim Jagielski     typedef ::cppu::ImplHelper3 <   ::com::sun::star::form::XImageProducerSupplier
56*b1cdbd2cSJim Jagielski                                 ,   ::com::sun::star::awt::XImageProducer
57*b1cdbd2cSJim Jagielski                                 ,   ::com::sun::star::form::submission::XSubmissionSupplier
58*b1cdbd2cSJim Jagielski                                 >   OClickableImageBaseModel_Base;
59*b1cdbd2cSJim Jagielski 
60*b1cdbd2cSJim Jagielski     class OClickableImageBaseModel  :public OClickableImageBaseModel_Base
61*b1cdbd2cSJim Jagielski                                     ,public OControlModel
62*b1cdbd2cSJim Jagielski                                     ,public OPropertyChangeListener
63*b1cdbd2cSJim Jagielski     {
64*b1cdbd2cSJim Jagielski     protected:
65*b1cdbd2cSJim Jagielski 	    ::com::sun::star::form::FormButtonType	m_eButtonType;		// Art des Buttons (push,submit,reset)
66*b1cdbd2cSJim Jagielski 	    ::rtl::OUString							m_sTargetURL;		// URL fuer den URL-Button
67*b1cdbd2cSJim Jagielski 	    ::rtl::OUString							m_sTargetFrame;		// TargetFrame zum Oeffnen
68*b1cdbd2cSJim Jagielski 
69*b1cdbd2cSJim Jagielski         // ImageProducer stuff
70*b1cdbd2cSJim Jagielski 	    ::com::sun::star::uno::Reference< ::com::sun::star::awt::XImageProducer>  	m_xProducer;
71*b1cdbd2cSJim Jagielski 	    SfxMedium*								m_pMedium;			// Download-Medium
72*b1cdbd2cSJim Jagielski 	    ImageProducer*							m_pProducer;
73*b1cdbd2cSJim Jagielski 	    sal_Bool								m_bDispatchUrlInternal; // property: is not allowed to set : 1
74*b1cdbd2cSJim Jagielski 	    sal_Bool								m_bDownloading : 1;	// laeuft ein Download?
75*b1cdbd2cSJim Jagielski 	    sal_Bool 								m_bProdStarted : 1;
76*b1cdbd2cSJim Jagielski 
77*b1cdbd2cSJim Jagielski         // XSubmission stuff
78*b1cdbd2cSJim Jagielski         ::com::sun::star::uno::Reference< ::com::sun::star::form::submission::XSubmission >
79*b1cdbd2cSJim Jagielski                                                 m_xSubmissionDelegate;
80*b1cdbd2cSJim Jagielski 
81*b1cdbd2cSJim Jagielski 
82*b1cdbd2cSJim Jagielski 	    DECL_STATIC_LINK( OClickableImageBaseModel, DataAvailableLink, void* );
83*b1cdbd2cSJim Jagielski 	    DECL_STATIC_LINK( OClickableImageBaseModel, DownloadDoneLink, void* );
84*b1cdbd2cSJim Jagielski 
GetImageProducer()85*b1cdbd2cSJim Jagielski 	    inline ImageProducer* GetImageProducer() { return m_pProducer; }
86*b1cdbd2cSJim Jagielski 
87*b1cdbd2cSJim Jagielski 	    void StartProduction();
88*b1cdbd2cSJim Jagielski 	    void SetURL(const ::rtl::OUString& rURL);
89*b1cdbd2cSJim Jagielski 	    void DataAvailable();
90*b1cdbd2cSJim Jagielski 	    void DownloadDone();
91*b1cdbd2cSJim Jagielski 
92*b1cdbd2cSJim Jagielski 	    ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> _getTypes();
isDispatchUrlInternal() const93*b1cdbd2cSJim Jagielski 	    inline sal_Bool isDispatchUrlInternal() const { return m_bDispatchUrlInternal; }
setDispatchUrlInternal(sal_Bool _bDispatch)94*b1cdbd2cSJim Jagielski 	    inline void		setDispatchUrlInternal(sal_Bool _bDispatch) { m_bDispatchUrlInternal = _bDispatch; }
95*b1cdbd2cSJim Jagielski 
96*b1cdbd2cSJim Jagielski     public:
97*b1cdbd2cSJim Jagielski 	    DECLARE_DEFAULT_XTOR( OClickableImageBaseModel );
98*b1cdbd2cSJim Jagielski 
99*b1cdbd2cSJim Jagielski 	    // UNO Anbindung
100*b1cdbd2cSJim Jagielski 	    DECLARE_UNO3_AGG_DEFAULTS(OClickableImageBaseModel, OControlModel);
101*b1cdbd2cSJim Jagielski 	    virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation(const ::com::sun::star::uno::Type& _rType) throw(::com::sun::star::uno::RuntimeException);
102*b1cdbd2cSJim Jagielski 
103*b1cdbd2cSJim Jagielski     protected:
104*b1cdbd2cSJim Jagielski         // OComponentHelper
105*b1cdbd2cSJim Jagielski 	    virtual void SAL_CALL disposing();
106*b1cdbd2cSJim Jagielski 
107*b1cdbd2cSJim Jagielski         // ::com::sun::star::form::XImageProducerSupplier
getImageProducer()108*b1cdbd2cSJim Jagielski 	    virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XImageProducer> SAL_CALL getImageProducer() throw (::com::sun::star::uno::RuntimeException) { return m_xProducer; }
109*b1cdbd2cSJim Jagielski 
110*b1cdbd2cSJim Jagielski         // OPropertySetHelper
111*b1cdbd2cSJim Jagielski 	    virtual void SAL_CALL getFastPropertyValue(::com::sun::star::uno::Any& rValue, sal_Int32 nHandle ) const;
112*b1cdbd2cSJim Jagielski 	    virtual void SAL_CALL setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue) throw (::com::sun::star::uno::Exception);
113*b1cdbd2cSJim Jagielski 
114*b1cdbd2cSJim Jagielski 	    virtual sal_Bool SAL_CALL convertFastPropertyValue(::com::sun::star::uno::Any& rConvertedValue, ::com::sun::star::uno::Any& rOldValue, sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue )
115*b1cdbd2cSJim Jagielski 		    throw(::com::sun::star::lang::IllegalArgumentException);
116*b1cdbd2cSJim Jagielski 
117*b1cdbd2cSJim Jagielski         using ::cppu::OPropertySetHelper::getFastPropertyValue;
118*b1cdbd2cSJim Jagielski 
119*b1cdbd2cSJim Jagielski         // OPropertyChangeListener
120*b1cdbd2cSJim Jagielski 	    virtual void _propertyChanged(const ::com::sun::star::beans::PropertyChangeEvent&) throw(::com::sun::star::uno::RuntimeException);
121*b1cdbd2cSJim Jagielski 
122*b1cdbd2cSJim Jagielski         // XPropertyState
123*b1cdbd2cSJim Jagielski 	    virtual ::com::sun::star::uno::Any getPropertyDefaultByHandle( sal_Int32 nHandle ) const;
124*b1cdbd2cSJim Jagielski 
125*b1cdbd2cSJim Jagielski         // XImageProducer
126*b1cdbd2cSJim Jagielski         virtual void SAL_CALL addConsumer( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XImageConsumer >& xConsumer ) throw (::com::sun::star::uno::RuntimeException);
127*b1cdbd2cSJim Jagielski         virtual void SAL_CALL removeConsumer( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XImageConsumer >& xConsumer ) throw (::com::sun::star::uno::RuntimeException);
128*b1cdbd2cSJim Jagielski         virtual void SAL_CALL startProduction(  ) throw (::com::sun::star::uno::RuntimeException);
129*b1cdbd2cSJim Jagielski 
130*b1cdbd2cSJim Jagielski         // XSubmissionSupplier
131*b1cdbd2cSJim Jagielski         virtual ::com::sun::star::uno::Reference< ::com::sun::star::form::submission::XSubmission > SAL_CALL getSubmission() throw (::com::sun::star::uno::RuntimeException);
132*b1cdbd2cSJim Jagielski         virtual void SAL_CALL setSubmission( const ::com::sun::star::uno::Reference< ::com::sun::star::form::submission::XSubmission >& _submission ) throw (::com::sun::star::uno::RuntimeException);
133*b1cdbd2cSJim Jagielski 
134*b1cdbd2cSJim Jagielski         // XServiceInfo
135*b1cdbd2cSJim Jagielski         virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames(  ) throw (::com::sun::star::uno::RuntimeException);
136*b1cdbd2cSJim Jagielski 
137*b1cdbd2cSJim Jagielski         // XEventListener
138*b1cdbd2cSJim Jagielski         using OControlModel::disposing;
139*b1cdbd2cSJim Jagielski 
140*b1cdbd2cSJim Jagielski     public:
GuardAccessfrm::OClickableImageBaseModel::GuardAccess141*b1cdbd2cSJim Jagielski         struct GuardAccess { friend class ImageModelMethodGuard; private: GuardAccess() { } };
getMutex(GuardAccess)142*b1cdbd2cSJim Jagielski         ::osl::Mutex&   getMutex( GuardAccess ) { return m_aMutex; }
getImageProducer(GuardAccess)143*b1cdbd2cSJim Jagielski         ImageProducer*  getImageProducer( GuardAccess ) { return m_pProducer; }
144*b1cdbd2cSJim Jagielski 
145*b1cdbd2cSJim Jagielski     protected:
146*b1cdbd2cSJim Jagielski         using OControlModel::getMutex;
147*b1cdbd2cSJim Jagielski 
148*b1cdbd2cSJim Jagielski 	    void implConstruct();
149*b1cdbd2cSJim Jagielski 
150*b1cdbd2cSJim Jagielski         // to be called from within the cloning-ctor of your derived class
151*b1cdbd2cSJim Jagielski         void implInitializeImageURL( );
152*b1cdbd2cSJim Jagielski     };
153*b1cdbd2cSJim Jagielski 
154*b1cdbd2cSJim Jagielski     //==================================================================
155*b1cdbd2cSJim Jagielski     // ImageModelMethodGuard
156*b1cdbd2cSJim Jagielski     //==================================================================
157*b1cdbd2cSJim Jagielski     class ImageModelMethodGuard : public ::osl::MutexGuard
158*b1cdbd2cSJim Jagielski     {
159*b1cdbd2cSJim Jagielski     private:
160*b1cdbd2cSJim Jagielski         typedef ::osl::MutexGuard   GuardBase;
161*b1cdbd2cSJim Jagielski 
162*b1cdbd2cSJim Jagielski     public:
ImageModelMethodGuard(OClickableImageBaseModel & _rModel)163*b1cdbd2cSJim Jagielski         ImageModelMethodGuard( OClickableImageBaseModel& _rModel )
164*b1cdbd2cSJim Jagielski             :GuardBase( _rModel.getMutex( OClickableImageBaseModel::GuardAccess() ) )
165*b1cdbd2cSJim Jagielski         {
166*b1cdbd2cSJim Jagielski             if ( NULL == _rModel.getImageProducer( OClickableImageBaseModel::GuardAccess() ) )
167*b1cdbd2cSJim Jagielski                 throw ::com::sun::star::lang::DisposedException(
168*b1cdbd2cSJim Jagielski                     ::rtl::OUString(),
169*b1cdbd2cSJim Jagielski                     static_cast< ::com::sun::star::form::XImageProducerSupplier* >( &_rModel )
170*b1cdbd2cSJim Jagielski                 );
171*b1cdbd2cSJim Jagielski         }
172*b1cdbd2cSJim Jagielski     };
173*b1cdbd2cSJim Jagielski 
174*b1cdbd2cSJim Jagielski     //==================================================================
175*b1cdbd2cSJim Jagielski     // OClickableImageBaseControl
176*b1cdbd2cSJim Jagielski     //==================================================================
177*b1cdbd2cSJim Jagielski     typedef ::cppu::ImplHelper3 <   ::com::sun::star::form::XApproveActionBroadcaster
178*b1cdbd2cSJim Jagielski                                 ,   ::com::sun::star::form::submission::XSubmission
179*b1cdbd2cSJim Jagielski                                 ,   ::com::sun::star::frame::XDispatchProviderInterception
180*b1cdbd2cSJim Jagielski                                 >   OClickableImageBaseControl_BASE;
181*b1cdbd2cSJim Jagielski 
182*b1cdbd2cSJim Jagielski     class OClickableImageBaseControl    :public OClickableImageBaseControl_BASE
183*b1cdbd2cSJim Jagielski                                         ,public OControl
184*b1cdbd2cSJim Jagielski     {
185*b1cdbd2cSJim Jagielski 	    friend class OImageProducerThread_Impl;
186*b1cdbd2cSJim Jagielski 
187*b1cdbd2cSJim Jagielski     private:
188*b1cdbd2cSJim Jagielski 	    OImageProducerThread_Impl*          m_pThread;
189*b1cdbd2cSJim Jagielski         ::cppu::OInterfaceContainerHelper   m_aSubmissionVetoListeners;
190*b1cdbd2cSJim Jagielski         ::std::auto_ptr< ControlFeatureInterception >
191*b1cdbd2cSJim Jagielski                                             m_pFeatureInterception;
192*b1cdbd2cSJim Jagielski 
193*b1cdbd2cSJim Jagielski     protected:
194*b1cdbd2cSJim Jagielski         ::cppu::OInterfaceContainerHelper m_aApproveActionListeners;
195*b1cdbd2cSJim Jagielski 	    ::cppu::OInterfaceContainerHelper m_aActionListeners;
196*b1cdbd2cSJim Jagielski 	    ::rtl::OUString m_aActionCommand;
197*b1cdbd2cSJim Jagielski 
198*b1cdbd2cSJim Jagielski         // XSubmission
199*b1cdbd2cSJim Jagielski         virtual void SAL_CALL submit(  ) throw (::com::sun::star::util::VetoException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
200*b1cdbd2cSJim Jagielski         virtual void SAL_CALL submitWithInteraction( const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& aHandler ) throw (::com::sun::star::util::VetoException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
201*b1cdbd2cSJim Jagielski         virtual void SAL_CALL addSubmissionVetoListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::submission::XSubmissionVetoListener >& listener ) throw (::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException);
202*b1cdbd2cSJim Jagielski         virtual void SAL_CALL removeSubmissionVetoListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::submission::XSubmissionVetoListener >& listener ) throw (::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException);
203*b1cdbd2cSJim Jagielski 
204*b1cdbd2cSJim Jagielski         // XServiceInfo
205*b1cdbd2cSJim Jagielski         virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames(  ) throw (::com::sun::star::uno::RuntimeException);
206*b1cdbd2cSJim Jagielski 
207*b1cdbd2cSJim Jagielski         // XEventListener
208*b1cdbd2cSJim Jagielski         using OControl::disposing;
209*b1cdbd2cSJim Jagielski 
210*b1cdbd2cSJim Jagielski     public:
211*b1cdbd2cSJim Jagielski 	    OClickableImageBaseControl(
212*b1cdbd2cSJim Jagielski 		    const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory,
213*b1cdbd2cSJim Jagielski 		    const ::rtl::OUString& _aService);
214*b1cdbd2cSJim Jagielski 	    virtual ~OClickableImageBaseControl();
215*b1cdbd2cSJim Jagielski 
216*b1cdbd2cSJim Jagielski     protected:
217*b1cdbd2cSJim Jagielski         // UNO Anbindung
218*b1cdbd2cSJim Jagielski 	    DECLARE_UNO3_AGG_DEFAULTS(OClickableImageBaseControl, OControl);
219*b1cdbd2cSJim Jagielski 	    virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation(const ::com::sun::star::uno::Type& _rType) throw(::com::sun::star::uno::RuntimeException);
220*b1cdbd2cSJim Jagielski 
221*b1cdbd2cSJim Jagielski         // OComponentHelper
222*b1cdbd2cSJim Jagielski 	    virtual void SAL_CALL disposing();
223*b1cdbd2cSJim Jagielski 
224*b1cdbd2cSJim Jagielski         // ::com::sun::star::form::XApproveActionBroadcaster
225*b1cdbd2cSJim Jagielski 	    virtual void SAL_CALL addApproveActionListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XApproveActionListener>& _rxListener)
226*b1cdbd2cSJim Jagielski 		    throw(::com::sun::star::uno::RuntimeException);
227*b1cdbd2cSJim Jagielski 	    virtual void SAL_CALL removeApproveActionListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XApproveActionListener>& _rxListener)
228*b1cdbd2cSJim Jagielski 		    throw(::com::sun::star::uno::RuntimeException);
229*b1cdbd2cSJim Jagielski 
230*b1cdbd2cSJim Jagielski         // XDispatchProviderInterception
231*b1cdbd2cSJim Jagielski         virtual void SAL_CALL registerDispatchProviderInterceptor( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterceptor >& Interceptor ) throw (::com::sun::star::uno::RuntimeException);
232*b1cdbd2cSJim Jagielski         virtual void SAL_CALL releaseDispatchProviderInterceptor( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterceptor >& Interceptor ) throw (::com::sun::star::uno::RuntimeException);
233*b1cdbd2cSJim Jagielski 
234*b1cdbd2cSJim Jagielski     protected:
235*b1cdbd2cSJim Jagielski 	    virtual void actionPerformed_Impl( sal_Bool bNotifyListener, const ::com::sun::star::awt::MouseEvent& rEvt );
236*b1cdbd2cSJim Jagielski 
237*b1cdbd2cSJim Jagielski         ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > _getTypes();
238*b1cdbd2cSJim Jagielski 
239*b1cdbd2cSJim Jagielski         /** approves the action by calling the approve listeners
240*b1cdbd2cSJim Jagielski             @return <TRUE/> if and only if the action has <em>not</em> been cancelled by a listener
241*b1cdbd2cSJim Jagielski         */
242*b1cdbd2cSJim Jagielski         bool    approveAction( );
243*b1cdbd2cSJim Jagielski 
244*b1cdbd2cSJim Jagielski         /** retrieves (and if necessary creates) the image producer thread.
245*b1cdbd2cSJim Jagielski 
246*b1cdbd2cSJim Jagielski             Must be called with our mutex locked
247*b1cdbd2cSJim Jagielski         */
248*b1cdbd2cSJim Jagielski         OImageProducerThread_Impl* getImageProducerThread();
249*b1cdbd2cSJim Jagielski 
250*b1cdbd2cSJim Jagielski     private:
251*b1cdbd2cSJim Jagielski         void implSubmit(
252*b1cdbd2cSJim Jagielski             const ::com::sun::star::awt::MouseEvent& _rEvent,
253*b1cdbd2cSJim Jagielski             const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& aHandler
254*b1cdbd2cSJim Jagielski         ) SAL_THROW((com::sun::star::util::VetoException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException));
255*b1cdbd2cSJim Jagielski     };
256*b1cdbd2cSJim Jagielski 
257*b1cdbd2cSJim Jagielski     //==================================================================
258*b1cdbd2cSJim Jagielski     // OImageProducerThread_Impl
259*b1cdbd2cSJim Jagielski     //==================================================================
260*b1cdbd2cSJim Jagielski     class OImageProducerThread_Impl: public OComponentEventThread
261*b1cdbd2cSJim Jagielski     {
262*b1cdbd2cSJim Jagielski     protected:
263*b1cdbd2cSJim Jagielski 
264*b1cdbd2cSJim Jagielski 	    // Die folgende Methode wrrd gerufen um das Event unter Beruecksichtigung
265*b1cdbd2cSJim Jagielski 	    // seines Typs zu duplizieren
266*b1cdbd2cSJim Jagielski 	    virtual ::com::sun::star::lang::EventObject* cloneEvent( const ::com::sun::star::lang::EventObject* _pEvt ) const;
267*b1cdbd2cSJim Jagielski 
268*b1cdbd2cSJim Jagielski 	    // Ein Event bearbeiten. Der Mutex ist dabei nicht gelockt, pCompImpl
269*b1cdbd2cSJim Jagielski 	    // bleibt aber in jedem Fall gueltig.
270*b1cdbd2cSJim Jagielski 	    virtual void processEvent( ::cppu::OComponentHelper *pCompImpl,
271*b1cdbd2cSJim Jagielski 							    const ::com::sun::star::lang::EventObject*,
272*b1cdbd2cSJim Jagielski 							    const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>&,
273*b1cdbd2cSJim Jagielski 							    sal_Bool );
274*b1cdbd2cSJim Jagielski 
275*b1cdbd2cSJim Jagielski     public:
OImageProducerThread_Impl(OClickableImageBaseControl * pControl)276*b1cdbd2cSJim Jagielski 	    OImageProducerThread_Impl( OClickableImageBaseControl *pControl ) :
277*b1cdbd2cSJim Jagielski 		    OComponentEventThread( pControl )
278*b1cdbd2cSJim Jagielski 	    {}
279*b1cdbd2cSJim Jagielski 
addEvent()280*b1cdbd2cSJim Jagielski 	    void addEvent() { ::com::sun::star::lang::EventObject aEvt; OComponentEventThread::addEvent( &aEvt ); }
281*b1cdbd2cSJim Jagielski 
282*b1cdbd2cSJim Jagielski     protected:
283*b1cdbd2cSJim Jagielski         using OComponentEventThread::addEvent;
284*b1cdbd2cSJim Jagielski     };
285*b1cdbd2cSJim Jagielski 
286*b1cdbd2cSJim Jagielski //.........................................................................
287*b1cdbd2cSJim Jagielski }	// namespace frm
288*b1cdbd2cSJim Jagielski //.........................................................................
289*b1cdbd2cSJim Jagielski 
290*b1cdbd2cSJim Jagielski #endif // FORMS_SOURCE_CLICKABLEIMAGE_HXX
291*b1cdbd2cSJim Jagielski 
292