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