xref: /AOO41X/main/winaccessibility/source/UAccCOM/MAccessible.h (revision 5fdc4257b5e43545f8f7841d9e8303d3a99b1714)
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