1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 #ifndef _TOOLKIT_CONTROLS_UNOCONTROL_HXX_ 29 #define _TOOLKIT_CONTROLS_UNOCONTROL_HXX_ 30 31 #include <toolkit/dllapi.h> 32 #include <com/sun/star/awt/XControl.hpp> 33 #include <com/sun/star/awt/XWindow2.hpp> 34 #ifndef _COM_SUN_STAR_AWT_XView_HPP_ 35 #include <com/sun/star/awt/XView.hpp> 36 #endif 37 #include <com/sun/star/beans/XPropertiesChangeListener.hpp> 38 #include <com/sun/star/lang/XServiceInfo.hpp> 39 #include <com/sun/star/lang/XTypeProvider.hpp> 40 #include <com/sun/star/lang/XUnoTunnel.hpp> 41 #include <com/sun/star/awt/XUnitConversion.hpp> 42 #include <com/sun/star/awt/XStyleSettingsSupplier.hpp> 43 #include <com/sun/star/accessibility/XAccessible.hpp> 44 #include <cppuhelper/weakagg.hxx> 45 #include <osl/mutex.hxx> 46 #include <toolkit/helper/mutexandbroadcasthelper.hxx> 47 #include <toolkit/helper/listenermultiplexer.hxx> 48 #include <cppuhelper/propshlp.hxx> 49 #include <cppuhelper/interfacecontainer.hxx> 50 #include <cppuhelper/weakref.hxx> 51 #include <cppuhelper/implbase9.hxx> 52 #include <comphelper/componentcontext.hxx> 53 #include <com/sun/star/util/XModeChangeBroadcaster.hpp> 54 #include <com/sun/star/awt/XVclWindowPeer.hpp> 55 56 57 struct UnoControlComponentInfos 58 { 59 sal_Bool bVisible; 60 sal_Bool bEnable; 61 long nX, nY, nWidth, nHeight; 62 sal_uInt16 nFlags; 63 float nZoomX, nZoomY; 64 65 UnoControlComponentInfos() 66 { 67 bVisible = sal_True; 68 bEnable = sal_True; 69 nX = nY = nWidth = nHeight = 0; 70 nFlags = 0; // POSSIZE_POSSIZE; 71 nZoomX = nZoomY = 1.0f; 72 } 73 }; 74 75 struct UnoControl_Data; 76 // ---------------------------------------------------- 77 // class UnoControl 78 // ---------------------------------------------------- 79 typedef ::cppu::WeakAggImplHelper9 < ::com::sun::star::awt::XControl 80 , ::com::sun::star::awt::XWindow2 81 , ::com::sun::star::awt::XView 82 , ::com::sun::star::beans::XPropertiesChangeListener 83 , ::com::sun::star::lang::XServiceInfo 84 , ::com::sun::star::accessibility::XAccessible 85 , ::com::sun::star::util::XModeChangeBroadcaster 86 , ::com::sun::star::awt::XUnitConversion 87 , ::com::sun::star::awt::XStyleSettingsSupplier 88 > UnoControl_Base; 89 90 class TOOLKIT_DLLPUBLIC UnoControl : public UnoControl_Base 91 { 92 private: 93 ::osl::Mutex maMutex; 94 95 ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer > mxPeer; 96 ::com::sun::star::uno::Reference< ::com::sun::star::awt::XVclWindowPeer > mxVclWindowPeer; // just to avoid the query_interface thing 97 98 protected: 99 const ::comphelper::ComponentContext maContext; 100 EventListenerMultiplexer maDisposeListeners; 101 WindowListenerMultiplexer maWindowListeners; 102 FocusListenerMultiplexer maFocusListeners; 103 KeyListenerMultiplexer maKeyListeners; 104 MouseListenerMultiplexer maMouseListeners; 105 MouseMotionListenerMultiplexer maMouseMotionListeners; 106 PaintListenerMultiplexer maPaintListeners; 107 ::cppu::OInterfaceContainerHelper maModeChangeListeners; 108 109 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > mxContext; 110 ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel > mxModel; 111 ::com::sun::star::uno::Reference< ::com::sun::star::awt::XGraphics > mxGraphics; 112 113 ::com::sun::star::uno::WeakReferenceHelper 114 maAccessibleContext; /// our most recent XAccessibleContext instance 115 116 sal_Bool mbDisposePeer; 117 sal_Bool mbRefeshingPeer; 118 sal_Bool mbCreatingPeer; 119 sal_Bool mbCreatingCompatiblePeer; 120 sal_Bool mbDesignMode; 121 122 UnoControlComponentInfos maComponentInfos; 123 UnoControl_Data* mpData; 124 125 ::osl::Mutex& GetMutex() { return maMutex; } 126 127 ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > getParentPeer() const; 128 virtual void updateFromModel(); 129 void peerCreated(); 130 bool ImplCheckLocalize( ::rtl::OUString& _rPossiblyLocalizable ); 131 ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer > ImplGetCompatiblePeer( sal_Bool bAcceptExistingPeer ); 132 virtual void ImplSetPeerProperty( const ::rtl::OUString& rPropName, const ::com::sun::star::uno::Any& rVal ); 133 virtual void PrepareWindowDescriptor( ::com::sun::star::awt::WindowDescriptor& rDesc ); 134 virtual void ImplModelPropertiesChanged( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyChangeEvent >& rEvents ); 135 136 void ImplLockPropertyChangeNotification( const ::rtl::OUString& rPropertyName, bool bLock ); 137 void ImplLockPropertyChangeNotifications( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& rPropertyNames, bool bLock ); 138 139 void disposeAccessibleContext(); 140 141 inline void setPeer( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer >& _xPeer) 142 { 143 mxPeer = _xPeer; 144 mxVclWindowPeer = ::com::sun::star::uno::Reference< ::com::sun::star::awt::XVclWindowPeer >(mxPeer,::com::sun::star::uno::UNO_QUERY); // just to avoid the query_interface thing 145 } 146 147 virtual sal_Bool requiresNewPeer( const ::rtl::OUString& _rPropertyName ) const; 148 149 protected: 150 UnoControl(); 151 152 public: 153 UnoControl( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& i_factory ); 154 ~UnoControl(); 155 156 UnoControlComponentInfos& GetComponentInfos() { return maComponentInfos; } 157 158 159 virtual ::rtl::OUString GetComponentServiceName(); 160 161 // ::com::sun::star::lang::XTypeProvider 162 ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw(::com::sun::star::uno::RuntimeException); 163 164 // ::com::sun::star::lang::XComponent 165 void SAL_CALL dispose( ) throw(::com::sun::star::uno::RuntimeException); 166 void SAL_CALL addEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& xListener ) throw(::com::sun::star::uno::RuntimeException); 167 void SAL_CALL removeEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& aListener ) throw(::com::sun::star::uno::RuntimeException); 168 169 // XEventListener 170 void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw(::com::sun::star::uno::RuntimeException); 171 172 // ::com::sun::star::awt::XWindow2 173 virtual void SAL_CALL setOutputSize( const ::com::sun::star::awt::Size& aSize ) throw (::com::sun::star::uno::RuntimeException); 174 virtual ::com::sun::star::awt::Size SAL_CALL getOutputSize( ) throw (::com::sun::star::uno::RuntimeException); 175 virtual ::sal_Bool SAL_CALL isVisible( ) throw (::com::sun::star::uno::RuntimeException); 176 virtual ::sal_Bool SAL_CALL isActive( ) throw (::com::sun::star::uno::RuntimeException); 177 virtual ::sal_Bool SAL_CALL isEnabled( ) throw (::com::sun::star::uno::RuntimeException); 178 virtual ::sal_Bool SAL_CALL hasFocus( ) throw (::com::sun::star::uno::RuntimeException); 179 180 // ::com::sun::star::awt::XWindow 181 void SAL_CALL setPosSize( sal_Int32 X, sal_Int32 Y, sal_Int32 Width, sal_Int32 Height, sal_Int16 Flags ) throw(::com::sun::star::uno::RuntimeException); 182 ::com::sun::star::awt::Rectangle SAL_CALL getPosSize( ) throw(::com::sun::star::uno::RuntimeException); 183 void SAL_CALL setVisible( sal_Bool Visible ) throw(::com::sun::star::uno::RuntimeException); 184 void SAL_CALL setEnable( sal_Bool Enable ) throw(::com::sun::star::uno::RuntimeException); 185 void SAL_CALL setFocus( ) throw(::com::sun::star::uno::RuntimeException); 186 void SAL_CALL addWindowListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowListener >& xListener ) throw(::com::sun::star::uno::RuntimeException); 187 void SAL_CALL removeWindowListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowListener >& xListener ) throw(::com::sun::star::uno::RuntimeException); 188 void SAL_CALL addFocusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XFocusListener >& xListener ) throw(::com::sun::star::uno::RuntimeException); 189 void SAL_CALL removeFocusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XFocusListener >& xListener ) throw(::com::sun::star::uno::RuntimeException); 190 void SAL_CALL addKeyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XKeyListener >& xListener ) throw(::com::sun::star::uno::RuntimeException); 191 void SAL_CALL removeKeyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XKeyListener >& xListener ) throw(::com::sun::star::uno::RuntimeException); 192 void SAL_CALL addMouseListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener >& xListener ) throw(::com::sun::star::uno::RuntimeException); 193 void SAL_CALL removeMouseListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener >& xListener ) throw(::com::sun::star::uno::RuntimeException); 194 void SAL_CALL addMouseMotionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseMotionListener >& xListener ) throw(::com::sun::star::uno::RuntimeException); 195 void SAL_CALL removeMouseMotionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseMotionListener >& xListener ) throw(::com::sun::star::uno::RuntimeException); 196 void SAL_CALL addPaintListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XPaintListener >& xListener ) throw(::com::sun::star::uno::RuntimeException); 197 void SAL_CALL removePaintListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XPaintListener >& xListener ) throw(::com::sun::star::uno::RuntimeException); 198 199 // ::com::sun::star::awt::XView 200 sal_Bool SAL_CALL setGraphics( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XGraphics >& aDevice ) throw(::com::sun::star::uno::RuntimeException); 201 ::com::sun::star::uno::Reference< ::com::sun::star::awt::XGraphics > SAL_CALL getGraphics( ) throw(::com::sun::star::uno::RuntimeException); 202 ::com::sun::star::awt::Size SAL_CALL getSize( ) throw(::com::sun::star::uno::RuntimeException); 203 void SAL_CALL draw( sal_Int32 nX, sal_Int32 nY ) throw(::com::sun::star::uno::RuntimeException); 204 void SAL_CALL setZoom( float fZoomX, float fZoomY ) throw(::com::sun::star::uno::RuntimeException); 205 206 // ::com::sun::star::awt::XControl 207 void SAL_CALL setContext( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& Context ) throw(::com::sun::star::uno::RuntimeException); 208 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL getContext( ) throw(::com::sun::star::uno::RuntimeException); 209 void SAL_CALL createPeer( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XToolkit >& Toolkit, const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer >& Parent ) throw(::com::sun::star::uno::RuntimeException); 210 ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer > SAL_CALL getPeer( ) throw(::com::sun::star::uno::RuntimeException); 211 sal_Bool SAL_CALL setModel( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >& Model ) throw(::com::sun::star::uno::RuntimeException); 212 ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel > SAL_CALL getModel( ) throw(::com::sun::star::uno::RuntimeException); 213 ::com::sun::star::uno::Reference< ::com::sun::star::awt::XView > SAL_CALL getView( ) throw(::com::sun::star::uno::RuntimeException); 214 void SAL_CALL setDesignMode( sal_Bool bOn ) throw(::com::sun::star::uno::RuntimeException); 215 sal_Bool SAL_CALL isDesignMode( ) throw(::com::sun::star::uno::RuntimeException); 216 sal_Bool SAL_CALL isTransparent( ) throw(::com::sun::star::uno::RuntimeException); 217 218 // ::com::sun::star::lang::XServiceInfo 219 ::rtl::OUString SAL_CALL getImplementationName( ) throw(::com::sun::star::uno::RuntimeException); 220 sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw(::com::sun::star::uno::RuntimeException); 221 ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw(::com::sun::star::uno::RuntimeException); 222 223 // XAccessible 224 virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > SAL_CALL getAccessibleContext( ) throw (::com::sun::star::uno::RuntimeException); 225 226 // XModeChangeBroadcaster 227 virtual void SAL_CALL addModeChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModeChangeListener >& _rxListener ) throw (::com::sun::star::uno::RuntimeException); 228 virtual void SAL_CALL removeModeChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModeChangeListener >& _rxListener ) throw (::com::sun::star::uno::RuntimeException); 229 virtual void SAL_CALL addModeChangeApproveListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModeChangeApproveListener >& _rxListener ) throw (::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException); 230 virtual void SAL_CALL removeModeChangeApproveListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModeChangeApproveListener >& _rxListener ) throw (::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException); 231 232 // XUnitConversion 233 virtual ::com::sun::star::awt::Point SAL_CALL convertPointToLogic( const ::com::sun::star::awt::Point& Point, ::sal_Int16 TargetUnit ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); 234 virtual ::com::sun::star::awt::Point SAL_CALL convertPointToPixel( const ::com::sun::star::awt::Point& aPoint, ::sal_Int16 SourceUnit ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); 235 virtual ::com::sun::star::awt::Size SAL_CALL convertSizeToLogic( const ::com::sun::star::awt::Size& aSize, ::sal_Int16 TargetUnit ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); 236 virtual ::com::sun::star::awt::Size SAL_CALL convertSizeToPixel( const ::com::sun::star::awt::Size& aSize, ::sal_Int16 SourceUnit ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); 237 238 // XStyleSettingsSupplier 239 virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XStyleSettings > SAL_CALL getStyleSettings() throw (::com::sun::star::uno::RuntimeException); 240 241 private: 242 // ::com::sun::star::beans::XPropertiesChangeListener 243 void SAL_CALL propertiesChange( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyChangeEvent >& evt ) throw(::com::sun::star::uno::RuntimeException); 244 }; 245 246 247 248 249 #endif // _TOOLKIT_CONTROLS_UNOCONTROL_HXX_ 250 251