1*5fdc4257SSteve Yin /************************************************************************* 2*5fdc4257SSteve Yin * 3*5fdc4257SSteve Yin * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*5fdc4257SSteve Yin * 5*5fdc4257SSteve Yin * Copyright IBM Corporation 2010. 6*5fdc4257SSteve Yin * Copyright 2000, 2010 Oracle and/or its affiliates. 7*5fdc4257SSteve Yin * 8*5fdc4257SSteve Yin * OpenOffice.org - a multi-platform office productivity suite 9*5fdc4257SSteve Yin * 10*5fdc4257SSteve Yin * This file is part of OpenOffice.org. 11*5fdc4257SSteve Yin * 12*5fdc4257SSteve Yin * OpenOffice.org is free software: you can redistribute it and/or modify 13*5fdc4257SSteve Yin * it under the terms of the GNU Lesser General Public License version 3 14*5fdc4257SSteve Yin * only, as published by the Free Software Foundation. 15*5fdc4257SSteve Yin * 16*5fdc4257SSteve Yin * OpenOffice.org is distributed in the hope that it will be useful, 17*5fdc4257SSteve Yin * but WITHOUT ANY WARRANTY; without even the implied warranty of 18*5fdc4257SSteve Yin * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19*5fdc4257SSteve Yin * GNU Lesser General Public License version 3 for more details 20*5fdc4257SSteve Yin * (a copy is included in the LICENSE file that accompanied this code). 21*5fdc4257SSteve Yin * 22*5fdc4257SSteve Yin * You should have received a copy of the GNU Lesser General Public License 23*5fdc4257SSteve Yin * version 3 along with OpenOffice.org. If not, see 24*5fdc4257SSteve Yin * <http://www.openoffice.org/license.html> 25*5fdc4257SSteve Yin * for a copy of the LGPLv3 License. 26*5fdc4257SSteve Yin * 27*5fdc4257SSteve Yin ************************************************************************/ 28*5fdc4257SSteve Yin 29*5fdc4257SSteve Yin #ifndef __MACCESSIBLE_H_ 30*5fdc4257SSteve Yin #define __MACCESSIBLE_H_ 31*5fdc4257SSteve Yin 32*5fdc4257SSteve Yin #include <Windows.h> 33*5fdc4257SSteve Yin #include "resource.h" // main symbols 34*5fdc4257SSteve Yin #include <vector> 35*5fdc4257SSteve Yin #include <map> 36*5fdc4257SSteve Yin #include <com/sun/star/accessibility/XAccessible.hpp> 37*5fdc4257SSteve Yin #include <com/sun/star/accessibility/XAccessibleSelection.hpp> 38*5fdc4257SSteve Yin #include <com/sun/star/accessibility/XAccessibleAction.hpp> 39*5fdc4257SSteve Yin #include <AccObjectManagerAgent.hxx> 40*5fdc4257SSteve Yin #include "EnumVariant.h" 41*5fdc4257SSteve Yin #ifndef __ACCCOMMON_H_ 42*5fdc4257SSteve Yin #include "acccommon.h" 43*5fdc4257SSteve Yin #endif 44*5fdc4257SSteve Yin #ifndef __AccessibleApplication_h__ 45*5fdc4257SSteve Yin #include "AccessibleApplication.h" 46*5fdc4257SSteve Yin #endif 47*5fdc4257SSteve Yin #ifndef _RTL_USTRING_HXX_ 48*5fdc4257SSteve Yin #include <rtl/ustring.hxx> 49*5fdc4257SSteve Yin #endif 50*5fdc4257SSteve Yin 51*5fdc4257SSteve Yin #define CHILDID_SELF 0 52*5fdc4257SSteve Yin #define OBJID_WINDOW ((LONG)0x00000000) 53*5fdc4257SSteve Yin #define OBJID_SYSMENU ((LONG)0xFFFFFFFF) 54*5fdc4257SSteve Yin #define OBJID_TITLEBAR ((LONG)0xFFFFFFFE) 55*5fdc4257SSteve Yin #define OBJID_MENU ((LONG)0xFFFFFFFD) 56*5fdc4257SSteve Yin #define OBJID_CLIENT ((LONG)0xFFFFFFFC) 57*5fdc4257SSteve Yin #define OBJID_VSCROLL ((LONG)0xFFFFFFFB) 58*5fdc4257SSteve Yin #define OBJID_HSCROLL ((LONG)0xFFFFFFFA) 59*5fdc4257SSteve Yin #define OBJID_SIZEGRIP ((LONG)0xFFFFFFF9) 60*5fdc4257SSteve Yin #define OBJID_CARET ((LONG)0xFFFFFFF8) 61*5fdc4257SSteve Yin #define OBJID_CURSOR ((LONG)0xFFFFFFF7) 62*5fdc4257SSteve Yin #define OBJID_ALERT ((LONG)0xFFFFFFF6) 63*5fdc4257SSteve Yin #define OBJID_SOUND ((LONG)0xFFFFFFF5) 64*5fdc4257SSteve Yin #define OBJID_QUERYCLASSNAMEIDX ((LONG)0xFFFFFFF4) 65*5fdc4257SSteve Yin #define OBJID_NATIVEOM ((LONG)0xFFFFFFF0) 66*5fdc4257SSteve Yin 67*5fdc4257SSteve Yin using namespace rtl; 68*5fdc4257SSteve Yin /** 69*5fdc4257SSteve Yin *This class implements IMAccessible interface, which inherits from IAccessible2, and 70*5fdc4257SSteve Yin *in turn inherits from IAccessible. So its methods include the methods defined only in 71*5fdc4257SSteve Yin *IAccessible, plus the methods defined only in IAccessible2, plus the methods defined 72*5fdc4257SSteve Yin *only in IMAccessible. 73*5fdc4257SSteve Yin */ 74*5fdc4257SSteve Yin class ATL_NO_VTABLE CMAccessible : 75*5fdc4257SSteve Yin public CComObjectRoot, 76*5fdc4257SSteve Yin public CComCoClass<CMAccessible, &CLSID_MAccessible>, 77*5fdc4257SSteve Yin public IDispatchImpl<IMAccessible, &IID_IMAccessible, &LIBID_UACCCOMLib>, 78*5fdc4257SSteve Yin public IServiceProvider, 79*5fdc4257SSteve Yin public IAccessibleApplication 80*5fdc4257SSteve Yin { 81*5fdc4257SSteve Yin typedef map< const GUID, CComPtr<IUnknown> ,ltComp > XGUIDToComObjHash; 82*5fdc4257SSteve Yin 83*5fdc4257SSteve Yin typedef HRESULT (WINAPI _UNO_AGGCREATORFUNC)(void*, REFIID, LPVOID*); 84*5fdc4257SSteve Yin 85*5fdc4257SSteve Yin struct _UNO_AGGMAP_ENTRY 86*5fdc4257SSteve Yin { 87*5fdc4257SSteve Yin const IID* piid; 88*5fdc4257SSteve Yin _UNO_AGGCREATORFUNC* pfnCreateInstance; 89*5fdc4257SSteve Yin int XIFIndex; 90*5fdc4257SSteve Yin }; 91*5fdc4257SSteve Yin 92*5fdc4257SSteve Yin enum XInterfaceIndex { 93*5fdc4257SSteve Yin XI_COMPONENT = 0x01, 94*5fdc4257SSteve Yin XI_TEXT = 0x02, 95*5fdc4257SSteve Yin XI_TABLE = 0x03, 96*5fdc4257SSteve Yin XI_EDITABLETEXT = 0x04, 97*5fdc4257SSteve Yin XI_IMAGE = 0x05, 98*5fdc4257SSteve Yin XI_SELECTION = 0x06, 99*5fdc4257SSteve Yin XI_EXTENDEDCOMP = 0x07, 100*5fdc4257SSteve Yin XI_VALUE = 0x08, 101*5fdc4257SSteve Yin XI_KEYBINDING = 0x09, 102*5fdc4257SSteve Yin XI_ACTION = 0x0A, 103*5fdc4257SSteve Yin XI_HYPERTEXT = 0x0B, 104*5fdc4257SSteve Yin XI_HYPERLINK = 0x0C, 105*5fdc4257SSteve Yin XI_ATTRIBUTE = 0x0D, 106*5fdc4257SSteve Yin XI_NULL = -1 107*5fdc4257SSteve Yin }; 108*5fdc4257SSteve Yin 109*5fdc4257SSteve Yin public: 110*5fdc4257SSteve Yin CMAccessible(); 111*5fdc4257SSteve Yin virtual ~CMAccessible(); 112*5fdc4257SSteve Yin DECLARE_REGISTRY_RESOURCEID(IDR_MACCESSIBLE) 113*5fdc4257SSteve Yin 114*5fdc4257SSteve Yin DECLARE_GET_CONTROLLING_UNKNOWN() 115*5fdc4257SSteve Yin 116*5fdc4257SSteve Yin DECLARE_PROTECT_FINAL_CONSTRUCT() 117*5fdc4257SSteve Yin 118*5fdc4257SSteve Yin BEGIN_COM_MAP(CMAccessible) 119*5fdc4257SSteve Yin COM_INTERFACE_ENTRY(IMAccessible) 120*5fdc4257SSteve Yin COM_INTERFACE_ENTRY(IAccessible) 121*5fdc4257SSteve Yin COM_INTERFACE_ENTRY(IAccessible2) 122*5fdc4257SSteve Yin COM_INTERFACE_ENTRY(IDispatch) 123*5fdc4257SSteve Yin COM_INTERFACE_ENTRY(IAccessibleApplication) 124*5fdc4257SSteve Yin COM_INTERFACE_ENTRY(IServiceProvider) 125*5fdc4257SSteve Yin COM_INTERFACE_ENTRY_FUNC_BLIND(NULL,_SmartQI) 126*5fdc4257SSteve Yin END_COM_MAP() 127*5fdc4257SSteve Yin 128*5fdc4257SSteve Yin // AGGREGATE OBJECT MAP 129*5fdc4257SSteve Yin BEGIN_AGGOBJECT_MAP(CMAccessible) 130*5fdc4257SSteve Yin AGGOBJECT_ENTRY(IID_IAccessibleComponent, CLSID_AccComponent, COMPONENT) 131*5fdc4257SSteve Yin AGGOBJECT_ENTRY(IID_IAccessibleText, CLSID_AccText, TEXT) 132*5fdc4257SSteve Yin AGGOBJECT_ENTRY(IID_IAccessibleEditableText, CLSID_AccEditableText, EDITABLETEXT) 133*5fdc4257SSteve Yin AGGOBJECT_ENTRY(IID_IAccessibleImage, CLSID_AccImage, IMAGE) 134*5fdc4257SSteve Yin AGGOBJECT_ENTRY(IID_IAccessibleTable, CLSID_AccTable, TABLE) 135*5fdc4257SSteve Yin AGGOBJECT_ENTRY(IID_IAccessibleAction, CLSID_AccAction, ACTION) 136*5fdc4257SSteve Yin AGGOBJECT_ENTRY(IID_IAccessibleValue, CLSID_AccValue, VALUE) 137*5fdc4257SSteve Yin AGGOBJECT_ENTRY(IID_IAccessibleHypertext, CLSID_AccHypertext, HYPERTEXT) 138*5fdc4257SSteve Yin AGGOBJECT_ENTRY(IID_IAccessibleHyperlink, CLSID_AccHyperLink, HYPERLINK) 139*5fdc4257SSteve Yin 140*5fdc4257SSteve Yin 141*5fdc4257SSteve Yin END_AGGOBJECT_MAP() 142*5fdc4257SSteve Yin 143*5fdc4257SSteve Yin // IMAccessible 144*5fdc4257SSteve Yin STDMETHOD(put_accValue)(VARIANT varChild,BSTR szValue); 145*5fdc4257SSteve Yin STDMETHOD(put_accName)(VARIANT varChild,BSTR szName); 146*5fdc4257SSteve Yin STDMETHOD(accDoDefaultAction)(VARIANT varChild); 147*5fdc4257SSteve Yin STDMETHOD(accHitTest)(long xLeft,long yTop,VARIANT *pvarChild); 148*5fdc4257SSteve Yin STDMETHOD(accNavigate)(long navDir,VARIANT varStart,VARIANT *pvarEndUpAt); 149*5fdc4257SSteve Yin STDMETHOD(accLocation)(long *pxLeft,long *pyTop,long *pcxWidth,long *pcyHeight,VARIANT varChild); 150*5fdc4257SSteve Yin STDMETHOD(accSelect)(long flagsSelect,VARIANT varChild); 151*5fdc4257SSteve Yin STDMETHOD(get_accDefaultAction)( VARIANT varChild,BSTR *pszDefaultAction); 152*5fdc4257SSteve Yin STDMETHOD(get_accSelection)(VARIANT *pvarChildren); 153*5fdc4257SSteve Yin STDMETHOD(get_accFocus)(VARIANT *pvarChild); 154*5fdc4257SSteve Yin STDMETHOD(get_accKeyboardShortcut)( VARIANT varChild,BSTR *pszKeyboardShortcut); 155*5fdc4257SSteve Yin STDMETHOD(get_accHelpTopic)(BSTR *pszHelpFile,VARIANT varChild,long *pidTopic); 156*5fdc4257SSteve Yin STDMETHOD(get_accHelp)(VARIANT varChild,BSTR *pszHelp); 157*5fdc4257SSteve Yin STDMETHOD(get_accState)(VARIANT varChild,VARIANT *pvarState); 158*5fdc4257SSteve Yin STDMETHOD(get_accRole)(VARIANT varChild,VARIANT *pvarRole); 159*5fdc4257SSteve Yin STDMETHOD(get_accDescription)(VARIANT varChild,BSTR *pszDescription); 160*5fdc4257SSteve Yin STDMETHOD(get_accValue)( VARIANT varChild,BSTR *pszValue); 161*5fdc4257SSteve Yin STDMETHOD(get_accName)(VARIANT varChild,BSTR *pszName); 162*5fdc4257SSteve Yin STDMETHOD(get_accChild)(VARIANT varChild,IDispatch **ppdispChild); 163*5fdc4257SSteve Yin STDMETHOD(get_accChildCount)(long *pcountChildren); 164*5fdc4257SSteve Yin STDMETHOD(get_accParent)( IDispatch **ppdispParent); 165*5fdc4257SSteve Yin 166*5fdc4257SSteve Yin // methods which are defined only in the IAccessible2 167*5fdc4257SSteve Yin // These methods only declare here, and their implementation bodies are empty now. 168*5fdc4257SSteve Yin STDMETHOD(get_nRelations)( long __RPC_FAR *nRelations) ; 169*5fdc4257SSteve Yin STDMETHOD(get_relation)( long relationIndex, IAccessibleRelation __RPC_FAR *__RPC_FAR *relation) ; 170*5fdc4257SSteve Yin STDMETHOD(get_relations)( long maxRelations, IAccessibleRelation __RPC_FAR *__RPC_FAR *relation, long __RPC_FAR *nRelations) ; 171*5fdc4257SSteve Yin STDMETHOD(role)(long __RPC_FAR *role); 172*5fdc4257SSteve Yin STDMETHOD(get_nActions)(long __RPC_FAR *nActions); 173*5fdc4257SSteve Yin STDMETHOD(scrollTo)(enum IA2ScrollType scrollType); 174*5fdc4257SSteve Yin STDMETHOD(scrollToPoint)(enum IA2CoordinateType coordinateType, long x, long y); 175*5fdc4257SSteve Yin STDMETHOD(get_groupPosition)(long __RPC_FAR *groupLevel,long __RPC_FAR *similarItemsInGroup,long __RPC_FAR *positionInGroup); 176*5fdc4257SSteve Yin STDMETHOD(get_states)( AccessibleStates __RPC_FAR *states ); 177*5fdc4257SSteve Yin STDMETHOD(get_extendedRole)( BSTR __RPC_FAR *extendedRole ); 178*5fdc4257SSteve Yin STDMETHOD(get_localizedExtendedRole)( BSTR __RPC_FAR *localizedExtendedRole ); 179*5fdc4257SSteve Yin STDMETHOD(get_nExtendedStates)( long __RPC_FAR *nExtendedStates); 180*5fdc4257SSteve Yin STDMETHOD(get_extendedStates)( long maxExtendedStates, BSTR __RPC_FAR *__RPC_FAR *extendedStates, long __RPC_FAR *nExtendedStates); 181*5fdc4257SSteve Yin STDMETHOD(get_localizedExtendedStates)(long maxLocalizedExtendedStates,BSTR __RPC_FAR *__RPC_FAR *localizedExtendedStates,long __RPC_FAR *nLocalizedExtendedStates); 182*5fdc4257SSteve Yin STDMETHOD(get_uniqueID)(long __RPC_FAR *uniqueID); 183*5fdc4257SSteve Yin STDMETHOD(get_windowHandle)(HWND __RPC_FAR *windowHandle); 184*5fdc4257SSteve Yin STDMETHOD(get_indexInParent)( long __RPC_FAR *accParentIndex ); 185*5fdc4257SSteve Yin STDMETHOD(get_locale)( IA2Locale __RPC_FAR *locale ); 186*5fdc4257SSteve Yin STDMETHOD(get_attributes)(/*[out]*/ BSTR *pAttr); 187*5fdc4257SSteve Yin 188*5fdc4257SSteve Yin //IServiceProvider. 189*5fdc4257SSteve Yin STDMETHOD(QueryService)(REFGUID guidService, REFIID riid, void** ppvObject); 190*5fdc4257SSteve Yin 191*5fdc4257SSteve Yin //IAccessibleApplication 192*5fdc4257SSteve Yin STDMETHOD(get_appName)(BSTR __RPC_FAR *name); 193*5fdc4257SSteve Yin STDMETHOD(get_appVersion)(BSTR __RPC_FAR *version); 194*5fdc4257SSteve Yin STDMETHOD(get_toolkitName)(BSTR __RPC_FAR *name); 195*5fdc4257SSteve Yin STDMETHOD(get_toolkitVersion)(BSTR __RPC_FAR *version); 196*5fdc4257SSteve Yin 197*5fdc4257SSteve Yin // methods which are defined only in IMAccessible 198*5fdc4257SSteve Yin // These methods are provided for UNO management system. 199*5fdc4257SSteve Yin // The UNO management system use these methods to put Accessibility 200*5fdc4257SSteve Yin // information to COM. 201*5fdc4257SSteve Yin STDMETHOD(Put_XAccName)(const OLECHAR __RPC_FAR *pszName); 202*5fdc4257SSteve Yin STDMETHOD(Put_XAccRole)(unsigned short pRole); 203*5fdc4257SSteve Yin STDMETHOD(DecreaseState)(DWORD pXSate); 204*5fdc4257SSteve Yin STDMETHOD(IncreaseState)(DWORD pXSate); 205*5fdc4257SSteve Yin STDMETHOD(SetState)(DWORD pXSate); 206*5fdc4257SSteve Yin STDMETHOD(Put_XAccDescription)(const OLECHAR __RPC_FAR *pszDescription); 207*5fdc4257SSteve Yin STDMETHOD(Put_XAccValue)(const OLECHAR __RPC_FAR *pszAccValue); 208*5fdc4257SSteve Yin STDMETHOD(Put_XAccLocation)(const Location sLocation); 209*5fdc4257SSteve Yin STDMETHOD(Put_XAccFocus)(long dChildID); 210*5fdc4257SSteve Yin STDMETHOD(Put_XAccParent)(IMAccessible __RPC_FAR *pIParent); 211*5fdc4257SSteve Yin STDMETHOD(Put_XAccWindowHandle)(HWND hwnd); 212*5fdc4257SSteve Yin STDMETHOD(Put_XAccChildID)(long dChildID); 213*5fdc4257SSteve Yin STDMETHOD(Put_XAccAgent)(long pAgent); 214*5fdc4257SSteve Yin STDMETHOD(NotifyDestroy)(BOOL isDestroy); 215*5fdc4257SSteve Yin STDMETHOD(Put_ActionDescription)( const OLECHAR* szAction); 216*5fdc4257SSteve Yin STDMETHOD(SetDefaultAction)(long pAction); 217*5fdc4257SSteve Yin STDMETHOD(GetUNOInterface)(long*); 218*5fdc4257SSteve Yin STDMETHOD(SetXAccessible)(long); 219*5fdc4257SSteve Yin 220*5fdc4257SSteve Yin private: 221*5fdc4257SSteve Yin OLECHAR* m_pszName; 222*5fdc4257SSteve Yin OLECHAR* m_pszValue; 223*5fdc4257SSteve Yin OLECHAR* m_pszActionDescription; 224*5fdc4257SSteve Yin unsigned short m_iRole; 225*5fdc4257SSteve Yin DWORD m_dState; 226*5fdc4257SSteve Yin OLECHAR* m_pszDescription; 227*5fdc4257SSteve Yin IMAccessible* m_pIParent; 228*5fdc4257SSteve Yin Location m_sLocation; 229*5fdc4257SSteve Yin 230*5fdc4257SSteve Yin // identify a COM object/Acc object uniquely 231*5fdc4257SSteve Yin long m_dChildID; 232*5fdc4257SSteve Yin // specify the focus child ID in object self and its direct children 233*5fdc4257SSteve Yin 234*5fdc4257SSteve Yin long m_dFocusChildID; 235*5fdc4257SSteve Yin // parent window handle,will be used in the future application, its value comes from UNO 236*5fdc4257SSteve Yin 237*5fdc4257SSteve Yin HWND m_hwnd; 238*5fdc4257SSteve Yin 239*5fdc4257SSteve Yin // the COM class which implements IEnumVARIANT interface,currently only used in 240*5fdc4257SSteve Yin // the implementation of get_accSelection 241*5fdc4257SSteve Yin CEnumVariant* m_pEnumVar; 242*5fdc4257SSteve Yin 243*5fdc4257SSteve Yin // specify if the XAccessible is invalid 244*5fdc4257SSteve Yin BOOL m_isDestroy; 245*5fdc4257SSteve Yin 246*5fdc4257SSteve Yin XAccessible* pUNOInterface; 247*5fdc4257SSteve Yin Reference< XAccessible > pRef; 248*5fdc4257SSteve Yin XAccessible* pAchorUNOInterface; 249*5fdc4257SSteve Yin XAccessibleAction* m_pXAction; 250*5fdc4257SSteve Yin XAccessibleContext* pRContextInterface; 251*5fdc4257SSteve Yin Reference<XAccessibleContext> pRContext; 252*5fdc4257SSteve Yin 253*5fdc4257SSteve Yin private: 254*5fdc4257SSteve Yin 255*5fdc4257SSteve Yin // the helper methods in order to implement the above public methods 256*5fdc4257SSteve Yin IMAccessible* GetChildInterface(long dChildIndex);//notice here the parameter is child index,not child id 257*5fdc4257SSteve Yin IMAccessible* GetNavigateChildForDM(VARIANT varCur,short flags);//for decendant manage 258*5fdc4257SSteve Yin HRESULT GetFirstChild(VARIANT varStart,VARIANT* pvarEndUpAt);//for accNavigate implementation 259*5fdc4257SSteve Yin HRESULT GetLastChild(VARIANT varStart,VARIANT* pvarEndUpAt);//for accNavigate implementation 260*5fdc4257SSteve Yin HRESULT GetNextSibling(VARIANT varStart,VARIANT* pvarEndUpAt);//for accNavigate implementation 261*5fdc4257SSteve Yin HRESULT GetPreSibling(VARIANT varStart,VARIANT* pvarEndUpAt);//for accNavigate implementation 262*5fdc4257SSteve Yin BOOL IsDecendantManage();//identify whether the current COM belongs to manage_decendant roles 263*5fdc4257SSteve Yin 264*5fdc4257SSteve Yin // the following private methods are used to implement accSelect method 265*5fdc4257SSteve Yin HRESULT SelectChild(XAccessible* pItem); 266*5fdc4257SSteve Yin HRESULT DeSelectChild(XAccessible* pItem); 267*5fdc4257SSteve Yin HRESULT SelectMutipleChidren( XAccessible** pItem,int size ); 268*5fdc4257SSteve Yin HRESULT DeSelectMutipleChildren( XAccessible** pItem,int size ); 269*5fdc4257SSteve Yin XAccessibleContext* GetContextByXAcc( XAccessible* pXAcc ); 270*5fdc4257SSteve Yin Reference< XAccessibleSelection > GetSelection(); 271*5fdc4257SSteve Yin // end accSelect implementation methods 272*5fdc4257SSteve Yin BOOL GetXInterfaceFromXAccessible(XAccessible*, XInterface**, int); 273*5fdc4257SSteve Yin HRESULT WINAPI SmartQI(void* pv, REFIID iid, void** ppvObject); 274*5fdc4257SSteve Yin 275*5fdc4257SSteve Yin public: 276*5fdc4257SSteve Yin STDMETHOD(Get_XAccChildID)(/*[out,retval]*/ long* childID); 277*5fdc4257SSteve Yin // AccObjectManagerAgent is a management object in UNO, here keep its pointer for 278*5fdc4257SSteve Yin // the implementation of accNavigate when decendant manage happens for List,Tree, or Table 279*5fdc4257SSteve Yin // AccObjectManagerAgent and the following UNO objects XAccessble,XAccessibleSelection, 280*5fdc4257SSteve Yin // XAccessibleAction are all used to operate UNO accessiblility information directly when 281*5fdc4257SSteve Yin // implement some specific MSAA methods,such as accSelection,accNavigate 282*5fdc4257SSteve Yin static AccObjectManagerAgent* g_pAgent; 283*5fdc4257SSteve Yin 284*5fdc4257SSteve Yin static BOOL get_IAccessibleFromXAccessible(long pXAcc,IAccessible** ppIA); 285*5fdc4257SSteve Yin BOOL m_bRequiresSave; 286*5fdc4257SSteve Yin XGUIDToComObjHash m_containedObjects; 287*5fdc4257SSteve Yin 288*5fdc4257SSteve Yin static HRESULT WINAPI _SmartQI(void* pv, 289*5fdc4257SSteve Yin REFIID iid, void** ppvObject, DWORD) 290*5fdc4257SSteve Yin { 291*5fdc4257SSteve Yin return ((CMAccessible*)pv)->SmartQI(pv,iid,ppvObject); 292*5fdc4257SSteve Yin } 293*5fdc4257SSteve Yin 294*5fdc4257SSteve Yin static void get_OLECHARFromAny(Any& pAny, OLECHAR* pChar); 295*5fdc4257SSteve Yin 296*5fdc4257SSteve Yin static void get_OLECHAR4Numbering(const Any& pAny, short numberingLevel, const OUString& numberingPrefix,OLECHAR* pChar); 297*5fdc4257SSteve Yin 298*5fdc4257SSteve Yin // Helper function for data conversion. 299*5fdc4257SSteve Yin static void ConvertAnyToVariant(const ::com::sun::star::uno::Any &rAnyVal, VARIANT *pvData); 300*5fdc4257SSteve Yin }; 301*5fdc4257SSteve Yin 302*5fdc4257SSteve Yin 303*5fdc4257SSteve Yin 304*5fdc4257SSteve Yin #endif //__MACCESSIBLE_H_ 305