xref: /AOO41X/main/sc/source/ui/inc/AccessibleSpreadsheet.hxx (revision 8809db7a87f97847b57a57f4cd2b0104b2b83182)
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 
24 
25 #ifndef _SC_ACCESSIBLESPREADSHEET_HXX
26 #define _SC_ACCESSIBLESPREADSHEET_HXX
27 
28 #include "AccessibleTableBase.hxx"
29 #include "viewdata.hxx"
30 
31 #include <vector>
32 
33 class ScMyAddress : public ScAddress
34 {
35 public:
36     ScMyAddress() : ScAddress() {}
37     ScMyAddress(SCCOL nColP, SCROW nRowP, SCTAB nTabP) : ScAddress(nColP, nRowP, nTabP) {}
38     ScMyAddress(const ScAddress& rAddress) : ScAddress(rAddress) {}
39 
40     sal_Bool operator< ( const ScMyAddress& rAddress ) const
41     {
42         if( Row() != rAddress.Row() )
43             return (Row() < rAddress.Row());
44         else
45             return (Col() < rAddress.Col());
46     }
47 };
48 
49 class ScTabViewShell;
50 class ScAccessibleDocument;
51 class ScAccessibleCell;
52 
53 /** @descr
54         This base class provides an implementation of the
55         <code>AccessibleTable</code> service.
56 */
57 class ScAccessibleSpreadsheet
58     :   public  ScAccessibleTableBase
59 {
60 public:
61     //=====  internal  ========================================================
62     ScAccessibleSpreadsheet(
63         ScAccessibleDocument* pAccDoc,
64         ScTabViewShell* pViewShell,
65         SCTAB   nTab,
66         ScSplitPos eSplitPos);
67 protected:
68     ScAccessibleSpreadsheet(
69         ScAccessibleSpreadsheet& rParent,
70         const ScRange& rRange );
71 
72     virtual ~ScAccessibleSpreadsheet();
73 
74     void ConstructScAccessibleSpreadsheet(
75         ScAccessibleDocument* pAccDoc,
76         ScTabViewShell* pViewShell,
77         SCTAB nTab,
78         ScSplitPos eSplitPos);
79 
80     using ScAccessibleTableBase::IsDefunc;
81 
82 public:
83     using ScAccessibleTableBase::addEventListener;
84     using ScAccessibleTableBase::disposing;
85 
86     virtual void SAL_CALL disposing();
87 
88     void CompleteSelectionChanged(sal_Bool bNewState);
89 
90     virtual void LostFocus();
91 
92     virtual void GotFocus();
93 
94     void BoundingBoxChanged();
95 
96     void VisAreaChanged();
97 
98     ///=====  SfxListener  =====================================================
99 
100     virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
101 
102     ///=====  XAccessibleTable  ================================================
103 
104     /// Returns the row headers as an AccessibleTable.
105     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleTable > SAL_CALL
106                 getAccessibleRowHeaders(  )
107                     throw (::com::sun::star::uno::RuntimeException);
108 
109     /// Returns the column headers as an AccessibleTable.
110     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleTable > SAL_CALL
111                 getAccessibleColumnHeaders(  )
112                     throw (::com::sun::star::uno::RuntimeException);
113 
114     /// Returns the selected rows in a table.
115     virtual ::com::sun::star::uno::Sequence< sal_Int32 > SAL_CALL
116                 getSelectedAccessibleRows(  )
117                     throw (::com::sun::star::uno::RuntimeException);
118 
119     /// Returns the selected columns in a table.
120     virtual ::com::sun::star::uno::Sequence< sal_Int32 > SAL_CALL
121                 getSelectedAccessibleColumns(  )
122                     throw (::com::sun::star::uno::RuntimeException);
123 
124     /// Returns a boolean value indicating whether the specified row is selected.
125     virtual sal_Bool SAL_CALL
126                 isAccessibleRowSelected( sal_Int32 nRow )
127                     throw (::com::sun::star::uno::RuntimeException,
128                     ::com::sun::star::lang::IndexOutOfBoundsException);
129 
130     /// Returns a boolean value indicating whether the specified column is selected.
131     virtual sal_Bool SAL_CALL
132                 isAccessibleColumnSelected( sal_Int32 nColumn )
133                     throw (::com::sun::star::uno::RuntimeException,
134                     ::com::sun::star::lang::IndexOutOfBoundsException);
135 
136     /// Returns the Accessible at a specified row and column in the table.
137     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL
138                 getAccessibleCellAt( sal_Int32 nRow, sal_Int32 nColumn )
139                     throw (::com::sun::star::uno::RuntimeException,
140                             ::com::sun::star::lang::IndexOutOfBoundsException);
141 
142     ScAccessibleCell* GetAccessibleCellAt(sal_Int32 nRow, sal_Int32 nColumn);
143 
144     /// Returns a boolean value indicating whether the accessible at a specified row and column is selected.
145     virtual sal_Bool SAL_CALL
146                 isAccessibleSelected( sal_Int32 nRow, sal_Int32 nColumn )
147                     throw (::com::sun::star::uno::RuntimeException,
148                     ::com::sun::star::lang::IndexOutOfBoundsException);
149 
150     ///=====  XAccessibleComponent  ============================================
151 
152     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible >
153         SAL_CALL getAccessibleAtPoint(
154         const ::com::sun::star::awt::Point& rPoint )
155         throw (::com::sun::star::uno::RuntimeException);
156 
157     virtual void SAL_CALL grabFocus(  )
158         throw (::com::sun::star::uno::RuntimeException);
159 
160     virtual sal_Int32 SAL_CALL getForeground(  )
161         throw (::com::sun::star::uno::RuntimeException);
162 
163     virtual sal_Int32 SAL_CALL getBackground(  )
164         throw (::com::sun::star::uno::RuntimeException);
165 
166     ///=====  XAccessibleContext  ==============================================
167 
168     /// Return NULL to indicate that an empty relation set.
169     virtual ::com::sun::star::uno::Reference<
170             ::com::sun::star::accessibility::XAccessibleRelationSet> SAL_CALL
171         getAccessibleRelationSet(void)
172         throw (::com::sun::star::uno::RuntimeException);
173 
174     /// Return the set of current states.
175     virtual ::com::sun::star::uno::Reference<
176             ::com::sun::star::accessibility::XAccessibleStateSet> SAL_CALL
177         getAccessibleStateSet(void)
178         throw (::com::sun::star::uno::RuntimeException);
179 
180     ///=====  XAccessibleSelection  ===========================================
181 
182     virtual void SAL_CALL
183         selectAccessibleChild( sal_Int32 nChildIndex )
184         throw (::com::sun::star::lang::IndexOutOfBoundsException,
185         ::com::sun::star::uno::RuntimeException);
186 
187     virtual void SAL_CALL
188         clearAccessibleSelection(  )
189         throw (::com::sun::star::uno::RuntimeException);
190 
191     virtual void SAL_CALL
192         selectAllAccessibleChildren(  )
193         throw (::com::sun::star::uno::RuntimeException);
194 
195     virtual sal_Int32 SAL_CALL
196         getSelectedAccessibleChildCount(  )
197         throw (::com::sun::star::uno::RuntimeException);
198 
199     virtual ::com::sun::star::uno::Reference<
200         ::com::sun::star::accessibility::XAccessible > SAL_CALL
201         getSelectedAccessibleChild( sal_Int32 nSelectedChildIndex )
202         throw (::com::sun::star::lang::IndexOutOfBoundsException,
203         ::com::sun::star::uno::RuntimeException);
204 
205     virtual void SAL_CALL
206         deselectAccessibleChild( sal_Int32 nChildIndex )
207         throw (::com::sun::star::lang::IndexOutOfBoundsException,
208         ::com::sun::star::uno::RuntimeException);
209 
210     ///=====  XServiceInfo  ====================================================
211 
212     /** Returns an identifier for the implementation of this object.
213     */
214     virtual ::rtl::OUString SAL_CALL
215         getImplementationName(void)
216         throw (::com::sun::star::uno::RuntimeException);
217 
218     /** Returns a list of all supported services.
219     */
220     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString> SAL_CALL
221         getSupportedServiceNames(void)
222         throw (::com::sun::star::uno::RuntimeException);
223 
224     ///=====  XTypeProvider  ===================================================
225 
226     /** Returns a implementation id.
227     */
228     virtual ::com::sun::star::uno::Sequence<sal_Int8> SAL_CALL
229         getImplementationId(void)
230         throw (::com::sun::star::uno::RuntimeException);
231 
232     ///=====  XAccessibleEventBroadcaster  =====================================
233 
234     /** Add listener that is informed of future changes of name,
235         description and so on events.
236     */
237     virtual void SAL_CALL
238         addEventListener(
239             const ::com::sun::star::uno::Reference<
240                 ::com::sun::star::accessibility::XAccessibleEventListener>& xListener)
241         throw (com::sun::star::uno::RuntimeException);
242 
243 protected:
244     /// Return the object's current bounding box relative to the desktop.
245     virtual Rectangle GetBoundingBoxOnScreen(void) const
246         throw (::com::sun::star::uno::RuntimeException);
247 
248     /// Return the object's current bounding box relative to the parent object.
249     virtual Rectangle GetBoundingBox(void) const
250         throw (::com::sun::star::uno::RuntimeException);
251 private:
252     ScTabViewShell* mpViewShell;
253     ScRangeList*    mpMarkedRanges;
254     std::vector<ScMyAddress>* mpSortedMarkedCells;
255     ScAccessibleDocument* mpAccDoc;
256     ScAccessibleCell*   mpAccCell;
257     Rectangle       maVisCells;
258     ScSplitPos      meSplitPos;
259     ScAddress       maActiveCell;
260     SCTAB           mnTab;
261     sal_Bool        mbIsSpreadsheet;
262     sal_Bool        mbHasSelection;
263     sal_Bool        mbDelIns;
264     sal_Bool        mbIsFocusSend;
265 
266     sal_Bool IsDefunc(
267         const com::sun::star::uno::Reference<
268         ::com::sun::star::accessibility::XAccessibleStateSet>& rxParentStates);
269     sal_Bool IsEditable(
270         const com::sun::star::uno::Reference<
271         ::com::sun::star::accessibility::XAccessibleStateSet>& rxParentStates);
272     sal_Bool IsFocused();
273     sal_Bool IsCompleteSheetSelected();
274 
275     void SelectCell(sal_Int32 nRow, sal_Int32 nCol, sal_Bool bDeselect);
276     void CreateSortedMarkedCells();
277     void AddMarkedRange(const ScRange& rRange);
278 
279     ScDocument* GetDocument(ScTabViewShell* pViewShell);
280     Rectangle   GetVisArea(ScTabViewShell* pViewShell, ScSplitPos eSplitPos);
281     Rectangle   GetVisCells(const Rectangle& rVisArea);
282 };
283 
284 
285 #endif
286