1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 2 /* 3 * This file is part of the LibreOffice project. 4 * 5 * This Source Code Form is subject to the terms of the Mozilla Public 6 * License, v. 2.0. If a copy of the MPL was not distributed with this 7 * file, You can obtain one at http://mozilla.org/MPL/2.0/. 8 * 9 * This file incorporates work covered by the following license notice: 10 * 11 * Licensed to the Apache Software Foundation (ASF) under one or more 12 * contributor license agreements. See the NOTICE file distributed 13 * with this work for additional information regarding copyright 14 * ownership. The ASF licenses this file to you under the Apache 15 * License, Version 2.0 (the "License"); you may not use this file 16 * except in compliance with the License. You may obtain a copy of 17 * the License at http://www.apache.org/licenses/LICENSE-2.0 . 18 */ 19 20 #ifndef INCLUDED_VCL_ACCESSIBLETABLE_HXX 21 #define INCLUDED_VCL_ACCESSIBLETABLE_HXX 22 23 #include <tools/gen.hxx> 24 25 #include <com/sun/star/uno/Reference.hxx> 26 27 namespace com { namespace sun { namespace star { namespace accessibility { class XAccessible; } } } } 28 namespace utl { class AccessibleStateSetHelper; } 29 namespace vcl { class Window; } 30 31 namespace vcl { namespace table 32 { 33 34 typedef sal_Int32 RowPos; 35 36 enum AccessibleTableControlObjType 37 { 38 TCTYPE_GRIDCONTROL, /// The GridControl itself. 39 TCTYPE_TABLE, /// The data table. 40 TCTYPE_ROWHEADERBAR, /// The row header bar. 41 TCTYPE_COLUMNHEADERBAR, /// The horizontal column header bar. 42 TCTYPE_TABLECELL, /// A cell of the data table. 43 TCTYPE_ROWHEADERCELL, /// A cell of the row header bar. 44 TCTYPE_COLUMNHEADERCELL, /// A cell of the column header bar. 45 }; 46 47 48 /** This abstract class provides methods to implement an accessible table object. 49 */ 50 class IAccessibleTable 51 { 52 public: 53 /** @return The position of the current row. */ 54 virtual sal_Int32 GetCurrentRow() const = 0; 55 /** @return The position of the current column. */ 56 virtual sal_Int32 GetCurrentColumn() const = 0; 57 virtual css::uno::Reference< css::accessibility::XAccessible > CreateAccessibleControl( sal_Int32 _nIndex )= 0; 58 virtual OUString GetAccessibleObjectName(AccessibleTableControlObjType eObjType, sal_Int32 _nRow, sal_Int32 _nCol) const= 0; 59 virtual void GoToCell( sal_Int32 _nColumnPos, sal_Int32 _nRow )= 0; 60 virtual bool HasColHeader() = 0; 61 virtual bool HasRowHeader() = 0; 62 63 /** return the description of the specified object. 64 @param eObjType 65 The type to ask for 66 @return 67 The description of the specified object. 68 */ 69 virtual OUString GetAccessibleObjectDescription(AccessibleTableControlObjType eObjType) const= 0; 70 71 /** Fills the StateSet with all states (except DEFUNC and SHOWING, done by 72 the accessible object), depending on the specified object type. */ 73 virtual void FillAccessibleStateSet( ::utl::AccessibleStateSetHelper& rStateSet, 74 AccessibleTableControlObjType eObjType ) const= 0; 75 76 // Window 77 virtual tools::Rectangle GetWindowExtentsRelative( vcl::Window *pRelativeWindow ) const = 0; 78 virtual void GrabFocus()= 0; 79 virtual css::uno::Reference< css::accessibility::XAccessible > GetAccessible()= 0; 80 virtual vcl::Window* GetAccessibleParentWindow() const= 0; 81 virtual vcl::Window* GetWindowInstance()= 0; 82 virtual sal_Int32 GetAccessibleControlCount() const = 0; 83 virtual bool ConvertPointToControlIndex( sal_Int32& _rnIndex, const Point& _rPoint )= 0; 84 virtual long GetRowCount() const= 0; 85 virtual long GetColumnCount() const= 0; 86 virtual bool ConvertPointToCellAddress( sal_Int32& _rnRow, sal_Int32& _rnColPos, const Point& _rPoint )= 0; 87 virtual tools::Rectangle calcHeaderRect( bool _bIsColumnBar ) = 0; 88 virtual tools::Rectangle calcHeaderCellRect( bool _bColHeader, sal_Int32 _nPos ) = 0; 89 virtual tools::Rectangle calcTableRect() = 0; 90 virtual tools::Rectangle calcCellRect( sal_Int32 _nRowPos, sal_Int32 _nColPos ) = 0; 91 virtual tools::Rectangle GetFieldCharacterBounds(sal_Int32 _nRow,sal_Int32 _nColumnPos,sal_Int32 nIndex)= 0; 92 virtual sal_Int32 GetFieldIndexAtPoint(sal_Int32 _nRow,sal_Int32 _nColumnPos,const Point& _rPoint)= 0; 93 virtual void FillAccessibleStateSetForCell( ::utl::AccessibleStateSetHelper& _rStateSet, sal_Int32 _nRow, sal_uInt16 _nColumnPos ) const= 0; 94 virtual OUString GetRowName(sal_Int32 _nIndex) const = 0; 95 virtual OUString GetColumnName( sal_Int32 _nIndex ) const = 0; 96 virtual OUString GetAccessibleCellText(sal_Int32 _nRowPos, sal_Int32 _nColPos) const = 0; 97 98 virtual sal_Int32 GetSelectedRowCount() const = 0; 99 virtual sal_Int32 GetSelectedRowIndex( sal_Int32 const i_selectionIndex ) const = 0; 100 virtual bool IsRowSelected( sal_Int32 const i_rowIndex ) const = 0; 101 virtual void SelectRow( sal_Int32 const i_rowIndex, bool const i_select ) = 0; 102 virtual void SelectAllRows( bool const i_select ) = 0; 103 104 protected: ~IAccessibleTable()105 ~IAccessibleTable() {} 106 }; 107 108 109 /** interface for an implementation of a table control's Accessible component 110 */ 111 class IAccessibleTableControl 112 { 113 public: 114 /** returns the XAccessible object itself 115 116 The reference returned here can be used to control the life time of the 117 IAccessibleTableImplementation object. 118 119 The returned reference is guaranteed to not be <NULL/>. 120 */ 121 virtual css::uno::Reference< css::accessibility::XAccessible > 122 getMyself() = 0; 123 124 /** disposes the accessible implementation, so that it becomes defunc 125 */ 126 virtual void DisposeAccessImpl() = 0; 127 128 /** checks whether the accessible implementation, and its context, are still alive 129 @return <TRUE/>, if the object is not disposed or disposing. 130 */ 131 virtual bool isAlive() const = 0; 132 133 /** commits the event at all listeners of the cell 134 @param nEventId 135 the event id 136 @param rNewValue 137 the new value 138 @param rOldValue 139 the old value 140 */ 141 virtual void commitCellEvent( 142 sal_Int16 nEventId, 143 const css::uno::Any& rNewValue, 144 const css::uno::Any& rOldValue 145 ) = 0; 146 /** commits the event at all listeners of the table 147 @param nEventId 148 the event id 149 @param rNewValue 150 the new value 151 @param rOldValue 152 the old value 153 */ 154 virtual void commitTableEvent( 155 sal_Int16 nEventId, 156 const css::uno::Any& rNewValue, 157 const css::uno::Any& rOldValue 158 ) = 0; 159 160 ///** Commits an event to all listeners. */ 161 virtual void commitEvent( 162 sal_Int16 nEventId, 163 const css::uno::Any& rNewValue 164 ) = 0; 165 166 protected: ~IAccessibleTableControl()167 ~IAccessibleTableControl() {} 168 }; 169 170 } // namespace table 171 } // namespace vcl 172 173 #endif // INCLUDED_VCL_ACCESSIBLETABLE_HXX 174 175 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 176