diff options
Diffstat (limited to 'binfilter/bf_sc/source/ui/inc/AccessibleCsvControl.hxx')
-rw-r--r-- | binfilter/bf_sc/source/ui/inc/AccessibleCsvControl.hxx | 683 |
1 files changed, 683 insertions, 0 deletions
diff --git a/binfilter/bf_sc/source/ui/inc/AccessibleCsvControl.hxx b/binfilter/bf_sc/source/ui/inc/AccessibleCsvControl.hxx new file mode 100644 index 000000000000..74880bcefebb --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/AccessibleCsvControl.hxx @@ -0,0 +1,683 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 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 <bf_svx/AccessibleStaticTextBase.hxx> + +#include "AccessibleContextBase.hxx" +namespace utl { class AccessibleStateSetHelper; } +namespace binfilter { + + +// ============================================================================ + +class ScCsvControl; +//STRIP008 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(); + 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 screen position rPos to a position relative to this control. */ + Point implGetRelPos( const Point& rPos ) const; + /** 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::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::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::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::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::uno::RuntimeException ); + + /** Returns true, if the specified column is selected. */ + virtual sal_Bool SAL_CALL isAccessibleColumnSelected( sal_Int32 nColumn ) + throw( ::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::uno::RuntimeException ); + + // XAccessibleExtendedTable ----------------------------------------------- + + /** 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::uno::RuntimeException ); + + /** Returns the row index of the specified child. */ + virtual sal_Int32 SAL_CALL getAccessibleRow( sal_Int32 nChildIndex ) + throw( ::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::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(); + 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 ------------------------------------------------------------- + + 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 ); + + // 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(); +}; + + +// ============================================================================ + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |