/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ #include "AccObjectManagerAgent.hxx" #include "AccObjectWinManager.hxx" #include "UAccCOM2.h" using namespace com::sun::star::uno; using namespace com::sun::star::accessibility; /** * Construction/Destruction. * @param * @return */ AccObjectManagerAgent::AccObjectManagerAgent(): pWinManager(NULL) { if( pWinManager == NULL ) { pWinManager = AccObjectWinManager::CreateAccObjectWinManagerInstance(this); } } AccObjectManagerAgent::~AccObjectManagerAgent() { delete pWinManager; pWinManager = NULL; } /** * Interface of updating MSAA name when UNO name_changed event occurs. * @param pXAcc Uno XAccessible interface of control. * @return */ void AccObjectManagerAgent::UpdateAccName( XAccessible* pXAcc ) { if( pWinManager ) pWinManager->UpdateAccName( pXAcc ); } /** * Interface of updating MSAA name when UNO action changed event occurs. * @param pXAcc Uno XAccessible interface of control. * @return */ void AccObjectManagerAgent::UpdateAction( XAccessible* pXAcc ) { if( pWinManager ) pWinManager->UpdateAction( pXAcc ); } /** * Interface of updating MSAA value when UNO value_changed event occurs. * @param pXAcc Uno XAccessible interface of control. * @param pAny New value. * @return */ void AccObjectManagerAgent::UpdateValue( XAccessible* pXAcc, Any pAny ) { if( pWinManager ) pWinManager->SetValue( pXAcc, pAny ); } /** * Interface of updating MSAA value when UNO value_changed event occurs.If we can not * find new value,we'll get new value from pXAcc to update com value. * @param pXAcc Uno XAccessible interface of control. * @return */ void AccObjectManagerAgent::UpdateValue( XAccessible* pXAcc ) { if( pWinManager ) pWinManager->UpdateValue( pXAcc ); } /** * Interface of updating MSAA name when UNO name_changed event occurs. * @param pXAcc Uno XAccessible interface of control. * @param newName New UNO accessible name. * @return */ void AccObjectManagerAgent::UpdateAccName( XAccessible* pXAcc, Any newName) { if( pWinManager ) pWinManager->SetAccName( pXAcc, newName ); } /** * Interface of updating MSAA location when UNO location_changed event occurs. * @param pXAcc Uno XAccessible interface of control. * @param pXAcc Uno The top position of new location. * @param pXAcc Uno The left position of new location. * @param pXAcc Uno The width of new location. * @param pXAcc Uno The width of new location. * @return */ void AccObjectManagerAgent::UpdateLocation( XAccessible* /* pXAcc */, long /*top*/, long /*left*/, long /*width*/, long /*height*/ ) { #ifdef _IMPL_WIN if( pWinManager ) pWinManager->SetLocation( pXAcc, top, left, width, height ); #endif } /** * Interface of updating MSAA name when UNO description_changed event occurs. * @param pXAcc Uno XAccessible interface of control. * @param newDesc New UNO accessible description. * @return */ void AccObjectManagerAgent::UpdateDescription( XAccessible* pXAcc, Any newDesc ) { if( pWinManager ) pWinManager->SetDescription( pXAcc, newDesc ); } /** * When a new UNO XAccessible object is found by listener,we'll create a corresponding * com object and insert it to our manager list. * @param pXAcc Uno XAccessible interface of control. * @param pWnd The top window handle containing control. * @return If the method is correctly processed. */ unsigned char AccObjectManagerAgent::InsertAccObj( XAccessible* pXAcc,XAccessible* pParentXAcc,long pWnd) { if( pWinManager ) return (unsigned char)pWinManager->InsertAccObj( pXAcc, pParentXAcc,HWND((void*)pWnd) ); return sal_False; } /** * save the pair * @param hWnd, top window handle * @param pXAcc XAccessible interface for top window * @return void */ void AccObjectManagerAgent::SaveTopWindowHandle(long hWnd, com::sun::star::accessibility::XAccessible* pXAcc) { if( pWinManager ) pWinManager->SaveTopWindowHandle( HWND((void*)hWnd), pXAcc ); } /** * When a UNO XAccessible object's new children are found by listener,we'll create * corresponding com objects and insert them to our manager list. * @param pXAcc Uno XAccessible interface of control. * @param pWnd The top window handle containing control. * @return If the method is correctly processed. */ unsigned char AccObjectManagerAgent::InsertChildrenAccObj( XAccessible* pXAcc, long pWnd) { if( pWinManager ) return (unsigned char)pWinManager->InsertChildrenAccObj( pXAcc, HWND((void*)pWnd) ); return sal_False; } /** * When a new UNO XAccessible object is destroied,we'll delete its corresponding * com object and remove it from our manager list. * @param pXAcc Uno XAccessible interface of control. * @return */ void AccObjectManagerAgent::DeleteAccObj( XAccessible* pXAcc ) { if( pWinManager ) pWinManager->DeleteAccObj( pXAcc ); } /** * When new UNO children XAccessible objects are destroyed,we'll delete their * corresponding com objects and remove them from our manager list. * @param pXAcc Uno XAccessible interface of control. * @return */ void AccObjectManagerAgent::DeleteChildrenAccObj( XAccessible* pXAcc ) { if( pWinManager ) pWinManager->DeleteChildrenAccObj( pXAcc ); } /** * Interface of decreasing MSAA state when some UNO state is decreased. * @param pXAcc Uno XAccessible interface of control. * @param pState The lost state of control. * @return */ void AccObjectManagerAgent::DecreaseState( XAccessible* pXAcc,unsigned short pState ) { if(pWinManager) { pWinManager->DecreaseState( pXAcc, pState ); } } /** * Interface of increasing MSAA name when some UNO state is increased. * @param pXAcc Uno XAccessible interface of control. * @param pState The new state of control. * @return */ void AccObjectManagerAgent::IncreaseState( XAccessible* pXAcc,unsigned short pState ) { if(pWinManager) { pWinManager->IncreaseState( pXAcc, pState ); } } void AccObjectManagerAgent::UpdateState( com::sun::star::accessibility::XAccessible* pXAcc ) { if(pWinManager) pWinManager->UpdateState(pXAcc); } /** * Interface of notify MSAA event when some UNO event occurred. * @param pXAcc Uno XAccessible interface of control. * @param pEvent UNO event ID. * @return If the method is correctly processed. */ unsigned char AccObjectManagerAgent::NotifyAccEvent( short pEvent,XAccessible* pXAcc ) { if(pWinManager) return (unsigned char)pWinManager->NotifyAccEvent(pXAcc,pEvent); return sal_False; } /** * Judge whether a XAccessible object is a container object. * @param pXAcc Uno XAccessible interface of control. * @return If the method is correctly processed. */ unsigned short AccObjectManagerAgent::IsContainer( XAccessible* pXAcc ) { if(pWinManager) return (unsigned char)pWinManager->IsContainer(pXAcc); return sal_False; } /** * Return com object interface by querying XAccessible interface. * @param pXAcc Uno XAccessible interface of control. * @return Com interface. */ IMAccessible* AccObjectManagerAgent::GetIMAccByXAcc(XAccessible* pXAcc) { if(pWinManager) return pWinManager->GetIMAccByXAcc(pXAcc); return NULL; } /** * Notify manger when a XAccessible object is destroying. * @param pXAcc Uno XAccessible interface of control. * @return. */ void AccObjectManagerAgent::NotifyDestroy(XAccessible* pXAcc) { if(pWinManager) pWinManager->NotifyDestroy(pXAcc); } /** * Return com object interface by querying child id. * @param pXAcc Uno XAccessible interface of control. * @return Com interface. */ void AccObjectManagerAgent::GetIAccessibleFromResID(long childID,IMAccessible** pIMAcc) { if(pWinManager) *pIMAcc = pWinManager->GetIAccessibleFromResID(childID); } /** * Return object interface by querying interface. * @param pXAcc Uno XAccessible interface of control. * @return Com interface. */ unsigned char AccObjectManagerAgent::GetIAccessibleFromXAccessible(XAccessible* pXAcc, IAccessible** ppXI) { if(pWinManager) { *ppXI = (IAccessible*)pWinManager->GetIMAccByXAcc(pXAcc); if(*ppXI) return sal_True; } return sal_False; } XAccessible* AccObjectManagerAgent::GetParentXAccessible( XAccessible* pXAcc ) { if(pWinManager) return pWinManager->GetParentXAccessible( pXAcc ); return NULL; } short AccObjectManagerAgent::GetParentRole( XAccessible* pXAcc ) { if(pWinManager) return pWinManager->GetParentRole( pXAcc ); return -1; } void AccObjectManagerAgent::UpdateDescription( XAccessible* pXAcc ) { if(pWinManager) pWinManager->UpdateDescription( pXAcc ); } void AccObjectManagerAgent::UpdateChildState(com::sun::star::accessibility::XAccessible* pXAcc) { if(pWinManager) pWinManager->UpdateChildState( pXAcc ); } bool AccObjectManagerAgent::IsSpecialToolboItem(com::sun::star::accessibility::XAccessible* pXAcc) { if(pWinManager) return pWinManager->IsSpecialToolboItem( pXAcc ); return false; } short AccObjectManagerAgent::GetRole(com::sun::star::accessibility::XAccessible* pXAcc) { if(pWinManager) return pWinManager->GetRole( pXAcc ); return -1; } XAccessible* AccObjectManagerAgent::GetAccDocByAccTopWin( XAccessible* pXAcc ) { if (pWinManager) { return pWinManager->GetAccDocByAccTopWin( pXAcc ); } return NULL; } bool AccObjectManagerAgent::IsTopWinAcc( com::sun::star::accessibility::XAccessible* pXAcc ) { if (pWinManager) { return pWinManager->IsTopWinAcc( pXAcc ); } return NULL; } bool AccObjectManagerAgent::IsStateManageDescendant(com::sun::star::accessibility::XAccessible* pXAcc) { if(pWinManager) return pWinManager->IsStateManageDescendant( pXAcc ); return sal_False; }