DEBUG_MSG(L"IAccessibleTable::get_rowColumnExtentsAtIndex failed, result " << res);\r
}\r
\r
-inline void GeckoVBufBackend_t::fillTableCellInfo_IATable2(VBufStorage_controlFieldNode_t* node, IAccessibleTableCell* paccTableCell) {\r
+typedef HRESULT(STDMETHODCALLTYPE IAccessibleTableCell::*IATableCellGetHeaderCellsFunc)(IUnknown***, long*);\r
+inline void fillTableHeaders(VBufStorage_controlFieldNode_t* node, IAccessibleTableCell* paccTableCell, const IATableCellGetHeaderCellsFunc getHeaderCells, const wstring& attribName) {\r
int res;\r
wostringstream s;\r
-\r
- long row, column, rowExtents, columnExtents;\r
- boolean isSelected;\r
- if ((res = paccTableCell->get_rowColumnExtents(&row, &column, &rowExtents, &columnExtents, &isSelected)) == S_OK) {\r
- DEBUG_MSG(L"IAccessibleTableCell::get_rowColumnExtents succeeded, adding attributes");\r
- s << row + 1;\r
- node->addAttribute(L"table-rownumber", s.str());\r
- s.str(L"");\r
- s << column + 1;\r
- node->addAttribute(L"table-columnnumber", s.str());\r
- if (columnExtents > 1) {\r
- s.str(L"");\r
- s << columnExtents;\r
- node->addAttribute(L"table-columnsspanned", s.str());\r
- }\r
- if (rowExtents > 1) {\r
- s.str(L"");\r
- s << rowExtents;\r
- node->addAttribute(L"table-rowsspanned", s.str());\r
- }\r
- }\r
-\r
- if (this->shouldDisableTableHeaders)\r
- return;\r
-\r
IUnknown** headerCells;\r
long nHeaderCells;\r
IAccessible2* headerCellPacc = NULL;\r
int headerCellDocHandle, headerCellID;\r
\r
- if ((res = paccTableCell->get_columnHeaderCells(&headerCells, &nHeaderCells)) == S_OK) {\r
- DEBUG_MSG(L"IAccessibleTableCell::get_columnHeaderCells succeeded, adding header IDs");\r
- s.str(L"");\r
+ if ((paccTableCell->*getHeaderCells)(&headerCells, &nHeaderCells) == S_OK) {\r
+ DEBUG_MSG(L"Get header cells succeeded, adding header IDs");\r
for (int hci = 0; hci < nHeaderCells; hci++) {\r
if ((res = headerCells[hci]->QueryInterface(IID_IAccessible2, (void**)(&headerCellPacc))) != S_OK) {\r
- DEBUG_MSG(L"QueryInterface column header cell " << hci << " to IAccessible2 failed with " << res);\r
+ DEBUG_MSG(L"QueryInterface header cell " << hci << " to IAccessible2 failed with " << res);\r
headerCells[hci]->Release();\r
continue;\r
}\r
headerCells[hci]->Release();\r
if ((res = headerCellPacc->get_windowHandle((HWND*)&headerCellDocHandle)) != S_OK) {\r
- DEBUG_MSG("IAccessible2::get_windowHandle on column header cell " << hci << " failed with " << res);\r
+ DEBUG_MSG("IAccessible2::get_windowHandle on header cell " << hci << " failed with " << res);\r
headerCellPacc->Release();\r
continue;\r
}\r
headerCellDocHandle = (int)findRealMozillaWindow((HWND)headerCellDocHandle);\r
if ((res = headerCellPacc->get_uniqueID((long*)&headerCellID)) != S_OK) {\r
- DEBUG_MSG("IAccessible2::get_uniqueID on column header cell " << hci << " failed with " << res);\r
+ DEBUG_MSG("IAccessible2::get_uniqueID on header cell " << hci << " failed with " << res);\r
headerCellPacc->Release();\r
continue;\r
}\r
headerCellPacc->Release();\r
}\r
if (!s.str().empty())\r
- node->addAttribute(L"table-columnheadercells", s.str());\r
+ node->addAttribute(attribName, s.str());\r
}\r
+}\r
+\r
+inline void GeckoVBufBackend_t::fillTableCellInfo_IATable2(VBufStorage_controlFieldNode_t* node, IAccessibleTableCell* paccTableCell) {\r
+ wostringstream s;\r
\r
- if ((res = paccTableCell->get_rowHeaderCells(&headerCells, &nHeaderCells)) == S_OK) {\r
- DEBUG_MSG(L"IAccessibleTableCell::get_rowHeaderCells succeeded, adding header IDs");\r
+ long row, column, rowExtents, columnExtents;\r
+ boolean isSelected;\r
+ if (paccTableCell->get_rowColumnExtents(&row, &column, &rowExtents, &columnExtents, &isSelected) == S_OK) {\r
+ DEBUG_MSG(L"IAccessibleTableCell::get_rowColumnExtents succeeded, adding attributes");\r
+ s << row + 1;\r
+ node->addAttribute(L"table-rownumber", s.str());\r
s.str(L"");\r
- for (int hci = 0; hci < nHeaderCells; hci++) {\r
- if ((res = headerCells[hci]->QueryInterface(IID_IAccessible2, (void**)(&headerCellPacc))) != S_OK) {\r
- DEBUG_MSG(L"QueryInterface row header cell " << hci << " to IAccessible2 failed with " << res);\r
- headerCells[hci]->Release();\r
- continue;\r
- }\r
- headerCells[hci]->Release();\r
- if ((res = headerCellPacc->get_windowHandle((HWND*)&headerCellDocHandle)) != S_OK) {\r
- DEBUG_MSG("IAccessible2::get_windowHandle on row header cell " << hci << " failed with " << res);\r
- headerCellPacc->Release();\r
- continue;\r
- }\r
- headerCellDocHandle = (int)findRealMozillaWindow((HWND)headerCellDocHandle);\r
- if ((res = headerCellPacc->get_uniqueID((long*)&headerCellID)) != S_OK) {\r
- DEBUG_MSG("IAccessible2::get_uniqueID on row header cell " << hci << " failed with " << res);\r
- headerCellPacc->Release();\r
- continue;\r
- }\r
- s << headerCellDocHandle << L"," << headerCellID << L";";\r
- headerCellPacc->Release();\r
+ s << column + 1;\r
+ node->addAttribute(L"table-columnnumber", s.str());\r
+ if (columnExtents > 1) {\r
+ s.str(L"");\r
+ s << columnExtents;\r
+ node->addAttribute(L"table-columnsspanned", s.str());\r
+ }\r
+ if (rowExtents > 1) {\r
+ s.str(L"");\r
+ s << rowExtents;\r
+ node->addAttribute(L"table-rowsspanned", s.str());\r
}\r
- if (!s.str().empty())\r
- node->addAttribute(L"table-rowheadercells", s.str());\r
}\r
+\r
+ if (this->shouldDisableTableHeaders)\r
+ return;\r
+\r
+ fillTableHeaders(node, paccTableCell, &IAccessibleTableCell::get_columnHeaderCells, L"table-columnheadercells");\r
+ fillTableHeaders(node, paccTableCell, &IAccessibleTableCell::get_rowHeaderCells, L"table-rowheadercells");\r
}\r
\r
void GeckoVBufBackend_t::versionSpecificInit(IAccessible2* pacc) {\r