diff options
author | Michael Stahl <mstahl@redhat.com> | 2013-12-03 18:36:28 +0100 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2013-12-13 19:47:41 +0100 |
commit | ec3cbe98c3aad0ca1d435ea8eccab2eced4b6f86 (patch) | |
tree | f9e085ba9cb36a04ee41c195cda83a6f5515dbaa /winaccessibility | |
parent | 4583a3e9b0392f91516603ac8a09f52494e1004f (diff) |
winaccessibility: clean up the AGGMAP in CMAccessible
Replace it with a map for the new direct C++ instantiation and move this
implementation detail to the cxx file.
Change-Id: Ia961da03f8eb899481cf02f430c921aa8abd7c5c
(cherry picked from commit 9d71c9a442b2be027900f7b20342e2a0f43ed2ab)
Diffstat (limited to 'winaccessibility')
-rw-r--r-- | winaccessibility/source/UAccCOM/MAccessible.cxx | 76 | ||||
-rw-r--r-- | winaccessibility/source/UAccCOM/MAccessible.h | 41 | ||||
-rw-r--r-- | winaccessibility/source/UAccCOM/acccommon.h | 9 |
3 files changed, 42 insertions, 84 deletions
diff --git a/winaccessibility/source/UAccCOM/MAccessible.cxx b/winaccessibility/source/UAccCOM/MAccessible.cxx index 6c909f9722c1..dbe23c0b7a1f 100644 --- a/winaccessibility/source/UAccCOM/MAccessible.cxx +++ b/winaccessibility/source/UAccCOM/MAccessible.cxx @@ -57,6 +57,23 @@ using namespace com::sun::star::uno; using namespace com::sun::star::accessibility; using namespace com::sun::star::accessibility::AccessibleStateType; +enum XInterfaceIndex { + XI_COMPONENT = 0x01, + XI_TEXT = 0x02, + XI_TABLE = 0x03, + XI_EDITABLETEXT = 0x04, + XI_IMAGE = 0x05, + XI_SELECTION = 0x06, + XI_EXTENDEDCOMP = 0x07, + XI_VALUE = 0x08, + XI_KEYBINDING = 0x09, + XI_ACTION = 0x0A, + XI_HYPERTEXT = 0x0B, + XI_HYPERLINK = 0x0C, + XI_ATTRIBUTE = 0x0D, + XI_NULL = -1 +}; + // IA2 states mapping, and name // maintenance the consistency, change one array, change the three all long IA2_STATES[] = @@ -2571,6 +2588,29 @@ createAggInstance(CMAccessible &rOuter, void ** ppvObject) rOuter.GetControllingUnknown(), IID_IUnknown, ppvObject); } +typedef HRESULT (AggCreatorFunc)(CMAccessible &, void **); + +struct AggMapEntry +{ + const IID* piid; + AggCreatorFunc* pfnCreateInstance; + int XIFIndex; +}; + +static AggMapEntry g_CMAccessible_AggMap[] = { + { &IID_IAccessibleComponent, &createAggInstance<CAccComponent>, XI_COMPONENT }, + { &IID_IAccessibleText, &createAggInstance<CAccText>, XI_TEXT }, + { &IID_IAccessibleEditableText, &createAggInstance<CAccEditableText>, XI_EDITABLETEXT }, + { &IID_IAccessibleImage, &createAggInstance<CAccImage>, XI_IMAGE }, + { &IID_IAccessibleTable, &createAggInstance<CAccTable>, XI_TABLE }, + { &IID_IAccessibleAction, &createAggInstance<CAccAction>, XI_ACTION }, + { &IID_IAccessibleValue, &createAggInstance<CAccValue>, XI_VALUE }, + { &IID_IAccessibleHypertext, &createAggInstance<CAccHypertext>, XI_HYPERTEXT }, + { &IID_IAccessibleHyperlink, &createAggInstance<CAccHyperLink>, XI_HYPERLINK }, + { 0, 0, 0 }, +}; + + HRESULT WINAPI CMAccessible::SmartQI(void* /*pv*/, REFIID iid, void** ppvObject) { ENTER_PROTECTED_BLOCK @@ -2583,7 +2623,7 @@ HRESULT WINAPI CMAccessible::SmartQI(void* /*pv*/, REFIID iid, void** ppvObject) return E_FAIL; - _UNO_AGGMAP_ENTRY* pMap = _GetAggEntries(); + AggMapEntry * pMap = &g_CMAccessible_AggMap[0]; while(pMap && pMap->piid) { if(ImplIsEqualGUID(iid, *pMap->piid)) @@ -2603,39 +2643,7 @@ HRESULT WINAPI CMAccessible::SmartQI(void* /*pv*/, REFIID iid, void** ppvObject) } else { - HRESULT hr(REGDB_E_CLASSNOTREG); - switch (pMap->XIFIndex) - { - case XI_COMPONENT: - hr = createAggInstance<CAccComponent>(*this, ppvObject); - break; - case XI_TEXT: - hr = createAggInstance<CAccText>(*this, ppvObject); - break; - case XI_EDITABLETEXT: - hr = createAggInstance<CAccEditableText>(*this, ppvObject); - break; - case XI_IMAGE: - hr = createAggInstance<CAccImage>(*this, ppvObject); - break; - case XI_TABLE: - hr = createAggInstance<CAccTable>(*this, ppvObject); - break; - case XI_ACTION: - hr = createAggInstance<CAccAction>(*this, ppvObject); - break; - case XI_VALUE: - hr = createAggInstance<CAccValue>(*this, ppvObject); - break; - case XI_HYPERTEXT: - hr = createAggInstance<CAccHypertext>(*this, ppvObject); - break; - case XI_HYPERLINK: - hr = createAggInstance<CAccHyperLink>(*this, ppvObject); - break; - default: - assert(false); - } + HRESULT hr = pMap->pfnCreateInstance(*this, ppvObject); assert(hr == S_OK); if(hr == S_OK) { diff --git a/winaccessibility/source/UAccCOM/MAccessible.h b/winaccessibility/source/UAccCOM/MAccessible.h index 7262cb39b7af..5702a619dfd2 100644 --- a/winaccessibility/source/UAccCOM/MAccessible.h +++ b/winaccessibility/source/UAccCOM/MAccessible.h @@ -65,32 +65,6 @@ class ATL_NO_VTABLE CMAccessible : { typedef ::std::map<const GUID, CComPtr<IUnknown>, ltComp> XGUIDToComObjHash; - typedef HRESULT (WINAPI _UNO_AGGCREATORFUNC)(void*, REFIID, LPVOID*); - - struct _UNO_AGGMAP_ENTRY - { - const IID* piid; - _UNO_AGGCREATORFUNC* pfnCreateInstance; - int XIFIndex; - }; - - enum XInterfaceIndex { - XI_COMPONENT = 0x01, - XI_TEXT = 0x02, - XI_TABLE = 0x03, - XI_EDITABLETEXT = 0x04, - XI_IMAGE = 0x05, - XI_SELECTION = 0x06, - XI_EXTENDEDCOMP = 0x07, - XI_VALUE = 0x08, - XI_KEYBINDING = 0x09, - XI_ACTION = 0x0A, - XI_HYPERTEXT = 0x0B, - XI_HYPERLINK = 0x0C, - XI_ATTRIBUTE = 0x0D, - XI_NULL = -1 - }; - public: CMAccessible(); virtual ~CMAccessible(); @@ -111,21 +85,6 @@ public: COM_INTERFACE_ENTRY_FUNC_BLIND(NULL,_SmartQI) END_COM_MAP() - // AGGREGATE OBJECT MAP - BEGIN_AGGOBJECT_MAP(CMAccessible) - AGGOBJECT_ENTRY(IID_IAccessibleComponent, CLSID_AccComponent, COMPONENT) - AGGOBJECT_ENTRY(IID_IAccessibleText, CLSID_AccText, TEXT) - AGGOBJECT_ENTRY(IID_IAccessibleEditableText, CLSID_AccEditableText, EDITABLETEXT) - AGGOBJECT_ENTRY(IID_IAccessibleImage, CLSID_AccImage, IMAGE) - AGGOBJECT_ENTRY(IID_IAccessibleTable, CLSID_AccTable, TABLE) - AGGOBJECT_ENTRY(IID_IAccessibleAction, CLSID_AccAction, ACTION) - AGGOBJECT_ENTRY(IID_IAccessibleValue, CLSID_AccValue, VALUE) - AGGOBJECT_ENTRY(IID_IAccessibleHypertext, CLSID_AccHypertext, HYPERTEXT) - AGGOBJECT_ENTRY(IID_IAccessibleHyperlink, CLSID_AccHyperLink, HYPERLINK) - - - END_AGGOBJECT_MAP() - // IMAccessible STDMETHOD(put_accValue)(VARIANT varChild,BSTR szValue); STDMETHOD(put_accName)(VARIANT varChild,BSTR szName); diff --git a/winaccessibility/source/UAccCOM/acccommon.h b/winaccessibility/source/UAccCOM/acccommon.h index 22112ad97eac..9ca1382c8e30 100644 --- a/winaccessibility/source/UAccCOM/acccommon.h +++ b/winaccessibility/source/UAccCOM/acccommon.h @@ -45,15 +45,6 @@ struct ltComp } }; -#define BEGIN_AGGOBJECT_MAP(x) \ - static _UNO_AGGMAP_ENTRY* WINAPI _GetAggEntries() { \ - static _UNO_AGGMAP_ENTRY _aggentries[] = { -#define END_AGGOBJECT_MAP() {NULL, NULL,NULL}}; \ - return _aggentries;} -#define AGGOBJECT_ENTRY(iid, clsid, ifindex) {&iid, \ - CComAggregateCreator< CComObject<CMAccessible>, &clsid >::CreateInstance,\ - XI_##ifindex}, - enum DM_NIR { DM_FIRSTCHILD = 0x00, DM_LASTCHILD = 0x01, |