1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
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 .
20 #ifndef INCLUDED_SC_SOURCE_UI_INC_ACCESSIBLECSVCONTROL_HXX
21 #define INCLUDED_SC_SOURCE_UI_INC_ACCESSIBLECSVCONTROL_HXX
23 #include <com/sun/star/accessibility/XAccessibleText.hpp>
24 #include <com/sun/star/accessibility/XAccessibleTable.hpp>
25 #include <com/sun/star/accessibility/XAccessibleSelection.hpp>
26 #include <tools/gen.hxx>
27 #include <rtl/ustrbuf.hxx>
28 #include <cppuhelper/implbase1.hxx>
29 #include <cppuhelper/implbase2.hxx>
30 #include <editeng/AccessibleStaticTextBase.hxx>
31 #include <comphelper/uno3.hxx>
32 #include <vcl/vclptr.hxx>
33 #include "AccessibleContextBase.hxx"
36 namespace utl
{ class AccessibleStateSetHelper
; }
38 /** Accessible base class used for CSV controls. */
39 class ScAccessibleCsvControl
: public ScAccessibleContextBase
42 typedef ::com::sun::star::uno::Reference
<
43 ::com::sun::star::accessibility::XAccessible
> XAccessibleRef
;
44 typedef ::com::sun::star::uno::Reference
<
45 ::com::sun::star::accessibility::XAccessibleRelationSet
> XAccessibleRelationSetRef
;
46 typedef ::com::sun::star::uno::Reference
<
47 ::com::sun::star::accessibility::XAccessibleStateSet
> XAccessibleStateSetRef
;
49 typedef ::com::sun::star::awt::Point AwtPoint
;
50 typedef ::com::sun::star::awt::Size AwtSize
;
51 typedef ::com::sun::star::awt::Rectangle AwtRectangle
;
54 VclPtr
<ScCsvControl
> mpControl
; /// Pointer to the VCL control.
57 explicit ScAccessibleCsvControl(
58 const XAccessibleRef
& rxParent
,
59 ScCsvControl
& rControl
,
61 virtual ~ScAccessibleCsvControl();
63 using ScAccessibleContextBase::disposing
;
64 virtual void SAL_CALL
disposing() SAL_OVERRIDE
;
66 /** Returns true, if the control is visible. */
67 virtual bool SAL_CALL
isVisible() throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
69 // XAccessibleComponent ---------------------------------------------------
71 /** Returns the child at the specified point (cell returns NULL). */
72 virtual XAccessibleRef SAL_CALL
getAccessibleAtPoint( const AwtPoint
& rPoint
)
73 throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
75 /** Sets the focus to this control. */
76 virtual void SAL_CALL
grabFocus() throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
78 // events -----------------------------------------------------------------
80 /** Sends a GetFocus or LoseFocus event to all listeners. */
81 virtual void SendFocusEvent( bool bFocused
);
82 /** Sends a caret changed event to all listeners. */
83 virtual void SendCaretEvent();
84 /** Sends a visible area changed event to all listeners. */
85 void SendVisibleEvent();
86 /** Sends a selection changed event to all listeners. */
87 void SendSelectionEvent();
88 /** Sends a table model changed event for changed cell contents to all listeners. */
89 virtual void SendTableUpdateEvent( sal_uInt32 nFirstColumn
, sal_uInt32 nLastColumn
, bool bAllRows
);
90 /** Sends a table model changed event for an inserted column to all listeners. */
91 virtual void SendInsertColumnEvent( sal_uInt32 nFirstColumn
, sal_uInt32 nLastColumn
);
92 /** Sends a table model changed event for a removed column to all listeners. */
93 virtual void SendRemoveColumnEvent( sal_uInt32 nFirstColumn
, sal_uInt32 nLastColumn
);
95 // helpers ----------------------------------------------------------------
97 /** Returns this object's current bounding box relative to the desktop. */
98 virtual Rectangle
GetBoundingBoxOnScreen() const throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
99 /** Returns this object's current bounding box relative to the parent object. */
100 virtual Rectangle
GetBoundingBox() const throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
102 /** Returns whether the object is alive. Must be called with locked mutex. */
103 inline bool implIsAlive() const { return !rBHelper
.bDisposed
&& !rBHelper
.bInDispose
&& mpControl
; }
104 /** Throws an exception, if the object is disposed/disposing or any pointer
105 is missing. Should be used with locked mutex! */
106 void ensureAlive() const throw( ::com::sun::star::lang::DisposedException
);
108 /** Returns the VCL control. Assumes a living object. */
109 ScCsvControl
& implGetControl() const;
111 /** Returns the first child of rxParentObj, which has the role nRole. */
112 static XAccessibleRef
implGetChildByRole( const XAccessibleRef
& rxParentObj
, sal_uInt16 nRole
)
113 throw( ::com::sun::star::uno::RuntimeException
);
114 /** Creates a StateSetHelper and fills it with DEFUNC, OPAQUE, ENABLED, SHOWING and VISIBLE. */
115 ::utl::AccessibleStateSetHelper
* implCreateStateSet();
117 /** Disposes the object. This is a helper called from destructors only. */
120 /** Converts the control-relative position to an absolute screen position. */
121 Point
implGetAbsPos( const Point
& rPos
) const;
126 typedef ::cppu::ImplHelper1
<
127 ::com::sun::star::accessibility::XAccessibleText
>
128 ScAccessibleCsvRulerImpl
;
130 /** Accessible class representing the CSV ruler control. */
131 class ScAccessibleCsvRuler
: public ScAccessibleCsvControl
, public ScAccessibleCsvRulerImpl
134 typedef ::com::sun::star::uno::Sequence
<
135 ::com::sun::star::beans::PropertyValue
> PropertyValueSeq
;
138 OUStringBuffer maBuffer
; /// Contains the text representation of the ruler.
141 explicit ScAccessibleCsvRuler( ScCsvRuler
& rRuler
);
142 virtual ~ScAccessibleCsvRuler();
144 // XAccessibleComponent -----------------------------------------------------
146 virtual sal_Int32 SAL_CALL
getForeground( )
147 throw (::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
149 virtual sal_Int32 SAL_CALL
getBackground( )
150 throw (::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
152 // XAccessibleContext -----------------------------------------------------
154 /** Returns the child count (the ruler does not have children). */
155 virtual sal_Int32 SAL_CALL
getAccessibleChildCount()
156 throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
158 /** Throws an exception (the ruler does not have children). */
159 virtual XAccessibleRef SAL_CALL
getAccessibleChild( sal_Int32 nIndex
)
160 throw( ::com::sun::star::lang::IndexOutOfBoundsException
, ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
162 /** Returns the relation to the grid control. */
163 virtual XAccessibleRelationSetRef SAL_CALL
getAccessibleRelationSet()
164 throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
166 /** Returns the current set of states. */
167 virtual XAccessibleStateSetRef SAL_CALL
getAccessibleStateSet()
168 throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
170 // XAccessibleText --------------------------------------------------------
172 /** Return the position of the caret. */
173 virtual sal_Int32 SAL_CALL
getCaretPosition() throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
175 /** Sets the position of the caret. */
176 virtual sal_Bool SAL_CALL
setCaretPosition( sal_Int32 nIndex
)
177 throw( ::com::sun::star::lang::IndexOutOfBoundsException
, ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
179 /** Returns the specified character. */
180 virtual sal_Unicode SAL_CALL
getCharacter( sal_Int32 nIndex
)
181 throw( ::com::sun::star::lang::IndexOutOfBoundsException
, ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
183 /** Returns the attributes of the specified character. */
184 virtual PropertyValueSeq SAL_CALL
getCharacterAttributes( sal_Int32 nIndex
, const ::com::sun::star::uno::Sequence
< OUString
>& aRequestedAttributes
)
185 throw( ::com::sun::star::lang::IndexOutOfBoundsException
, ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
187 /** Returns the screen coordinates of the specified character. */
188 virtual AwtRectangle SAL_CALL
getCharacterBounds( sal_Int32 nIndex
)
189 throw( ::com::sun::star::lang::IndexOutOfBoundsException
, ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
191 /** Returns the count of characters. */
192 virtual sal_Int32 SAL_CALL
getCharacterCount() throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
194 /** Returns the character index at the specified coordinate (object's coordinate system). */
195 virtual sal_Int32 SAL_CALL
getIndexAtPoint( const AwtPoint
& rPoint
)
196 throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
198 /** Returns the selected text (ruler returns empty string). */
199 virtual OUString SAL_CALL
getSelectedText() throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
201 /** Returns the start index of the selection (ruler returns -1). */
202 virtual sal_Int32 SAL_CALL
getSelectionStart() throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
204 /** Returns the end index of the selection (ruler returns -1). */
205 virtual sal_Int32 SAL_CALL
getSelectionEnd() throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
207 /** Selects a part of the text (ruler does nothing). */
208 virtual sal_Bool SAL_CALL
setSelection( sal_Int32 nStartIndex
, sal_Int32 nEndIndex
)
209 throw( ::com::sun::star::lang::IndexOutOfBoundsException
, ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
211 /** Returns the entire text. */
212 virtual OUString SAL_CALL
getText() throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
214 /** Returns the specified range [Start,End) of the text. */
215 virtual OUString SAL_CALL
getTextRange( sal_Int32 nStartIndex
, sal_Int32 nEndIndex
)
216 throw( ::com::sun::star::lang::IndexOutOfBoundsException
, ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
218 /** Returns the specified text portion. */
219 virtual ::com::sun::star::accessibility::TextSegment SAL_CALL
getTextAtIndex( sal_Int32 nIndex
, sal_Int16 aTextType
) throw (::com::sun::star::lang::IndexOutOfBoundsException
, ::com::sun::star::lang::IllegalArgumentException
, ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
220 virtual ::com::sun::star::accessibility::TextSegment SAL_CALL
getTextBeforeIndex( sal_Int32 nIndex
, sal_Int16 aTextType
) throw (::com::sun::star::lang::IndexOutOfBoundsException
, ::com::sun::star::lang::IllegalArgumentException
, ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
221 virtual ::com::sun::star::accessibility::TextSegment SAL_CALL
getTextBehindIndex( sal_Int32 nIndex
, sal_Int16 aTextType
) throw (::com::sun::star::lang::IndexOutOfBoundsException
, ::com::sun::star::lang::IllegalArgumentException
, ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
223 /** Copies the specified text range into the clipboard (ruler does nothing). */
224 virtual sal_Bool SAL_CALL
copyText( sal_Int32 nStartIndex
, sal_Int32 nEndIndex
)
225 throw( ::com::sun::star::lang::IndexOutOfBoundsException
, ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
227 // XInterface -------------------------------------------------------------
229 virtual ::com::sun::star::uno::Any SAL_CALL
queryInterface( const ::com::sun::star::uno::Type
& rType
)
230 throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
232 virtual void SAL_CALL
acquire() throw() SAL_OVERRIDE
;
234 virtual void SAL_CALL
release() throw() SAL_OVERRIDE
;
236 // XServiceInfo -----------------------------------------------------------
238 /** Returns an identifier for the implementation of this object. */
239 virtual OUString SAL_CALL
getImplementationName()
240 throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
242 // XTypeProvider ----------------------------------------------------------
244 /** Returns a sequence with all supported interface types. */
245 virtual ::com::sun::star::uno::Sequence
< ::com::sun::star::uno::Type
> SAL_CALL
getTypes()
246 throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
248 /** Returns an implementation ID. */
249 virtual ::com::sun::star::uno::Sequence
< sal_Int8
> SAL_CALL
getImplementationId()
250 throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
252 // events -----------------------------------------------------------------
254 /** Sends a caret changed event to all listeners. */
255 virtual void SendCaretEvent() SAL_OVERRIDE
;
257 // helpers ----------------------------------------------------------------
259 /** Returns this object's name. */
260 virtual OUString SAL_CALL
createAccessibleName()
261 throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
262 /** Returns this object's description. */
263 virtual OUString SAL_CALL
createAccessibleDescription()
264 throw( ::com::sun::star::uno::RuntimeException
) SAL_OVERRIDE
;
266 /** Throws an exception, if the specified character position is invalid (outside 0..len-1). */
267 void ensureValidIndex( sal_Int32 nIndex
) const
268 throw( ::com::sun::star::lang::IndexOutOfBoundsException
);
269 /** Throws an exception, if the specified character position is invalid (outside 0..len). */
270 void ensureValidIndexWithEnd( sal_Int32 nIndex
) const
271 throw( ::com::sun::star::lang::IndexOutOfBoundsException
);
272 /** Throws an exception, if the specified character range [Start,End) is invalid.
273 @descr If Start>End, swaps Start and End before checking. */
274 void ensureValidRange( sal_Int32
& rnStartIndex
, sal_Int32
& rnEndIndex
) const
275 throw( ::com::sun::star::lang::IndexOutOfBoundsException
);
277 /** Returns the VCL ruler control. Assumes a living object. */
278 ScCsvRuler
& implGetRuler() const;
280 /** Builds the entire string buffer. */
281 void constructStringBuffer() throw( ::com::sun::star::uno::RuntimeException
);
282 /** Returns the character count of the text. */
283 sal_Int32
implGetTextLength() const;
285 /** Returns true, if the character at the specified index has a split. */
286 bool implHasSplit( sal_Int32 nApiPos
);
288 /** Returns the first character index with equal formatting as at nApiPos. */
289 sal_Int32
implGetFirstEqualFormatted( sal_Int32 nApiPos
);
290 /** Returns the last character index with equal formatting as at nApiPos. */
291 sal_Int32
implGetLastEqualFormatted( sal_Int32 nApiPos
);
296 typedef ::cppu::ImplHelper2
<
297 ::com::sun::star::accessibility::XAccessibleTable
,
298 ::com::sun::star::accessibility::XAccessibleSelection
>
299 ScAccessibleCsvGridImpl
;
301 /** Accessible class representing the CSV grid control. */
302 class ScAccessibleCsvGrid
: public ScAccessibleCsvControl
, public ScAccessibleCsvGridImpl
305 typedef ::com::sun::star::uno::Reference
<
306 ::com::sun::star::accessibility::XAccessibleTable
> XAccessibleTableRef
;
309 explicit ScAccessibleCsvGrid( ScCsvGrid
& rGrid
);
310 virtual ~ScAccessibleCsvGrid();
312 // XAccessibleComponent ---------------------------------------------------
314 /** Returns the cell at the specified point. */
315 virtual XAccessibleRef SAL_CALL
getAccessibleAtPoint( const AwtPoint
& rPoint
)
316 throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
318 virtual sal_Int32 SAL_CALL
getForeground( )
319 throw (::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
321 virtual sal_Int32 SAL_CALL
getBackground( )
322 throw (::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
324 // XAccessibleContext -----------------------------------------------------
326 /** Returns the child count (count of cells in the table). */
327 virtual sal_Int32 SAL_CALL
getAccessibleChildCount()
328 throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
330 /** Returns the specified child cell. */
331 virtual XAccessibleRef SAL_CALL
getAccessibleChild( sal_Int32 nIndex
)
332 throw( ::com::sun::star::lang::IndexOutOfBoundsException
, ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
334 /** Returns the relation to the ruler control. */
335 virtual XAccessibleRelationSetRef SAL_CALL
getAccessibleRelationSet()
336 throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
338 /** Returns the current set of states. */
339 virtual XAccessibleStateSetRef SAL_CALL
getAccessibleStateSet()
340 throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
342 // XAccessibleTable -------------------------------------------------------
344 /** Returns the number of rows in the table. */
345 virtual sal_Int32 SAL_CALL
getAccessibleRowCount()
346 throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
348 /** Returns the number of columns in the table. */
349 virtual sal_Int32 SAL_CALL
getAccessibleColumnCount()
350 throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
352 /** Returns the description of the specified row in the table. */
353 virtual OUString SAL_CALL
getAccessibleRowDescription( sal_Int32 nRow
)
354 throw( ::com::sun::star::lang::IndexOutOfBoundsException
, ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
356 /** Returns the description text of the specified column in the table. */
357 virtual OUString SAL_CALL
getAccessibleColumnDescription( sal_Int32 nColumn
)
358 throw( ::com::sun::star::lang::IndexOutOfBoundsException
, ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
360 /** Returns the number of rows occupied at a specified row and column.
361 @descr Returns always 1 (Merged cells not supported). */
362 virtual sal_Int32 SAL_CALL
getAccessibleRowExtentAt( sal_Int32 nRow
, sal_Int32 nColumn
)
363 throw( ::com::sun::star::lang::IndexOutOfBoundsException
, ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
365 /** Returns the number of rows occupied at a specified row and column.
366 @descr Returns always 1 (Merged cells not supported). */
367 virtual sal_Int32 SAL_CALL
getAccessibleColumnExtentAt( sal_Int32 nRow
, sal_Int32 nColumn
)
368 throw( ::com::sun::star::lang::IndexOutOfBoundsException
, ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
370 /** Returns the row headers as an AccessibleTable. */
371 virtual XAccessibleTableRef SAL_CALL
getAccessibleRowHeaders()
372 throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
374 /** Returns the column headers as an AccessibleTable. */
375 virtual XAccessibleTableRef SAL_CALL
getAccessibleColumnHeaders()
376 throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
378 /** Returns the selected rows as a sequence. */
379 virtual ::com::sun::star::uno::Sequence
< sal_Int32
> SAL_CALL
getSelectedAccessibleRows()
380 throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
382 /** Returns the selected columns as a sequence. */
383 virtual ::com::sun::star::uno::Sequence
< sal_Int32
> SAL_CALL
getSelectedAccessibleColumns()
384 throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
386 /** Returns true, if the specified row is selected. */
387 virtual sal_Bool SAL_CALL
isAccessibleRowSelected( sal_Int32 nRow
)
388 throw( ::com::sun::star::lang::IndexOutOfBoundsException
, ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
390 /** Returns true, if the specified column is selected. */
391 virtual sal_Bool SAL_CALL
isAccessibleColumnSelected( sal_Int32 nColumn
)
392 throw( ::com::sun::star::lang::IndexOutOfBoundsException
, ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
394 /** Returns the accessible cell object at the specified position. */
395 virtual XAccessibleRef SAL_CALL
getAccessibleCellAt( sal_Int32 nRow
, sal_Int32 nColumn
)
396 throw( ::com::sun::star::lang::IndexOutOfBoundsException
, ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
398 /** Returns the caption object of the table. */
399 virtual XAccessibleRef SAL_CALL
getAccessibleCaption()
400 throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
402 /** Returns the summary description object of the table. */
403 virtual XAccessibleRef SAL_CALL
getAccessibleSummary()
404 throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
406 /** Returns true, if the cell at a specified position is selected. */
407 virtual sal_Bool SAL_CALL
isAccessibleSelected( sal_Int32 nRow
, sal_Int32 nColumn
)
408 throw( ::com::sun::star::lang::IndexOutOfBoundsException
, ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
410 /** Returns the child index of the cell at the specified position. */
411 virtual sal_Int32 SAL_CALL
getAccessibleIndex( sal_Int32 nRow
, sal_Int32 nColumn
)
412 throw( ::com::sun::star::lang::IndexOutOfBoundsException
, ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
414 /** Returns the row index of the specified child. */
415 virtual sal_Int32 SAL_CALL
getAccessibleRow( sal_Int32 nChildIndex
)
416 throw( ::com::sun::star::lang::IndexOutOfBoundsException
, ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
418 /** Returns the column index of the specified child. */
419 virtual sal_Int32 SAL_CALL
getAccessibleColumn( sal_Int32 nChildIndex
)
420 throw( ::com::sun::star::lang::IndexOutOfBoundsException
, ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
422 // XAccessibleSelection ---------------------------------------------------
424 /** Selects the specified child (selects the entire column or the entire table). */
425 virtual void SAL_CALL
selectAccessibleChild( sal_Int32 nChildIndex
)
426 throw( ::com::sun::star::lang::IndexOutOfBoundsException
, ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
428 /** Returns true, if the specified child is selected. */
429 virtual sal_Bool SAL_CALL
isAccessibleChildSelected( sal_Int32 nChildIndex
)
430 throw( ::com::sun::star::lang::IndexOutOfBoundsException
, ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
432 /** Deselects all cells. */
433 virtual void SAL_CALL
clearAccessibleSelection()
434 throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
436 /** Selects all cells. */
437 virtual void SAL_CALL
selectAllAccessibleChildren()
438 throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
440 /** Returns the count of selected children. */
441 virtual sal_Int32 SAL_CALL
getSelectedAccessibleChildCount()
442 throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
444 /** Returns the child with the specified index in all selected children. */
445 virtual XAccessibleRef SAL_CALL
getSelectedAccessibleChild( sal_Int32 nSelectedChildIndex
)
446 throw( ::com::sun::star::lang::IndexOutOfBoundsException
, ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
448 /** Deselects the child with the specified index in all selected children. */
449 virtual void SAL_CALL
deselectAccessibleChild( sal_Int32 nSelectedChildIndex
)
450 throw( ::com::sun::star::lang::IndexOutOfBoundsException
, ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
452 // XInterface -------------------------------------------------------------
454 virtual ::com::sun::star::uno::Any SAL_CALL
queryInterface( const ::com::sun::star::uno::Type
& rType
)
455 throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
457 virtual void SAL_CALL
acquire() throw() SAL_OVERRIDE
;
459 virtual void SAL_CALL
release() throw() SAL_OVERRIDE
;
461 // XServiceInfo -----------------------------------------------------------
463 /** Returns an identifier for the implementation of this object. */
464 virtual OUString SAL_CALL
getImplementationName()
465 throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
467 // XTypeProvider ----------------------------------------------------------
469 /** Returns a sequence with all supported interface types. */
470 virtual ::com::sun::star::uno::Sequence
< ::com::sun::star::uno::Type
> SAL_CALL
getTypes()
471 throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
473 /** Returns an implementation ID. */
474 virtual ::com::sun::star::uno::Sequence
< sal_Int8
> SAL_CALL
getImplementationId()
475 throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
477 // events -----------------------------------------------------------------
479 /** Sends a GetFocus or LoseFocus event to all listeners. */
480 virtual void SendFocusEvent( bool bFocused
) SAL_OVERRIDE
;
481 /** Sends a table model changed event for changed cell contents to all listeners. */
482 virtual void SendTableUpdateEvent( sal_uInt32 nFirstColumn
, sal_uInt32 nLastColumn
, bool bAllRows
) SAL_OVERRIDE
;
483 /** Sends a table model changed event for an inserted column to all listeners. */
484 virtual void SendInsertColumnEvent( sal_uInt32 nFirstColumn
, sal_uInt32 nLastColumn
) SAL_OVERRIDE
;
485 /** Sends a table model changed event for a removed column to all listeners. */
486 virtual void SendRemoveColumnEvent( sal_uInt32 nFirstColumn
, sal_uInt32 nLastColumn
) SAL_OVERRIDE
;
488 // helpers ----------------------------------------------------------------
490 /** Returns this object's name. */
491 virtual OUString SAL_CALL
createAccessibleName()
492 throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
493 /** Returns this object's description. */
494 virtual OUString SAL_CALL
createAccessibleDescription()
495 throw( ::com::sun::star::uno::RuntimeException
) SAL_OVERRIDE
;
497 /** Throws an exception, if nIndex is not a valid child index. */
498 void ensureValidIndex( sal_Int32 nIndex
) const
499 throw( ::com::sun::star::lang::IndexOutOfBoundsException
);
500 /** Throws an exception, if the specified position is invalid. */
501 void ensureValidPosition( sal_Int32 nRow
, sal_Int32 nColumn
) const
502 throw( ::com::sun::star::lang::IndexOutOfBoundsException
);
504 /** Returns the VCL grid control. Assumes a living object. */
505 ScCsvGrid
& implGetGrid() const;
507 /** Returns true, if the specified column (including header) is selected. */
508 bool implIsColumnSelected( sal_Int32 nColumn
) const;
509 /** Selects the specified column (including header). */
510 void implSelectColumn( sal_Int32 nColumn
, bool bSelect
);
512 /** Returns the count of visible rows in the table (including header). */
513 sal_Int32
implGetRowCount() const;
514 /** Returns the total column count in the table (including header). */
515 sal_Int32
implGetColumnCount() const;
516 /** Returns the count of selected columns in the table. */
517 sal_Int32
implGetSelColumnCount() const;
518 /** Returns the total cell count in the table (including header). */
519 inline sal_Int32
implGetCellCount() const { return implGetRowCount() * implGetColumnCount(); }
521 /** Returns the row index from cell index (including header). */
522 inline sal_Int32
implGetRow( sal_Int32 nIndex
) const { return nIndex
/ implGetColumnCount(); }
523 /** Returns the column index from cell index (including header). */
524 inline sal_Int32
implGetColumn( sal_Int32 nIndex
) const { return nIndex
% implGetColumnCount(); }
525 /** Returns the absolute column index of the nSelColumn-th selected column. */
526 sal_Int32
implGetSelColumn( sal_Int32 nSelColumn
) const;
527 /** Returns the child index from cell position (including header). */
528 inline sal_Int32
implGetIndex( sal_Int32 nRow
, sal_Int32 nColumn
) const { return nRow
* implGetColumnCount() + nColumn
; }
530 /** Returns the contents of the specified cell (including header). Indexes must be valid. */
531 OUString
implGetCellText( sal_Int32 nRow
, sal_Int32 nColumn
) const;
532 /** Creates a new accessible object of the specified cell. Indexes must be valid. */
533 ScAccessibleCsvControl
* implCreateCellObj( sal_Int32 nRow
, sal_Int32 nColumn
) const;
536 /** Accessible class representing a cell of the CSV grid control. */
537 class ScAccessibleCsvCell
: public ScAccessibleCsvControl
, public accessibility::AccessibleStaticTextBase
540 typedef ::com::sun::star::uno::Sequence
<
541 ::com::sun::star::beans::PropertyValue
> PropertyValueSeq
;
542 typedef ::std::unique_ptr
< SvxEditSource
> SvxEditSourcePtr
;
545 OUString maCellText
; /// The text contents of this cell.
546 sal_Int32 mnLine
; /// The grid line index (core index).
547 sal_uInt32 mnColumn
; /// The grid column index (core index).
548 sal_Int32 mnIndex
; /// The index of the cell in the table.
551 explicit ScAccessibleCsvCell(
553 const OUString
& rCellText
,
554 sal_Int32 nRow
, sal_Int32 nColumn
);
555 virtual ~ScAccessibleCsvCell();
557 using ScAccessibleCsvControl::disposing
;
558 virtual void SAL_CALL
disposing() SAL_OVERRIDE
;
560 // XAccessibleComponent ---------------------------------------------------
562 /** Sets the focus to the column of this cell. */
563 virtual void SAL_CALL
grabFocus() throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
565 virtual sal_Int32 SAL_CALL
getForeground( )
566 throw (::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
568 virtual sal_Int32 SAL_CALL
getBackground( )
569 throw (::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
571 // XAccessibleContext -----------------------------------------------------
573 /** Returns the child count. */
574 virtual sal_Int32 SAL_CALL
getAccessibleChildCount()
575 throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
577 /** Returns the specified child. */
578 virtual XAccessibleRef SAL_CALL
getAccessibleChild( sal_Int32 nIndex
)
579 throw( ::com::sun::star::lang::IndexOutOfBoundsException
, ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
581 /** Returns the index of this cell in the table. */
582 virtual sal_Int32 SAL_CALL
getAccessibleIndexInParent()
583 throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
585 /** Returns the relation to the ruler control. */
586 virtual XAccessibleRelationSetRef SAL_CALL
getAccessibleRelationSet()
587 throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
589 /** Returns the current set of states. */
590 virtual XAccessibleStateSetRef SAL_CALL
getAccessibleStateSet()
591 throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
593 // XInterface -------------------------------------------------------------
597 // XTypeProvider ----------------------------------------------------------
599 DECLARE_XTYPEPROVIDER()
601 // XServiceInfo -----------------------------------------------------------
603 /** Returns an identifier for the implementation of this object. */
604 virtual OUString SAL_CALL
getImplementationName()
605 throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
607 // helpers ----------------------------------------------------------------
609 /** Returns this object's current bounding box relative to the desktop. */
610 virtual Rectangle
GetBoundingBoxOnScreen() const throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
611 /** Returns this object's current bounding box relative to the parent object. */
612 virtual Rectangle
GetBoundingBox() const throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
615 /** Returns this object's name. */
616 virtual OUString SAL_CALL
createAccessibleName()
617 throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
618 /** Returns this object's description. */
619 virtual OUString SAL_CALL
createAccessibleDescription()
620 throw( ::com::sun::star::uno::RuntimeException
) SAL_OVERRIDE
;
622 /** Returns the VCL grid control. Assumes a living object. */
623 ScCsvGrid
& implGetGrid() const;
624 /** Returns the pixel position of the cell (rel. to parent), regardless of visibility. */
625 Point
implGetRealPos() const;
626 /** Returns the width of the character count */
627 sal_uInt32
implCalcPixelWidth(sal_uInt32 nChars
) const;
628 /** Returns the pixel size of the cell, regardless of visibility. */
629 Size
implGetRealSize() const;
630 /** Returns the bounding box of the cell relative in the table. */
631 Rectangle
implGetBoundingBox() const;
633 /** Creates the edit source the text helper needs. */
634 ::std::unique_ptr
< SvxEditSource
> implCreateEditSource();
639 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */