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 //-------------------------------------------------------------------------------------------------- 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 //-------------------------------------------------------------------------------------------------- 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 //-------------------------------------------------------------------------------------------------- 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 155 void Listener_Impl::mousePressed( const VclMouseEvent& evt ) {} 156 void Listener_Impl::mouseReleased( const VclMouseEvent& evt ) {} 157 void Listener_Impl::mouseEntered( const VclMouseEvent& evt ) {} 158 void Listener_Impl::mouseExited( const VclMouseEvent& evt ) {} 159 160 // XMouseMotionListener 161 void Listener_Impl::mouseDragged( const VclMouseEvent& evt ) {} 162 void Listener_Impl::mouseMoved( const VclMouseEvent& evt ) {} 163 164 // XKeyListener 165 void Listener_Impl::keyPressed( const VclKeyEvent& evt ) {} 166 void Listener_Impl::keyReleased( const VclKeyEvent& evt ) {} 167 168 // XFocusListener 169 void Listener_Impl::focusGained( const FocusEvent& evt ) {} 170 void Listener_Impl::focusLost( const FocusEvent& evt ) {} 171 172 // XWindowListener 173 void Listener_Impl::windowResized( const WindowEvent& evt ) {} 174 void Listener_Impl::windowMoved( const WindowEvent& evt ) {} 175 void Listener_Impl::windowShown( const EventObject& evt ) {} 176 void Listener_Impl::windowHidden( const EventObject& evt ) {} 177 178 // XPaintListener 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 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: 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 //-------------------------------------------------------------------------------------------------- 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 //-------------------------------------------------------------------------------------------------- 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 //-------------------------------------------------------------------------------------------------- 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 //-------------------------------------------------------------------------------------------------- 313 void FrameControlApplication::ShowStatusText( const XubString& rStatus ) 314 { 315 Application::GetAppWindow()->SetText( rStatus ); 316 } 317