1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove 25*b1cdbd2cSJim Jagielski #include "precompiled_toolkit.hxx" 26*b1cdbd2cSJim Jagielski #include <toolkit/controls/accessiblecontrolcontext.hxx> 27*b1cdbd2cSJim Jagielski #include <unotools/accessiblestatesethelper.hxx> 28*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/XControl.hpp> 29*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/XWindow.hpp> 30*b1cdbd2cSJim Jagielski #include <vcl/svapp.hxx> 31*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/AccessibleStateType.hpp> 32*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/AccessibleRole.hpp> 33*b1cdbd2cSJim Jagielski #include <toolkit/helper/vclunohelper.hxx> 34*b1cdbd2cSJim Jagielski #include <vcl/window.hxx> 35*b1cdbd2cSJim Jagielski 36*b1cdbd2cSJim Jagielski //........................................................................ 37*b1cdbd2cSJim Jagielski namespace toolkit 38*b1cdbd2cSJim Jagielski { 39*b1cdbd2cSJim Jagielski //........................................................................ 40*b1cdbd2cSJim Jagielski 41*b1cdbd2cSJim Jagielski using ::comphelper::OContextEntryGuard; 42*b1cdbd2cSJim Jagielski using namespace ::com::sun::star; 43*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno; 44*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::lang; 45*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::beans; 46*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::accessibility; 47*b1cdbd2cSJim Jagielski 48*b1cdbd2cSJim Jagielski //==================================================================== 49*b1cdbd2cSJim Jagielski //= OAccessibleControlContext 50*b1cdbd2cSJim Jagielski //==================================================================== 51*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- OAccessibleControlContext()52*b1cdbd2cSJim Jagielski OAccessibleControlContext::OAccessibleControlContext() 53*b1cdbd2cSJim Jagielski :OAccessibleControlContext_Base( ) 54*b1cdbd2cSJim Jagielski { 55*b1cdbd2cSJim Jagielski // nothing to do here, we have a late ctor 56*b1cdbd2cSJim Jagielski } 57*b1cdbd2cSJim Jagielski 58*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- ~OAccessibleControlContext()59*b1cdbd2cSJim Jagielski OAccessibleControlContext::~OAccessibleControlContext() 60*b1cdbd2cSJim Jagielski { 61*b1cdbd2cSJim Jagielski ensureDisposed(); 62*b1cdbd2cSJim Jagielski } 63*b1cdbd2cSJim Jagielski 64*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- IMPLEMENT_FORWARD_XINTERFACE3(OAccessibleControlContext,OAccessibleControlContext_Base,OAccessibleImplementationAccess,OAccessibleControlContext_IBase)65*b1cdbd2cSJim Jagielski IMPLEMENT_FORWARD_XINTERFACE3( OAccessibleControlContext, OAccessibleControlContext_Base, OAccessibleImplementationAccess, OAccessibleControlContext_IBase ) 66*b1cdbd2cSJim Jagielski IMPLEMENT_FORWARD_XTYPEPROVIDER3( OAccessibleControlContext, OAccessibleControlContext_Base, OAccessibleImplementationAccess, OAccessibleControlContext_IBase ) 67*b1cdbd2cSJim Jagielski // (order matters: the first is the class name, the second is the class doing the ref counting) 68*b1cdbd2cSJim Jagielski 69*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- 70*b1cdbd2cSJim Jagielski void OAccessibleControlContext::Init( const Reference< XAccessible >& _rxCreator ) SAL_THROW( ( Exception ) ) 71*b1cdbd2cSJim Jagielski { 72*b1cdbd2cSJim Jagielski OContextEntryGuard aGuard( this ); 73*b1cdbd2cSJim Jagielski 74*b1cdbd2cSJim Jagielski // retrieve the model of the control 75*b1cdbd2cSJim Jagielski OSL_ENSURE( !m_xControlModel.is(), "OAccessibleControlContext::Init: already know a control model....!???" ); 76*b1cdbd2cSJim Jagielski 77*b1cdbd2cSJim Jagielski Reference< awt::XControl > xControl( _rxCreator, UNO_QUERY ); 78*b1cdbd2cSJim Jagielski if ( xControl.is() ) 79*b1cdbd2cSJim Jagielski m_xControlModel = m_xControlModel.query( xControl->getModel() ); 80*b1cdbd2cSJim Jagielski OSL_ENSURE( m_xControlModel.is(), "OAccessibleControlContext::Init: invalid creator (no control, or control without model!" ); 81*b1cdbd2cSJim Jagielski if ( !m_xControlModel.is() ) 82*b1cdbd2cSJim Jagielski throw DisposedException(); // caught by the caller (the create method) 83*b1cdbd2cSJim Jagielski 84*b1cdbd2cSJim Jagielski // start listening at the model 85*b1cdbd2cSJim Jagielski startModelListening(); 86*b1cdbd2cSJim Jagielski 87*b1cdbd2cSJim Jagielski // announce the XAccessible to our base class 88*b1cdbd2cSJim Jagielski OAccessibleControlContext_Base::lateInit( _rxCreator ); 89*b1cdbd2cSJim Jagielski } 90*b1cdbd2cSJim Jagielski 91*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- create(const Reference<XAccessible> & _rxCreator)92*b1cdbd2cSJim Jagielski OAccessibleControlContext* OAccessibleControlContext::create( const Reference< XAccessible >& _rxCreator ) SAL_THROW( ( ) ) 93*b1cdbd2cSJim Jagielski { 94*b1cdbd2cSJim Jagielski OAccessibleControlContext* pNew = NULL; 95*b1cdbd2cSJim Jagielski try 96*b1cdbd2cSJim Jagielski { 97*b1cdbd2cSJim Jagielski pNew = new OAccessibleControlContext; 98*b1cdbd2cSJim Jagielski pNew->Init( _rxCreator ); 99*b1cdbd2cSJim Jagielski } 100*b1cdbd2cSJim Jagielski catch( const Exception& ) 101*b1cdbd2cSJim Jagielski { 102*b1cdbd2cSJim Jagielski OSL_ENSURE( sal_False, "OAccessibleControlContext::create: caught an exception from the late ctor!" ); 103*b1cdbd2cSJim Jagielski } 104*b1cdbd2cSJim Jagielski return pNew; 105*b1cdbd2cSJim Jagielski } 106*b1cdbd2cSJim Jagielski 107*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- startModelListening()108*b1cdbd2cSJim Jagielski void OAccessibleControlContext::startModelListening( ) SAL_THROW( ( Exception ) ) 109*b1cdbd2cSJim Jagielski { 110*b1cdbd2cSJim Jagielski Reference< XComponent > xModelComp( m_xControlModel, UNO_QUERY ); 111*b1cdbd2cSJim Jagielski OSL_ENSURE( xModelComp.is(), "OAccessibleControlContext::startModelListening: invalid model!" ); 112*b1cdbd2cSJim Jagielski if ( xModelComp.is() ) 113*b1cdbd2cSJim Jagielski xModelComp->addEventListener( this ); 114*b1cdbd2cSJim Jagielski } 115*b1cdbd2cSJim Jagielski 116*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- stopModelListening()117*b1cdbd2cSJim Jagielski void OAccessibleControlContext::stopModelListening( ) SAL_THROW( ( Exception ) ) 118*b1cdbd2cSJim Jagielski { 119*b1cdbd2cSJim Jagielski Reference< XComponent > xModelComp( m_xControlModel, UNO_QUERY ); 120*b1cdbd2cSJim Jagielski OSL_ENSURE( xModelComp.is(), "OAccessibleControlContext::stopModelListening: invalid model!" ); 121*b1cdbd2cSJim Jagielski if ( xModelComp.is() ) 122*b1cdbd2cSJim Jagielski xModelComp->removeEventListener( this ); 123*b1cdbd2cSJim Jagielski } 124*b1cdbd2cSJim Jagielski 125*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- getAccessibleChildCount()126*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL OAccessibleControlContext::getAccessibleChildCount( ) throw (RuntimeException) 127*b1cdbd2cSJim Jagielski { 128*b1cdbd2cSJim Jagielski // we do not have children 129*b1cdbd2cSJim Jagielski return 0; 130*b1cdbd2cSJim Jagielski } 131*b1cdbd2cSJim Jagielski 132*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- getAccessibleChild(sal_Int32)133*b1cdbd2cSJim Jagielski Reference< XAccessible > SAL_CALL OAccessibleControlContext::getAccessibleChild( sal_Int32 ) throw (IndexOutOfBoundsException, RuntimeException) 134*b1cdbd2cSJim Jagielski { 135*b1cdbd2cSJim Jagielski // we do not have children 136*b1cdbd2cSJim Jagielski throw IndexOutOfBoundsException(); 137*b1cdbd2cSJim Jagielski } 138*b1cdbd2cSJim Jagielski 139*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- getAccessibleParent()140*b1cdbd2cSJim Jagielski Reference< XAccessible > SAL_CALL OAccessibleControlContext::getAccessibleParent( ) throw (RuntimeException) 141*b1cdbd2cSJim Jagielski { 142*b1cdbd2cSJim Jagielski OContextEntryGuard aGuard( this ); 143*b1cdbd2cSJim Jagielski OSL_ENSURE( implGetForeignControlledParent().is(), "OAccessibleControlContext::getAccessibleParent: somebody forgot to set a parent!" ); 144*b1cdbd2cSJim Jagielski // this parent of us is foreign controlled - somebody has to set it using the OAccessibleImplementationAccess 145*b1cdbd2cSJim Jagielski // class, before integrating our instance into an AccessibleDocumentModel 146*b1cdbd2cSJim Jagielski return implGetForeignControlledParent(); 147*b1cdbd2cSJim Jagielski } 148*b1cdbd2cSJim Jagielski 149*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- getAccessibleRole()150*b1cdbd2cSJim Jagielski sal_Int16 SAL_CALL OAccessibleControlContext::getAccessibleRole( ) throw (RuntimeException) 151*b1cdbd2cSJim Jagielski { 152*b1cdbd2cSJim Jagielski return AccessibleRole::SHAPE; 153*b1cdbd2cSJim Jagielski } 154*b1cdbd2cSJim Jagielski 155*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- getAccessibleDescription()156*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL OAccessibleControlContext::getAccessibleDescription( ) throw (RuntimeException) 157*b1cdbd2cSJim Jagielski { 158*b1cdbd2cSJim Jagielski OContextEntryGuard aGuard( this ); 159*b1cdbd2cSJim Jagielski return getModelStringProperty( "HelpText" ); 160*b1cdbd2cSJim Jagielski } 161*b1cdbd2cSJim Jagielski 162*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- getAccessibleName()163*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL OAccessibleControlContext::getAccessibleName( ) throw (RuntimeException) 164*b1cdbd2cSJim Jagielski { 165*b1cdbd2cSJim Jagielski OContextEntryGuard aGuard( this ); 166*b1cdbd2cSJim Jagielski return getModelStringProperty( "Name" ); 167*b1cdbd2cSJim Jagielski } 168*b1cdbd2cSJim Jagielski 169*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- getAccessibleRelationSet()170*b1cdbd2cSJim Jagielski Reference< XAccessibleRelationSet > SAL_CALL OAccessibleControlContext::getAccessibleRelationSet( ) throw (RuntimeException) 171*b1cdbd2cSJim Jagielski { 172*b1cdbd2cSJim Jagielski return NULL; 173*b1cdbd2cSJim Jagielski } 174*b1cdbd2cSJim Jagielski 175*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- getAccessibleStateSet()176*b1cdbd2cSJim Jagielski Reference< XAccessibleStateSet > SAL_CALL OAccessibleControlContext::getAccessibleStateSet( ) throw (RuntimeException) 177*b1cdbd2cSJim Jagielski { 178*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( GetMutex() ); 179*b1cdbd2cSJim Jagielski // no OContextEntryGuard here, as we do not want to throw an exception in case we're not alive anymore 180*b1cdbd2cSJim Jagielski 181*b1cdbd2cSJim Jagielski ::utl::AccessibleStateSetHelper* pStateSet = NULL; 182*b1cdbd2cSJim Jagielski if ( isAlive() ) 183*b1cdbd2cSJim Jagielski { 184*b1cdbd2cSJim Jagielski // no own states, only the ones which are foreign controlled 185*b1cdbd2cSJim Jagielski pStateSet = new ::utl::AccessibleStateSetHelper( implGetForeignControlledStates() ); 186*b1cdbd2cSJim Jagielski } 187*b1cdbd2cSJim Jagielski else 188*b1cdbd2cSJim Jagielski { // only the DEFUNC state if we're already disposed 189*b1cdbd2cSJim Jagielski pStateSet = new ::utl::AccessibleStateSetHelper; 190*b1cdbd2cSJim Jagielski pStateSet->AddState( AccessibleStateType::DEFUNC ); 191*b1cdbd2cSJim Jagielski } 192*b1cdbd2cSJim Jagielski return pStateSet; 193*b1cdbd2cSJim Jagielski } 194*b1cdbd2cSJim Jagielski 195*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- disposing(const EventObject & _rSource)196*b1cdbd2cSJim Jagielski void SAL_CALL OAccessibleControlContext::disposing( const EventObject& 197*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0 198*b1cdbd2cSJim Jagielski _rSource 199*b1cdbd2cSJim Jagielski #endif 200*b1cdbd2cSJim Jagielski ) throw ( RuntimeException ) 201*b1cdbd2cSJim Jagielski { 202*b1cdbd2cSJim Jagielski OSL_ENSURE( Reference< XPropertySet >( _rSource.Source, UNO_QUERY ).get() == m_xControlModel.get(), 203*b1cdbd2cSJim Jagielski "OAccessibleControlContext::disposing: where did this come from?" ); 204*b1cdbd2cSJim Jagielski 205*b1cdbd2cSJim Jagielski stopModelListening( ); 206*b1cdbd2cSJim Jagielski m_xControlModel.clear(); 207*b1cdbd2cSJim Jagielski m_xModelPropsInfo.clear(); 208*b1cdbd2cSJim Jagielski 209*b1cdbd2cSJim Jagielski OAccessibleControlContext_Base::disposing(); 210*b1cdbd2cSJim Jagielski } 211*b1cdbd2cSJim Jagielski 212*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- getModelStringProperty(const sal_Char * _pPropertyName)213*b1cdbd2cSJim Jagielski ::rtl::OUString OAccessibleControlContext::getModelStringProperty( const sal_Char* _pPropertyName ) 214*b1cdbd2cSJim Jagielski { 215*b1cdbd2cSJim Jagielski ::rtl::OUString sReturn; 216*b1cdbd2cSJim Jagielski try 217*b1cdbd2cSJim Jagielski { 218*b1cdbd2cSJim Jagielski if ( !m_xModelPropsInfo.is() && m_xControlModel.is() ) 219*b1cdbd2cSJim Jagielski m_xModelPropsInfo = m_xControlModel->getPropertySetInfo(); 220*b1cdbd2cSJim Jagielski 221*b1cdbd2cSJim Jagielski ::rtl::OUString sPropertyName( ::rtl::OUString::createFromAscii( _pPropertyName ) ); 222*b1cdbd2cSJim Jagielski if ( m_xModelPropsInfo.is() && m_xModelPropsInfo->hasPropertyByName( sPropertyName ) ) 223*b1cdbd2cSJim Jagielski m_xControlModel->getPropertyValue( sPropertyName ) >>= sReturn; 224*b1cdbd2cSJim Jagielski } 225*b1cdbd2cSJim Jagielski catch( const Exception& ) 226*b1cdbd2cSJim Jagielski { 227*b1cdbd2cSJim Jagielski OSL_ENSURE( sal_False, "OAccessibleControlContext::getModelStringProperty: caught an exception!" ); 228*b1cdbd2cSJim Jagielski } 229*b1cdbd2cSJim Jagielski return sReturn; 230*b1cdbd2cSJim Jagielski } 231*b1cdbd2cSJim Jagielski 232*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- implGetWindow(Reference<awt::XWindow> * _pxUNOWindow) const233*b1cdbd2cSJim Jagielski Window* OAccessibleControlContext::implGetWindow( Reference< awt::XWindow >* _pxUNOWindow ) const 234*b1cdbd2cSJim Jagielski { 235*b1cdbd2cSJim Jagielski Reference< awt::XControl > xControl( getAccessibleCreator(), UNO_QUERY ); 236*b1cdbd2cSJim Jagielski Reference< awt::XWindow > xWindow; 237*b1cdbd2cSJim Jagielski if ( xControl.is() ) 238*b1cdbd2cSJim Jagielski xWindow = xWindow.query( xControl->getPeer() ); 239*b1cdbd2cSJim Jagielski 240*b1cdbd2cSJim Jagielski Window* pWindow = xWindow.is() ? VCLUnoHelper::GetWindow( xWindow ) : NULL; 241*b1cdbd2cSJim Jagielski 242*b1cdbd2cSJim Jagielski if ( _pxUNOWindow ) 243*b1cdbd2cSJim Jagielski *_pxUNOWindow = xWindow; 244*b1cdbd2cSJim Jagielski return pWindow; 245*b1cdbd2cSJim Jagielski } 246*b1cdbd2cSJim Jagielski 247*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- implGetBounds()248*b1cdbd2cSJim Jagielski awt::Rectangle SAL_CALL OAccessibleControlContext::implGetBounds( ) throw (RuntimeException) 249*b1cdbd2cSJim Jagielski { 250*b1cdbd2cSJim Jagielski ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 251*b1cdbd2cSJim Jagielski // want to do some VCL stuff here ... 252*b1cdbd2cSJim Jagielski OContextEntryGuard aGuard( this ); 253*b1cdbd2cSJim Jagielski 254*b1cdbd2cSJim Jagielski OSL_ENSURE( sal_False, "OAccessibleControlContext::implGetBounds: performance issue: forced to calc the size myself!" ); 255*b1cdbd2cSJim Jagielski // In design mode (and this is what this class is for), the surrounding shape (if any) should handle this call 256*b1cdbd2cSJim Jagielski // The problem is that in design mode, our size may not be correct (in the drawing layer, controls are 257*b1cdbd2cSJim Jagielski // positioned/sized for painting only), and that calculation of our position is expensive 258*b1cdbd2cSJim Jagielski 259*b1cdbd2cSJim Jagielski // what we know (or can obtain from somewhere): 260*b1cdbd2cSJim Jagielski // * the PosSize of our peer, relative to it's parent window 261*b1cdbd2cSJim Jagielski // * the parent window which the PosSize is relative to 262*b1cdbd2cSJim Jagielski // * our foreign controlled accessible parent 263*b1cdbd2cSJim Jagielski // from this info, we can determine the the position of our peer relative to the foreign parent 264*b1cdbd2cSJim Jagielski 265*b1cdbd2cSJim Jagielski // our control 266*b1cdbd2cSJim Jagielski Reference< awt::XWindow > xWindow; 267*b1cdbd2cSJim Jagielski Window* pVCLWindow = implGetWindow( &xWindow ); 268*b1cdbd2cSJim Jagielski 269*b1cdbd2cSJim Jagielski awt::Rectangle aBounds( 0, 0, 0, 0 ); 270*b1cdbd2cSJim Jagielski if ( xWindow.is() ) 271*b1cdbd2cSJim Jagielski { 272*b1cdbd2cSJim Jagielski // ugly, but .... though the XWindow has a getPosSize, it is impossible to determine the 273*b1cdbd2cSJim Jagielski // parent which this position/size is relative to. This means we must tunnel UNO and ask the 274*b1cdbd2cSJim Jagielski // implementation 275*b1cdbd2cSJim Jagielski Window* pVCLParent = pVCLWindow ? pVCLWindow->GetParent() : NULL; 276*b1cdbd2cSJim Jagielski 277*b1cdbd2cSJim Jagielski // the relative location of the window 278*b1cdbd2cSJim Jagielski ::Point aWindowRelativePos( 0, 0); 279*b1cdbd2cSJim Jagielski if ( pVCLWindow ) 280*b1cdbd2cSJim Jagielski aWindowRelativePos = pVCLWindow->GetPosPixel(); 281*b1cdbd2cSJim Jagielski 282*b1cdbd2cSJim Jagielski // the screnn position of the "window parent" of the control 283*b1cdbd2cSJim Jagielski ::Point aVCLParentScreenPos( 0, 0 ); 284*b1cdbd2cSJim Jagielski if ( pVCLParent ) 285*b1cdbd2cSJim Jagielski aVCLParentScreenPos = pVCLParent->GetPosPixel(); 286*b1cdbd2cSJim Jagielski 287*b1cdbd2cSJim Jagielski // the screen position of the "accessible parent" of the control 288*b1cdbd2cSJim Jagielski Reference< XAccessible > xParentAcc( implGetForeignControlledParent() ); 289*b1cdbd2cSJim Jagielski Reference< XAccessibleComponent > xParentAccComponent; 290*b1cdbd2cSJim Jagielski if ( xParentAcc.is() ) 291*b1cdbd2cSJim Jagielski xParentAccComponent = xParentAccComponent.query( xParentAcc->getAccessibleContext() ); 292*b1cdbd2cSJim Jagielski awt::Point aAccParentScreenPos( 0, 0 ); 293*b1cdbd2cSJim Jagielski if ( xParentAccComponent.is() ) 294*b1cdbd2cSJim Jagielski aAccParentScreenPos = xParentAccComponent->getLocationOnScreen(); 295*b1cdbd2cSJim Jagielski 296*b1cdbd2cSJim Jagielski // now the size of the control 297*b1cdbd2cSJim Jagielski aBounds = xWindow->getPosSize(); 298*b1cdbd2cSJim Jagielski 299*b1cdbd2cSJim Jagielski // correct the pos 300*b1cdbd2cSJim Jagielski aBounds.X = aWindowRelativePos.X() + aVCLParentScreenPos.X() - aAccParentScreenPos.X; 301*b1cdbd2cSJim Jagielski aBounds.Y = aWindowRelativePos.Y() + aVCLParentScreenPos.Y() - aAccParentScreenPos.Y; 302*b1cdbd2cSJim Jagielski } 303*b1cdbd2cSJim Jagielski 304*b1cdbd2cSJim Jagielski return aBounds; 305*b1cdbd2cSJim Jagielski } 306*b1cdbd2cSJim Jagielski 307*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- getAccessibleAtPoint(const awt::Point &)308*b1cdbd2cSJim Jagielski Reference< XAccessible > SAL_CALL OAccessibleControlContext::getAccessibleAtPoint( const awt::Point& /* _rPoint */ ) throw (RuntimeException) 309*b1cdbd2cSJim Jagielski { 310*b1cdbd2cSJim Jagielski // no children at all 311*b1cdbd2cSJim Jagielski return NULL; 312*b1cdbd2cSJim Jagielski } 313*b1cdbd2cSJim Jagielski 314*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- grabFocus()315*b1cdbd2cSJim Jagielski void SAL_CALL OAccessibleControlContext::grabFocus( ) throw (RuntimeException) 316*b1cdbd2cSJim Jagielski { 317*b1cdbd2cSJim Jagielski OSL_ENSURE( sal_False, "OAccessibleControlContext::grabFocus: !isFocusTraversable, but grabFocus!" ); 318*b1cdbd2cSJim Jagielski } 319*b1cdbd2cSJim Jagielski 320*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- getAccessibleKeyBinding()321*b1cdbd2cSJim Jagielski Any SAL_CALL OAccessibleControlContext::getAccessibleKeyBinding( ) throw (RuntimeException) 322*b1cdbd2cSJim Jagielski { 323*b1cdbd2cSJim Jagielski // we do not have any key bindings to activate a UNO control in design mode 324*b1cdbd2cSJim Jagielski return Any(); 325*b1cdbd2cSJim Jagielski } 326*b1cdbd2cSJim Jagielski 327*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- getForeground()328*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL OAccessibleControlContext::getForeground( ) throw (::com::sun::star::uno::RuntimeException) 329*b1cdbd2cSJim Jagielski { 330*b1cdbd2cSJim Jagielski ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 331*b1cdbd2cSJim Jagielski // want to do some VCL stuff here ... 332*b1cdbd2cSJim Jagielski OContextEntryGuard aGuard( this ); 333*b1cdbd2cSJim Jagielski 334*b1cdbd2cSJim Jagielski Window* pWindow = implGetWindow( ); 335*b1cdbd2cSJim Jagielski sal_Int32 nColor = 0; 336*b1cdbd2cSJim Jagielski if ( pWindow ) 337*b1cdbd2cSJim Jagielski { 338*b1cdbd2cSJim Jagielski if ( pWindow->IsControlForeground() ) 339*b1cdbd2cSJim Jagielski nColor = pWindow->GetControlForeground().GetColor(); 340*b1cdbd2cSJim Jagielski else 341*b1cdbd2cSJim Jagielski { 342*b1cdbd2cSJim Jagielski Font aFont; 343*b1cdbd2cSJim Jagielski if ( pWindow->IsControlFont() ) 344*b1cdbd2cSJim Jagielski aFont = pWindow->GetControlFont(); 345*b1cdbd2cSJim Jagielski else 346*b1cdbd2cSJim Jagielski aFont = pWindow->GetFont(); 347*b1cdbd2cSJim Jagielski nColor = aFont.GetColor().GetColor(); 348*b1cdbd2cSJim Jagielski } 349*b1cdbd2cSJim Jagielski } 350*b1cdbd2cSJim Jagielski return nColor; 351*b1cdbd2cSJim Jagielski } 352*b1cdbd2cSJim Jagielski 353*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- getBackground()354*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL OAccessibleControlContext::getBackground( ) throw (::com::sun::star::uno::RuntimeException) 355*b1cdbd2cSJim Jagielski { 356*b1cdbd2cSJim Jagielski ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 357*b1cdbd2cSJim Jagielski // want to do some VCL stuff here ... 358*b1cdbd2cSJim Jagielski OContextEntryGuard aGuard( this ); 359*b1cdbd2cSJim Jagielski 360*b1cdbd2cSJim Jagielski Window* pWindow = implGetWindow( ); 361*b1cdbd2cSJim Jagielski sal_Int32 nColor = 0; 362*b1cdbd2cSJim Jagielski if ( pWindow ) 363*b1cdbd2cSJim Jagielski { 364*b1cdbd2cSJim Jagielski if ( pWindow->IsControlBackground() ) 365*b1cdbd2cSJim Jagielski nColor = pWindow->GetControlBackground().GetColor(); 366*b1cdbd2cSJim Jagielski else 367*b1cdbd2cSJim Jagielski nColor = pWindow->GetBackground().GetColor().GetColor(); 368*b1cdbd2cSJim Jagielski } 369*b1cdbd2cSJim Jagielski 370*b1cdbd2cSJim Jagielski return nColor; 371*b1cdbd2cSJim Jagielski } 372*b1cdbd2cSJim Jagielski 373*b1cdbd2cSJim Jagielski //........................................................................ 374*b1cdbd2cSJim Jagielski } //namespace toolkit 375*b1cdbd2cSJim Jagielski //........................................................................ 376*b1cdbd2cSJim Jagielski 377