2 * AT-SPI - Assistive Technology Service Provider Interface
3 * (Gnome Accessibility Project; http://developer.gnome.org/projects/gap)
5 * Copyright 2001 Sun Microsystems Inc.
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Library General Public
9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Library General Public License for more details.
17 * You should have received a copy of the GNU Library General Public
18 * License along with this library; if not, write to the
19 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 * Boston, MA 02111-1307, USA.
24 * component.c : bonobo wrapper for accessible component implementation
28 #include <bonobo/Bonobo.h>
33 * This pulls the CORBA definitions for the "Accessibility::Accessible" server
35 #include <libspi/Accessibility.h>
38 * This pulls the definition of the Table bonobo object
43 * Static function declarations
47 table_class_init (TableClass *klass);
49 table_init (Table *table);
51 table_finalize (GObject *obj);
52 static Accessibility_Accessible
53 impl__get_caption (PortableServer_Servant _servant,
54 CORBA_Environment * ev);
55 static Accessibility_Accessible
56 impl__get_summary (PortableServer_Servant _servant,
57 CORBA_Environment * ev);
59 impl__get_nRows (PortableServer_Servant _servant,
60 CORBA_Environment * ev);
62 impl__get_nRows (PortableServer_Servant _servant,
63 CORBA_Environment * ev);
65 impl__get_nColumns (PortableServer_Servant _servant,
66 CORBA_Environment * ev);
67 static Accessibility_Accessible
68 impl_getAccessibleAt (PortableServer_Servant _servant,
70 const CORBA_long column,
71 CORBA_Environment * ev);
73 impl_getIndexAt (PortableServer_Servant _servant,
74 const CORBA_long row, const CORBA_long column,
75 CORBA_Environment * ev);
77 impl_getRowAtIndex (PortableServer_Servant _servant,
78 const CORBA_long index,
79 CORBA_Environment * ev);
81 impl_getColumnAtIndex (PortableServer_Servant _servant,
82 const CORBA_long index,
83 CORBA_Environment * ev);
85 impl_getRowDescription (PortableServer_Servant _servant,
87 CORBA_Environment * ev);
89 impl_getColumnDescription (PortableServer_Servant _servant,
90 const CORBA_long column,
91 CORBA_Environment * ev);
93 impl_getRowExtentAt (PortableServer_Servant _servant,
95 const CORBA_long column,
96 CORBA_Environment * ev);
98 impl_getColumnExtentAt (PortableServer_Servant _servant,
100 const CORBA_long column,
101 CORBA_Environment * ev);
102 static Accessibility_Table
103 impl_getRowHeader (PortableServer_Servant _servant,
104 const CORBA_long row,
105 CORBA_Environment * ev);
106 static Accessibility_Table
107 impl_getColumnHeader (PortableServer_Servant _servant,
108 const CORBA_long column,
109 CORBA_Environment * ev);
110 static Accessibility_LongSeq *
111 impl_getSelectedRows (PortableServer_Servant _servant,
112 CORBA_Environment * ev);
113 static Accessibility_LongSeq *
114 impl_getSelectedColumns (PortableServer_Servant _servant,
115 CORBA_Environment * ev);
117 impl_isRowSelected (PortableServer_Servant _servant,
118 const CORBA_long row,
119 CORBA_Environment * ev);
121 impl_isColumnSelected (PortableServer_Servant _servant,
122 const CORBA_long column,
123 CORBA_Environment * ev);
125 impl_isSelected (PortableServer_Servant _servant,
126 const CORBA_long row,
127 const CORBA_long column,
128 CORBA_Environment * ev);
131 static GObjectClass *parent_class;
134 table_get_type (void)
136 static GType type = 0;
139 static const GTypeInfo tinfo = {
141 (GBaseInitFunc) NULL,
142 (GBaseFinalizeFunc) NULL,
143 (GClassInitFunc) table_class_init,
144 (GClassFinalizeFunc) NULL,
145 NULL, /* class data */
148 (GInstanceInitFunc) table_init,
149 NULL /* value table */
153 * Bonobo_type_unique auto-generates a load of
154 * CORBA structures for us. All derived types must
155 * use bonobo_type_unique.
157 type = bonobo_type_unique (
159 POA_Accessibility_Table__init,
161 G_STRUCT_OFFSET (TableClass, epv),
170 table_class_init (TableClass *klass)
172 GObjectClass * object_class = (GObjectClass *) klass;
173 POA_Accessibility_Table__epv *epv = &klass->epv;
174 parent_class = g_type_class_peek_parent (klass);
176 object_class->finalize = table_finalize;
179 /* Initialize epv table */
181 epv->_get_caption = impl__get_caption;
182 epv->_get_summary = impl__get_summary;
183 epv->_get_nRows = impl__get_nRows;
184 epv->_get_nColumns = impl__get_nColumns;
185 epv->getAccessibleAt = impl_getAccessibleAt;
186 epv->getIndexAt = impl_getIndexAt;
187 epv->getRowAtIndex = impl_getRowAtIndex;
188 epv->getColumnAtIndex = impl_getColumnAtIndex;
189 epv->getRowDescription = impl_getRowDescription;
190 epv->getColumnDescription = impl_getColumnDescription;
191 epv->getRowExtentAt = impl_getRowExtentAt;
192 epv->getColumnExtentAt = impl_getColumnExtentAt;
193 epv->getRowHeader = impl_getRowHeader;
194 epv->getColumnHeader = impl_getColumnHeader;
195 epv->getSelectedRows = impl_getSelectedRows;
196 epv->getSelectedColumns = impl_getSelectedColumns;
197 epv->isRowSelected = impl_isRowSelected;
198 epv->isColumnSelected = impl_isColumnSelected;
199 epv->isSelected = impl_isSelected;
203 table_init (Table *table)
208 table_finalize (GObject *obj)
210 Table *table = TABLE (obj);
211 table->atk_table = NULL;
212 parent_class->finalize (obj);
216 table_new (AtkTable *table)
219 TABLE(g_object_new (TABLE_TYPE, NULL));
220 new_table->atk_table = table;
226 static Accessibility_Accessible
227 impl__get_caption (PortableServer_Servant _servant,
228 CORBA_Environment * ev)
230 Table *table = TABLE (bonobo_object_from_servant (_servant));
231 AtkObject *atk_object;
232 Accessibility_Accessible rv;
234 atk_object = g_object_new (ATK_TYPE_OBJECT, NULL);
235 atk_object_set_name (atk_object, atk_table_get_caption (table->atk_table));
236 rv = bonobo_object_corba_objref (BONOBO_OBJECT(accessible_new(atk_object)));
242 static Accessibility_Accessible
243 impl__get_summary (PortableServer_Servant _servant,
244 CORBA_Environment * ev)
246 Table *table = TABLE (bonobo_object_from_servant (_servant));
247 AtkObject *atk_object;
248 Accessibility_Accessible rv;
250 atk_object = atk_table_get_summary (table->atk_table);
251 rv = bonobo_object_corba_objref (BONOBO_OBJECT(accessible_new(atk_object)));
258 impl__get_nRows (PortableServer_Servant _servant,
259 CORBA_Environment * ev)
261 Table *table = TABLE (bonobo_object_from_servant (_servant));
263 atk_table_get_n_rows (table->atk_table);
269 impl__get_nColumns (PortableServer_Servant _servant,
270 CORBA_Environment * ev)
272 Table *table = TABLE (bonobo_object_from_servant (_servant));
274 atk_table_get_n_columns (table->atk_table);
279 static Accessibility_Accessible
280 impl_getAccessibleAt (PortableServer_Servant _servant,
281 const CORBA_long row,
282 const CORBA_long column,
283 CORBA_Environment * ev)
285 Table *table = TABLE (bonobo_object_from_servant (_servant));
286 AtkObject *atk_object;
287 Accessibility_Accessible rv;
289 atk_object = atk_table_ref_at (table->atk_table,
290 (gint) row, (gint) column);
291 rv = bonobo_object_corba_objref (BONOBO_OBJECT(accessible_new(atk_object)));
298 impl_getIndexAt (PortableServer_Servant _servant,
299 const CORBA_long row, const CORBA_long column,
300 CORBA_Environment * ev)
302 Table *table = TABLE (bonobo_object_from_servant (_servant));
304 atk_table_get_index_at (table->atk_table,
305 (gint) row, (gint) column);
311 impl_getRowAtIndex (PortableServer_Servant _servant,
312 const CORBA_long index,
313 CORBA_Environment * ev)
315 Table *table = TABLE (bonobo_object_from_servant (_servant));
317 atk_table_get_row_at_index (table->atk_table, (gint) index);
323 impl_getColumnAtIndex (PortableServer_Servant _servant,
324 const CORBA_long index,
325 CORBA_Environment * ev)
327 Table *table = TABLE (bonobo_object_from_servant (_servant));
329 atk_table_get_column_at_index (table->atk_table, (gint) index);
335 impl_getRowDescription (PortableServer_Servant _servant,
336 const CORBA_long row,
337 CORBA_Environment * ev)
339 Table *table = TABLE (bonobo_object_from_servant (_servant));
340 return CORBA_string_dup (
341 atk_table_get_row_description (table->atk_table, (gint) row));
347 impl_getColumnDescription (PortableServer_Servant _servant,
348 const CORBA_long column,
349 CORBA_Environment * ev)
351 Table *table = TABLE (bonobo_object_from_servant (_servant));
352 return CORBA_string_dup (
353 atk_table_get_column_description (table->atk_table, (gint) column));
359 impl_getRowExtentAt (PortableServer_Servant _servant,
360 const CORBA_long row,
361 const CORBA_long column,
362 CORBA_Environment * ev)
364 Table *table = TABLE (bonobo_object_from_servant (_servant));
366 atk_table_get_row_extent_at (table->atk_table,
367 (gint) row, (gint) column);
373 impl_getColumnExtentAt (PortableServer_Servant _servant,
374 const CORBA_long row,
375 const CORBA_long column,
376 CORBA_Environment * ev)
378 Table *table = TABLE (bonobo_object_from_servant (_servant));
380 atk_table_get_column_extent_at (table->atk_table,
381 (gint) row, (gint) column);
386 static Accessibility_Table
387 impl_getRowHeader (PortableServer_Servant _servant,
388 const CORBA_long row,
389 CORBA_Environment * ev)
391 Table *table = TABLE (bonobo_object_from_servant (_servant));
393 Accessibility_Table rv;
395 header = atk_table_get_row_header (table->atk_table, (gint) row);
396 rv = bonobo_object_corba_objref (BONOBO_OBJECT(accessible_new(header)));
402 static Accessibility_Table
403 impl_getColumnHeader (PortableServer_Servant _servant,
404 const CORBA_long column,
405 CORBA_Environment * ev)
407 Table *table = TABLE (bonobo_object_from_servant (_servant));
409 Accessibility_Table rv;
411 header = atk_table_get_column_header (table->atk_table, (gint) column);
412 rv = bonobo_object_corba_objref (BONOBO_OBJECT(accessible_new(header)));
418 static Accessibility_LongSeq *
419 impl_getSelectedRows (PortableServer_Servant _servant,
420 CORBA_Environment * ev)
422 Table *table = TABLE (bonobo_object_from_servant (_servant));
425 Accessibility_LongSeq *retval;
427 length = atk_table_get_selected_rows (table->atk_table, &selectedRows);
429 g_return_val_if_fail (length, NULL);
430 retval = Accessibility_LongSeq__alloc ();
431 retval->_maximum = retval->_length = (CORBA_long) length;
432 retval->_buffer = Accessibility_LongSeq_allocbuf (length);
435 retval->_buffer[length] = (CORBA_long) selectedRows[length];
436 g_free ((gpointer) selectedRows);
442 static Accessibility_LongSeq *
443 impl_getSelectedColumns (PortableServer_Servant _servant,
444 CORBA_Environment * ev)
446 Table *table = TABLE (bonobo_object_from_servant (_servant));
447 gint *selectedColumns;
449 Accessibility_LongSeq *retval;
451 length = atk_table_get_selected_columns (table->atk_table, &selectedColumns);
453 g_return_val_if_fail (length, NULL);
455 retval = Accessibility_LongSeq__alloc ();
456 retval->_maximum = retval->_length = (CORBA_long) length;
457 retval->_buffer = Accessibility_LongSeq_allocbuf (length);
460 retval->_buffer[length] = (CORBA_long) selectedColumns[length];
461 g_free ((gpointer) selectedColumns);
468 impl_isRowSelected (PortableServer_Servant _servant,
469 const CORBA_long row,
470 CORBA_Environment * ev)
472 Table *table = TABLE (bonobo_object_from_servant (_servant));
473 return (CORBA_boolean)
474 atk_table_is_row_selected (table->atk_table, (gint) row);
480 impl_isColumnSelected (PortableServer_Servant _servant,
481 const CORBA_long column,
482 CORBA_Environment * ev)
484 Table *table = TABLE (bonobo_object_from_servant (_servant));
485 return (CORBA_boolean)
486 atk_table_is_column_selected (table->atk_table, (gint) column);
492 impl_isSelected (PortableServer_Servant _servant,
493 const CORBA_long row,
494 const CORBA_long column,
495 CORBA_Environment * ev)
497 Table *table = TABLE (bonobo_object_from_servant (_servant));
498 return (CORBA_boolean)
499 atk_table_is_selected (table->atk_table,
500 (gint) row, (gint) column);