1*3a700b0aSSteve Yin /************************************************************** 2*3a700b0aSSteve Yin * 3*3a700b0aSSteve Yin * Licensed to the Apache Software Foundation (ASF) under one 4*3a700b0aSSteve Yin * or more contributor license agreements. See the NOTICE file 5*3a700b0aSSteve Yin * distributed with this work for additional information 6*3a700b0aSSteve Yin * regarding copyright ownership. The ASF licenses this file 7*3a700b0aSSteve Yin * to you under the Apache License, Version 2.0 (the 8*3a700b0aSSteve Yin * "License"); you may not use this file except in compliance 9*3a700b0aSSteve Yin * with the License. You may obtain a copy of the License at 10*3a700b0aSSteve Yin * 11*3a700b0aSSteve Yin * http://www.apache.org/licenses/LICENSE-2.0 12*3a700b0aSSteve Yin * 13*3a700b0aSSteve Yin * Unless required by applicable law or agreed to in writing, 14*3a700b0aSSteve Yin * software distributed under the License is distributed on an 15*3a700b0aSSteve Yin * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*3a700b0aSSteve Yin * KIND, either express or implied. See the License for the 17*3a700b0aSSteve Yin * specific language governing permissions and limitations 18*3a700b0aSSteve Yin * under the License. 19*3a700b0aSSteve Yin * 20*3a700b0aSSteve Yin *************************************************************/ 215fdc4257SSteve Yin 225fdc4257SSteve Yin #include "AccObjectManagerAgent.hxx" 235fdc4257SSteve Yin #include "AccObjectWinManager.hxx" 245fdc4257SSteve Yin 255fdc4257SSteve Yin #include "UAccCOM2.h" 265fdc4257SSteve Yin 275fdc4257SSteve Yin using namespace com::sun::star::uno; 285fdc4257SSteve Yin using namespace com::sun::star::accessibility; 295fdc4257SSteve Yin 305fdc4257SSteve Yin /** 315fdc4257SSteve Yin * Construction/Destruction. 325fdc4257SSteve Yin * @param 335fdc4257SSteve Yin * @return 345fdc4257SSteve Yin */ 355fdc4257SSteve Yin AccObjectManagerAgent::AccObjectManagerAgent(): 365fdc4257SSteve Yin pWinManager(NULL) 375fdc4257SSteve Yin { 385fdc4257SSteve Yin if( pWinManager == NULL ) 395fdc4257SSteve Yin { 405fdc4257SSteve Yin pWinManager = AccObjectWinManager::CreateAccObjectWinManagerInstance(this); 415fdc4257SSteve Yin } 425fdc4257SSteve Yin } 435fdc4257SSteve Yin 445fdc4257SSteve Yin AccObjectManagerAgent::~AccObjectManagerAgent() 455fdc4257SSteve Yin { 465fdc4257SSteve Yin delete pWinManager; 475fdc4257SSteve Yin pWinManager = NULL; 485fdc4257SSteve Yin } 495fdc4257SSteve Yin 505fdc4257SSteve Yin /** 515fdc4257SSteve Yin * Interface of updating MSAA name when UNO name_changed event occurs. 525fdc4257SSteve Yin * @param pXAcc Uno XAccessible interface of control. 535fdc4257SSteve Yin * @return 545fdc4257SSteve Yin */ 555fdc4257SSteve Yin void AccObjectManagerAgent::UpdateAccName( XAccessible* pXAcc ) 565fdc4257SSteve Yin { 575fdc4257SSteve Yin if( pWinManager ) 585fdc4257SSteve Yin pWinManager->UpdateAccName( pXAcc ); 595fdc4257SSteve Yin } 605fdc4257SSteve Yin 615fdc4257SSteve Yin /** 625fdc4257SSteve Yin * Interface of updating MSAA name when UNO action changed event occurs. 635fdc4257SSteve Yin * @param pXAcc Uno XAccessible interface of control. 645fdc4257SSteve Yin * @return 655fdc4257SSteve Yin */ 665fdc4257SSteve Yin void AccObjectManagerAgent::UpdateAction( XAccessible* pXAcc ) 675fdc4257SSteve Yin { 685fdc4257SSteve Yin if( pWinManager ) 695fdc4257SSteve Yin pWinManager->UpdateAction( pXAcc ); 705fdc4257SSteve Yin } 715fdc4257SSteve Yin 725fdc4257SSteve Yin /** 735fdc4257SSteve Yin * Interface of updating MSAA value when UNO value_changed event occurs. 745fdc4257SSteve Yin * @param pXAcc Uno XAccessible interface of control. 755fdc4257SSteve Yin * @param pAny New value. 765fdc4257SSteve Yin * @return 775fdc4257SSteve Yin */ 785fdc4257SSteve Yin void AccObjectManagerAgent::UpdateValue( XAccessible* pXAcc, Any pAny ) 795fdc4257SSteve Yin { 805fdc4257SSteve Yin if( pWinManager ) 815fdc4257SSteve Yin pWinManager->SetValue( pXAcc, pAny ); 825fdc4257SSteve Yin } 835fdc4257SSteve Yin 845fdc4257SSteve Yin /** 855fdc4257SSteve Yin * Interface of updating MSAA value when UNO value_changed event occurs.If we can not 865fdc4257SSteve Yin * find new value,we'll get new value from pXAcc to update com value. 875fdc4257SSteve Yin * @param pXAcc Uno XAccessible interface of control. 885fdc4257SSteve Yin * @return 895fdc4257SSteve Yin */ 905fdc4257SSteve Yin void AccObjectManagerAgent::UpdateValue( XAccessible* pXAcc ) 915fdc4257SSteve Yin { 925fdc4257SSteve Yin if( pWinManager ) 935fdc4257SSteve Yin pWinManager->UpdateValue( pXAcc ); 945fdc4257SSteve Yin } 955fdc4257SSteve Yin 965fdc4257SSteve Yin /** 975fdc4257SSteve Yin * Interface of updating MSAA name when UNO name_changed event occurs. 985fdc4257SSteve Yin * @param pXAcc Uno XAccessible interface of control. 995fdc4257SSteve Yin * @param newName New UNO accessible name. 1005fdc4257SSteve Yin * @return 1015fdc4257SSteve Yin */ 1025fdc4257SSteve Yin void AccObjectManagerAgent::UpdateAccName( XAccessible* pXAcc, Any newName) 1035fdc4257SSteve Yin { 1045fdc4257SSteve Yin if( pWinManager ) 1055fdc4257SSteve Yin pWinManager->SetAccName( pXAcc, newName ); 1065fdc4257SSteve Yin } 1075fdc4257SSteve Yin 1085fdc4257SSteve Yin 1095fdc4257SSteve Yin /** 1105fdc4257SSteve Yin * Interface of updating MSAA location when UNO location_changed event occurs. 1115fdc4257SSteve Yin * @param pXAcc Uno XAccessible interface of control. 1125fdc4257SSteve Yin * @param pXAcc Uno The top position of new location. 1135fdc4257SSteve Yin * @param pXAcc Uno The left position of new location. 1145fdc4257SSteve Yin * @param pXAcc Uno The width of new location. 1155fdc4257SSteve Yin * @param pXAcc Uno The width of new location. 1165fdc4257SSteve Yin * @return 1175fdc4257SSteve Yin */ 1185fdc4257SSteve Yin void AccObjectManagerAgent::UpdateLocation( XAccessible* /* pXAcc */, long /*top*/, long /*left*/, long /*width*/, long /*height*/ ) 1195fdc4257SSteve Yin { 1205fdc4257SSteve Yin #ifdef _IMPL_WIN 1215fdc4257SSteve Yin if( pWinManager ) 1225fdc4257SSteve Yin pWinManager->SetLocation( pXAcc, top, left, width, height ); 1235fdc4257SSteve Yin #endif 1245fdc4257SSteve Yin } 1255fdc4257SSteve Yin 1265fdc4257SSteve Yin /** 1275fdc4257SSteve Yin * Interface of updating MSAA name when UNO description_changed event occurs. 1285fdc4257SSteve Yin * @param pXAcc Uno XAccessible interface of control. 1295fdc4257SSteve Yin * @param newDesc New UNO accessible description. 1305fdc4257SSteve Yin * @return 1315fdc4257SSteve Yin */ 1325fdc4257SSteve Yin void AccObjectManagerAgent::UpdateDescription( XAccessible* pXAcc, Any newDesc ) 1335fdc4257SSteve Yin { 1345fdc4257SSteve Yin if( pWinManager ) 1355fdc4257SSteve Yin pWinManager->SetDescription( pXAcc, newDesc ); 1365fdc4257SSteve Yin } 1375fdc4257SSteve Yin 1385fdc4257SSteve Yin /** 1395fdc4257SSteve Yin * When a new UNO XAccessible object is found by listener,we'll create a corresponding 1405fdc4257SSteve Yin * com object and insert it to our manager list. 1415fdc4257SSteve Yin * @param pXAcc Uno XAccessible interface of control. 1425fdc4257SSteve Yin * @param pWnd The top window handle containing control. 1435fdc4257SSteve Yin * @return If the method is correctly processed. 1445fdc4257SSteve Yin */ 1455fdc4257SSteve Yin unsigned char AccObjectManagerAgent::InsertAccObj( XAccessible* pXAcc,XAccessible* pParentXAcc,long pWnd) 1465fdc4257SSteve Yin { 1475fdc4257SSteve Yin if( pWinManager ) 1485fdc4257SSteve Yin return (unsigned char)pWinManager->InsertAccObj( pXAcc, pParentXAcc,HWND((void*)pWnd) ); 1495fdc4257SSteve Yin 1505fdc4257SSteve Yin return sal_False; 1515fdc4257SSteve Yin } 1525fdc4257SSteve Yin 1535fdc4257SSteve Yin /** 1545fdc4257SSteve Yin * save the pair <topwindowhandle, XAccessible> 1555fdc4257SSteve Yin * @param hWnd, top window handle 1565fdc4257SSteve Yin * @param pXAcc XAccessible interface for top window 1575fdc4257SSteve Yin * @return void 1585fdc4257SSteve Yin */ 1595fdc4257SSteve Yin void AccObjectManagerAgent::SaveTopWindowHandle(long hWnd, com::sun::star::accessibility::XAccessible* pXAcc) 1605fdc4257SSteve Yin { 1615fdc4257SSteve Yin if( pWinManager ) 1625fdc4257SSteve Yin pWinManager->SaveTopWindowHandle( HWND((void*)hWnd), pXAcc ); 1635fdc4257SSteve Yin } 1645fdc4257SSteve Yin 1655fdc4257SSteve Yin 1665fdc4257SSteve Yin /** 1675fdc4257SSteve Yin * When a UNO XAccessible object's new children are found by listener,we'll create 1685fdc4257SSteve Yin * corresponding com objects and insert them to our manager list. 1695fdc4257SSteve Yin * @param pXAcc Uno XAccessible interface of control. 1705fdc4257SSteve Yin * @param pWnd The top window handle containing control. 1715fdc4257SSteve Yin * @return If the method is correctly processed. 1725fdc4257SSteve Yin */ 1735fdc4257SSteve Yin unsigned char AccObjectManagerAgent::InsertChildrenAccObj( XAccessible* pXAcc, 1745fdc4257SSteve Yin long pWnd) 1755fdc4257SSteve Yin { 1765fdc4257SSteve Yin if( pWinManager ) 1775fdc4257SSteve Yin return (unsigned char)pWinManager->InsertChildrenAccObj( pXAcc, HWND((void*)pWnd) ); 1785fdc4257SSteve Yin 1795fdc4257SSteve Yin return sal_False; 1805fdc4257SSteve Yin } 1815fdc4257SSteve Yin 1825fdc4257SSteve Yin /** 1835fdc4257SSteve Yin * When a new UNO XAccessible object is destroied,we'll delete its corresponding 1845fdc4257SSteve Yin * com object and remove it from our manager list. 1855fdc4257SSteve Yin * @param pXAcc Uno XAccessible interface of control. 1865fdc4257SSteve Yin * @return 1875fdc4257SSteve Yin */ 1885fdc4257SSteve Yin void AccObjectManagerAgent::DeleteAccObj( XAccessible* pXAcc ) 1895fdc4257SSteve Yin { 1905fdc4257SSteve Yin if( pWinManager ) 1915fdc4257SSteve Yin pWinManager->DeleteAccObj( pXAcc ); 1925fdc4257SSteve Yin } 1935fdc4257SSteve Yin 1945fdc4257SSteve Yin /** 1955fdc4257SSteve Yin * When new UNO children XAccessible objects are destroyed,we'll delete their 1965fdc4257SSteve Yin * corresponding com objects and remove them from our manager list. 1975fdc4257SSteve Yin * @param pXAcc Uno XAccessible interface of control. 1985fdc4257SSteve Yin * @return 1995fdc4257SSteve Yin */ 2005fdc4257SSteve Yin void AccObjectManagerAgent::DeleteChildrenAccObj( XAccessible* pXAcc ) 2015fdc4257SSteve Yin { 2025fdc4257SSteve Yin if( pWinManager ) 2035fdc4257SSteve Yin pWinManager->DeleteChildrenAccObj( pXAcc ); 2045fdc4257SSteve Yin } 2055fdc4257SSteve Yin 2065fdc4257SSteve Yin /** 2075fdc4257SSteve Yin * Interface of decreasing MSAA state when some UNO state is decreased. 2085fdc4257SSteve Yin * @param pXAcc Uno XAccessible interface of control. 2095fdc4257SSteve Yin * @param pState The lost state of control. 2105fdc4257SSteve Yin * @return 2115fdc4257SSteve Yin */ 2125fdc4257SSteve Yin void AccObjectManagerAgent::DecreaseState( XAccessible* pXAcc,unsigned short pState ) 2135fdc4257SSteve Yin { 2145fdc4257SSteve Yin if(pWinManager) 2155fdc4257SSteve Yin { 2165fdc4257SSteve Yin pWinManager->DecreaseState( pXAcc, pState ); 2175fdc4257SSteve Yin } 2185fdc4257SSteve Yin } 2195fdc4257SSteve Yin 2205fdc4257SSteve Yin /** 2215fdc4257SSteve Yin * Interface of increasing MSAA name when some UNO state is increased. 2225fdc4257SSteve Yin * @param pXAcc Uno XAccessible interface of control. 2235fdc4257SSteve Yin * @param pState The new state of control. 2245fdc4257SSteve Yin * @return 2255fdc4257SSteve Yin */ 2265fdc4257SSteve Yin void AccObjectManagerAgent::IncreaseState( XAccessible* pXAcc,unsigned short pState ) 2275fdc4257SSteve Yin { 2285fdc4257SSteve Yin if(pWinManager) 2295fdc4257SSteve Yin { 2305fdc4257SSteve Yin pWinManager->IncreaseState( pXAcc, pState ); 2315fdc4257SSteve Yin } 2325fdc4257SSteve Yin } 2335fdc4257SSteve Yin 2345fdc4257SSteve Yin void AccObjectManagerAgent::UpdateState( com::sun::star::accessibility::XAccessible* pXAcc ) 2355fdc4257SSteve Yin { 2365fdc4257SSteve Yin if(pWinManager) 2375fdc4257SSteve Yin pWinManager->UpdateState(pXAcc); 2385fdc4257SSteve Yin } 2395fdc4257SSteve Yin 2405fdc4257SSteve Yin /** 2415fdc4257SSteve Yin * Interface of notify MSAA event when some UNO event occured. 2425fdc4257SSteve Yin * @param pXAcc Uno XAccessible interface of control. 2435fdc4257SSteve Yin * @param pEvent UNO event ID. 2445fdc4257SSteve Yin * @return If the method is correctly processed. 2455fdc4257SSteve Yin */ 2465fdc4257SSteve Yin unsigned char AccObjectManagerAgent::NotifyAccEvent( short pEvent,XAccessible* pXAcc ) 2475fdc4257SSteve Yin { 2485fdc4257SSteve Yin if(pWinManager) 2495fdc4257SSteve Yin return (unsigned char)pWinManager->NotifyAccEvent(pXAcc,pEvent); 2505fdc4257SSteve Yin 2515fdc4257SSteve Yin return sal_False; 2525fdc4257SSteve Yin } 2535fdc4257SSteve Yin 2545fdc4257SSteve Yin /** 2555fdc4257SSteve Yin * Judge whether a XAccessible object is a container object. 2565fdc4257SSteve Yin * @param pXAcc Uno XAccessible interface of control. 2575fdc4257SSteve Yin * @return If the method is correctly processed. 2585fdc4257SSteve Yin */ 2595fdc4257SSteve Yin unsigned short AccObjectManagerAgent::IsContainer( XAccessible* pXAcc ) 2605fdc4257SSteve Yin { 2615fdc4257SSteve Yin if(pWinManager) 2625fdc4257SSteve Yin return (unsigned char)pWinManager->IsContainer(pXAcc); 2635fdc4257SSteve Yin 2645fdc4257SSteve Yin return sal_False; 2655fdc4257SSteve Yin } 2665fdc4257SSteve Yin 2675fdc4257SSteve Yin /** 2685fdc4257SSteve Yin * Return com object interface by querying XAccessible interface. 2695fdc4257SSteve Yin * @param pXAcc Uno XAccessible interface of control. 2705fdc4257SSteve Yin * @return Com interface. 2715fdc4257SSteve Yin */ 2725fdc4257SSteve Yin IMAccessible* AccObjectManagerAgent::GetIMAccByXAcc(XAccessible* pXAcc) 2735fdc4257SSteve Yin { 2745fdc4257SSteve Yin if(pWinManager) 2755fdc4257SSteve Yin return pWinManager->GetIMAccByXAcc(pXAcc); 2765fdc4257SSteve Yin 2775fdc4257SSteve Yin return NULL; 2785fdc4257SSteve Yin } 2795fdc4257SSteve Yin 2805fdc4257SSteve Yin /** 2815fdc4257SSteve Yin * Notify manger when a XAccessible object is destroying. 2825fdc4257SSteve Yin * @param pXAcc Uno XAccessible interface of control. 2835fdc4257SSteve Yin * @return. 2845fdc4257SSteve Yin */ 2855fdc4257SSteve Yin void AccObjectManagerAgent::NotifyDestroy(XAccessible* pXAcc) 2865fdc4257SSteve Yin { 2875fdc4257SSteve Yin if(pWinManager) 2885fdc4257SSteve Yin pWinManager->NotifyDestroy(pXAcc); 2895fdc4257SSteve Yin } 2905fdc4257SSteve Yin 2915fdc4257SSteve Yin /** 2925fdc4257SSteve Yin * Return com object interface by querying child id. 2935fdc4257SSteve Yin * @param pXAcc Uno XAccessible interface of control. 2945fdc4257SSteve Yin * @return Com interface. 2955fdc4257SSteve Yin */ 2965fdc4257SSteve Yin void AccObjectManagerAgent::GetIAccessibleFromResID(long childID,IMAccessible** pIMAcc) 2975fdc4257SSteve Yin { 2985fdc4257SSteve Yin if(pWinManager) 2995fdc4257SSteve Yin *pIMAcc = pWinManager->GetIAccessibleFromResID(childID); 3005fdc4257SSteve Yin } 3015fdc4257SSteve Yin 3025fdc4257SSteve Yin /** 3035fdc4257SSteve Yin * Return object interface by querying interface. 3045fdc4257SSteve Yin * @param pXAcc Uno XAccessible interface of control. 3055fdc4257SSteve Yin * @return Com interface. 3065fdc4257SSteve Yin */ 3075fdc4257SSteve Yin unsigned char AccObjectManagerAgent::GetIAccessibleFromXAccessible(XAccessible* pXAcc, IAccessible** ppXI) 3085fdc4257SSteve Yin { 3095fdc4257SSteve Yin if(pWinManager) 3105fdc4257SSteve Yin { 3115fdc4257SSteve Yin *ppXI = (IAccessible*)pWinManager->GetIMAccByXAcc(pXAcc); 3125fdc4257SSteve Yin if(*ppXI) 3135fdc4257SSteve Yin return sal_True; 3145fdc4257SSteve Yin } 3155fdc4257SSteve Yin return sal_False; 3165fdc4257SSteve Yin } 3175fdc4257SSteve Yin 3185fdc4257SSteve Yin XAccessible* AccObjectManagerAgent::GetParentXAccessible( XAccessible* pXAcc ) 3195fdc4257SSteve Yin { 3205fdc4257SSteve Yin if(pWinManager) 3215fdc4257SSteve Yin return pWinManager->GetParentXAccessible( pXAcc ); 3225fdc4257SSteve Yin 3235fdc4257SSteve Yin return NULL; 3245fdc4257SSteve Yin } 3255fdc4257SSteve Yin 3265fdc4257SSteve Yin short AccObjectManagerAgent::GetParentRole( XAccessible* pXAcc ) 3275fdc4257SSteve Yin { 3285fdc4257SSteve Yin if(pWinManager) 3295fdc4257SSteve Yin return pWinManager->GetParentRole( pXAcc ); 3305fdc4257SSteve Yin 3315fdc4257SSteve Yin return -1; 3325fdc4257SSteve Yin } 3335fdc4257SSteve Yin 3345fdc4257SSteve Yin void AccObjectManagerAgent::UpdateDescription( XAccessible* pXAcc ) 3355fdc4257SSteve Yin { 3365fdc4257SSteve Yin if(pWinManager) 3375fdc4257SSteve Yin pWinManager->UpdateDescription( pXAcc ); 3385fdc4257SSteve Yin } 3395fdc4257SSteve Yin 3405fdc4257SSteve Yin void AccObjectManagerAgent::UpdateChildState(com::sun::star::accessibility::XAccessible* pXAcc) 3415fdc4257SSteve Yin { 3425fdc4257SSteve Yin if(pWinManager) 3435fdc4257SSteve Yin pWinManager->UpdateChildState( pXAcc ); 3445fdc4257SSteve Yin } 3455fdc4257SSteve Yin 3465fdc4257SSteve Yin 3475fdc4257SSteve Yin bool AccObjectManagerAgent::IsSpecialToolboItem(com::sun::star::accessibility::XAccessible* pXAcc) 3485fdc4257SSteve Yin { 3495fdc4257SSteve Yin if(pWinManager) 3505fdc4257SSteve Yin return pWinManager->IsSpecialToolboItem( pXAcc ); 3515fdc4257SSteve Yin 3525fdc4257SSteve Yin return false; 3535fdc4257SSteve Yin } 3545fdc4257SSteve Yin 3555fdc4257SSteve Yin short AccObjectManagerAgent::GetRole(com::sun::star::accessibility::XAccessible* pXAcc) 3565fdc4257SSteve Yin { 3575fdc4257SSteve Yin if(pWinManager) 3585fdc4257SSteve Yin return pWinManager->GetRole( pXAcc ); 3595fdc4257SSteve Yin 3605fdc4257SSteve Yin return -1; 3615fdc4257SSteve Yin } 3625fdc4257SSteve Yin 3635fdc4257SSteve Yin XAccessible* AccObjectManagerAgent::GetAccDocByAccTopWin( XAccessible* pXAcc ) 3645fdc4257SSteve Yin { 3655fdc4257SSteve Yin if (pWinManager) 3665fdc4257SSteve Yin { 3675fdc4257SSteve Yin return pWinManager->GetAccDocByAccTopWin( pXAcc ); 3685fdc4257SSteve Yin } 3695fdc4257SSteve Yin return NULL; 3705fdc4257SSteve Yin } 3715fdc4257SSteve Yin bool AccObjectManagerAgent::IsTopWinAcc( com::sun::star::accessibility::XAccessible* pXAcc ) 3725fdc4257SSteve Yin { 3735fdc4257SSteve Yin if (pWinManager) 3745fdc4257SSteve Yin { 3755fdc4257SSteve Yin return pWinManager->IsTopWinAcc( pXAcc ); 3765fdc4257SSteve Yin } 3775fdc4257SSteve Yin return NULL; 3785fdc4257SSteve Yin } 3795fdc4257SSteve Yin 3805fdc4257SSteve Yin bool AccObjectManagerAgent::IsStateManageDescendant(com::sun::star::accessibility::XAccessible* pXAcc) 3815fdc4257SSteve Yin { 3825fdc4257SSteve Yin if(pWinManager) 3835fdc4257SSteve Yin return pWinManager->IsStateManageDescendant( pXAcc ); 3845fdc4257SSteve Yin 3855fdc4257SSteve Yin return sal_False; 3865fdc4257SSteve Yin } 387