13a700b0aSSteve Yin /************************************************************** 25fdc4257SSteve Yin * 33a700b0aSSteve Yin * Licensed to the Apache Software Foundation (ASF) under one 43a700b0aSSteve Yin * or more contributor license agreements. See the NOTICE file 53a700b0aSSteve Yin * distributed with this work for additional information 63a700b0aSSteve Yin * regarding copyright ownership. The ASF licenses this file 73a700b0aSSteve Yin * to you under the Apache License, Version 2.0 (the 83a700b0aSSteve Yin * "License"); you may not use this file except in compliance 93a700b0aSSteve Yin * with the License. You may obtain a copy of the License at 105fdc4257SSteve Yin * 113a700b0aSSteve Yin * http://www.apache.org/licenses/LICENSE-2.0 125fdc4257SSteve Yin * 133a700b0aSSteve Yin * Unless required by applicable law or agreed to in writing, 143a700b0aSSteve Yin * software distributed under the License is distributed on an 153a700b0aSSteve Yin * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 163a700b0aSSteve Yin * KIND, either express or implied. See the License for the 173a700b0aSSteve Yin * specific language governing permissions and limitations 183a700b0aSSteve Yin * under the License. 195fdc4257SSteve Yin * 203a700b0aSSteve Yin *************************************************************/ 215fdc4257SSteve Yin 225fdc4257SSteve Yin /** 235fdc4257SSteve Yin * AccTable.cpp : Implementation of CAccTable. 245fdc4257SSteve Yin */ 255fdc4257SSteve Yin #include "stdafx.h" 265fdc4257SSteve Yin #include "UAccCOM2.h" 275fdc4257SSteve Yin #include "AccTable.h" 285fdc4257SSteve Yin #include <com/sun/star/accessibility/XAccessible.hpp> 295fdc4257SSteve Yin #include "MAccessible.h" 305fdc4257SSteve Yin 31*b0a7a3cfSSteve Yin #include "act.hxx" 323a700b0aSSteve Yin 335fdc4257SSteve Yin #ifndef _COM_SUN_STAR_ACCESSIBILITY_XACCESSIBLETABLEEXTENT_HPP_ 345fdc4257SSteve Yin #include <com/sun/star/accessibility/XAccessibleTableSelection.hpp> 355fdc4257SSteve Yin #endif 365fdc4257SSteve Yin 375fdc4257SSteve Yin using namespace com::sun::star::accessibility; 385fdc4257SSteve Yin using namespace com::sun::star::uno; 395fdc4257SSteve Yin /** 405fdc4257SSteve Yin * Gets accessible table cell. 415fdc4257SSteve Yin * 425fdc4257SSteve Yin * @param row the row of the specified cell. 435fdc4257SSteve Yin * @param column the column of the specified cell. 445fdc4257SSteve Yin * @param accessible the accessible object of the cell. 455fdc4257SSteve Yin */ 465fdc4257SSteve Yin 475fdc4257SSteve Yin STDMETHODIMP CAccTable::get_accessibleAt(long row, long column, IUnknown * * accessible) 485fdc4257SSteve Yin { 495fdc4257SSteve Yin 505fdc4257SSteve Yin CHECK_ENABLE_INF 515fdc4257SSteve Yin 525fdc4257SSteve Yin ENTER_PROTECTED_BLOCK 535fdc4257SSteve Yin 545fdc4257SSteve Yin // #CHECK# 555fdc4257SSteve Yin if(accessible == NULL) 565fdc4257SSteve Yin return E_INVALIDARG; 575fdc4257SSteve Yin // #CHECK XInterface# 585fdc4257SSteve Yin if(!pRXTable.is()) 595fdc4257SSteve Yin return E_FAIL; 605fdc4257SSteve Yin 615fdc4257SSteve Yin Reference<XAccessible> pRAcc = GetXInterface()->getAccessibleCellAt(row,column); 625fdc4257SSteve Yin 635fdc4257SSteve Yin if(!pRAcc.is()) 645fdc4257SSteve Yin { 655fdc4257SSteve Yin *accessible = NULL; 665fdc4257SSteve Yin return E_FAIL; 675fdc4257SSteve Yin } 685fdc4257SSteve Yin 695fdc4257SSteve Yin IAccessible* pRet = NULL; 705fdc4257SSteve Yin 715fdc4257SSteve Yin BOOL isTRUE = CMAccessible::get_IAccessibleFromXAccessible((long)pRAcc.get(),&pRet); 725fdc4257SSteve Yin if(isTRUE) 735fdc4257SSteve Yin { 745fdc4257SSteve Yin *accessible = (IAccessible2 *)pRet; 755fdc4257SSteve Yin pRet->AddRef(); 765fdc4257SSteve Yin return S_OK; 775fdc4257SSteve Yin } 785fdc4257SSteve Yin else if(pRAcc.is()) 795fdc4257SSteve Yin { 805fdc4257SSteve Yin Reference<XAccessible> pxTable(GetXInterface(),UNO_QUERY); 815fdc4257SSteve Yin 825fdc4257SSteve Yin CMAccessible::g_pAgent->InsertAccObj(pRAcc.get(),pxTable.get()); 835fdc4257SSteve Yin isTRUE = CMAccessible::get_IAccessibleFromXAccessible((long)pRAcc.get(),&pRet); 845fdc4257SSteve Yin 855fdc4257SSteve Yin if(isTRUE) 865fdc4257SSteve Yin { 875fdc4257SSteve Yin *accessible = (IAccessible2 *)pRet; 885fdc4257SSteve Yin pRet->AddRef(); 895fdc4257SSteve Yin return S_OK; 905fdc4257SSteve Yin } 915fdc4257SSteve Yin } 925fdc4257SSteve Yin return E_FAIL; 935fdc4257SSteve Yin 945fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK 955fdc4257SSteve Yin } 965fdc4257SSteve Yin 975fdc4257SSteve Yin /** 985fdc4257SSteve Yin * Gets accessible table caption. 995fdc4257SSteve Yin * 1005fdc4257SSteve Yin * @param accessible the accessible object of table cpation. 1015fdc4257SSteve Yin */ 1025fdc4257SSteve Yin STDMETHODIMP CAccTable::get_caption(IUnknown * *) 1035fdc4257SSteve Yin { 1045fdc4257SSteve Yin 1055fdc4257SSteve Yin 1065fdc4257SSteve Yin ENTER_PROTECTED_BLOCK 1075fdc4257SSteve Yin 1085fdc4257SSteve Yin return E_NOTIMPL; 1095fdc4257SSteve Yin 1105fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK 1115fdc4257SSteve Yin } 1125fdc4257SSteve Yin 1135fdc4257SSteve Yin /** 1145fdc4257SSteve Yin * Gets accessible column description (as string). 1155fdc4257SSteve Yin * 1165fdc4257SSteve Yin * @param column the column index. 1175fdc4257SSteve Yin * @param description the description of the specified column. 1185fdc4257SSteve Yin */ 1195fdc4257SSteve Yin STDMETHODIMP CAccTable::get_columnDescription(long column, BSTR * description) 1205fdc4257SSteve Yin { 1215fdc4257SSteve Yin 1225fdc4257SSteve Yin CHECK_ENABLE_INF 1235fdc4257SSteve Yin 1245fdc4257SSteve Yin ENTER_PROTECTED_BLOCK 1255fdc4257SSteve Yin 1265fdc4257SSteve Yin // #CHECK# 1275fdc4257SSteve Yin if(description == NULL) 1285fdc4257SSteve Yin return E_INVALIDARG; 1295fdc4257SSteve Yin 1305fdc4257SSteve Yin // #CHECK XInterface# 1315fdc4257SSteve Yin if(!pRXTable.is()) 1325fdc4257SSteve Yin return E_FAIL; 1335fdc4257SSteve Yin 1345fdc4257SSteve Yin const ::rtl::OUString& ouStr = GetXInterface()->getAccessibleColumnDescription(column); 1355fdc4257SSteve Yin // #CHECK# 1365fdc4257SSteve Yin 1375fdc4257SSteve Yin SAFE_SYSFREESTRING(*description);//?? 1385fdc4257SSteve Yin *description = SysAllocString((OLECHAR*)ouStr.getStr()); 1395fdc4257SSteve Yin if(description==NULL) 1405fdc4257SSteve Yin return E_FAIL; 1415fdc4257SSteve Yin return S_OK; 1425fdc4257SSteve Yin 1435fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK 1445fdc4257SSteve Yin } 1455fdc4257SSteve Yin 1465fdc4257SSteve Yin /** 1475fdc4257SSteve Yin * Gets number of columns spanned by table cell. 1485fdc4257SSteve Yin * 1495fdc4257SSteve Yin * @param row the row of the specified cell. 1505fdc4257SSteve Yin * @param column the column of the specified cell. 1515fdc4257SSteve Yin * @param spanColumns the column span of the specified cell. 1525fdc4257SSteve Yin */ 1535fdc4257SSteve Yin STDMETHODIMP CAccTable::get_columnExtentAt(long row, long column, long * nColumnsSpanned) 1545fdc4257SSteve Yin { 1555fdc4257SSteve Yin 1565fdc4257SSteve Yin CHECK_ENABLE_INF 1575fdc4257SSteve Yin 1585fdc4257SSteve Yin ENTER_PROTECTED_BLOCK 1595fdc4257SSteve Yin 1605fdc4257SSteve Yin XAccessibleTable *pXAccTable = GetXInterface(); 1615fdc4257SSteve Yin 1625fdc4257SSteve Yin // Check pointer. 1635fdc4257SSteve Yin if(nColumnsSpanned == NULL) 1645fdc4257SSteve Yin return E_INVALIDARG; 1655fdc4257SSteve Yin 1665fdc4257SSteve Yin // Get Extent. 1675fdc4257SSteve Yin if(pXAccTable) 1685fdc4257SSteve Yin { 1695fdc4257SSteve Yin long lExt = pXAccTable->getAccessibleColumnExtentAt(row,column); 1705fdc4257SSteve Yin 1715fdc4257SSteve Yin // Fill Extent struct. 1725fdc4257SSteve Yin *nColumnsSpanned = lExt; 1735fdc4257SSteve Yin return S_OK; 1745fdc4257SSteve Yin } 1755fdc4257SSteve Yin 1765fdc4257SSteve Yin return E_FAIL; 1775fdc4257SSteve Yin 1785fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK 1795fdc4257SSteve Yin } 1805fdc4257SSteve Yin 1815fdc4257SSteve Yin /** 1825fdc4257SSteve Yin * Gets accessible column header. 1835fdc4257SSteve Yin * 1845fdc4257SSteve Yin * @param column the column index. 1855fdc4257SSteve Yin * @param accessible the accessible object of the specified column. 1865fdc4257SSteve Yin */ 1875fdc4257SSteve Yin STDMETHODIMP CAccTable::get_columnHeader(IAccessibleTable __RPC_FAR *__RPC_FAR *accessibleTable, long *startingRowIndex) 1885fdc4257SSteve Yin { 1895fdc4257SSteve Yin 1905fdc4257SSteve Yin CHECK_ENABLE_INF 1915fdc4257SSteve Yin 1925fdc4257SSteve Yin ENTER_PROTECTED_BLOCK 1935fdc4257SSteve Yin 1945fdc4257SSteve Yin // #CHECK# 1955fdc4257SSteve Yin if(accessibleTable == NULL || startingRowIndex == NULL) 1965fdc4257SSteve Yin return E_INVALIDARG; 1975fdc4257SSteve Yin 1985fdc4257SSteve Yin // #CHECK XInterface# 1995fdc4257SSteve Yin if(!pRXTable.is()) 2005fdc4257SSteve Yin return E_FAIL; 2015fdc4257SSteve Yin 2025fdc4257SSteve Yin Reference<XAccessibleTable> pRColumnHeaderTable = GetXInterface()->getAccessibleColumnHeaders(); 2035fdc4257SSteve Yin if(!pRColumnHeaderTable.is()) 2045fdc4257SSteve Yin { 2055fdc4257SSteve Yin *accessibleTable = NULL; 2065fdc4257SSteve Yin return E_FAIL; 2075fdc4257SSteve Yin } 2085fdc4257SSteve Yin 2095fdc4257SSteve Yin Reference<XAccessible> pRXColumnHeader(pRColumnHeaderTable,UNO_QUERY); 2105fdc4257SSteve Yin 2115fdc4257SSteve Yin if(!pRXColumnHeader.is()) 2125fdc4257SSteve Yin { 2135fdc4257SSteve Yin *accessibleTable = NULL; 2145fdc4257SSteve Yin return E_FAIL; 2155fdc4257SSteve Yin } 2165fdc4257SSteve Yin *startingRowIndex = 0 ; 2175fdc4257SSteve Yin 2185fdc4257SSteve Yin IAccessible* m_pIMacc = NULL; 219*b0a7a3cfSSteve Yin ActivateActContext(); 2205fdc4257SSteve Yin HRESULT hr = CoCreateInstance( CLSID_MAccessible, NULL, CLSCTX_ALL , 2215fdc4257SSteve Yin IID_IMAccessible, 2225fdc4257SSteve Yin (void **)&m_pIMacc 2235fdc4257SSteve Yin ); 224*b0a7a3cfSSteve Yin DeactivateActContext(); 2255fdc4257SSteve Yin ((CMAccessible*)m_pIMacc)->SetXAccessible((long)pRXColumnHeader.get()); 2265fdc4257SSteve Yin m_pIMacc->QueryInterface(IID_IAccessibleTable,(void **)accessibleTable); 2275fdc4257SSteve Yin if( SUCCEEDED(hr) ) 2285fdc4257SSteve Yin { 2295fdc4257SSteve Yin return S_OK; 2305fdc4257SSteve Yin } 2315fdc4257SSteve Yin 2325fdc4257SSteve Yin return E_FAIL; 2335fdc4257SSteve Yin 2345fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK 2355fdc4257SSteve Yin } 2365fdc4257SSteve Yin 2375fdc4257SSteve Yin /** 2385fdc4257SSteve Yin * Gets total number of columns in table. 2395fdc4257SSteve Yin * 2405fdc4257SSteve Yin * @param columnCount the number of columns in table. 2415fdc4257SSteve Yin */ 2425fdc4257SSteve Yin STDMETHODIMP CAccTable::get_nColumns(long * columnCount) 2435fdc4257SSteve Yin { 2445fdc4257SSteve Yin 2455fdc4257SSteve Yin CHECK_ENABLE_INF 2465fdc4257SSteve Yin 2475fdc4257SSteve Yin ENTER_PROTECTED_BLOCK 2485fdc4257SSteve Yin 2495fdc4257SSteve Yin // #CHECK# 2505fdc4257SSteve Yin if(columnCount == NULL) 2515fdc4257SSteve Yin return E_INVALIDARG; 2525fdc4257SSteve Yin 2535fdc4257SSteve Yin // #CHECK XInterface# 2545fdc4257SSteve Yin if(!pRXTable.is()) 2555fdc4257SSteve Yin return E_FAIL; 2565fdc4257SSteve Yin 2575fdc4257SSteve Yin *columnCount = GetXInterface()->getAccessibleColumnCount(); 2585fdc4257SSteve Yin return S_OK; 2595fdc4257SSteve Yin 2605fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK 2615fdc4257SSteve Yin } 2625fdc4257SSteve Yin 2635fdc4257SSteve Yin /** 2645fdc4257SSteve Yin * Gets total number of rows in table. 2655fdc4257SSteve Yin * 2665fdc4257SSteve Yin * @param rowCount the number of rows in table. 2675fdc4257SSteve Yin */ 2685fdc4257SSteve Yin STDMETHODIMP CAccTable::get_nRows(long * rowCount) 2695fdc4257SSteve Yin { 2705fdc4257SSteve Yin 2715fdc4257SSteve Yin CHECK_ENABLE_INF 2725fdc4257SSteve Yin 2735fdc4257SSteve Yin ENTER_PROTECTED_BLOCK 2745fdc4257SSteve Yin 2755fdc4257SSteve Yin // #CHECK# 2765fdc4257SSteve Yin if(rowCount == NULL) 2775fdc4257SSteve Yin return E_INVALIDARG; 2785fdc4257SSteve Yin 2795fdc4257SSteve Yin // #CHECK XInterface# 2805fdc4257SSteve Yin if(!pRXTable.is()) 2815fdc4257SSteve Yin return E_FAIL; 2825fdc4257SSteve Yin 2835fdc4257SSteve Yin *rowCount = GetXInterface()->getAccessibleRowCount(); 2845fdc4257SSteve Yin return S_OK; 2855fdc4257SSteve Yin 2865fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK 2875fdc4257SSteve Yin } 2885fdc4257SSteve Yin 2895fdc4257SSteve Yin /** 2905fdc4257SSteve Yin * Gets total number of selected columns. 2915fdc4257SSteve Yin * 2925fdc4257SSteve Yin * @param columnCount the number of selected columns. 2935fdc4257SSteve Yin */ 2945fdc4257SSteve Yin STDMETHODIMP CAccTable::get_nSelectedColumns(long * columnCount) 2955fdc4257SSteve Yin { 2965fdc4257SSteve Yin 2975fdc4257SSteve Yin CHECK_ENABLE_INF 2985fdc4257SSteve Yin 2995fdc4257SSteve Yin ENTER_PROTECTED_BLOCK 3005fdc4257SSteve Yin 3015fdc4257SSteve Yin // #CHECK# 3025fdc4257SSteve Yin if(columnCount == NULL) 3035fdc4257SSteve Yin return E_INVALIDARG; 3045fdc4257SSteve Yin 3055fdc4257SSteve Yin // #CHECK XInterface# 3065fdc4257SSteve Yin if(!pRXTable.is()) 3075fdc4257SSteve Yin return E_FAIL; 3085fdc4257SSteve Yin 3095fdc4257SSteve Yin Sequence<long> pSelected = GetXInterface()->getSelectedAccessibleColumns(); 3105fdc4257SSteve Yin *columnCount = pSelected.getLength(); 3115fdc4257SSteve Yin return S_OK; 3125fdc4257SSteve Yin 3135fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK 3145fdc4257SSteve Yin } 3155fdc4257SSteve Yin 3165fdc4257SSteve Yin /** 3175fdc4257SSteve Yin * Gets total number of selected rows. 3185fdc4257SSteve Yin * 3195fdc4257SSteve Yin * @param rowCount the number of selected rows. 3205fdc4257SSteve Yin */ 3215fdc4257SSteve Yin STDMETHODIMP CAccTable::get_nSelectedRows(long * rowCount) 3225fdc4257SSteve Yin { 3235fdc4257SSteve Yin 3245fdc4257SSteve Yin CHECK_ENABLE_INF 3255fdc4257SSteve Yin 3265fdc4257SSteve Yin ENTER_PROTECTED_BLOCK 3275fdc4257SSteve Yin 3285fdc4257SSteve Yin // #CHECK# 3295fdc4257SSteve Yin if(rowCount == NULL) 3305fdc4257SSteve Yin return E_INVALIDARG; 3315fdc4257SSteve Yin 3325fdc4257SSteve Yin // #CHECK XInterface# 3335fdc4257SSteve Yin if(!pRXTable.is()) 3345fdc4257SSteve Yin return E_FAIL; 3355fdc4257SSteve Yin 3365fdc4257SSteve Yin Sequence<long> pSelected = GetXInterface()->getSelectedAccessibleRows(); 3375fdc4257SSteve Yin *rowCount = pSelected.getLength(); 3385fdc4257SSteve Yin return S_OK; 3395fdc4257SSteve Yin 3405fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK 3415fdc4257SSteve Yin } 3425fdc4257SSteve Yin 3435fdc4257SSteve Yin /** 3445fdc4257SSteve Yin * Gets accessible row description (as string). 3455fdc4257SSteve Yin * 3465fdc4257SSteve Yin * @param row the row index. 3475fdc4257SSteve Yin * @param description the description of the specified row. 3485fdc4257SSteve Yin */ 3495fdc4257SSteve Yin STDMETHODIMP CAccTable::get_rowDescription(long row, BSTR * description) 3505fdc4257SSteve Yin { 3515fdc4257SSteve Yin 3525fdc4257SSteve Yin CHECK_ENABLE_INF 3535fdc4257SSteve Yin 3545fdc4257SSteve Yin ENTER_PROTECTED_BLOCK 3555fdc4257SSteve Yin 3565fdc4257SSteve Yin // #CHECK# 3575fdc4257SSteve Yin if(description == NULL) 3585fdc4257SSteve Yin return E_INVALIDARG; 3595fdc4257SSteve Yin 3605fdc4257SSteve Yin // #CHECK XInterface# 3615fdc4257SSteve Yin if(!pRXTable.is()) 3625fdc4257SSteve Yin return E_FAIL; 3635fdc4257SSteve Yin 3645fdc4257SSteve Yin const ::rtl::OUString& ouStr = GetXInterface()->getAccessibleRowDescription(row); 3655fdc4257SSteve Yin // #CHECK# 3665fdc4257SSteve Yin 3675fdc4257SSteve Yin SAFE_SYSFREESTRING(*description); 3685fdc4257SSteve Yin *description = SysAllocString((OLECHAR*)ouStr.getStr()); 3695fdc4257SSteve Yin if(description==NULL) 3705fdc4257SSteve Yin return E_FAIL; 3715fdc4257SSteve Yin 3725fdc4257SSteve Yin return S_OK; 3735fdc4257SSteve Yin 3745fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK 3755fdc4257SSteve Yin } 3765fdc4257SSteve Yin 3775fdc4257SSteve Yin /** 3785fdc4257SSteve Yin * Gets number of rows spanned by a table cell. 3795fdc4257SSteve Yin * 3805fdc4257SSteve Yin * @param row the row of the specified cell. 3815fdc4257SSteve Yin * @param column the column of the specified cell. 3825fdc4257SSteve Yin * @param spanRows the row span of the specified cell. 3835fdc4257SSteve Yin */ 3845fdc4257SSteve Yin STDMETHODIMP CAccTable::get_rowExtentAt(long row, long column, long * nRowsSpanned) 3855fdc4257SSteve Yin { 3865fdc4257SSteve Yin 3875fdc4257SSteve Yin CHECK_ENABLE_INF 3885fdc4257SSteve Yin 3895fdc4257SSteve Yin ENTER_PROTECTED_BLOCK 3905fdc4257SSteve Yin 3915fdc4257SSteve Yin XAccessibleTable *pXAccTable = GetXInterface(); 3925fdc4257SSteve Yin 3935fdc4257SSteve Yin // Check pointer. 3945fdc4257SSteve Yin if(nRowsSpanned == NULL) 3955fdc4257SSteve Yin return E_INVALIDARG; 3965fdc4257SSteve Yin 3975fdc4257SSteve Yin // Get Extent. 3985fdc4257SSteve Yin if(pXAccTable) 3995fdc4257SSteve Yin { 4005fdc4257SSteve Yin long lExt = GetXInterface()->getAccessibleRowExtentAt(row,column); 4015fdc4257SSteve Yin 4025fdc4257SSteve Yin // Fill Extent struct. 4035fdc4257SSteve Yin *nRowsSpanned= lExt; 4045fdc4257SSteve Yin 4055fdc4257SSteve Yin return S_OK; 4065fdc4257SSteve Yin } 4075fdc4257SSteve Yin 4085fdc4257SSteve Yin return E_FAIL; 4095fdc4257SSteve Yin 4105fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK 4115fdc4257SSteve Yin } 4125fdc4257SSteve Yin 4135fdc4257SSteve Yin /** 4145fdc4257SSteve Yin * Gets accessible row header. 4155fdc4257SSteve Yin * 4165fdc4257SSteve Yin * @param row the row index. 4175fdc4257SSteve Yin * @param accessible the accessible object of the row header. 4185fdc4257SSteve Yin */ 4195fdc4257SSteve Yin STDMETHODIMP CAccTable::get_rowHeader(IAccessibleTable __RPC_FAR *__RPC_FAR *accessibleTable, long *startingColumnIndex) 4205fdc4257SSteve Yin { 4215fdc4257SSteve Yin 4225fdc4257SSteve Yin CHECK_ENABLE_INF 4235fdc4257SSteve Yin 4245fdc4257SSteve Yin ENTER_PROTECTED_BLOCK 4255fdc4257SSteve Yin 4265fdc4257SSteve Yin // #CHECK# 4275fdc4257SSteve Yin if(accessibleTable == NULL || startingColumnIndex == NULL) 4285fdc4257SSteve Yin return E_INVALIDARG; 4295fdc4257SSteve Yin 4305fdc4257SSteve Yin // #CHECK XInterface# 4315fdc4257SSteve Yin if(!pRXTable.is()) 4325fdc4257SSteve Yin return E_FAIL; 4335fdc4257SSteve Yin 4345fdc4257SSteve Yin Reference<XAccessibleTable> pRRowHeaderTable = GetXInterface()->getAccessibleRowHeaders(); 4355fdc4257SSteve Yin if(!pRRowHeaderTable.is()) 4365fdc4257SSteve Yin { 4375fdc4257SSteve Yin *accessibleTable = NULL; 4385fdc4257SSteve Yin return E_FAIL; 4395fdc4257SSteve Yin } 4405fdc4257SSteve Yin 4415fdc4257SSteve Yin Reference<XAccessible> pRXRowHeader(pRRowHeaderTable,UNO_QUERY); 4425fdc4257SSteve Yin 4435fdc4257SSteve Yin if(!pRXRowHeader.is()) 4445fdc4257SSteve Yin { 4455fdc4257SSteve Yin *accessibleTable = NULL; 4465fdc4257SSteve Yin return E_FAIL; 4475fdc4257SSteve Yin } 4485fdc4257SSteve Yin *startingColumnIndex = 0 ; 4495fdc4257SSteve Yin 4505fdc4257SSteve Yin IAccessible* m_pIMacc = NULL; 451*b0a7a3cfSSteve Yin ActivateActContext(); 4525fdc4257SSteve Yin HRESULT hr = CoCreateInstance( CLSID_MAccessible, NULL, CLSCTX_ALL , 4535fdc4257SSteve Yin IID_IMAccessible, 4545fdc4257SSteve Yin (void **)&m_pIMacc 4555fdc4257SSteve Yin ); 456*b0a7a3cfSSteve Yin DeactivateActContext(); 4575fdc4257SSteve Yin ((CMAccessible*)m_pIMacc)->SetXAccessible((long)pRXRowHeader.get()); 4585fdc4257SSteve Yin m_pIMacc->QueryInterface(IID_IAccessibleTable,(void **)accessibleTable); 4595fdc4257SSteve Yin if( SUCCEEDED(hr) ) 4605fdc4257SSteve Yin { 4615fdc4257SSteve Yin return S_OK; 4625fdc4257SSteve Yin } 4635fdc4257SSteve Yin 4645fdc4257SSteve Yin return E_FAIL; 4655fdc4257SSteve Yin 4665fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK 4675fdc4257SSteve Yin } 4685fdc4257SSteve Yin 4695fdc4257SSteve Yin /** 4705fdc4257SSteve Yin * Gets list of row indexes currently selected (0-based). 4715fdc4257SSteve Yin * 4725fdc4257SSteve Yin * @param maxRows the max number of the rows. 4735fdc4257SSteve Yin * @param accessible the accessible object array of the selected rows. 4745fdc4257SSteve Yin * @param nRows the actual size of the accessible object array. 4755fdc4257SSteve Yin */ 4765fdc4257SSteve Yin STDMETHODIMP CAccTable::get_selectedRows(long, long ** rows, long * nRows) 4775fdc4257SSteve Yin { 4785fdc4257SSteve Yin 4795fdc4257SSteve Yin CHECK_ENABLE_INF 4805fdc4257SSteve Yin 4815fdc4257SSteve Yin ENTER_PROTECTED_BLOCK 4825fdc4257SSteve Yin 4835fdc4257SSteve Yin // #CHECK# 4845fdc4257SSteve Yin if(rows == NULL || nRows == NULL) 4855fdc4257SSteve Yin return E_INVALIDARG; 4865fdc4257SSteve Yin 4875fdc4257SSteve Yin // #CHECK XInterface# 4885fdc4257SSteve Yin if(!pRXTable.is()) 4895fdc4257SSteve Yin return E_FAIL; 4905fdc4257SSteve Yin 4915fdc4257SSteve Yin Sequence<long> pSelected = GetXInterface()->getSelectedAccessibleRows(); 4925fdc4257SSteve Yin long count = pSelected.getLength() ; 4935fdc4257SSteve Yin *nRows = count; 4945fdc4257SSteve Yin 4955fdc4257SSteve Yin *rows = reinterpret_cast<long*>(CoTaskMemAlloc((count) * sizeof(long))); 4965fdc4257SSteve Yin // #CHECK Memory Allocation# 4975fdc4257SSteve Yin if(*rows == NULL) 4985fdc4257SSteve Yin { 4995fdc4257SSteve Yin return E_FAIL; 5005fdc4257SSteve Yin } 5015fdc4257SSteve Yin for(int i=0; i<count; i++) 5025fdc4257SSteve Yin (*rows)[i] = pSelected[i]; 5035fdc4257SSteve Yin 5045fdc4257SSteve Yin return S_OK; 5055fdc4257SSteve Yin 5065fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK 5075fdc4257SSteve Yin } 5085fdc4257SSteve Yin 5095fdc4257SSteve Yin /** 5105fdc4257SSteve Yin * Gets list of column indexes currently selected (0-based). 5115fdc4257SSteve Yin * 5125fdc4257SSteve Yin * @param maxColumns the max number of the columns. 5135fdc4257SSteve Yin * @param accessible the accessible object array of the selected columns. 5145fdc4257SSteve Yin * @param numColumns the actual size of accessible object array. 5155fdc4257SSteve Yin */ 5165fdc4257SSteve Yin STDMETHODIMP CAccTable::get_selectedColumns(long, long ** columns, long * numColumns) 5175fdc4257SSteve Yin { 5185fdc4257SSteve Yin 5195fdc4257SSteve Yin CHECK_ENABLE_INF 5205fdc4257SSteve Yin 5215fdc4257SSteve Yin ENTER_PROTECTED_BLOCK 5225fdc4257SSteve Yin 5235fdc4257SSteve Yin // #CHECK# 5245fdc4257SSteve Yin if(columns == NULL || numColumns == NULL) 5255fdc4257SSteve Yin return E_INVALIDARG; 5265fdc4257SSteve Yin 5275fdc4257SSteve Yin // #CHECK XInterface# 5285fdc4257SSteve Yin if(!pRXTable.is()) 5295fdc4257SSteve Yin return E_FAIL; 5305fdc4257SSteve Yin 5315fdc4257SSteve Yin Sequence<long> pSelected = GetXInterface()->getSelectedAccessibleColumns(); 5325fdc4257SSteve Yin long count = pSelected.getLength() ; 5335fdc4257SSteve Yin *numColumns = count; 5345fdc4257SSteve Yin 5355fdc4257SSteve Yin *columns = reinterpret_cast<long*>(CoTaskMemAlloc((count) * sizeof(long))); 5365fdc4257SSteve Yin // #CHECK Memory Allocation# 5375fdc4257SSteve Yin if(*columns == NULL) 5385fdc4257SSteve Yin { 5395fdc4257SSteve Yin return E_FAIL; 5405fdc4257SSteve Yin } 5415fdc4257SSteve Yin for(int i=0; i<count; i++) 5425fdc4257SSteve Yin (*columns)[i] = pSelected[i]; 5435fdc4257SSteve Yin 5445fdc4257SSteve Yin return S_OK; 5455fdc4257SSteve Yin 5465fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK 5475fdc4257SSteve Yin } 5485fdc4257SSteve Yin 5495fdc4257SSteve Yin /** 5505fdc4257SSteve Yin * Gets accessible table summary. 5515fdc4257SSteve Yin * 5525fdc4257SSteve Yin * @param accessible the accessible object of the summary. 5535fdc4257SSteve Yin */ 5545fdc4257SSteve Yin STDMETHODIMP CAccTable::get_summary(IUnknown * * accessible) 5555fdc4257SSteve Yin { 5565fdc4257SSteve Yin 5575fdc4257SSteve Yin CHECK_ENABLE_INF 5585fdc4257SSteve Yin 5595fdc4257SSteve Yin ENTER_PROTECTED_BLOCK 5605fdc4257SSteve Yin 5615fdc4257SSteve Yin // #CHECK# 5625fdc4257SSteve Yin if(accessible == NULL) 5635fdc4257SSteve Yin return E_INVALIDARG; 5645fdc4257SSteve Yin 5655fdc4257SSteve Yin // #CHECK XInterface# 5665fdc4257SSteve Yin if(!pRXTable.is()) 5675fdc4257SSteve Yin { 5685fdc4257SSteve Yin return E_FAIL; 5695fdc4257SSteve Yin } 5705fdc4257SSteve Yin Reference<XAccessible> pRAcc = GetXInterface()->getAccessibleSummary(); 5715fdc4257SSteve Yin 5725fdc4257SSteve Yin IAccessible* pRet = NULL; 5735fdc4257SSteve Yin BOOL isTRUE = CMAccessible::get_IAccessibleFromXAccessible((long)pRAcc.get(),&pRet); 5745fdc4257SSteve Yin 5755fdc4257SSteve Yin if(pRet) 5765fdc4257SSteve Yin { 5775fdc4257SSteve Yin *accessible = (IAccessible2 *)pRet; 5785fdc4257SSteve Yin pRet->AddRef(); 5795fdc4257SSteve Yin return S_OK; 5805fdc4257SSteve Yin } 5815fdc4257SSteve Yin 5825fdc4257SSteve Yin return E_FAIL; 5835fdc4257SSteve Yin 5845fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK 5855fdc4257SSteve Yin } 5865fdc4257SSteve Yin 5875fdc4257SSteve Yin /** 5885fdc4257SSteve Yin * Determines if table column is selected. 5895fdc4257SSteve Yin * 5905fdc4257SSteve Yin * @param column the column index. 5915fdc4257SSteve Yin * @param isSelected the result. 5925fdc4257SSteve Yin */ 5935fdc4257SSteve Yin STDMETHODIMP CAccTable::get_isColumnSelected(long column, unsigned char * isSelected) 5945fdc4257SSteve Yin { 5955fdc4257SSteve Yin 5965fdc4257SSteve Yin CHECK_ENABLE_INF 5975fdc4257SSteve Yin 5985fdc4257SSteve Yin ENTER_PROTECTED_BLOCK 5995fdc4257SSteve Yin 6005fdc4257SSteve Yin // #CHECK# 6015fdc4257SSteve Yin if(isSelected == NULL) 6025fdc4257SSteve Yin return E_INVALIDARG; 6035fdc4257SSteve Yin 6045fdc4257SSteve Yin // #CHECK XInterface# 6055fdc4257SSteve Yin if(!pRXTable.is()) 6065fdc4257SSteve Yin return E_FAIL; 6075fdc4257SSteve Yin 6085fdc4257SSteve Yin *isSelected = GetXInterface()->isAccessibleColumnSelected(column); 6095fdc4257SSteve Yin return S_OK; 6105fdc4257SSteve Yin 6115fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK 6125fdc4257SSteve Yin } 6135fdc4257SSteve Yin 6145fdc4257SSteve Yin /** 6155fdc4257SSteve Yin * Determines if table row is selected. 6165fdc4257SSteve Yin * 6175fdc4257SSteve Yin * @param row the row index. 6185fdc4257SSteve Yin * @param isSelected the result. 6195fdc4257SSteve Yin */ 6205fdc4257SSteve Yin STDMETHODIMP CAccTable::get_isRowSelected(long row, unsigned char * isSelected) 6215fdc4257SSteve Yin { 6225fdc4257SSteve Yin 6235fdc4257SSteve Yin CHECK_ENABLE_INF 6245fdc4257SSteve Yin 6255fdc4257SSteve Yin ENTER_PROTECTED_BLOCK 6265fdc4257SSteve Yin 6275fdc4257SSteve Yin // #CHECK# 6285fdc4257SSteve Yin if(isSelected == NULL) 6295fdc4257SSteve Yin return E_INVALIDARG; 6305fdc4257SSteve Yin 6315fdc4257SSteve Yin // #CHECK XInterface# 6325fdc4257SSteve Yin if(!pRXTable.is()) 6335fdc4257SSteve Yin { 6345fdc4257SSteve Yin return E_FAIL; 6355fdc4257SSteve Yin } 6365fdc4257SSteve Yin *isSelected = GetXInterface()->isAccessibleRowSelected(row); 6375fdc4257SSteve Yin return S_OK; 6385fdc4257SSteve Yin 6395fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK 6405fdc4257SSteve Yin } 6415fdc4257SSteve Yin 6425fdc4257SSteve Yin /** 6435fdc4257SSteve Yin * Determines if table cell is selected. 6445fdc4257SSteve Yin * 6455fdc4257SSteve Yin * @param row the row index. 6465fdc4257SSteve Yin * @param column the column index. 6475fdc4257SSteve Yin * @param isSelected the result. 6485fdc4257SSteve Yin */ 6495fdc4257SSteve Yin STDMETHODIMP CAccTable::get_isSelected(long row, long column, unsigned char * isSelected) 6505fdc4257SSteve Yin { 6515fdc4257SSteve Yin 6525fdc4257SSteve Yin CHECK_ENABLE_INF 6535fdc4257SSteve Yin 6545fdc4257SSteve Yin ENTER_PROTECTED_BLOCK 6555fdc4257SSteve Yin 6565fdc4257SSteve Yin // #CHECK# 6575fdc4257SSteve Yin if(isSelected == NULL) 6585fdc4257SSteve Yin return E_INVALIDARG; 6595fdc4257SSteve Yin 6605fdc4257SSteve Yin // #CHECK XInterface# 6615fdc4257SSteve Yin if(!pRXTable.is()) 6625fdc4257SSteve Yin return E_FAIL; 6635fdc4257SSteve Yin 6645fdc4257SSteve Yin *isSelected = GetXInterface()->isAccessibleSelected(row,column); 6655fdc4257SSteve Yin return S_OK; 6665fdc4257SSteve Yin 6675fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK 6685fdc4257SSteve Yin } 6695fdc4257SSteve Yin 6705fdc4257SSteve Yin /** 6715fdc4257SSteve Yin * Selects a row and unselect all previously selected rows. 6725fdc4257SSteve Yin * 6735fdc4257SSteve Yin * @param row the row index. 6745fdc4257SSteve Yin * @param success the result. 6755fdc4257SSteve Yin */ 6765fdc4257SSteve Yin STDMETHODIMP CAccTable::selectRow(long row) 6775fdc4257SSteve Yin { 6785fdc4257SSteve Yin 6795fdc4257SSteve Yin CHECK_ENABLE_INF 6805fdc4257SSteve Yin 6815fdc4257SSteve Yin ENTER_PROTECTED_BLOCK 6825fdc4257SSteve Yin 6835fdc4257SSteve Yin // Check XAccessibleTable reference. 6845fdc4257SSteve Yin if(!pRXTable.is()) 6855fdc4257SSteve Yin return E_FAIL; 6865fdc4257SSteve Yin 6875fdc4257SSteve Yin Reference<XAccessibleTableSelection> pRTableExtent(pRXTable, UNO_QUERY); 6885fdc4257SSteve Yin if(pRTableExtent.is()) 6895fdc4257SSteve Yin { 6905fdc4257SSteve Yin pRTableExtent.get()->selectRow(row); 6915fdc4257SSteve Yin return S_OK; 6925fdc4257SSteve Yin } 6935fdc4257SSteve Yin else 6945fdc4257SSteve Yin { 6955fdc4257SSteve Yin // Get XAccessibleSelection. 6965fdc4257SSteve Yin Reference<XAccessibleSelection> pRSelection(GetXInterface(), UNO_QUERY); 6975fdc4257SSteve Yin if(!pRSelection.is()) 6985fdc4257SSteve Yin return E_FAIL; 6995fdc4257SSteve Yin 7005fdc4257SSteve Yin // Select row. 7015fdc4257SSteve Yin long lCol, lColumnCount, lChildIndex; 7025fdc4257SSteve Yin lColumnCount = GetXInterface()->getAccessibleColumnCount(); 7035fdc4257SSteve Yin for(lCol = 0; lCol < lColumnCount; lCol ++) 7045fdc4257SSteve Yin { 7055fdc4257SSteve Yin lChildIndex = GetXInterface()->getAccessibleIndex(row, lCol); 7065fdc4257SSteve Yin pRSelection.get()->selectAccessibleChild(lChildIndex); 7075fdc4257SSteve Yin } 7085fdc4257SSteve Yin 7095fdc4257SSteve Yin return S_OK; 7105fdc4257SSteve Yin } 7115fdc4257SSteve Yin return S_OK; 7125fdc4257SSteve Yin 7135fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK 7145fdc4257SSteve Yin } 7155fdc4257SSteve Yin 7165fdc4257SSteve Yin /** 7175fdc4257SSteve Yin * Selects a column and unselect all previously selected columns. 7185fdc4257SSteve Yin * 7195fdc4257SSteve Yin * @param column the column index. 7205fdc4257SSteve Yin * @param success the result. 7215fdc4257SSteve Yin */ 7225fdc4257SSteve Yin STDMETHODIMP CAccTable::selectColumn(long column) 7235fdc4257SSteve Yin { 7245fdc4257SSteve Yin 7255fdc4257SSteve Yin CHECK_ENABLE_INF 7265fdc4257SSteve Yin 7275fdc4257SSteve Yin ENTER_PROTECTED_BLOCK 7285fdc4257SSteve Yin 7295fdc4257SSteve Yin // Check XAccessibleTable reference. 7305fdc4257SSteve Yin if(!pRXTable.is()) 7315fdc4257SSteve Yin return E_FAIL; 7325fdc4257SSteve Yin 7335fdc4257SSteve Yin Reference<XAccessibleTableSelection> pRTableExtent(GetXInterface(), UNO_QUERY); 7345fdc4257SSteve Yin if(pRTableExtent.is()) 7355fdc4257SSteve Yin { 7365fdc4257SSteve Yin pRTableExtent.get()->selectColumn(column); 7375fdc4257SSteve Yin return S_OK; 7385fdc4257SSteve Yin } 7395fdc4257SSteve Yin else 7405fdc4257SSteve Yin { 7415fdc4257SSteve Yin // Get XAccessibleSelection. 7425fdc4257SSteve Yin Reference<XAccessibleSelection> pRSelection(pRXTable, UNO_QUERY); 7435fdc4257SSteve Yin if(!pRSelection.is()) 7445fdc4257SSteve Yin return E_FAIL; 7455fdc4257SSteve Yin 7465fdc4257SSteve Yin // Select column. 7475fdc4257SSteve Yin long lRow, lRowCount, lChildIndex; 7485fdc4257SSteve Yin lRowCount = GetXInterface()->getAccessibleRowCount(); 7495fdc4257SSteve Yin for(lRow = 0; lRow < lRowCount; lRow ++) 7505fdc4257SSteve Yin { 7515fdc4257SSteve Yin lChildIndex = GetXInterface()->getAccessibleIndex(lRow, column); 7525fdc4257SSteve Yin pRSelection.get()->selectAccessibleChild(lChildIndex); 7535fdc4257SSteve Yin } 7545fdc4257SSteve Yin 7555fdc4257SSteve Yin return S_OK; 7565fdc4257SSteve Yin } 7575fdc4257SSteve Yin return S_OK; 7585fdc4257SSteve Yin // End of added. 7595fdc4257SSteve Yin 7605fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK 7615fdc4257SSteve Yin } 7625fdc4257SSteve Yin 7635fdc4257SSteve Yin /** 7645fdc4257SSteve Yin * Unselects one row, leaving other selected rows selected (if any). 7655fdc4257SSteve Yin * 7665fdc4257SSteve Yin * @param row the row index. 7675fdc4257SSteve Yin * @param success the result. 7685fdc4257SSteve Yin */ 7695fdc4257SSteve Yin STDMETHODIMP CAccTable::unselectRow(long row) 7705fdc4257SSteve Yin { 7715fdc4257SSteve Yin 7725fdc4257SSteve Yin CHECK_ENABLE_INF 7735fdc4257SSteve Yin 7745fdc4257SSteve Yin ENTER_PROTECTED_BLOCK 7755fdc4257SSteve Yin 7765fdc4257SSteve Yin // Check XAccessibleTable reference. 7775fdc4257SSteve Yin if(!pRXTable.is()) 7785fdc4257SSteve Yin return E_FAIL; 7795fdc4257SSteve Yin 7805fdc4257SSteve Yin Reference<XAccessibleTableSelection> pRTableExtent(GetXInterface(), UNO_QUERY); 7815fdc4257SSteve Yin if(pRTableExtent.is()) 7825fdc4257SSteve Yin { 7835fdc4257SSteve Yin if(pRTableExtent.get()->unselectRow(row)) 7845fdc4257SSteve Yin return S_OK; 7855fdc4257SSteve Yin else 7865fdc4257SSteve Yin return E_FAIL; 7875fdc4257SSteve Yin } 7885fdc4257SSteve Yin else 7895fdc4257SSteve Yin { 7905fdc4257SSteve Yin // Get XAccessibleSelection. 7915fdc4257SSteve Yin Reference<XAccessibleSelection> pRSelection(pRXTable, UNO_QUERY); 7925fdc4257SSteve Yin if(!pRSelection.is()) 7935fdc4257SSteve Yin return E_FAIL; 7945fdc4257SSteve Yin 7955fdc4257SSteve Yin // Select column. 7965fdc4257SSteve Yin long lColumn, lColumnCount, lChildIndex; 7975fdc4257SSteve Yin lColumnCount = GetXInterface()->getAccessibleColumnCount(); 7985fdc4257SSteve Yin for(lColumn = 0; lColumn < lColumnCount; lColumn ++) 7995fdc4257SSteve Yin { 8005fdc4257SSteve Yin lChildIndex = GetXInterface()->getAccessibleIndex(row,lColumn); 8015fdc4257SSteve Yin pRSelection.get()->deselectAccessibleChild(lChildIndex); 8025fdc4257SSteve Yin } 8035fdc4257SSteve Yin 8045fdc4257SSteve Yin return S_OK; 8055fdc4257SSteve Yin } 8065fdc4257SSteve Yin return S_OK; 8075fdc4257SSteve Yin // End of added. 8085fdc4257SSteve Yin 8095fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK 8105fdc4257SSteve Yin } 8115fdc4257SSteve Yin 8125fdc4257SSteve Yin /** 8135fdc4257SSteve Yin * Unselects one column, leaving other selected columns selected (if any). 8145fdc4257SSteve Yin * 8155fdc4257SSteve Yin * @param column the column index. 8165fdc4257SSteve Yin * @param success the result. 8175fdc4257SSteve Yin */ 8185fdc4257SSteve Yin STDMETHODIMP CAccTable::unselectColumn(long column) 8195fdc4257SSteve Yin { 8205fdc4257SSteve Yin 8215fdc4257SSteve Yin CHECK_ENABLE_INF 8225fdc4257SSteve Yin 8235fdc4257SSteve Yin ENTER_PROTECTED_BLOCK 8245fdc4257SSteve Yin 8255fdc4257SSteve Yin // Check XAccessibleTable reference. 8265fdc4257SSteve Yin if(!pRXTable.is()) 8275fdc4257SSteve Yin return E_FAIL; 8285fdc4257SSteve Yin 8295fdc4257SSteve Yin Reference<XAccessibleTableSelection> pRTableExtent(GetXInterface(), UNO_QUERY); 8305fdc4257SSteve Yin if(pRTableExtent.is()) 8315fdc4257SSteve Yin { 8325fdc4257SSteve Yin if(pRTableExtent.get()->unselectColumn(column)) 8335fdc4257SSteve Yin return S_OK; 8345fdc4257SSteve Yin else 8355fdc4257SSteve Yin return E_FAIL; 8365fdc4257SSteve Yin } 8375fdc4257SSteve Yin else 8385fdc4257SSteve Yin { 8395fdc4257SSteve Yin // Get XAccessibleSelection. 8405fdc4257SSteve Yin Reference<XAccessibleSelection> pRSelection(pRXTable, UNO_QUERY); 8415fdc4257SSteve Yin if(!pRSelection.is()) 8425fdc4257SSteve Yin return E_FAIL; 8435fdc4257SSteve Yin 8445fdc4257SSteve Yin // Unselect columns. 8455fdc4257SSteve Yin long lRow, lRowCount, lChildIndex; 8465fdc4257SSteve Yin lRowCount = GetXInterface()->getAccessibleRowCount(); 8475fdc4257SSteve Yin 8485fdc4257SSteve Yin for(lRow = 0; lRow < lRowCount; lRow ++) 8495fdc4257SSteve Yin { 8505fdc4257SSteve Yin lChildIndex = GetXInterface()->getAccessibleIndex(lRow, column); 8515fdc4257SSteve Yin pRSelection.get()->deselectAccessibleChild(lChildIndex); 8525fdc4257SSteve Yin } 8535fdc4257SSteve Yin return S_OK; 8545fdc4257SSteve Yin } 8555fdc4257SSteve Yin 8565fdc4257SSteve Yin return S_OK; 8575fdc4257SSteve Yin 8585fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK 8595fdc4257SSteve Yin } 8605fdc4257SSteve Yin 8615fdc4257SSteve Yin /** 8625fdc4257SSteve Yin * Overide of IUNOXWrapper. 8635fdc4257SSteve Yin * 8645fdc4257SSteve Yin * @param pXInterface the pointer of UNO interface. 8655fdc4257SSteve Yin */ 8665fdc4257SSteve Yin STDMETHODIMP CAccTable::put_XInterface(long pXInterface) 8675fdc4257SSteve Yin { 8685fdc4257SSteve Yin 8695fdc4257SSteve Yin CHECK_ENABLE_INF 8705fdc4257SSteve Yin 8715fdc4257SSteve Yin ENTER_PROTECTED_BLOCK 8725fdc4257SSteve Yin 8735fdc4257SSteve Yin CUNOXWrapper::put_XInterface(pXInterface); 8745fdc4257SSteve Yin //special query. 8755fdc4257SSteve Yin if(pUNOInterface == NULL) 8765fdc4257SSteve Yin return E_INVALIDARG; 8775fdc4257SSteve Yin 8785fdc4257SSteve Yin Reference<XAccessibleContext> pRContext = pUNOInterface->getAccessibleContext(); 8795fdc4257SSteve Yin if( !pRContext.is() ) 8805fdc4257SSteve Yin return E_FAIL; 8815fdc4257SSteve Yin 8825fdc4257SSteve Yin Reference<XAccessibleTable> pRXI(pRContext,UNO_QUERY); 8835fdc4257SSteve Yin if( !pRXI.is() ) 8845fdc4257SSteve Yin pRXTable = NULL; 8855fdc4257SSteve Yin else 8865fdc4257SSteve Yin pRXTable = pRXI.get(); 8875fdc4257SSteve Yin return S_OK; 8885fdc4257SSteve Yin 8895fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK 8905fdc4257SSteve Yin } 8915fdc4257SSteve Yin 8925fdc4257SSteve Yin /** 8935fdc4257SSteve Yin * Gets columnIndex of childIndex. 8945fdc4257SSteve Yin * 8955fdc4257SSteve Yin * @param childIndex childIndex 8965fdc4257SSteve Yin */ 8975fdc4257SSteve Yin STDMETHODIMP CAccTable::get_columnIndex(long childIndex, long * columnIndex) 8985fdc4257SSteve Yin { 8995fdc4257SSteve Yin 9005fdc4257SSteve Yin CHECK_ENABLE_INF 9015fdc4257SSteve Yin 9025fdc4257SSteve Yin ENTER_PROTECTED_BLOCK 9035fdc4257SSteve Yin 9045fdc4257SSteve Yin // #CHECK# 9055fdc4257SSteve Yin if(columnIndex == NULL) 9065fdc4257SSteve Yin return E_INVALIDARG; 9075fdc4257SSteve Yin 9085fdc4257SSteve Yin // #CHECK XInterface# 9095fdc4257SSteve Yin if(!pRXTable.is()) 9105fdc4257SSteve Yin return E_FAIL; 9115fdc4257SSteve Yin 9125fdc4257SSteve Yin *columnIndex = GetXInterface()->getAccessibleColumn(childIndex); 9135fdc4257SSteve Yin return S_OK; 9145fdc4257SSteve Yin 9155fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK 9165fdc4257SSteve Yin } 9175fdc4257SSteve Yin /** 9185fdc4257SSteve Yin * Gets rowIndex of childIndex. 9195fdc4257SSteve Yin * 9205fdc4257SSteve Yin * @param childIndex childIndex 9215fdc4257SSteve Yin */ 9225fdc4257SSteve Yin STDMETHODIMP CAccTable::get_rowIndex(long childIndex, long * rowIndex) 9235fdc4257SSteve Yin { 9245fdc4257SSteve Yin 9255fdc4257SSteve Yin CHECK_ENABLE_INF 9265fdc4257SSteve Yin 9275fdc4257SSteve Yin ENTER_PROTECTED_BLOCK 9285fdc4257SSteve Yin 9295fdc4257SSteve Yin // #CHECK# 9305fdc4257SSteve Yin if(rowIndex == NULL) 9315fdc4257SSteve Yin return E_INVALIDARG; 9325fdc4257SSteve Yin 9335fdc4257SSteve Yin // #CHECK XInterface# 9345fdc4257SSteve Yin if(!pRXTable.is()) 9355fdc4257SSteve Yin return E_FAIL; 9365fdc4257SSteve Yin 9375fdc4257SSteve Yin *rowIndex = GetXInterface()->getAccessibleRow(childIndex); 9385fdc4257SSteve Yin return S_OK; 9395fdc4257SSteve Yin 9405fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK 9415fdc4257SSteve Yin } 9425fdc4257SSteve Yin /** 9435fdc4257SSteve Yin * Gets childIndex of childIndex. 9445fdc4257SSteve Yin * 9455fdc4257SSteve Yin * @param childIndex childIndex 9465fdc4257SSteve Yin */ 9475fdc4257SSteve Yin STDMETHODIMP CAccTable::get_childIndex(long RowIndex , long columnIndex, long * childIndex ) 9485fdc4257SSteve Yin { 9495fdc4257SSteve Yin 9505fdc4257SSteve Yin CHECK_ENABLE_INF 9515fdc4257SSteve Yin 9525fdc4257SSteve Yin ENTER_PROTECTED_BLOCK 9535fdc4257SSteve Yin 9545fdc4257SSteve Yin // #CHECK# 9555fdc4257SSteve Yin if(childIndex == NULL) 9565fdc4257SSteve Yin return E_INVALIDARG; 9575fdc4257SSteve Yin 9585fdc4257SSteve Yin // #CHECK XInterface# 9595fdc4257SSteve Yin if(!pRXTable.is()) 9605fdc4257SSteve Yin return E_FAIL; 9615fdc4257SSteve Yin 9625fdc4257SSteve Yin *childIndex = GetXInterface()->getAccessibleIndex(RowIndex, columnIndex); 9635fdc4257SSteve Yin return S_OK; 9645fdc4257SSteve Yin 9655fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK 9665fdc4257SSteve Yin } 9675fdc4257SSteve Yin 9685fdc4257SSteve Yin STDMETHODIMP CAccTable::get_rowColumnExtentsAtIndex(long, 9695fdc4257SSteve Yin long *, 9705fdc4257SSteve Yin long *, 9715fdc4257SSteve Yin long *, 9725fdc4257SSteve Yin long *, 9735fdc4257SSteve Yin boolean *) 9745fdc4257SSteve Yin { 9755fdc4257SSteve Yin 9765fdc4257SSteve Yin CHECK_ENABLE_INF 9775fdc4257SSteve Yin 9785fdc4257SSteve Yin ENTER_PROTECTED_BLOCK 9795fdc4257SSteve Yin 9805fdc4257SSteve Yin return E_NOTIMPL; 9815fdc4257SSteve Yin 9825fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK 9835fdc4257SSteve Yin } 9845fdc4257SSteve Yin 9855fdc4257SSteve Yin STDMETHODIMP CAccTable::get_modelChange(IA2TableModelChange *) 9865fdc4257SSteve Yin { 9875fdc4257SSteve Yin 9885fdc4257SSteve Yin return E_NOTIMPL; 9895fdc4257SSteve Yin } 9905fdc4257SSteve Yin 9915fdc4257SSteve Yin // @brief Returns the total number of selected children 9925fdc4257SSteve Yin // @param [out] childCount 9935fdc4257SSteve Yin // Number of children currently selected 9945fdc4257SSteve Yin STDMETHODIMP CAccTable::get_nSelectedChildren(long *childCount) 9955fdc4257SSteve Yin { 9965fdc4257SSteve Yin 9975fdc4257SSteve Yin CHECK_ENABLE_INF 9985fdc4257SSteve Yin 9995fdc4257SSteve Yin ENTER_PROTECTED_BLOCK 10005fdc4257SSteve Yin 10015fdc4257SSteve Yin // #CHECK# 10025fdc4257SSteve Yin if(childCount == NULL) 10035fdc4257SSteve Yin return E_INVALIDARG; 10045fdc4257SSteve Yin 10055fdc4257SSteve Yin // #CHECK XInterface# 10065fdc4257SSteve Yin if(!pRXTable.is()) 10075fdc4257SSteve Yin return E_FAIL; 10085fdc4257SSteve Yin 10095fdc4257SSteve Yin Reference<XAccessibleSelection> pRSelection(GetXInterface(), UNO_QUERY); 10105fdc4257SSteve Yin if(!pRSelection.is()) 10115fdc4257SSteve Yin return E_FAIL; 10125fdc4257SSteve Yin 10135fdc4257SSteve Yin *childCount = pRSelection->getSelectedAccessibleChildCount(); 10145fdc4257SSteve Yin return S_OK; 10155fdc4257SSteve Yin 10165fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK 10175fdc4257SSteve Yin } 10185fdc4257SSteve Yin 10195fdc4257SSteve Yin // @brief Returns a list of child indexes currently selected (0-based). 10205fdc4257SSteve Yin // @param [in] maxChildren 10215fdc4257SSteve Yin // Max children requested (possibly from IAccessibleTable::nSelectedChildren) 10225fdc4257SSteve Yin // @param [out] children 10235fdc4257SSteve Yin // array of indexes of selected children (each index is 0-based) 10245fdc4257SSteve Yin // @param [out] nChildren 10255fdc4257SSteve Yin // Length of array (not more than maxChildren) 10265fdc4257SSteve Yin STDMETHODIMP CAccTable::get_selectedChildren(long, long **children, long *nChildren) 10275fdc4257SSteve Yin { 10285fdc4257SSteve Yin 10295fdc4257SSteve Yin CHECK_ENABLE_INF 10305fdc4257SSteve Yin 10315fdc4257SSteve Yin ENTER_PROTECTED_BLOCK 10325fdc4257SSteve Yin 10335fdc4257SSteve Yin // #CHECK# 10345fdc4257SSteve Yin if(children == NULL || nChildren == NULL) 10355fdc4257SSteve Yin return E_INVALIDARG; 10365fdc4257SSteve Yin 10375fdc4257SSteve Yin // #CHECK XInterface# 10385fdc4257SSteve Yin if(!pRXTable.is()) 10395fdc4257SSteve Yin return E_FAIL; 10405fdc4257SSteve Yin 10415fdc4257SSteve Yin Reference<XAccessibleSelection> pRSelection(GetXInterface(), UNO_QUERY); 10425fdc4257SSteve Yin if(!pRSelection.is()) 10435fdc4257SSteve Yin return E_FAIL; 10445fdc4257SSteve Yin 10455fdc4257SSteve Yin long childCount = pRSelection->getSelectedAccessibleChildCount() ; 10465fdc4257SSteve Yin 10475fdc4257SSteve Yin *nChildren = childCount; 10485fdc4257SSteve Yin 10495fdc4257SSteve Yin *children = reinterpret_cast<long*>(CoTaskMemAlloc((childCount) * sizeof(long))); 10505fdc4257SSteve Yin 10515fdc4257SSteve Yin for( long i = 0; i< childCount; i++) 10525fdc4257SSteve Yin { 10535fdc4257SSteve Yin Reference<XAccessible> pRAcc = pRSelection->getSelectedAccessibleChild(i); 10545fdc4257SSteve Yin if(pRAcc.is()) 10555fdc4257SSteve Yin { 10565fdc4257SSteve Yin Reference<XAccessibleContext> pRContext(pRAcc, UNO_QUERY); 10575fdc4257SSteve Yin if( !pRContext.is() ) 10585fdc4257SSteve Yin return E_FAIL; 10595fdc4257SSteve Yin 10605fdc4257SSteve Yin long childIndex = pRContext->getAccessibleIndexInParent(); 10615fdc4257SSteve Yin (*children)[i] = childIndex; 10625fdc4257SSteve Yin } 10635fdc4257SSteve Yin } 10645fdc4257SSteve Yin 10655fdc4257SSteve Yin return S_OK; 10665fdc4257SSteve Yin 10675fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK 10685fdc4257SSteve Yin 10695fdc4257SSteve Yin } 1070