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