1*2a97ec55SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*2a97ec55SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*2a97ec55SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*2a97ec55SAndrew Rist  * distributed with this work for additional information
6*2a97ec55SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*2a97ec55SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*2a97ec55SAndrew Rist  * "License"); you may not use this file except in compliance
9*2a97ec55SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*2a97ec55SAndrew Rist  *
11*2a97ec55SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*2a97ec55SAndrew Rist  *
13*2a97ec55SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*2a97ec55SAndrew Rist  * software distributed under the License is distributed on an
15*2a97ec55SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*2a97ec55SAndrew Rist  * KIND, either express or implied.  See the License for the
17*2a97ec55SAndrew Rist  * specific language governing permissions and limitations
18*2a97ec55SAndrew Rist  * under the License.
19*2a97ec55SAndrew Rist  *
20*2a97ec55SAndrew Rist  *************************************************************/
21*2a97ec55SAndrew Rist 
22*2a97ec55SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_extensions.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir //#include <vos/mutex.hxx>
28cdf0e10cSrcweir #include <vos/dynload.hxx>
29cdf0e10cSrcweir 
30cdf0e10cSrcweir #include <vcl/wrkwin.hxx>
31cdf0e10cSrcweir #include <vcl/svapp.hxx>
32cdf0e10cSrcweir 
33cdf0e10cSrcweir #include <stardiv/uno/repos/implementationregistration.hxx>
34cdf0e10cSrcweir #include <stardiv/uno/repos/serinfo.hxx>
35cdf0e10cSrcweir #include <stardiv/uno/awt/vcllstnr.hxx>
36cdf0e10cSrcweir #include <stardiv/uno/awt/device.hxx>
37cdf0e10cSrcweir #include <stardiv/uno/awt/graphics.hxx>
38cdf0e10cSrcweir #include <stardiv/uno/awt/vclwin.hxx>
39cdf0e10cSrcweir 
40cdf0e10cSrcweir #include <usr/services.hxx>
41cdf0e10cSrcweir 
42cdf0e10cSrcweir #include <svtools/unoiface.hxx>
43cdf0e10cSrcweir 
44cdf0e10cSrcweir using namespace vos;
45cdf0e10cSrcweir using namespace usr;
46cdf0e10cSrcweir 
47cdf0e10cSrcweir //==================================================================================================
48cdf0e10cSrcweir class Listener_Impl
49cdf0e10cSrcweir 	: public UsrObject
50cdf0e10cSrcweir 	, public XMouseListener
51cdf0e10cSrcweir 	, public XMouseMotionListener
52cdf0e10cSrcweir 	, public XKeyListener
53cdf0e10cSrcweir 	, public XWindowListener
54cdf0e10cSrcweir 	, public XFocusListener
55cdf0e10cSrcweir 	, public XPaintListener
56cdf0e10cSrcweir {
57cdf0e10cSrcweir public:
58cdf0e10cSrcweir 	SMART_UNO_DECLARATION( Listener_Impl, UsrObject );
59cdf0e10cSrcweir 
60cdf0e10cSrcweir 	virtual BOOL		queryInterface( Uik aUik, XInterfaceRef& rOut );
61cdf0e10cSrcweir 
62cdf0e10cSrcweir 	// XMouseListener
63cdf0e10cSrcweir 	virtual void		mousePressed( const VclMouseEvent& evt );
64cdf0e10cSrcweir 	virtual void		mouseReleased( const VclMouseEvent& evt );
65cdf0e10cSrcweir 	virtual void		mouseEntered( const VclMouseEvent& evt );
66cdf0e10cSrcweir 	virtual void		mouseExited( const VclMouseEvent& evt );
67cdf0e10cSrcweir 
68cdf0e10cSrcweir 	// XMouseMotionListener
69cdf0e10cSrcweir 	virtual void		mouseDragged( const VclMouseEvent& evt );
70cdf0e10cSrcweir 	virtual void		mouseMoved( const VclMouseEvent& evt );
71cdf0e10cSrcweir 
72cdf0e10cSrcweir 	// XKeyListener
73cdf0e10cSrcweir 	virtual void		keyPressed( const VclKeyEvent& evt );
74cdf0e10cSrcweir 	virtual void		keyReleased( const VclKeyEvent& evt );
75cdf0e10cSrcweir 
76cdf0e10cSrcweir 	// XFocusListener
77cdf0e10cSrcweir 	virtual void		focusGained( const FocusEvent& evt );
78cdf0e10cSrcweir 	virtual void		focusLost( const FocusEvent& evt );
79cdf0e10cSrcweir 
80cdf0e10cSrcweir 	// XWindowListener
81cdf0e10cSrcweir 	virtual void		windowResized( const WindowEvent& evt );
82cdf0e10cSrcweir 	virtual void		windowMoved( const WindowEvent& evt );
83cdf0e10cSrcweir 	virtual void		windowShown( const EventObject& evt );
84cdf0e10cSrcweir 	virtual void		windowHidden( const EventObject& evt );
85cdf0e10cSrcweir 
86cdf0e10cSrcweir 	// XPaintListener
87cdf0e10cSrcweir 	virtual void		windowPaint( const PaintEvent& evt );
88cdf0e10cSrcweir 
89cdf0e10cSrcweir 	// XEventListener
90cdf0e10cSrcweir 	virtual void		disposing( const EventObject& evt );
91cdf0e10cSrcweir 
92cdf0e10cSrcweir public:
93cdf0e10cSrcweir 	void				addAllListeners( const XControlRef& xControl );
94cdf0e10cSrcweir 	void				removeAllListeners( const XControlRef& xControl );
95cdf0e10cSrcweir };
96cdf0e10cSrcweir 
97cdf0e10cSrcweir //--------------------------------------------------------------------------------------------------
addAllListeners(const XControlRef & xControl)98cdf0e10cSrcweir void Listener_Impl::addAllListeners( const XControlRef& xControl )
99cdf0e10cSrcweir {
100cdf0e10cSrcweir 	XWindowRef xWindow( xControl, USR_QUERY );
101cdf0e10cSrcweir 
102cdf0e10cSrcweir 	xWindow->addMouseListener( (XMouseListener*)this );
103cdf0e10cSrcweir 	xWindow->addMouseMotionListener( (XMouseMotionListener*)this );
104cdf0e10cSrcweir 	xWindow->addKeyListener( (XKeyListener*)this );
105cdf0e10cSrcweir 	xWindow->addFocusListener( (XFocusListener*)this );
106cdf0e10cSrcweir 	xWindow->addWindowListener( (XWindowListener*)this );
107cdf0e10cSrcweir 	xWindow->addPaintListener( (XPaintListener*)this );
108cdf0e10cSrcweir 	// cast due to ambiguities
109cdf0e10cSrcweir 	xControl->addEventListener( (XEventListener*)(XPaintListener*)this );
110cdf0e10cSrcweir }
111cdf0e10cSrcweir 
112cdf0e10cSrcweir //--------------------------------------------------------------------------------------------------
removeAllListeners(const XControlRef & xControl)113cdf0e10cSrcweir void Listener_Impl::removeAllListeners( const XControlRef& xControl )
114cdf0e10cSrcweir {
115cdf0e10cSrcweir 	XWindowRef xWindow( xControl, USR_QUERY );
116cdf0e10cSrcweir 
117cdf0e10cSrcweir 	xWindow->removeMouseListener( (XMouseListener*)this );
118cdf0e10cSrcweir 	xWindow->removeMouseMotionListener( (XMouseMotionListener*)this );
119cdf0e10cSrcweir 	xWindow->removeKeyListener( (XKeyListener*)this );
120cdf0e10cSrcweir 	xWindow->removeFocusListener( (XFocusListener*)this );
121cdf0e10cSrcweir 	xWindow->removeWindowListener( (XWindowListener*)this );
122cdf0e10cSrcweir 	xWindow->removePaintListener( (XPaintListener*)this );
123cdf0e10cSrcweir 	// cast due to ambiguities
124cdf0e10cSrcweir 	xControl->removeEventListener( (XEventListener*)(XPaintListener*)this );
125cdf0e10cSrcweir }
126cdf0e10cSrcweir 
127cdf0e10cSrcweir //--------------------------------------------------------------------------------------------------
128cdf0e10cSrcweir SMART_UNO_IMPLEMENTATION( Listener_Impl, UsrObject );
129cdf0e10cSrcweir 
130cdf0e10cSrcweir //--------------------------------------------------------------------------------------------------
queryInterface(Uik aUik,XInterfaceRef & rOut)131cdf0e10cSrcweir BOOL Listener_Impl::queryInterface( Uik aUik, XInterfaceRef& rOut )
132cdf0e10cSrcweir {
133cdf0e10cSrcweir 	if (aUik == XMouseListener::getSmartUik())
134cdf0e10cSrcweir 		rOut = (XMouseListener*)this;
135cdf0e10cSrcweir 	else if (aUik == XMouseMotionListener::getSmartUik())
136cdf0e10cSrcweir 		rOut = (XMouseMotionListener*)this;
137cdf0e10cSrcweir 	else if (aUik == XWindowListener::getSmartUik())
138cdf0e10cSrcweir 		rOut = (XWindowListener*)this;
139cdf0e10cSrcweir 	else if (aUik == XFocusListener::getSmartUik())
140cdf0e10cSrcweir 		rOut = (XFocusListener*)this;
141cdf0e10cSrcweir 	else if (aUik == XKeyListener::getSmartUik())
142cdf0e10cSrcweir 		rOut = (XKeyListener*)this;
143cdf0e10cSrcweir 	else if (aUik == XPaintListener::getSmartUik())
144cdf0e10cSrcweir 		rOut = (XPaintListener*)this;
145cdf0e10cSrcweir 	else if (aUik == ((XEventListener*)NULL)->getSmartUik())
146cdf0e10cSrcweir 		rOut = (XEventListener*)(XMouseListener*)this;
147cdf0e10cSrcweir 	else
148cdf0e10cSrcweir 		return UsrObject::queryInterface( aUik, rOut );
149cdf0e10cSrcweir 
150cdf0e10cSrcweir 	return TRUE;
151cdf0e10cSrcweir }
152cdf0e10cSrcweir 
153cdf0e10cSrcweir //--------------------------------------------------------------------------------------------------
154cdf0e10cSrcweir // XMouseListener
mousePressed(const VclMouseEvent & evt)155cdf0e10cSrcweir void Listener_Impl::mousePressed( const VclMouseEvent& evt )	{}
mouseReleased(const VclMouseEvent & evt)156cdf0e10cSrcweir void Listener_Impl::mouseReleased( const VclMouseEvent& evt )	{}
mouseEntered(const VclMouseEvent & evt)157cdf0e10cSrcweir void Listener_Impl::mouseEntered( const VclMouseEvent& evt )	{}
mouseExited(const VclMouseEvent & evt)158cdf0e10cSrcweir void Listener_Impl::mouseExited( const VclMouseEvent& evt )		{}
159cdf0e10cSrcweir 
160cdf0e10cSrcweir // XMouseMotionListener
mouseDragged(const VclMouseEvent & evt)161cdf0e10cSrcweir void Listener_Impl::mouseDragged( const VclMouseEvent& evt )	{}
mouseMoved(const VclMouseEvent & evt)162cdf0e10cSrcweir void Listener_Impl::mouseMoved( const VclMouseEvent& evt )		{}
163cdf0e10cSrcweir 
164cdf0e10cSrcweir // XKeyListener
keyPressed(const VclKeyEvent & evt)165cdf0e10cSrcweir void Listener_Impl::keyPressed( const VclKeyEvent& evt )		{}
keyReleased(const VclKeyEvent & evt)166cdf0e10cSrcweir void Listener_Impl::keyReleased( const VclKeyEvent& evt )		{}
167cdf0e10cSrcweir 
168cdf0e10cSrcweir // XFocusListener
focusGained(const FocusEvent & evt)169cdf0e10cSrcweir void Listener_Impl::focusGained( const FocusEvent& evt )		{}
focusLost(const FocusEvent & evt)170cdf0e10cSrcweir void Listener_Impl::focusLost( const FocusEvent& evt )			{}
171cdf0e10cSrcweir 
172cdf0e10cSrcweir // XWindowListener
windowResized(const WindowEvent & evt)173cdf0e10cSrcweir void Listener_Impl::windowResized( const WindowEvent& evt )		{}
windowMoved(const WindowEvent & evt)174cdf0e10cSrcweir void Listener_Impl::windowMoved( const WindowEvent& evt )		{}
windowShown(const EventObject & evt)175cdf0e10cSrcweir void Listener_Impl::windowShown( const EventObject& evt )		{}
windowHidden(const EventObject & evt)176cdf0e10cSrcweir void Listener_Impl::windowHidden( const EventObject& evt )		{}
177cdf0e10cSrcweir 
178cdf0e10cSrcweir // XPaintListener
windowPaint(const PaintEvent & evt)179cdf0e10cSrcweir void Listener_Impl::windowPaint( const PaintEvent& evt )
180cdf0e10cSrcweir {
181cdf0e10cSrcweir 	if (evt.Source.is())
182cdf0e10cSrcweir 	{
183cdf0e10cSrcweir 		XControlRef xControl( evt.Source, USR_QUERY );
184cdf0e10cSrcweir 		if (xControl.is())
185cdf0e10cSrcweir 		{
186cdf0e10cSrcweir 			XDeviceRef xDev( xControl->getPeer(), USR_QUERY );
187cdf0e10cSrcweir 			XGraphicsRef xGraphics = xDev->createGraphics();
188cdf0e10cSrcweir 			xGraphics->drawLine( 0, 0, 200, 200 );
189cdf0e10cSrcweir 			xGraphics->drawLine( 200, 0, 0, 200 );
190cdf0e10cSrcweir 		}
191cdf0e10cSrcweir 	}
192cdf0e10cSrcweir }
193cdf0e10cSrcweir 
194cdf0e10cSrcweir // XEventListener
disposing(const EventObject & evt)195cdf0e10cSrcweir void Listener_Impl::disposing( const EventObject& evt )		{}
196cdf0e10cSrcweir 
197cdf0e10cSrcweir 
198cdf0e10cSrcweir //==================================================================================================
199cdf0e10cSrcweir class FrameControlApplication
200cdf0e10cSrcweir 	: public Application
201cdf0e10cSrcweir {
202cdf0e10cSrcweir public:
203cdf0e10cSrcweir     virtual void        Main();
204cdf0e10cSrcweir     virtual void        ShowStatusText( const XubString& rText );
205cdf0e10cSrcweir 
206cdf0e10cSrcweir public:
FrameControlApplication()207cdf0e10cSrcweir 						FrameControlApplication()		{}
208cdf0e10cSrcweir 
209cdf0e10cSrcweir private:
210cdf0e10cSrcweir 	void				init();
211cdf0e10cSrcweir 	void				deinit();
212cdf0e10cSrcweir 
213cdf0e10cSrcweir private:
214cdf0e10cSrcweir 	Listener_Impl*		_pListener;
215cdf0e10cSrcweir 	XControlRef			_xControl;
216cdf0e10cSrcweir 
217cdf0e10cSrcweir 	WorkWindow*			_pWorkWin;
218cdf0e10cSrcweir };
219cdf0e10cSrcweir 
220cdf0e10cSrcweir FrameControlApplication g_App;
221cdf0e10cSrcweir 
222cdf0e10cSrcweir #ifdef __MWERKS__
223cdf0e10cSrcweir Application* pApp = &g_App;
224cdf0e10cSrcweir #endif
225cdf0e10cSrcweir 
226cdf0e10cSrcweir 
227cdf0e10cSrcweir //--------------------------------------------------------------------------------------------------
init()228cdf0e10cSrcweir void FrameControlApplication::init()
229cdf0e10cSrcweir {
230cdf0e10cSrcweir 	XMultiServiceFactoryRef xMgr = createRegistryServiceManager( L"test.rdb" );
231cdf0e10cSrcweir 	registerUsrServices( xMgr );
232cdf0e10cSrcweir 	setProcessServiceManager( xMgr );
233cdf0e10cSrcweir 	InitExtVclToolkit();
234cdf0e10cSrcweir 	Application::RegisterUnoServices();
235cdf0e10cSrcweir 
236cdf0e10cSrcweir 	XServiceRegistryRef xRegMgr(xMgr, USR_QUERY);
237cdf0e10cSrcweir 
238cdf0e10cSrcweir 	XImplementationRegistrationRef xIR( xMgr->createInstance(L"stardiv.uno.repos.ImplementationRegistration"), USR_QUERY );
239cdf0e10cSrcweir 	try
240cdf0e10cSrcweir 	{
241cdf0e10cSrcweir 		char szDllName[_MAX_PATH]="";
242cdf0e10cSrcweir 
243cdf0e10cSrcweir 		ORealDynamicLoader::computeModuleName("fc", szDllName, _MAX_PATH);
244cdf0e10cSrcweir 		UString aFCDllName = StringToOUString(szDllName, CHARSET_SYSTEM);
245cdf0e10cSrcweir 		xIR->registerImplementation(L"stardiv.loader.SharedLibrary", aFCDllName, XSimpleRegistryRef() );
246cdf0e10cSrcweir 	}
247cdf0e10cSrcweir 	catch( CannotRegisterImplementationException& e )
248cdf0e10cSrcweir 	{
249cdf0e10cSrcweir 	}
250cdf0e10cSrcweir 
251cdf0e10cSrcweir 
252cdf0e10cSrcweir 
253cdf0e10cSrcweir 	// ...
254cdf0e10cSrcweir 
255cdf0e10cSrcweir 	XInterfaceRef xInst = xMgr->createInstance( L"stardiv.one.frame.FrameControl" );
256cdf0e10cSrcweir 	if (xInst->queryInterface( XControl::getSmartUik(), _xControl ))
257cdf0e10cSrcweir 	{
258cdf0e10cSrcweir 		_pWorkWin = new WorkWindow( NULL, WB_APP | WB_STDWORK );
259cdf0e10cSrcweir 		_pWorkWin->Show();
260cdf0e10cSrcweir 		XWindowPeerRef xParent( _pWorkWin->GetComponentInterface() );
261cdf0e10cSrcweir 
262cdf0e10cSrcweir 		XToolkitRef xToolkit( xMgr->createInstance( L"stardiv.vcl.VclToolkit" ), USR_QUERY );
263cdf0e10cSrcweir 		//xToolkit = XToolkitRef( xMgr->createInstance( L"stardiv.uno.awt.Toolkit" ), USR_QUERY );
264cdf0e10cSrcweir 		_xControl->createPeer( xToolkit, xParent );
265cdf0e10cSrcweir 		XWindowRef xWin( _xControl, USR_QUERY );
266cdf0e10cSrcweir 		xWin->setPosSize( 50, 50, 400, 400, PosSize_POSSIZE );
267cdf0e10cSrcweir 		xWin->setVisible( TRUE );
268cdf0e10cSrcweir 
269cdf0e10cSrcweir 		_pListener = new Listener_Impl();
270cdf0e10cSrcweir 		_pListener->acquire();
271cdf0e10cSrcweir 		_pListener->addAllListeners( _xControl );
272cdf0e10cSrcweir 		// ... on paint a cross should be drawn
273cdf0e10cSrcweir 	}
274cdf0e10cSrcweir }
275cdf0e10cSrcweir 
276cdf0e10cSrcweir //--------------------------------------------------------------------------------------------------
deinit()277cdf0e10cSrcweir void FrameControlApplication::deinit()
278cdf0e10cSrcweir {
279cdf0e10cSrcweir 	if (_pListener)
280cdf0e10cSrcweir 	{
281cdf0e10cSrcweir 
282cdf0e10cSrcweir 		_pListener->removeAllListeners( _xControl );
283cdf0e10cSrcweir 		_xControl->dispose();	// disposing event should occur
284cdf0e10cSrcweir 		_pListener->release();
285cdf0e10cSrcweir 		_pListener = NULL;
286cdf0e10cSrcweir 
287cdf0e10cSrcweir 		_xControl = XControlRef();
288cdf0e10cSrcweir 	}
289cdf0e10cSrcweir 
290cdf0e10cSrcweir 	_pWorkWin->Hide();
291cdf0e10cSrcweir 	delete _pWorkWin;
292cdf0e10cSrcweir }
293cdf0e10cSrcweir 
294cdf0e10cSrcweir 
295cdf0e10cSrcweir //--------------------------------------------------------------------------------------------------
Main()296cdf0e10cSrcweir void FrameControlApplication::Main()
297cdf0e10cSrcweir {
298cdf0e10cSrcweir //  	void TestErrcodes();
299cdf0e10cSrcweir //  	TestErrcodes();
300cdf0e10cSrcweir 
301cdf0e10cSrcweir 	EnterMultiThread();
302cdf0e10cSrcweir 	SetAppName( "RadioActiveControl-Demo" );
303cdf0e10cSrcweir 	EnableSVLook();
304cdf0e10cSrcweir 
305cdf0e10cSrcweir 	init();
306cdf0e10cSrcweir 
307cdf0e10cSrcweir 	Execute();
308cdf0e10cSrcweir 
309cdf0e10cSrcweir 	deinit();
310cdf0e10cSrcweir }
311cdf0e10cSrcweir 
312cdf0e10cSrcweir //--------------------------------------------------------------------------------------------------
ShowStatusText(const XubString & rStatus)313cdf0e10cSrcweir void FrameControlApplication::ShowStatusText( const XubString& rStatus )
314cdf0e10cSrcweir {
315cdf0e10cSrcweir 	Application::GetAppWindow()->SetText( rStatus );
316cdf0e10cSrcweir }
317