diff options
author | RĂ¼diger Timm <rt@openoffice.org> | 2006-05-05 09:57:04 +0000 |
---|---|---|
committer | RĂ¼diger Timm <rt@openoffice.org> | 2006-05-05 09:57:04 +0000 |
commit | 259f7ba3ea2f9cfc32a078bcdcfb07d226db32c9 (patch) | |
tree | 68199380f1a6d825ac4789a9938d40b588936f1a /vcl/unx/gtk/a11y/atktable.cxx | |
parent | 1bbd1956336fd099ece91996b7e78cfea56f9a5d (diff) |
INTEGRATION: CWS atkbridge (1.1.2); FILE ADDED
2006/03/31 12:19:39 obr 1.1.2.8: #i63583# eliminated warnings
2006/02/15 10:58:28 obr 1.1.2.7: #i47890# added tracing capabilities
2006/01/12 13:56:12 obr 1.1.2.6: #i47890# Solaris compile fixes
2005/12/19 08:05:07 obr 1.1.2.5: #i47890# AtkTable updates
2005/10/20 07:09:11 obr 1.1.2.4: #i47890# made cxx files standalone, avoid queryInterface on each API call and demacrofied try/catch to include appropriate warnings
2005/09/28 07:24:13 obr 1.1.2.3: #i47890# changed ref-counting/life cycle once again, adjust tree and role of dialogs and filter sub-menu windows
2005/09/26 11:01:01 obr 1.1.2.2: #i47890# reworked lifecycle of atk wrapper objects
2005/04/21 17:25:00 mmeeks 1.1.2.1: Issue number: i#47890#
Submitted by: mmeeks
Add basic AtkTable support ...
Diffstat (limited to 'vcl/unx/gtk/a11y/atktable.cxx')
-rw-r--r-- | vcl/unx/gtk/a11y/atktable.cxx | 726 |
1 files changed, 726 insertions, 0 deletions
diff --git a/vcl/unx/gtk/a11y/atktable.cxx b/vcl/unx/gtk/a11y/atktable.cxx new file mode 100644 index 000000000000..91f0a2cf1a1e --- /dev/null +++ b/vcl/unx/gtk/a11y/atktable.cxx @@ -0,0 +1,726 @@ +/************************************************************************* + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: atktable.cxx,v $ + * + * $Revision: 1.2 $ + * + * last change: $Author: rt $ $Date: 2006-05-05 10:57:04 $ + * + * The Contents of this file are made available subject to + * the terms of GNU Lesser General Public License Version 2.1. + * + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2005 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + ************************************************************************/ + +#include "atkwrapper.hxx" + +#include <com/sun/star/accessibility/XAccessibleTable.hpp> + +#ifdef ENABLE_TRACING +#include <stdio.h> +#endif + +using namespace ::com::sun::star; + +static inline AtkObject * +atk_object_wrapper_conditional_ref( const uno::Reference< accessibility::XAccessible >& rxAccessible ) +{ +#ifdef ENABLE_TRACING + fprintf( stderr, ": %p\n", rxAccessible.get() ); +#endif + + if( rxAccessible.is() ) + return atk_object_wrapper_ref( rxAccessible ); + + return NULL; +} + +/*****************************************************************************/ + +// FIXME +static G_CONST_RETURN gchar * +getAsConst( rtl::OUString rString ) +{ + static const int nMax = 10; + static rtl::OString aUgly[nMax]; + static int nIdx = 0; + nIdx = (nIdx + 1) % nMax; + aUgly[nIdx] = rtl::OUStringToOString( rString, RTL_TEXTENCODING_UTF8 ); + return aUgly[ nIdx ]; +} + +/*****************************************************************************/ + +static accessibility::XAccessibleTable* + getTable( AtkTable *pTable ) throw (uno::RuntimeException) +{ + AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( pTable ); + if( pWrap ) + { + if( !pWrap->mpTable && pWrap->mpContext ) + { + uno::Any any = pWrap->mpContext->queryInterface( accessibility::XAccessibleTable::static_type(NULL) ); + pWrap->mpTable = reinterpret_cast< accessibility::XAccessibleTable * > (any.pReserved); + pWrap->mpTable->acquire(); + } + + return pWrap->mpTable; + } + + return NULL; +} + +/*****************************************************************************/ + +extern "C" { + +static AtkObject* +table_wrapper_ref_at (AtkTable *table, + gint row, + gint column) +{ + try { + accessibility::XAccessibleTable* pTable = getTable( table ); + +#ifdef ENABLE_TRACING + if( pTable ) + fprintf(stderr, "getAccessibleCellAt( %u, %u ) returns", row, column ); + + if( column >= 255 ) + fprintf(stderr, "getAccessibleCellAt( %u, %u ) returns", row, column ); + +#endif + + if( pTable ) + return atk_object_wrapper_conditional_ref( pTable->getAccessibleCellAt( row, column ) ); + } + + catch(const uno::Exception& e) { + g_warning( "Exception in getAccessibleCellAt()" ); + } + + return NULL; +} + +/*****************************************************************************/ + +static gint +table_wrapper_get_index_at (AtkTable *table, + gint row, + gint column) +{ + try { + accessibility::XAccessibleTable* pTable = getTable( table ); + +#ifdef ENABLE_TRACING + if( pTable ) + fprintf(stderr, "getAccessibleIndex( %u, %u ) returns %u\n", + row, column, pTable->getAccessibleIndex( row, column ) ); +#endif + + if( pTable ) + return pTable->getAccessibleIndex( row, column ); + } + catch(const uno::Exception& e) { + g_warning( "Exception in getAccessibleIndex()" ); + } + + return -1; +} + +/*****************************************************************************/ + +static gint +table_wrapper_get_column_at_index (AtkTable *table, + gint nIndex) +{ + try { + accessibility::XAccessibleTable* pTable = getTable( table ); + +#ifdef ENABLE_TRACING + if( pTable ) + fprintf(stderr, "getAccessibleColumn( %u ) returns %u\n", + nIndex, pTable->getAccessibleColumn( nIndex ) ); +#endif + + if( pTable ) + return pTable->getAccessibleColumn( nIndex ); + } + catch(const uno::Exception& e) { + g_warning( "Exception in getAccessibleColumn()" ); + } + + return -1; +} + +/*****************************************************************************/ + +static gint +table_wrapper_get_row_at_index( AtkTable *table, + gint nIndex ) +{ + try { + accessibility::XAccessibleTable* pTable = getTable( table ); + +#ifdef ENABLE_TRACING + if( pTable ) + fprintf(stderr, "getAccessibleRow( %u ) returns %u\n", + nIndex, pTable->getAccessibleRow( nIndex ) ); +#endif + + if( pTable ) + return pTable->getAccessibleRow( nIndex ); + } + catch(const uno::Exception& e) { + g_warning( "Exception in getAccessibleRow()" ); + } + + return -1; +} + +/*****************************************************************************/ + +static gint +table_wrapper_get_n_columns( AtkTable *table ) +{ + try { + accessibility::XAccessibleTable* pTable = getTable( table ); + +#ifdef ENABLE_TRACING + if( pTable ) + fprintf(stderr, "XAccessibleTable::getAccessibleColumnCount returns %u\n", + pTable->getAccessibleColumnCount() ); +#endif + + if( pTable ) + return pTable->getAccessibleColumnCount(); + } + catch(const uno::Exception& e) { + g_warning( "Exception in getAccessibleColumnCount()" ); + } + + return -1; +} + +/*****************************************************************************/ + +static gint +table_wrapper_get_n_rows( AtkTable *table ) +{ + try { + accessibility::XAccessibleTable* pTable = getTable( table ); + +#ifdef ENABLE_TRACING + if( pTable ) + fprintf(stderr, "getAccessibleRowCount() returns %u\n", + pTable->getAccessibleRowCount() ); +#endif + + if( pTable ) + return pTable->getAccessibleRowCount(); + } + catch(const uno::Exception& e) { + g_warning( "Exception in getAccessibleRowCount()" ); + } + + return -1; +} + +/*****************************************************************************/ + +static gint +table_wrapper_get_column_extent_at( AtkTable *table, + gint row, + gint column ) +{ + try { + accessibility::XAccessibleTable* pTable = getTable( table ); + +#ifdef ENABLE_TRACING + if( pTable ) + fprintf(stderr, "getAccessibleColumnExtentAt( %u, %u ) returns %u\n", + row, column, pTable->getAccessibleColumnExtentAt( row, column ) ); +#endif + + if( pTable ) + return pTable->getAccessibleColumnExtentAt( row, column ); + } + catch(const uno::Exception& e) { + g_warning( "Exception in getAccessibleColumnExtentAt()" ); + } + + return -1; +} + +/*****************************************************************************/ + +static gint +table_wrapper_get_row_extent_at( AtkTable *table, + gint row, + gint column ) +{ + try { + accessibility::XAccessibleTable* pTable = getTable( table ); + +#ifdef ENABLE_TRACING + if( pTable ) + fprintf(stderr, "getAccessibleRowExtentAt( %u, %u ) returns %u\n", + row, column, pTable->getAccessibleRowExtentAt( row, column ) ); +#endif + + if( pTable ) + return pTable->getAccessibleRowExtentAt( row, column ); + } + catch(const uno::Exception& e) { + g_warning( "Exception in getAccessibleRowExtentAt()" ); + } + + return -1; +} + +/*****************************************************************************/ + +static AtkObject * +table_wrapper_get_caption( AtkTable *table ) +{ + try { + accessibility::XAccessibleTable* pTable = getTable( table ); + +#ifdef ENABLE_TRACING + if( pTable ) + fprintf(stderr, "getAccessibleCaption() returns" ); +#endif + + if( pTable ) + return atk_object_wrapper_conditional_ref( pTable->getAccessibleCaption() ); + } + + catch(const uno::Exception& e) { + g_warning( "Exception in getAccessibleCaption()" ); + } + + return NULL; +} + +/*****************************************************************************/ + +static G_CONST_RETURN gchar * +table_wrapper_get_row_description( AtkTable *table, + gint row ) +{ + try { + accessibility::XAccessibleTable* pTable = getTable( table ); + +#ifdef ENABLE_TRACING + if( pTable ) + fprintf(stderr, "getAccessibleRowDescription( %u ) returns %s\n", + row, getAsConst( pTable->getAccessibleRowDescription( row ) ) ); +#endif + + if( pTable ) + return getAsConst( pTable->getAccessibleRowDescription( row ) ); + } + catch(const uno::Exception& e) { + g_warning( "Exception in getAccessibleRowDescription()" ); + } + + return NULL; +} + +/*****************************************************************************/ + +static G_CONST_RETURN gchar * +table_wrapper_get_column_description( AtkTable *table, + gint column ) +{ + try { + accessibility::XAccessibleTable* pTable = getTable( table ); + +#ifdef ENABLE_TRACING + if( pTable ) + fprintf(stderr, "getAccessibleColumnDescription( %u ) returns %s\n", + column, getAsConst( pTable->getAccessibleColumnDescription( column ) ) ); +#endif + + if( pTable ) + return getAsConst( pTable->getAccessibleColumnDescription( column ) ); + } + catch(const uno::Exception& e) { + g_warning( "Exception in getAccessibleColumnDescription()" ); + } + + return NULL; +} + +/*****************************************************************************/ + +static AtkObject * +table_wrapper_get_row_header( AtkTable *table, + gint row ) +{ + try { + accessibility::XAccessibleTable* pTable = getTable( table ); + if( pTable ) + { + uno::Reference< accessibility::XAccessibleTable > xRowHeaders( pTable->getAccessibleRowHeaders() ); + +#ifdef ENABLE_TRACING + if( xRowHeaders.is() ) + fprintf(stderr, "getAccessibleRowHeader( %u )->getAccessibleCellAt( 0, %u ) returns", + row, row ); + else + fprintf(stderr, "getAccessibleRowHeader( %u ) returns %p\n", row, xRowHeaders.get() ); +#endif + + if( xRowHeaders.is() ) + return atk_object_wrapper_conditional_ref( xRowHeaders->getAccessibleCellAt( row, 0 ) ); + } + } + catch(const uno::Exception& e) { + g_warning( "Exception in getAccessibleRowHeaders()" ); + } + + return NULL; +} + +/*****************************************************************************/ + +static AtkObject * +table_wrapper_get_column_header( AtkTable *table, + gint column ) +{ + try { + accessibility::XAccessibleTable* pTable = getTable( table ); + + if( pTable ) + { + uno::Reference< accessibility::XAccessibleTable > xColumnHeaders( pTable->getAccessibleColumnHeaders() ); + +#ifdef ENABLE_TRACING + if( xColumnHeaders.is() ) + fprintf(stderr, "getAccessibleColumnHeader( %u )->getAccessibleCellAt( 0, %u ) returns", + column, column ); + else + fprintf(stderr, "getAccessibleColumnHeader( %u ) returns %p\n", column, xColumnHeaders.get() ); +#endif + + if( xColumnHeaders.is() ) + return atk_object_wrapper_conditional_ref( xColumnHeaders->getAccessibleCellAt( 0, column ) ); + } + } + catch(const uno::Exception& e) { + g_warning( "Exception in getAccessibleColumnHeaders()" ); + } + + return NULL; +} + +/*****************************************************************************/ + +static AtkObject * +table_wrapper_get_summary( AtkTable *table ) +{ + try { + accessibility::XAccessibleTable* pTable = getTable( table ); + +#ifdef ENABLE_TRACING + if( pTable ) + fprintf(stderr, "getAccessibleSummary() returns" ); +#endif + + if( pTable ) + { + // FIXME: Summary ?? +// AtkObject* summary; + return atk_object_wrapper_conditional_ref( pTable->getAccessibleSummary() ); + } + } + catch(const uno::Exception& e) { + g_warning( "Exception in getAccessibleSummary()" ); + } + + return NULL; +} + +/*****************************************************************************/ + +static gint +convertToGIntArray( const uno::Sequence< ::sal_Int32 >& aSequence, gint **pSelected ) +{ + if( aSequence.getLength() ) + { + *pSelected = g_new( gint, aSequence.getLength() ); + + for( sal_Int32 i = 0; i < aSequence.getLength(); i++ ) + (*pSelected) [i] = aSequence[i]; + } + + return aSequence.getLength(); +} + +/*****************************************************************************/ + +static gint +table_wrapper_get_selected_columns( AtkTable *table, + gint **pSelected ) +{ + *pSelected = NULL; + try { + accessibility::XAccessibleTable* pTable = getTable( table ); + +#ifdef ENABLE_TRACING + if( pTable ) + fprintf(stderr, "getSelectedAccessibleColumns() \n" ); +#endif + + if( pTable ) + return convertToGIntArray( pTable->getSelectedAccessibleColumns(), pSelected ); + } + catch(const uno::Exception& e) { + g_warning( "Exception in getSelectedAccessibleColumns()" ); + } + + return 0; +} + +/*****************************************************************************/ + +static gint +table_wrapper_get_selected_rows( AtkTable *table, + gint **pSelected ) +{ + *pSelected = NULL; + try { + accessibility::XAccessibleTable* pTable = getTable( table ); + +#ifdef ENABLE_TRACING + if( pTable ) + fprintf(stderr, "getSelectedAccessibleRows() \n" ); +#endif + + if( pTable ) + return convertToGIntArray( pTable->getSelectedAccessibleRows(), pSelected ); + } + catch(const uno::Exception& e) { + g_warning( "Exception in getSelectedAccessibleRows()" ); + } + + return 0; +} + +/*****************************************************************************/ + +static gboolean +table_wrapper_is_column_selected( AtkTable *table, + gint column ) +{ + try { + accessibility::XAccessibleTable* pTable = getTable( table ); + +#ifdef ENABLE_TRACING + if( pTable ) + fprintf(stderr, "isAccessibleColumnSelected( %u ) returns %s\n", + column, pTable->isAccessibleColumnSelected( column ) ? "true" : "false" ); +#endif + + if( pTable ) + return pTable->isAccessibleColumnSelected( column ); + } + catch(const uno::Exception& e) { + g_warning( "Exception in isAccessibleColumnSelected()" ); + } + + return 0; +} + +/*****************************************************************************/ + +static gboolean +table_wrapper_is_row_selected( AtkTable *table, + gint row ) +{ + try { + accessibility::XAccessibleTable* pTable = getTable( table ); + +#ifdef ENABLE_TRACING + if( pTable ) + fprintf(stderr, "isAccessibleRowSelected( %u ) returns %s\n", + row, pTable->isAccessibleRowSelected( row ) ? "true" : "false" ); +#endif + + if( pTable ) + return pTable->isAccessibleRowSelected( row ); + } + catch(const uno::Exception& e) { + g_warning( "Exception in isAccessibleRowSelected()" ); + } + + return FALSE; +} + +/*****************************************************************************/ + +static gboolean +table_wrapper_is_selected( AtkTable *table, + gint row, + gint column ) +{ + try { + accessibility::XAccessibleTable* pTable = getTable( table ); + +#ifdef ENABLE_TRACING + if( pTable ) + fprintf(stderr, "isAccessibleSelected( %u, %u ) returns %s\n", + row, column, pTable->isAccessibleSelected( row , column ) ? "true" : "false" ); +#endif + + if( pTable ) + return pTable->isAccessibleSelected( row, column ); + } + catch(const uno::Exception& e) { + g_warning( "Exception in isAccessibleSelected()" ); + } + + return FALSE; +} + +/*****************************************************************************/ + +static gboolean +table_wrapper_add_row_selection( AtkTable *, gint ) +{ + g_warning( "FIXME: no simple analogue for add_row_selection" ); + return 0; +} + +/*****************************************************************************/ + +static gboolean +table_wrapper_remove_row_selection( AtkTable *, gint ) +{ + g_warning( "FIXME: no simple analogue for remove_row_selection" ); + return 0; +} + +/*****************************************************************************/ + +static gboolean +table_wrapper_add_column_selection( AtkTable *, gint ) +{ + g_warning( "FIXME: no simple analogue for add_column_selection" ); + return 0; +} + +/*****************************************************************************/ + +static gboolean +table_wrapper_remove_column_selection( AtkTable *, gint ) +{ + g_warning( "FIXME: no simple analogue for remove_column_selection" ); + return 0; +} + +/*****************************************************************************/ + +static void +table_wrapper_set_caption( AtkTable *, AtkObject * ) +{ // meaningless helper +} + +/*****************************************************************************/ + +static void +table_wrapper_set_column_description( AtkTable *, gint, const gchar * ) +{ // meaningless helper +} + + +/*****************************************************************************/ + +static void +table_wrapper_set_column_header( AtkTable *, gint, AtkObject * ) +{ // meaningless helper +} + + +/*****************************************************************************/ + +static void +table_wrapper_set_row_description( AtkTable *, gint, const gchar * ) +{ // meaningless helper +} + +/*****************************************************************************/ + +static void +table_wrapper_set_row_header( AtkTable *, gint, AtkObject * ) +{ // meaningless helper +} + +/*****************************************************************************/ + +static void +table_wrapper_set_summary( AtkTable *, AtkObject * ) +{ // meaningless helper +} + +/*****************************************************************************/ + +} // extern "C" + +void +tableIfaceInit (AtkTableIface *iface) +{ + g_return_if_fail (iface != NULL); + + iface->ref_at = table_wrapper_ref_at; + iface->get_n_rows = table_wrapper_get_n_rows; + iface->get_n_columns = table_wrapper_get_n_columns; + iface->get_index_at = table_wrapper_get_index_at; + iface->get_column_at_index = table_wrapper_get_column_at_index; + iface->get_row_at_index = table_wrapper_get_row_at_index; + iface->is_row_selected = table_wrapper_is_row_selected; + iface->is_selected = table_wrapper_is_selected; + iface->get_selected_rows = table_wrapper_get_selected_rows; + iface->add_row_selection = table_wrapper_add_row_selection; + iface->remove_row_selection = table_wrapper_remove_row_selection; + iface->add_column_selection = table_wrapper_add_column_selection; + iface->remove_column_selection = table_wrapper_remove_column_selection; + iface->get_selected_columns = table_wrapper_get_selected_columns; + iface->is_column_selected = table_wrapper_is_column_selected; + iface->get_column_extent_at = table_wrapper_get_column_extent_at; + iface->get_row_extent_at = table_wrapper_get_row_extent_at; + iface->get_row_header = table_wrapper_get_row_header; + iface->set_row_header = table_wrapper_set_row_header; + iface->get_column_header = table_wrapper_get_column_header; + iface->set_column_header = table_wrapper_set_column_header; + iface->get_caption = table_wrapper_get_caption; + iface->set_caption = table_wrapper_set_caption; + iface->get_summary = table_wrapper_get_summary; + iface->set_summary = table_wrapper_set_summary; + iface->get_row_description = table_wrapper_get_row_description; + iface->set_row_description = table_wrapper_set_row_description; + iface->get_column_description = table_wrapper_get_column_description; + iface->set_column_description = table_wrapper_set_column_description; +} |