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