blob: 77d2f3eeb2f4de84a3208eb34cd02683adcf5fac [file] [log] [blame]
/**************************************************************
*
* 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 <topwindowhandle, XAccessible>
* @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 occured.
* @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;
}