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 #ifndef __ACCOBJECTWINMANAGER_HXX 23*b1cdbd2cSJim Jagielski #define __ACCOBJECTWINMANAGER_HXX 24*b1cdbd2cSJim Jagielski 25*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_ACCESSIBILITY_XACCESSIBLE_HPP_ 26*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/XAccessible.hpp> 27*b1cdbd2cSJim Jagielski #endif 28*b1cdbd2cSJim Jagielski #include <map> 29*b1cdbd2cSJim Jagielski #include <windows.h> 30*b1cdbd2cSJim Jagielski #include <vos/mutex.hxx> 31*b1cdbd2cSJim Jagielski #include <vcl/dllapi.h> 32*b1cdbd2cSJim Jagielski #include "ResIDGenerator.hxx" 33*b1cdbd2cSJim Jagielski #include "UAccCOM2.h" 34*b1cdbd2cSJim Jagielski 35*b1cdbd2cSJim Jagielski class ResIDGenerator; 36*b1cdbd2cSJim Jagielski class AccObjectManagerAgent; 37*b1cdbd2cSJim Jagielski class AccEventListener; 38*b1cdbd2cSJim Jagielski class AccObject; 39*b1cdbd2cSJim Jagielski 40*b1cdbd2cSJim Jagielski /******************************************************************* 41*b1cdbd2cSJim Jagielski AccObjectWinManager complete the functions: 42*b1cdbd2cSJim Jagielski 1. Insert, delete,query,update Acc objects 43*b1cdbd2cSJim Jagielski 2. Create, delete,fire AccEventLister, the lifecycle of AccEventListener is as same as 44*b1cdbd2cSJim Jagielski Acc Object 45*b1cdbd2cSJim Jagielski 3.Return COM interface for AT,by the call back in salframe 46*b1cdbd2cSJim Jagielski 4.Pass accessible information to Acc objects 47*b1cdbd2cSJim Jagielski *******************************************************************/ 48*b1cdbd2cSJim Jagielski class AccObjectWinManager 49*b1cdbd2cSJim Jagielski { 50*b1cdbd2cSJim Jagielski friend class AccObjectManagerAgent; 51*b1cdbd2cSJim Jagielski 52*b1cdbd2cSJim Jagielski private: 53*b1cdbd2cSJim Jagielski struct ltstr1 54*b1cdbd2cSJim Jagielski { operator ()AccObjectWinManager::ltstr155*b1cdbd2cSJim Jagielski bool operator()(const void* s1, const void* s2) const 56*b1cdbd2cSJim Jagielski { 57*b1cdbd2cSJim Jagielski return long(s1)<long(s2); 58*b1cdbd2cSJim Jagielski } 59*b1cdbd2cSJim Jagielski }; 60*b1cdbd2cSJim Jagielski struct ltstr2 61*b1cdbd2cSJim Jagielski { operator ()AccObjectWinManager::ltstr262*b1cdbd2cSJim Jagielski bool operator()(const HWND s1, const HWND s2) const 63*b1cdbd2cSJim Jagielski { 64*b1cdbd2cSJim Jagielski return long(s1)<long(s2); 65*b1cdbd2cSJim Jagielski } 66*b1cdbd2cSJim Jagielski }; 67*b1cdbd2cSJim Jagielski struct ltstr3 68*b1cdbd2cSJim Jagielski { operator ()AccObjectWinManager::ltstr369*b1cdbd2cSJim Jagielski bool operator()(const long s1, const long s2) const 70*b1cdbd2cSJim Jagielski { 71*b1cdbd2cSJim Jagielski return long(s1)<long(s2); 72*b1cdbd2cSJim Jagielski } 73*b1cdbd2cSJim Jagielski }; 74*b1cdbd2cSJim Jagielski typedef std::map< void*, AccObject,ltstr1 > XIdToAccObjHash; 75*b1cdbd2cSJim Jagielski typedef std::map< HWND,void*,ltstr2 > XHWNDToXAccHash; 76*b1cdbd2cSJim Jagielski typedef std::map< const long, AccObject*,ltstr3 > XResIdToAccObjHash; 77*b1cdbd2cSJim Jagielski 78*b1cdbd2cSJim Jagielski typedef std::map< const long, com::sun::star::accessibility::XAccessible*,ltstr3 > XHWNDToDocumentHash; 79*b1cdbd2cSJim Jagielski 80*b1cdbd2cSJim Jagielski 81*b1cdbd2cSJim Jagielski //XAccessible to AccObject 82*b1cdbd2cSJim Jagielski XIdToAccObjHash XIdAccList; 83*b1cdbd2cSJim Jagielski 84*b1cdbd2cSJim Jagielski //HWND to All XAccessible pointer 85*b1cdbd2cSJim Jagielski XHWNDToXAccHash HwndXAcc; 86*b1cdbd2cSJim Jagielski 87*b1cdbd2cSJim Jagielski //id_Child to AccObject 88*b1cdbd2cSJim Jagielski XResIdToAccObjHash XResIdAccList; 89*b1cdbd2cSJim Jagielski 90*b1cdbd2cSJim Jagielski //for file name support 91*b1cdbd2cSJim Jagielski XHWNDToDocumentHash XHWNDDocList; 92*b1cdbd2cSJim Jagielski 93*b1cdbd2cSJim Jagielski com::sun::star::accessibility::XAccessible* oldFocus; 94*b1cdbd2cSJim Jagielski 95*b1cdbd2cSJim Jagielski AccObjectManagerAgent* pAgent; 96*b1cdbd2cSJim Jagielski static AccObjectWinManager* me; 97*b1cdbd2cSJim Jagielski ResIDGenerator ResIdGen; 98*b1cdbd2cSJim Jagielski mutable ::vos::OMutex aDeleteMutex; 99*b1cdbd2cSJim Jagielski mutable ::vos::OMutex aNotifyMutex; 100*b1cdbd2cSJim Jagielski mutable ::vos::OMutex maATInterfaceMutex; 101*b1cdbd2cSJim Jagielski 102*b1cdbd2cSJim Jagielski AccObjectWinManager(AccObjectManagerAgent* Agent=NULL); 103*b1cdbd2cSJim Jagielski 104*b1cdbd2cSJim Jagielski private: 105*b1cdbd2cSJim Jagielski long ImpleGenerateResID(); 106*b1cdbd2cSJim Jagielski AccObject* GetAccObjByXAcc( com::sun::star::accessibility::XAccessible* pXAcc); 107*b1cdbd2cSJim Jagielski 108*b1cdbd2cSJim Jagielski com::sun::star::accessibility::XAccessible* GetXAccByAccObj(AccObject* pAccObj); 109*b1cdbd2cSJim Jagielski 110*b1cdbd2cSJim Jagielski AccObject* GetTopWindowAccObj(HWND hWnd); 111*b1cdbd2cSJim Jagielski 112*b1cdbd2cSJim Jagielski com::sun::star::accessibility::XAccessible* GetAccDocByHWND( long pWnd ); 113*b1cdbd2cSJim Jagielski 114*b1cdbd2cSJim Jagielski void DeleteAccListener( AccObject* pAccObj ); 115*b1cdbd2cSJim Jagielski void InsertAccChildNode(AccObject* pCurObj,AccObject* pParentObj,HWND pWnd); 116*b1cdbd2cSJim Jagielski void DeleteAccChildNode(AccObject* pChild); 117*b1cdbd2cSJim Jagielski void DeleteFromHwndXAcc(com::sun::star::accessibility::XAccessible* pXAcc ); 118*b1cdbd2cSJim Jagielski int UpdateAccSelection(com::sun::star::accessibility::XAccessible* pXAcc); 119*b1cdbd2cSJim Jagielski 120*b1cdbd2cSJim Jagielski AccEventListener* createAccEventListener(com::sun::star::accessibility::XAccessible* pXAcc, AccObjectManagerAgent* Agent); 121*b1cdbd2cSJim Jagielski public: 122*b1cdbd2cSJim Jagielski virtual ~AccObjectWinManager(); 123*b1cdbd2cSJim Jagielski sal_Bool InsertAccObj( com::sun::star::accessibility::XAccessible* pXAcc,com::sun::star::accessibility::XAccessible* pParentXAcc,HWND pWnd); 124*b1cdbd2cSJim Jagielski sal_Bool InsertChildrenAccObj( com::sun::star::accessibility::XAccessible* pXAcc,HWND pWnd=0); 125*b1cdbd2cSJim Jagielski void DeleteAccObj( com::sun::star::accessibility::XAccessible* pXAcc ); 126*b1cdbd2cSJim Jagielski void DeleteChildrenAccObj(com::sun::star::accessibility::XAccessible* pAccObj); 127*b1cdbd2cSJim Jagielski 128*b1cdbd2cSJim Jagielski static AccObjectWinManager* CreateAccObjectWinManagerInstance(AccObjectManagerAgent* Agent); 129*b1cdbd2cSJim Jagielski 130*b1cdbd2cSJim Jagielski sal_Bool NotifyAccEvent( com::sun::star::accessibility::XAccessible* pXAcc,short state = 0 ); 131*b1cdbd2cSJim Jagielski 132*b1cdbd2cSJim Jagielski long Get_ToATInterface( HWND hWnd, long lParam, long wParam); 133*b1cdbd2cSJim Jagielski 134*b1cdbd2cSJim Jagielski void DecreaseState( com::sun::star::accessibility::XAccessible* pXAcc,unsigned short pState ); 135*b1cdbd2cSJim Jagielski void IncreaseState( com::sun::star::accessibility::XAccessible* pXAcc,unsigned short pState ); 136*b1cdbd2cSJim Jagielski void UpdateState( com::sun::star::accessibility::XAccessible* pXAcc ); 137*b1cdbd2cSJim Jagielski void SetLocation( com::sun::star::accessibility::XAccessible* pXAcc, 138*b1cdbd2cSJim Jagielski long Top = 0,long left = 0,long width = 0,long height = 0); 139*b1cdbd2cSJim Jagielski 140*b1cdbd2cSJim Jagielski void SetValue( com::sun::star::accessibility::XAccessible* pXAcc, com::sun::star::uno::Any pAny ); 141*b1cdbd2cSJim Jagielski void UpdateValue( com::sun::star::accessibility::XAccessible* pXAcc ); 142*b1cdbd2cSJim Jagielski 143*b1cdbd2cSJim Jagielski void SetAccName( com::sun::star::accessibility::XAccessible* pXAcc, com::sun::star::uno::Any newName); 144*b1cdbd2cSJim Jagielski void UpdateAccName( com::sun::star::accessibility::XAccessible* pXAcc ); 145*b1cdbd2cSJim Jagielski 146*b1cdbd2cSJim Jagielski void SetDescription( com::sun::star::accessibility::XAccessible* pXAcc, com::sun::star::uno::Any newDesc ); 147*b1cdbd2cSJim Jagielski void UpdateDescription( com::sun::star::accessibility::XAccessible* pXAcc ); 148*b1cdbd2cSJim Jagielski 149*b1cdbd2cSJim Jagielski void SetRole( com::sun::star::accessibility::XAccessible* pXAcc, long Role ); 150*b1cdbd2cSJim Jagielski 151*b1cdbd2cSJim Jagielski void UpdateAccFocus( com::sun::star::accessibility::XAccessible* newFocus ); 152*b1cdbd2cSJim Jagielski void UpdateAction( com::sun::star::accessibility::XAccessible* pXAcc ); 153*b1cdbd2cSJim Jagielski 154*b1cdbd2cSJim Jagielski sal_Bool IsContainer( com::sun::star::accessibility::XAccessible* pAccessible ); 155*b1cdbd2cSJim Jagielski 156*b1cdbd2cSJim Jagielski IMAccessible* GetIMAccByXAcc( com::sun::star::accessibility::XAccessible* pXAcc ); 157*b1cdbd2cSJim Jagielski IMAccessible* GetIAccessibleFromResID(long resID); 158*b1cdbd2cSJim Jagielski 159*b1cdbd2cSJim Jagielski void NotifyDestroy( com::sun::star::accessibility::XAccessible* pXAcc ); 160*b1cdbd2cSJim Jagielski com::sun::star::accessibility::XAccessible* GetParentXAccessible( com::sun::star::accessibility::XAccessible* pXAcc ); 161*b1cdbd2cSJim Jagielski short GetParentRole( com::sun::star::accessibility::XAccessible* pXAcc ); 162*b1cdbd2cSJim Jagielski 163*b1cdbd2cSJim Jagielski void SaveTopWindowHandle(HWND hWnd, com::sun::star::accessibility::XAccessible* pXAcc); 164*b1cdbd2cSJim Jagielski 165*b1cdbd2cSJim Jagielski void UpdateChildState(com::sun::star::accessibility::XAccessible* pXAcc); 166*b1cdbd2cSJim Jagielski 167*b1cdbd2cSJim Jagielski bool IsSpecialToolboItem(com::sun::star::accessibility::XAccessible* pXAcc); 168*b1cdbd2cSJim Jagielski 169*b1cdbd2cSJim Jagielski short GetRole(com::sun::star::accessibility::XAccessible* pXAcc); 170*b1cdbd2cSJim Jagielski 171*b1cdbd2cSJim Jagielski com::sun::star::accessibility::XAccessible* GetAccDocByAccTopWin( com::sun::star::accessibility::XAccessible* pXAcc ); 172*b1cdbd2cSJim Jagielski bool IsTopWinAcc( com::sun::star::accessibility::XAccessible* pXAcc ); 173*b1cdbd2cSJim Jagielski 174*b1cdbd2cSJim Jagielski bool IsStateManageDescendant(com::sun::star::accessibility::XAccessible* pAccessible); 175*b1cdbd2cSJim Jagielski 176*b1cdbd2cSJim Jagielski }; 177*b1cdbd2cSJim Jagielski #endif 178