blob: 7b596c78d41682d773f4c31e5d534f3e69770d48 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// ============================================================================
#ifndef _SC_ACCESSIBLECSVCONTROL_HXX
#define _SC_ACCESSIBLECSVCONTROL_HXX
#include <com/sun/star/accessibility/XAccessibleText.hpp>
#include <com/sun/star/accessibility/XAccessibleTable.hpp>
#include <com/sun/star/accessibility/XAccessibleSelection.hpp>
#include <tools/gen.hxx>
#include <tools/string.hxx>
#include <rtl/ustrbuf.hxx>
#include <cppuhelper/implbase1.hxx>
#include <cppuhelper/implbase2.hxx>
#include <editeng/AccessibleStaticTextBase.hxx>
#include <comphelper/uno3.hxx>
#include "AccessibleContextBase.hxx"
// ============================================================================
class ScCsvControl;
namespace utl { class AccessibleStateSetHelper; }
/** Accessible base class used for CSV controls. */
class ScAccessibleCsvControl : public ScAccessibleContextBase
{
protected:
typedef ::com::sun::star::uno::Reference<
::com::sun::star::accessibility::XAccessible > XAccessibleRef;
typedef ::com::sun::star::uno::Reference<
::com::sun::star::accessibility::XAccessibleRelationSet > XAccessibleRelationSetRef;
typedef ::com::sun::star::uno::Reference<
::com::sun::star::accessibility::XAccessibleStateSet > XAccessibleStateSetRef;
typedef ::com::sun::star::awt::Point AwtPoint;
typedef ::com::sun::star::awt::Size AwtSize;
typedef ::com::sun::star::awt::Rectangle AwtRectangle;
private:
ScCsvControl* mpControl; /// Pointer to the VCL control.
public:
explicit ScAccessibleCsvControl(
const XAccessibleRef& rxParent,
ScCsvControl& rControl,
sal_uInt16 nRole );
virtual ~ScAccessibleCsvControl();
using ScAccessibleContextBase::disposing;
virtual void SAL_CALL disposing();
// XAccessibleComponent ---------------------------------------------------
/** Returns the child at the specified point (cell returns NULL). */
virtual XAccessibleRef SAL_CALL getAccessibleAtPoint( const AwtPoint& rPoint )
throw( ::com::sun::star::uno::RuntimeException );
/** Returns true, if the control is visible. */
virtual sal_Bool SAL_CALL isVisible() throw( ::com::sun::star::uno::RuntimeException );
/** Sets the focus to this control. */
virtual void SAL_CALL grabFocus() throw( ::com::sun::star::uno::RuntimeException );
// events -----------------------------------------------------------------
public:
/** Sends a GetFocus or LoseFocus event to all listeners. */
virtual void SendFocusEvent( bool bFocused );
/** Sends a caret changed event to all listeners. */
virtual void SendCaretEvent();
/** Sends a visible area changed event to all listeners. */
virtual void SendVisibleEvent();
/** Sends a selection changed event to all listeners. */
virtual void SendSelectionEvent();
/** Sends a table model changed event for changed cell contents to all listeners. */
virtual void SendTableUpdateEvent( sal_uInt32 nFirstColumn, sal_uInt32 nLastColumn, bool bAllRows );
/** Sends a table model changed event for an inserted column to all listeners. */
virtual void SendInsertColumnEvent( sal_uInt32 nFirstColumn, sal_uInt32 nLastColumn );
/** Sends a table model changed event for a removed column to all listeners. */
virtual void SendRemoveColumnEvent( sal_uInt32 nFirstColumn, sal_uInt32 nLastColumn );
// helpers ----------------------------------------------------------------
protected:
/** Returns this object's current bounding box relative to the desktop. */
virtual Rectangle GetBoundingBoxOnScreen() const throw( ::com::sun::star::uno::RuntimeException );
/** Returns this object's current bounding box relative to the parent object. */
virtual Rectangle GetBoundingBox() const throw( ::com::sun::star::uno::RuntimeException );
/** Creates a new UUID in rSeq, if it is empty. Locks mutex internally. */
void getUuid( ::com::sun::star::uno::Sequence< sal_Int8 >& rSeq );
/** Returns whether the object is alive. Must be called with locked mutex. */
inline bool implIsAlive() const { return !rBHelper.bDisposed && !rBHelper.bInDispose && mpControl; }
/** Throws an exception, if the object is disposed/disposing or any pointer
is missing. Should be used with locked mutex! */
void ensureAlive() const throw( ::com::sun::star::lang::DisposedException );
/** Returns the VCL control. Assumes a living object. */
ScCsvControl& implGetControl() const;
/** Returns the first child of rxParentObj, which has the role nRole. */
XAccessibleRef implGetChildByRole( const XAccessibleRef& rxParentObj, sal_uInt16 nRole )
throw( ::com::sun::star::uno::RuntimeException );
/** Creates a StateSetHelper and fills it with DEFUNC, OPAQUE, ENABLED, SHOWING and VISIBLE. */
::utl::AccessibleStateSetHelper* implCreateStateSet();
/** Disposes the object. This is a helper called from destructors only. */
void implDispose();
/** Converts the control-relative position to an absolute screen position. */
Point implGetAbsPos( const Point& rPos ) const;
};
// ============================================================================
class ScCsvRuler;
typedef ::cppu::ImplHelper1<
::com::sun::star::accessibility::XAccessibleText >
ScAccessibleCsvRulerImpl;
/** Accessible class representing the CSV ruler control. */
class ScAccessibleCsvRuler : public ScAccessibleCsvControl, public ScAccessibleCsvRulerImpl
{
protected:
typedef ::com::sun::star::uno::Sequence<
::com::sun::star::beans::PropertyValue > PropertyValueSeq;
private:
::rtl::OUStringBuffer maBuffer; /// Contains the text representation of the ruler.
public:
explicit ScAccessibleCsvRuler( ScCsvRuler& rRuler );
virtual ~ScAccessibleCsvRuler();
// XAccessibleComponent -----------------------------------------------------
virtual sal_Int32 SAL_CALL getForeground( )
throw (::com::sun::star::uno::RuntimeException);
virtual sal_Int32 SAL_CALL getBackground( )
throw (::com::sun::star::uno::RuntimeException);
// XAccessibleContext -----------------------------------------------------
/** Returns the child count (the ruler does not have children). */
virtual sal_Int32 SAL_CALL getAccessibleChildCount()
throw( ::com::sun::star::uno::RuntimeException );
/** Throws an exception (the ruler does not have childern). */
virtual XAccessibleRef SAL_CALL getAccessibleChild( sal_Int32 nIndex )
throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException );
/** Returns the relation to the grid control. */
virtual XAccessibleRelationSetRef SAL_CALL getAccessibleRelationSet()
throw( ::com::sun::star::uno::RuntimeException );
/** Returns the current set of states. */
virtual XAccessibleStateSetRef SAL_CALL getAccessibleStateSet()
throw( ::com::sun::star::uno::RuntimeException );
// XAccessibleText --------------------------------------------------------
/** Return the position of the caret. */
virtual sal_Int32 SAL_CALL getCaretPosition() throw( ::com::sun::star::uno::RuntimeException );
/** Sets the position of the caret. */
virtual sal_Bool SAL_CALL setCaretPosition( sal_Int32 nIndex )
throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException );
/** Returns the specified character. */
virtual sal_Unicode SAL_CALL getCharacter( sal_Int32 nIndex )
throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException );
/** Returns the attributes of the specified character. */
virtual PropertyValueSeq SAL_CALL getCharacterAttributes( sal_Int32 nIndex, const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aRequestedAttributes )
throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException );
/** Returns the screen coordinates of the specified character. */
virtual AwtRectangle SAL_CALL getCharacterBounds( sal_Int32 nIndex )
throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException );
/** Returns the count of characters. */
virtual sal_Int32 SAL_CALL getCharacterCount() throw( ::com::sun::star::uno::RuntimeException );
/** Returns the character index at the specified coordinate (object's coordinate system). */
virtual sal_Int32 SAL_CALL getIndexAtPoint( const AwtPoint& rPoint )
throw( ::com::sun::star::uno::RuntimeException );
/** Returns the selected text (ruler returns empty string). */
virtual ::rtl::OUString SAL_CALL getSelectedText() throw( ::com::sun::star::uno::RuntimeException );
/** Returns the start index of the selection (ruler returns -1). */
virtual sal_Int32 SAL_CALL getSelectionStart() throw( ::com::sun::star::uno::RuntimeException );
/** Returns the end index of the selection (ruler returns -1). */
virtual sal_Int32 SAL_CALL getSelectionEnd() throw( ::com::sun::star::uno::RuntimeException );
/** Selects a part of the text (ruler does nothing). */
virtual sal_Bool SAL_CALL setSelection( sal_Int32 nStartIndex, sal_Int32 nEndIndex )
throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException );
/** Returns the entire text. */
virtual ::rtl::OUString SAL_CALL getText() throw( ::com::sun::star::uno::RuntimeException );
/** Returns the specified range [Start,End) of the text. */
virtual ::rtl::OUString SAL_CALL getTextRange( sal_Int32 nStartIndex, sal_Int32 nEndIndex )
throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException );
/** Returns the specified text portion. */
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);
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);
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);
/** Copies the specified text range into the clipboard (ruler does nothing). */
virtual sal_Bool SAL_CALL copyText( sal_Int32 nStartIndex, sal_Int32 nEndIndex )
throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException );
// XInterface -------------------------------------------------------------
virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type& rType )
throw( ::com::sun::star::uno::RuntimeException );
virtual void SAL_CALL acquire() throw();
virtual void SAL_CALL release() throw();
// XServiceInfo -----------------------------------------------------------
/** Returns an identifier for the implementation of this object. */
virtual ::rtl::OUString SAL_CALL getImplementationName()
throw( ::com::sun::star::uno::RuntimeException );
// XTypeProvider ----------------------------------------------------------
/** Returns a sequence with all supported interface types. */
virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes()
throw( ::com::sun::star::uno::RuntimeException );
/** Returns an implementation ID. */
virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId()
throw( ::com::sun::star::uno::RuntimeException );
// events -----------------------------------------------------------------
public:
/** Sends a caret changed event to all listeners. */
virtual void SendCaretEvent();
// helpers ----------------------------------------------------------------
private:
/** Returns this object's name. */
virtual ::rtl::OUString SAL_CALL createAccessibleName()
throw( ::com::sun::star::uno::RuntimeException );
/** Returns this object's description. */
virtual ::rtl::OUString SAL_CALL createAccessibleDescription()
throw( ::com::sun::star::uno::RuntimeException );
/** Throws an exception, if the specified character position is invalid (outside 0..len-1). */
void ensureValidIndex( sal_Int32 nIndex ) const
throw( ::com::sun::star::lang::IndexOutOfBoundsException );
/** Throws an exception, if the specified character position is invalid (outside 0..len). */
void ensureValidIndexWithEnd( sal_Int32 nIndex ) const
throw( ::com::sun::star::lang::IndexOutOfBoundsException );
/** Throws an exception, if the specified character range [Start,End) is invalid.
@descr If Start>End, swaps Start and End before checking. */
void ensureValidRange( sal_Int32& rnStartIndex, sal_Int32& rnEndIndex ) const
throw( ::com::sun::star::lang::IndexOutOfBoundsException );
/** Returns the VCL ruler control. Assumes a living object. */
ScCsvRuler& implGetRuler() const;
/** Builds the entire string buffer. */
void constructStringBuffer() throw( ::com::sun::star::uno::RuntimeException );
/** Returns the character count of the text. */
sal_Int32 implGetTextLength() const;
/** Returns true, if the character at the specified index has a split. */
bool implHasSplit( sal_Int32 nApiPos );
/** Returns the first character index with equal formatting as at nApiPos. */
sal_Int32 implGetFirstEqualFormatted( sal_Int32 nApiPos );
/** Returns the last character index with equal formatting as at nApiPos. */
sal_Int32 implGetLastEqualFormatted( sal_Int32 nApiPos );
};
// ============================================================================
class ScCsvGrid;
typedef ::cppu::ImplHelper2<
::com::sun::star::accessibility::XAccessibleTable,
::com::sun::star::accessibility::XAccessibleSelection >
ScAccessibleCsvGridImpl;
/** Accessible class representing the CSV grid control. */
class ScAccessibleCsvGrid : public ScAccessibleCsvControl, public ScAccessibleCsvGridImpl
{
protected:
typedef ::com::sun::star::uno::Reference<
::com::sun::star::accessibility::XAccessibleTable > XAccessibleTableRef;
public:
explicit ScAccessibleCsvGrid( ScCsvGrid& rGrid );
virtual ~ScAccessibleCsvGrid();
// XAccessibleComponent ---------------------------------------------------
/** Returns the cell at the specified point. */
virtual XAccessibleRef SAL_CALL getAccessibleAtPoint( const AwtPoint& rPoint )
throw( ::com::sun::star::uno::RuntimeException );
virtual sal_Int32 SAL_CALL getForeground( )
throw (::com::sun::star::uno::RuntimeException);
virtual sal_Int32 SAL_CALL getBackground( )
throw (::com::sun::star::uno::RuntimeException);
// XAccessibleContext -----------------------------------------------------
/** Returns the child count (count of cells in the table). */
virtual sal_Int32 SAL_CALL getAccessibleChildCount()
throw( ::com::sun::star::uno::RuntimeException );
/** Returns the specified child cell. */
virtual XAccessibleRef SAL_CALL getAccessibleChild( sal_Int32 nIndex )
throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException );
/** Returns the relation to the ruler control. */
virtual XAccessibleRelationSetRef SAL_CALL getAccessibleRelationSet()
throw( ::com::sun::star::uno::RuntimeException );
/** Returns the current set of states. */
virtual XAccessibleStateSetRef SAL_CALL getAccessibleStateSet()
throw( ::com::sun::star::uno::RuntimeException );
// XAccessibleTable -------------------------------------------------------
/** Returns the number of rows in the table. */
virtual sal_Int32 SAL_CALL getAccessibleRowCount()
throw( ::com::sun::star::uno::RuntimeException );
/** Returns the number of columns in the table. */
virtual sal_Int32 SAL_CALL getAccessibleColumnCount()
throw( ::com::sun::star::uno::RuntimeException );
/** Returns the description of the specified row in the table. */
virtual ::rtl::OUString SAL_CALL getAccessibleRowDescription( sal_Int32 nRow )
throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException );
/** Returns the description text of the specified column in the table. */
virtual ::rtl::OUString SAL_CALL getAccessibleColumnDescription( sal_Int32 nColumn )
throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException );
/** Returns the number of rows occupied at a specified row and column.
@descr Returns always 1 (Merged cells not supported). */
virtual sal_Int32 SAL_CALL getAccessibleRowExtentAt( sal_Int32 nRow, sal_Int32 nColumn )
throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException );
/** Returns the number of rows occupied at a specified row and column.
@descr Returns always 1 (Merged cells not supported). */
virtual sal_Int32 SAL_CALL getAccessibleColumnExtentAt( sal_Int32 nRow, sal_Int32 nColumn )
throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException );
/** Returns the row headers as an AccessibleTable. */
virtual XAccessibleTableRef SAL_CALL getAccessibleRowHeaders()
throw( ::com::sun::star::uno::RuntimeException );
/** Returns the column headers as an AccessibleTable. */
virtual XAccessibleTableRef SAL_CALL getAccessibleColumnHeaders()
throw( ::com::sun::star::uno::RuntimeException );
/** Returns the selected rows as a sequence. */
virtual ::com::sun::star::uno::Sequence< sal_Int32 > SAL_CALL getSelectedAccessibleRows()
throw( ::com::sun::star::uno::RuntimeException );
/** Returns the selected columns as a sequence. */
virtual ::com::sun::star::uno::Sequence< sal_Int32 > SAL_CALL getSelectedAccessibleColumns()
throw( ::com::sun::star::uno::RuntimeException );
/** Returns true, if the specified row is selected. */
virtual sal_Bool SAL_CALL isAccessibleRowSelected( sal_Int32 nRow )
throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException );
/** Returns true, if the specified column is selected. */
virtual sal_Bool SAL_CALL isAccessibleColumnSelected( sal_Int32 nColumn )
throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException );
/** Returns the accessible cell object at the specified position. */
virtual XAccessibleRef SAL_CALL getAccessibleCellAt( sal_Int32 nRow, sal_Int32 nColumn )
throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException );
/** Returns the caption object of the table. */
virtual XAccessibleRef SAL_CALL getAccessibleCaption()
throw( ::com::sun::star::uno::RuntimeException );
/** Returns the summary description object of the table. */
virtual XAccessibleRef SAL_CALL getAccessibleSummary()
throw( ::com::sun::star::uno::RuntimeException );
/** Returns true, if the cell at a specified position is selected. */
virtual sal_Bool SAL_CALL isAccessibleSelected( sal_Int32 nRow, sal_Int32 nColumn )
throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException );
/** Returns the child index of the cell at the specified position. */
virtual sal_Int32 SAL_CALL getAccessibleIndex( sal_Int32 nRow, sal_Int32 nColumn )
throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException );
/** Returns the row index of the specified child. */
virtual sal_Int32 SAL_CALL getAccessibleRow( sal_Int32 nChildIndex )
throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException );
/** Returns the column index of the specified child. */
virtual sal_Int32 SAL_CALL getAccessibleColumn( sal_Int32 nChildIndex )
throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException );
// XAccessibleSelection ---------------------------------------------------
/** Selects the specified child (selects the entire column or the entire table). */
virtual void SAL_CALL selectAccessibleChild( sal_Int32 nChildIndex )
throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException );
/** Returns true, if the specified child is selected. */
virtual sal_Bool SAL_CALL isAccessibleChildSelected( sal_Int32 nChildIndex )
throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException );
/** Deselects all cells. */
virtual void SAL_CALL clearAccessibleSelection()
throw( ::com::sun::star::uno::RuntimeException );
/** Selects all cells. */
virtual void SAL_CALL selectAllAccessibleChildren()
throw( ::com::sun::star::uno::RuntimeException );
/** Returns the count of selected children. */
virtual sal_Int32 SAL_CALL getSelectedAccessibleChildCount()
throw( ::com::sun::star::uno::RuntimeException );
/** Returns the child with the specified index in all selected children. */
virtual XAccessibleRef SAL_CALL getSelectedAccessibleChild( sal_Int32 nSelectedChildIndex )
throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException );
/** Deselects the child with the specified index in all selected children. */
virtual void SAL_CALL deselectAccessibleChild( sal_Int32 nSelectedChildIndex )
throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException );
// XInterface -------------------------------------------------------------
virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type& rType )
throw( ::com::sun::star::uno::RuntimeException );
virtual void SAL_CALL acquire() throw();
virtual void SAL_CALL release() throw();
// XServiceInfo -----------------------------------------------------------
/** Returns an identifier for the implementation of this object. */
virtual ::rtl::OUString SAL_CALL getImplementationName()
throw( ::com::sun::star::uno::RuntimeException );
// XTypeProvider ----------------------------------------------------------
/** Returns a sequence with all supported interface types. */
virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes()
throw( ::com::sun::star::uno::RuntimeException );
/** Returns an implementation ID. */
virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId()
throw( ::com::sun::star::uno::RuntimeException );
// events -----------------------------------------------------------------
public:
/** Sends a GetFocus or LoseFocus event to all listeners. */
virtual void SendFocusEvent( bool bFocused );
/** Sends a table model changed event for changed cell contents to all listeners. */
virtual void SendTableUpdateEvent( sal_uInt32 nFirstColumn, sal_uInt32 nLastColumn, bool bAllRows );
/** Sends a table model changed event for an inserted column to all listeners. */
virtual void SendInsertColumnEvent( sal_uInt32 nFirstColumn, sal_uInt32 nLastColumn );
/** Sends a table model changed event for a removed column to all listeners. */
virtual void SendRemoveColumnEvent( sal_uInt32 nFirstColumn, sal_uInt32 nLastColumn );
// helpers ----------------------------------------------------------------
private:
/** Returns this object's name. */
virtual ::rtl::OUString SAL_CALL createAccessibleName()
throw( ::com::sun::star::uno::RuntimeException );
/** Returns this object's description. */
virtual ::rtl::OUString SAL_CALL createAccessibleDescription()
throw( ::com::sun::star::uno::RuntimeException );
/** Throws an exception, if nIndex is not a valid child index. */
void ensureValidIndex( sal_Int32 nIndex ) const
throw( ::com::sun::star::lang::IndexOutOfBoundsException );
/** Throws an exception, if the specified position is invalid. */
void ensureValidPosition( sal_Int32 nRow, sal_Int32 nColumn ) const
throw( ::com::sun::star::lang::IndexOutOfBoundsException );
/** Returns the VCL grid control. Assumes a living object. */
ScCsvGrid& implGetGrid() const;
/** Returns true, if the specified column (including header) is selected. */
bool implIsColumnSelected( sal_Int32 nColumn ) const;
/** Selects the specified column (including header). */
void implSelectColumn( sal_Int32 nColumn, bool bSelect );
/** Returns the count of visible rows in the table (including header). */
sal_Int32 implGetRowCount() const;
/** Returns the total column count in the table (including header). */
sal_Int32 implGetColumnCount() const;
/** Returns the count of selected columns in the table. */
sal_Int32 implGetSelColumnCount() const;
/** Returns the total cell count in the table (including header). */
inline sal_Int32 implGetCellCount() const { return implGetRowCount() * implGetColumnCount(); }
/** Returns the row index from cell index (including header). */
inline sal_Int32 implGetRow( sal_Int32 nIndex ) const { return nIndex / implGetColumnCount(); }
/** Returns the column index from cell index (including header). */
inline sal_Int32 implGetColumn( sal_Int32 nIndex ) const { return nIndex % implGetColumnCount(); }
/** Returns the absolute column index of the nSelColumn-th selected column. */
sal_Int32 implGetSelColumn( sal_Int32 nSelColumn ) const;
/** Returns the child index from cell position (including header). */
inline sal_Int32 implGetIndex( sal_Int32 nRow, sal_Int32 nColumn ) const { return nRow * implGetColumnCount() + nColumn; }
/** Returns the contents of the specified cell (including header). Indexes must be valid. */
String implGetCellText( sal_Int32 nRow, sal_Int32 nColumn ) const;
/** Creates a new accessible object of the specified cell. Indexes must be valid. */
ScAccessibleCsvControl* implCreateCellObj( sal_Int32 nRow, sal_Int32 nColumn ) const;
};
// ============================================================================
/** Accessible class representing a cell of the CSV grid control. */
class ScAccessibleCsvCell : public ScAccessibleCsvControl, public accessibility::AccessibleStaticTextBase
{
protected:
typedef ::com::sun::star::uno::Sequence<
::com::sun::star::beans::PropertyValue > PropertyValueSeq;
typedef ::std::auto_ptr< SvxEditSource > SvxEditSourcePtr;
private:
String maCellText; /// The text contents of this cell.
sal_Int32 mnLine; /// The grid line index (core index).
sal_uInt32 mnColumn; /// The grid column index (core index).
sal_Int32 mnIndex; /// The index of the cell in the table.
public:
explicit ScAccessibleCsvCell(
ScCsvGrid& rGrid,
const String& rCellText,
sal_Int32 nRow, sal_Int32 nColumn );
virtual ~ScAccessibleCsvCell();
using ScAccessibleCsvControl::disposing;
virtual void SAL_CALL disposing();
// XAccessibleComponent ---------------------------------------------------
/** Sets the focus to the column of this cell. */
virtual void SAL_CALL grabFocus() throw( ::com::sun::star::uno::RuntimeException );
virtual sal_Int32 SAL_CALL getForeground( )
throw (::com::sun::star::uno::RuntimeException);
virtual sal_Int32 SAL_CALL getBackground( )
throw (::com::sun::star::uno::RuntimeException);
// XAccessibleContext -----------------------------------------------------
/** Returns the child count. */
virtual sal_Int32 SAL_CALL getAccessibleChildCount()
throw( ::com::sun::star::uno::RuntimeException );
/** Returns the specified child. */
virtual XAccessibleRef SAL_CALL getAccessibleChild( sal_Int32 nIndex )
throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException );
/** Returns the index of this cell in the table. */
virtual sal_Int32 SAL_CALL getAccessibleIndexInParent()
throw( ::com::sun::star::uno::RuntimeException );
/** Returns the relation to the ruler control. */
virtual XAccessibleRelationSetRef SAL_CALL getAccessibleRelationSet()
throw( ::com::sun::star::uno::RuntimeException );
/** Returns the current set of states. */
virtual XAccessibleStateSetRef SAL_CALL getAccessibleStateSet()
throw( ::com::sun::star::uno::RuntimeException );
// XInterface -------------------------------------------------------------
DECLARE_XINTERFACE()
// XTypeProvider ----------------------------------------------------------
DECLARE_XTYPEPROVIDER()
// XServiceInfo -----------------------------------------------------------
/** Returns an identifier for the implementation of this object. */
virtual ::rtl::OUString SAL_CALL getImplementationName()
throw( ::com::sun::star::uno::RuntimeException );
// helpers ----------------------------------------------------------------
protected:
/** Returns this object's current bounding box relative to the desktop. */
virtual Rectangle GetBoundingBoxOnScreen() const throw( ::com::sun::star::uno::RuntimeException );
/** Returns this object's current bounding box relative to the parent object. */
virtual Rectangle GetBoundingBox() const throw( ::com::sun::star::uno::RuntimeException );
private:
/** Returns this object's name. */
virtual ::rtl::OUString SAL_CALL createAccessibleName()
throw( ::com::sun::star::uno::RuntimeException );
/** Returns this object's description. */
virtual ::rtl::OUString SAL_CALL createAccessibleDescription()
throw( ::com::sun::star::uno::RuntimeException );
/** Returns the VCL grid control. Assumes a living object. */
ScCsvGrid& implGetGrid() const;
/** Returns the pixel position of the cell (rel. to parent), regardless of visibility. */
Point implGetRealPos() const;
/** Returns the width of the character count */
sal_uInt32 implCalcPixelWidth(sal_uInt32 nChars) const;
/** Returns the pixel size of the cell, regardless of visibility. */
Size implGetRealSize() const;
/** Returns the bounding box of the cell relative in the table. */
Rectangle implGetBoundingBox() const;
/** Creates the edit source the text helper needs. */
::std::auto_ptr< SvxEditSource > implCreateEditSource();
};
// ============================================================================
#endif