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