* AT-SPI - Assistive Technology Service Provider Interface
* (Gnome Accessibility Project; http://developer.gnome.org/projects/gap)
*
- * Copyright 2001 Sun Microsystems Inc.
+ * Copyright 2001, 2002 Sun Microsystems Inc.,
+ * Copyright 2001, 2002 Ximian, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
{
SpiTable *new_table = g_object_new (SPI_TABLE_TYPE, NULL);
- spi_base_construct (SPI_BASE (new_table), obj);
+ spi_base_construct (SPI_BASE (new_table), G_OBJECT(obj));
return new_table;
}
{
SpiBase *object = SPI_BASE (bonobo_object_from_servant (servant));
- if (!object)
- {
- return NULL;
- }
-
- return ATK_TABLE (object->atko);
+ g_return_val_if_fail (object, NULL);
+ g_return_val_if_fail (ATK_IS_OBJECT(object->gobj), NULL);
+ return ATK_TABLE (object->gobj);
}
g_return_val_if_fail (table != NULL, 0);
- return (CORBA_long) atk_table_get_n_rows (table);
+ return atk_table_get_n_rows (table);
}
g_return_val_if_fail (table != NULL, 0);
- return (CORBA_long) atk_table_get_n_columns (table);
+ return atk_table_get_n_columns (table);
}
g_return_val_if_fail (table != NULL, CORBA_OBJECT_NIL);
- atk_object = atk_table_ref_at (table,
- (gint) row, (gint) column);
+ atk_object = atk_table_ref_at (table, row, column);
return spi_accessible_new_return (atk_object, TRUE, ev);
}
g_return_val_if_fail (table != NULL, 0);
- return (CORBA_long)
- atk_table_get_index_at (table, (gint) row, (gint) column);
+ return atk_table_get_index_at (table, row, column);
}
g_return_val_if_fail (table != NULL, 0);
- return (CORBA_long)
- atk_table_get_row_at_index (table, (gint) index);
+ return atk_table_get_row_at_index (table, index);
}
g_return_val_if_fail (table != NULL, 0);
- return (CORBA_long)
- atk_table_get_column_at_index (table, (gint) index);
+ return atk_table_get_column_at_index (table, index);
}
const char *rv;
AtkTable *table = get_table_from_servant (servant);
- g_return_val_if_fail (table != NULL, 0);
+ g_return_val_if_fail (table != NULL, NULL);
rv = atk_table_get_row_description (table, row);
g_return_val_if_fail (table != NULL, CORBA_string_dup (""));
- rv = atk_table_get_row_description (table, column);
+ rv = atk_table_get_column_description (table, column);
if (rv)
{
g_return_val_if_fail (table != NULL, -1);
- return (CORBA_long)
- atk_table_get_row_extent_at (table,
- (gint) row, (gint) column);
+ return atk_table_get_row_extent_at (table, row, column);
}
g_return_val_if_fail (table != NULL, -1);
- return (CORBA_long)
- atk_table_get_column_extent_at (table,
- (gint) row, (gint) column);
+ return atk_table_get_column_extent_at (table, row, column);
}
g_return_val_if_fail (table != NULL, CORBA_OBJECT_NIL);
- header = atk_table_get_row_header (table, (gint) row);
+ header = atk_table_get_row_header (table, row);
return spi_accessible_new_return (header, FALSE, ev);
}
g_return_val_if_fail (table != NULL, CORBA_OBJECT_NIL);
- header = atk_table_get_column_header (table, (gint) column);
+ header = atk_table_get_column_header (table, column);
return spi_accessible_new_return (header, FALSE, ev);
}
+static CORBA_long
+impl__get_nSelectedRows (PortableServer_Servant servant,
+ CORBA_Environment *ev)
+{
+ gint *selectedRows = NULL;
+ gint retval = 0;
+ AtkTable *table = get_table_from_servant (servant);
+
+ bonobo_return_val_if_fail (table != NULL, 0, ev);
+
+ retval = atk_table_get_selected_rows (table, &selectedRows);
+ if (selectedRows) g_free (selectedRows);
+ return retval;
+}
+
+
+static CORBA_long
+impl__get_nSelectedColumns (PortableServer_Servant servant,
+ CORBA_Environment *ev)
+{
+ gint *selectedColumns = NULL;
+ gint retval = 0;
+ AtkTable *table = get_table_from_servant (servant);
+
+ bonobo_return_val_if_fail (table != NULL, 0, ev);
+
+ retval = atk_table_get_selected_columns (table, &selectedColumns);
+ if (selectedColumns) g_free (selectedColumns);
+ return retval;
+}
static Accessibility_LongSeq *
impl_getSelectedRows (PortableServer_Servant servant,
CORBA_Environment *ev)
{
- gint *selectedRows;
+ gint *selectedRows = NULL;
gint length;
Accessibility_LongSeq *retval;
AtkTable *table = get_table_from_servant (servant);
length = atk_table_get_selected_rows (table, &selectedRows);
- bonobo_return_val_if_fail (length > 0, NULL, ev);
+ bonobo_return_val_if_fail (length >= 0, NULL, ev);
retval = Accessibility_LongSeq__alloc ();
- retval->_maximum = retval->_length = (CORBA_long) length;
+ retval->_maximum = retval->_length = length;
retval->_buffer = Accessibility_LongSeq_allocbuf (length);
- while (--length)
+ while (--length >= 0)
{
- retval->_buffer[length] = (CORBA_long) selectedRows[length];
+ retval->_buffer[length] = selectedRows[length];
}
- g_free ((gpointer) selectedRows);
+ if (selectedRows) g_free (selectedRows);
return retval;
}
impl_getSelectedColumns (PortableServer_Servant servant,
CORBA_Environment *ev)
{
- gint *selectedColumns;
+ gint *selectedColumns = NULL;
gint length;
Accessibility_LongSeq *retval;
AtkTable *table = get_table_from_servant (servant);
bonobo_return_val_if_fail (length >= 0, NULL, ev);
retval = Accessibility_LongSeq__alloc ();
- retval->_maximum = retval->_length = (CORBA_long) length;
+ retval->_maximum = retval->_length = length;
retval->_buffer = Accessibility_LongSeq_allocbuf (length);
- while (--length)
+ while (--length >= 0)
{
retval->_buffer[length] = (CORBA_long) selectedColumns[length];
}
- g_free ((gpointer) selectedColumns);
+ if (selectedColumns) g_free (selectedColumns);
return retval;
}
g_return_val_if_fail (table != NULL, FALSE);
- return (CORBA_boolean) atk_table_is_row_selected (table, (gint) row);
+ return atk_table_is_row_selected (table, row);
}
g_return_val_if_fail (table != NULL, FALSE);
- return (CORBA_boolean) atk_table_is_column_selected (table, (gint) column);
+ return atk_table_is_column_selected (table, column);
+}
+
+static CORBA_boolean
+impl_addRowSelection (PortableServer_Servant servant,
+ const CORBA_long row,
+ CORBA_Environment *ev)
+{
+ AtkTable *table = get_table_from_servant (servant);
+
+ g_return_val_if_fail (table != NULL, FALSE);
+
+ return atk_table_add_row_selection (table, row);
+}
+
+
+static CORBA_boolean
+impl_addColumnSelection (PortableServer_Servant servant,
+ const CORBA_long column,
+ CORBA_Environment *ev)
+{
+ AtkTable *table = get_table_from_servant (servant);
+
+ g_return_val_if_fail (table != NULL, FALSE);
+
+ return atk_table_add_column_selection (table, column);
}
static CORBA_boolean
+impl_removeRowSelection (PortableServer_Servant servant,
+ const CORBA_long row,
+ CORBA_Environment *ev)
+{
+ AtkTable *table = get_table_from_servant (servant);
+
+ g_return_val_if_fail (table != NULL, FALSE);
+
+ return atk_table_remove_row_selection (table, row);
+}
+
+
+static CORBA_boolean
+impl_removeColumnSelection (PortableServer_Servant servant,
+ const CORBA_long column,
+ CORBA_Environment *ev)
+{
+ AtkTable *table = get_table_from_servant (servant);
+
+ g_return_val_if_fail (table != NULL, FALSE);
+
+ return atk_table_remove_column_selection (table, column);
+}
+
+
+static CORBA_boolean
+impl_getRowColumnExtentsAtIndex (PortableServer_Servant servant,
+ const CORBA_long index,
+ CORBA_long *row,
+ CORBA_long *column,
+ CORBA_long *row_extents,
+ CORBA_long *col_extents,
+ CORBA_boolean *is_selected,
+ CORBA_Environment *ev)
+{
+
+ AtkObject *cell;
+ AtkRole role;
+ AtkTable *table = get_table_from_servant (servant);
+ gint intColumn, intRow, intRow_extents, intCol_extents;
+ gboolean boolIs_selected;
+
+ g_return_val_if_fail (table != NULL, FALSE);
+
+ intColumn = atk_table_get_column_at_index (table, index);
+ intRow = atk_table_get_row_at_index (table, index);
+ intRow_extents = atk_table_get_row_extent_at (table, intRow, intColumn);
+ intCol_extents = atk_table_get_column_extent_at (table, intRow, intColumn);
+ boolIs_selected = atk_table_is_selected (table, intRow, intColumn);
+
+ *column = intColumn;
+ *row = intRow;
+ *row_extents = intRow_extents;
+ *col_extents = intCol_extents;
+ *is_selected = boolIs_selected;
+
+ cell = atk_table_ref_at (table, intRow, intColumn);
+ role = atk_object_get_role (cell);
+
+ if (role == ATK_ROLE_TABLE_CELL)
+ return TRUE;
+
+ return FALSE;
+
+}
+
+static CORBA_boolean
impl_isSelected (PortableServer_Servant servant,
const CORBA_long row,
const CORBA_long column,
g_return_val_if_fail (table != NULL, FALSE);
- return (CORBA_boolean) atk_table_is_selected (table,
- (gint) row, (gint) column);
+ return atk_table_is_selected (table,
+ row, column);
}
epv->_get_summary = impl__get_summary;
epv->_get_nRows = impl__get_nRows;
epv->_get_nColumns = impl__get_nColumns;
+ epv->_get_nSelectedRows = impl__get_nSelectedRows;
+ epv->_get_nSelectedColumns = impl__get_nSelectedColumns;
epv->getAccessibleAt = impl_getAccessibleAt;
epv->getIndexAt = impl_getIndexAt;
epv->getRowAtIndex = impl_getRowAtIndex;
epv->getSelectedColumns = impl_getSelectedColumns;
epv->isRowSelected = impl_isRowSelected;
epv->isColumnSelected = impl_isColumnSelected;
+ epv->addRowSelection = impl_addRowSelection;
+ epv->addColumnSelection = impl_addColumnSelection;
+ epv->removeRowSelection = impl_removeRowSelection;
+ epv->removeColumnSelection = impl_removeColumnSelection;
epv->isSelected = impl_isSelected;
+ epv->getRowColumnExtentsAtIndex = impl_getRowColumnExtentsAtIndex;
}
static void
BONOBO_TYPE_FUNC_FULL (SpiTable,
Accessibility_Table,
SPI_TYPE_BASE,
- spi_table);
+ spi_table)