1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 #ifndef _ACCTABLE_HXX 24 #define _ACCTABLE_HXX 25 #include <com/sun/star/accessibility/XAccessibleTable.hpp> 26 #ifndef _COM_SUN_STAR_ACCESSIBILITY_XAccessibleTableSelection_HPP_ 27 #include <com/sun/star/accessibility/XAccessibleTableSelection.hpp> 28 #endif 29 #include <vector> 30 #include <com/sun/star/accessibility/XAccessibleSelection.hpp> 31 32 #include <acccontext.hxx> 33 34 class SwTabFrm; 35 class SwAccessibleTableData_Impl; 36 class SwTableBox; 37 class SwSelBoxes; 38 39 namespace sw { namespace access { 40 class SwAccessibleChild; 41 } } 42 43 class SwAccessibleTable : 44 public SwAccessibleContext, 45 public ::com::sun::star::accessibility::XAccessibleTable, 46 public ::com::sun::star::accessibility::XAccessibleSelection, 47 public ::com::sun::star::accessibility::XAccessibleTableSelection, 48 public SwClient 49 { 50 SwAccessibleTableData_Impl *mpTableData; // the table's data, prot by Sol-Mutex 51 ::rtl::OUString sDesc; 52 const SwSelBoxes *GetSelBoxes() const; 53 54 void FireTableChangeEvent( const SwAccessibleTableData_Impl& rTableData ); 55 56 /** get the SwTableBox* for the given child */ 57 const SwTableBox* GetTableBox( sal_Int32 ) const; 58 59 sal_Bool IsChildSelected( sal_Int32 nChildIndex ) const; 60 61 sal_Int32 GetIndexOfSelectedChild( sal_Int32 nSelectedChildIndex ) const; 62 63 protected: 64 65 // Set states for getAccessibleStateSet. 66 // This drived class additinaly sets MULTISELECTABLE(+) 67 virtual void GetStates( ::utl::AccessibleStateSetHelper& rStateSet ); 68 69 virtual ~SwAccessibleTable(); 70 71 // --> OD 2007-06-27 #i77106# 72 inline void SetDesc( ::rtl::OUString sNewDesc ) 73 { 74 sDesc = sNewDesc; 75 } 76 77 // --> OD 2007-06-28 #i77106# 78 virtual SwAccessibleTableData_Impl* CreateNewTableData(); 79 // <-- 80 81 // force update of table data 82 void UpdateTableData(); 83 84 // remove the current table data 85 void ClearTableData(); 86 87 // get table data, update if necessary 88 inline SwAccessibleTableData_Impl& GetTableData(); 89 90 // Is table data available? 91 sal_Bool HasTableData() const { return (mpTableData != 0); } 92 93 void SetTableData(SwAccessibleTableData_Impl* mpNewTableData) ; 94 virtual void Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew); 95 96 public: 97 98 SwAccessibleTable( SwAccessibleMap* pInitMap, const SwTabFrm* pTableFrm ); 99 100 //===== XInterface ====================================================== 101 102 // (XInterface methods need to be implemented to disambigouate 103 // between those inherited through SwAcessibleContext and 104 // XAccessibleTable). 105 106 virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( 107 const ::com::sun::star::uno::Type& aType ); 108 109 virtual void SAL_CALL acquire( ) throw () 110 { SwAccessibleContext::acquire(); }; 111 112 virtual void SAL_CALL release( ) throw () 113 { SwAccessibleContext::release(); }; 114 115 //====== XTypeProvider ==================================================== 116 virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( ); 117 virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId( ); 118 119 //===== XAccessibleContext ============================================== 120 121 /// Return this object's description. 122 virtual ::rtl::OUString SAL_CALL 123 getAccessibleDescription (void); 124 125 //===== XAccessibleTable ================================================ 126 127 virtual sal_Int32 SAL_CALL getAccessibleRowCount(); 128 virtual sal_Int32 SAL_CALL getAccessibleColumnCount( ); 129 virtual ::rtl::OUString SAL_CALL getAccessibleRowDescription( 130 sal_Int32 nRow ); 131 virtual ::rtl::OUString SAL_CALL getAccessibleColumnDescription( 132 sal_Int32 nColumn ); 133 virtual sal_Int32 SAL_CALL getAccessibleRowExtentAt( 134 sal_Int32 nRow, sal_Int32 nColumn ); 135 virtual sal_Int32 SAL_CALL getAccessibleColumnExtentAt( 136 sal_Int32 nRow, sal_Int32 nColumn ); 137 virtual ::com::sun::star::uno::Reference< 138 ::com::sun::star::accessibility::XAccessibleTable > 139 SAL_CALL getAccessibleRowHeaders( ); 140 virtual ::com::sun::star::uno::Reference< 141 ::com::sun::star::accessibility::XAccessibleTable > 142 SAL_CALL getAccessibleColumnHeaders( ); 143 virtual ::com::sun::star::uno::Sequence< sal_Int32 > SAL_CALL 144 getSelectedAccessibleRows( ); 145 virtual ::com::sun::star::uno::Sequence< sal_Int32 > SAL_CALL 146 getSelectedAccessibleColumns( ); 147 virtual sal_Bool SAL_CALL isAccessibleRowSelected( sal_Int32 nRow ); 148 virtual sal_Bool SAL_CALL isAccessibleColumnSelected( sal_Int32 nColumn ); 149 virtual ::com::sun::star::uno::Reference< 150 ::com::sun::star::accessibility::XAccessible > SAL_CALL 151 getAccessibleCellAt( sal_Int32 nRow, sal_Int32 nColumn ); 152 virtual ::com::sun::star::uno::Reference< 153 ::com::sun::star::accessibility::XAccessible > SAL_CALL 154 getAccessibleCaption( ); 155 virtual ::com::sun::star::uno::Reference< 156 ::com::sun::star::accessibility::XAccessible > SAL_CALL 157 getAccessibleSummary( ); 158 virtual sal_Bool SAL_CALL isAccessibleSelected( 159 sal_Int32 nRow, sal_Int32 nColumn ); 160 virtual sal_Int32 SAL_CALL getAccessibleIndex( 161 sal_Int32 nRow, sal_Int32 nColumn ); 162 virtual sal_Int32 SAL_CALL getAccessibleRow( sal_Int32 nChildIndex ); 163 virtual sal_Int32 SAL_CALL getAccessibleColumn( sal_Int32 nChildIndex ); 164 //===== XAccessibleTableSelection ============================================ 165 virtual sal_Bool SAL_CALL selectRow( sal_Int32 row ) ; 166 virtual sal_Bool SAL_CALL selectColumn( sal_Int32 column ) ; 167 virtual sal_Bool SAL_CALL unselectRow( sal_Int32 row ) ; 168 virtual sal_Bool SAL_CALL unselectColumn( sal_Int32 column ) ; 169 //===== XServiceInfo ==================================================== 170 171 /** Returns an identifier for the implementation of this object. 172 */ 173 virtual ::rtl::OUString SAL_CALL 174 getImplementationName (void); 175 176 /** Return whether the specified service is supported by this class. 177 */ 178 virtual sal_Bool SAL_CALL 179 supportsService (const ::rtl::OUString& sServiceName); 180 181 /** Returns a list of all supported services. In this case that is just 182 the AccessibleContext service. 183 */ 184 virtual ::com::sun::star::uno::Sequence< ::rtl::OUString> SAL_CALL 185 getSupportedServiceNames (void); 186 187 //===== C++ interface ====================================================== 188 189 // The object has been moved by the layout 190 virtual void InvalidatePosOrSize( const SwRect& rOldBox ); 191 192 // The object is not visible an longer and should be destroyed 193 virtual void Dispose( sal_Bool bRecursive = sal_False ); 194 195 virtual void DisposeChild( const sw::access::SwAccessibleChild& rFrmOrObj, 196 sal_Bool bRecursive ); 197 virtual void InvalidateChildPosOrSize( const sw::access::SwAccessibleChild& rFrmOrObj, 198 const SwRect& rFrm ); 199 200 //===== XAccessibleSelection ============================================ 201 202 virtual void SAL_CALL selectAccessibleChild( 203 sal_Int32 nChildIndex ); 204 205 virtual sal_Bool SAL_CALL isAccessibleChildSelected( 206 sal_Int32 nChildIndex ); 207 208 virtual void SAL_CALL clearAccessibleSelection( ); 209 210 virtual void SAL_CALL selectAllAccessibleChildren( ); 211 212 virtual sal_Int32 SAL_CALL getSelectedAccessibleChildCount( ); 213 214 virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL getSelectedAccessibleChild( 215 sal_Int32 nSelectedChildIndex ); 216 217 // --> OD 2004-11-16 #111714# - index has to be treated as global child index. 218 virtual void SAL_CALL deselectAccessibleChild( 219 sal_Int32 nChildIndex ); 220 221 //===== XAccessibleComponent ============================================ 222 sal_Int32 SAL_CALL getBackground(); 223 typedef std::vector<const SwAccessibleContext*> VEC_CELL; 224 VEC_CELL m_vecCellAdd; 225 VEC_CELL m_vecCellRemove; 226 void FireSelectionEvent( ); 227 void ClearSelectionCellCache(); 228 void AddSelectionCell(const SwAccessibleContext* ,sal_Bool bAddOrRemove); 229 }; 230 231 inline SwAccessibleTableData_Impl& SwAccessibleTable::GetTableData() 232 { 233 if( !mpTableData ) 234 UpdateTableData(); 235 return *mpTableData; 236 } 237 238 // --> OD 2007-06-28 #i77106# 239 // subclass to represent table column headers 240 class SwAccessibleTableColHeaders : public SwAccessibleTable 241 { 242 protected: 243 244 virtual ~SwAccessibleTableColHeaders() 245 {} 246 247 virtual SwAccessibleTableData_Impl* CreateNewTableData(); 248 virtual void Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew); 249 250 public: 251 252 SwAccessibleTableColHeaders( SwAccessibleMap *pMap, const SwTabFrm *pTabFrm ); 253 254 //===== XInterface ====================================================== 255 256 virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( 257 const ::com::sun::star::uno::Type& aType ); 258 259 virtual void SAL_CALL acquire( ) throw () 260 { SwAccessibleContext::acquire(); }; 261 262 virtual void SAL_CALL release( ) throw () 263 { SwAccessibleContext::release(); }; 264 265 //===== XAccessibleContext ============================================== 266 267 /// Return the number of currently visible children. 268 virtual sal_Int32 SAL_CALL getAccessibleChildCount (void); 269 270 /// Return the specified child or NULL if index is invalid. 271 virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible> SAL_CALL 272 getAccessibleChild (sal_Int32 nIndex); 273 274 //===== XAccessibleTable ================================================ 275 276 virtual ::com::sun::star::uno::Reference< 277 ::com::sun::star::accessibility::XAccessibleTable > 278 SAL_CALL getAccessibleRowHeaders( ); 279 virtual ::com::sun::star::uno::Reference< 280 ::com::sun::star::accessibility::XAccessibleTable > 281 SAL_CALL getAccessibleColumnHeaders( ); 282 283 //===== XServiceInfo ==================================================== 284 285 /** Returns an identifier for the implementation of this object. 286 */ 287 virtual ::rtl::OUString SAL_CALL 288 getImplementationName (void); 289 290 }; 291 // <-- 292 #endif 293