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.
23 /* text.c : implements the Text interface */
28 #include <libspi/text.h>
30 /* Our parent Gtk object type */
31 #define PARENT_TYPE BONOBO_TYPE_OBJECT
33 /* A pointer to our parent object class */
34 static GObjectClass *spi_text_parent_class;
37 impl_getText (PortableServer_Servant _servant,
38 const CORBA_long startOffset,
39 const CORBA_long endOffset,
40 CORBA_Environment * ev)
47 obj = (bonobo_object_from_servant (_servant));
48 g_return_val_if_fail (IS_TEXT (obj), (CORBA_char *)"");
49 text = SPI_TEXT (obj);
50 g_return_val_if_fail (ATK_IS_TEXT (text->atko), (CORBA_char *)"");
52 txt = atk_text_get_text (ATK_TEXT(text->atko),
53 (gint) startOffset, (gint) endOffset);
56 rv = CORBA_string_dup (txt);
60 rv = CORBA_string_dup ("");
67 impl_getTextAfterOffset (PortableServer_Servant _servant,
68 const CORBA_long offset,
70 Accessibility_TEXT_BOUNDARY_TYPE
71 type, CORBA_long * startOffset,
72 CORBA_long * endOffset,
73 CORBA_Environment * ev)
78 gint intStartOffset, intEndOffset;
81 obj = (bonobo_object_from_servant (_servant));
82 g_return_val_if_fail (IS_TEXT (obj), (CORBA_char *)"");
83 text = SPI_TEXT (obj);
84 g_return_val_if_fail (ATK_IS_TEXT (text->atko), (CORBA_char *)"");
86 txt = atk_text_get_text_after_offset (ATK_TEXT(text->atko),
87 (gint) offset, (AtkTextBoundary) type,
88 &intStartOffset, &intEndOffset);
89 *startOffset = (CORBA_long) intStartOffset;
90 *endOffset = (CORBA_long) intEndOffset;
94 rv = CORBA_string_dup (txt);
98 rv = CORBA_string_dup ("");
105 impl_getTextAtOffset (PortableServer_Servant _servant,
106 const CORBA_long offset,
107 const Accessibility_TEXT_BOUNDARY_TYPE type,
108 CORBA_long * startOffset,
109 CORBA_long * endOffset,
110 CORBA_Environment * ev)
115 gint intStartOffset, intEndOffset;
118 obj = (bonobo_object_from_servant (_servant));
119 g_return_val_if_fail (IS_TEXT (obj), (CORBA_char *)"");
120 text = SPI_TEXT (obj);
121 g_return_val_if_fail (ATK_IS_TEXT (text->atko), (CORBA_char *)"");
123 txt = (CORBA_char *) atk_text_get_text_at_offset (ATK_TEXT (text->atko),
124 (gint) offset, (AtkTextBoundary) type,
125 &intStartOffset, &intEndOffset);
126 *startOffset = (CORBA_long) intStartOffset;
127 *endOffset = (CORBA_long) intEndOffset;
131 rv = CORBA_string_dup (txt);
135 rv = CORBA_string_dup ("");
141 static CORBA_unsigned_long
142 impl_getCharacterAtOffset (PortableServer_Servant _servant,
143 const CORBA_long offset,
144 CORBA_Environment * ev)
148 obj = (bonobo_object_from_servant (_servant));
150 g_return_val_if_fail (IS_TEXT (obj), (CORBA_unsigned_long)0);
151 text = SPI_TEXT (obj);
152 g_return_val_if_fail (ATK_IS_TEXT (text->atko), (CORBA_unsigned_long)0);
154 return (CORBA_unsigned_long)
155 atk_text_get_character_at_offset (ATK_TEXT(text->atko), (gint) offset);
160 impl_getTextBeforeOffset (PortableServer_Servant _servant,
161 const CORBA_long offset,
163 Accessibility_TEXT_BOUNDARY_TYPE
164 type, CORBA_long * startOffset,
165 CORBA_long * endOffset,
166 CORBA_Environment * ev)
171 gint intStartOffset, intEndOffset;
174 obj = (bonobo_object_from_servant (_servant));
175 g_return_val_if_fail (IS_TEXT (obj), (CORBA_char *)"");
176 text = SPI_TEXT (obj);
177 g_return_val_if_fail (ATK_IS_TEXT (text->atko), (CORBA_char *)"");
179 txt = atk_text_get_text_before_offset (ATK_TEXT(text->atko),
180 (gint) offset, (AtkTextBoundary) type,
181 &intStartOffset, &intEndOffset);
182 *startOffset = (CORBA_long) intStartOffset;
183 *endOffset = (CORBA_long) intEndOffset;
187 rv = CORBA_string_dup (txt);
191 rv = CORBA_string_dup ("");
197 impl__get_caretOffset (PortableServer_Servant _servant,
198 CORBA_Environment * ev)
203 obj = (bonobo_object_from_servant (_servant));
204 g_return_val_if_fail (IS_TEXT (obj), (CORBA_long)-1);
205 text = SPI_TEXT (obj);
206 g_return_val_if_fail (ATK_IS_TEXT (text->atko), (CORBA_long)-1);
209 atk_text_get_caret_offset (ATK_TEXT(text->atko));
215 impl_getAttributes (PortableServer_Servant _servant,
216 const CORBA_long offset,
217 CORBA_long * startOffset,
218 CORBA_long * endOffset,
219 CORBA_Environment * ev)
224 obj = (bonobo_object_from_servant (_servant));
225 g_return_val_if_fail (IS_TEXT (obj), (CORBA_char *)"");
226 text = SPI_TEXT (obj);
227 g_return_val_if_fail (ATK_IS_TEXT (text->atko), (CORBA_char *)"");
229 g_print ("getAttributes not yet implemented.\n");
231 return CORBA_string_dup ("");
235 impl_getCharacterExtents (PortableServer_Servant _servant,
236 const CORBA_long offset, CORBA_long * x,
237 CORBA_long * y, CORBA_long * width,
239 const CORBA_short coordType,
240 CORBA_Environment * ev)
245 obj = (bonobo_object_from_servant (_servant));
246 g_return_if_fail (IS_TEXT (obj));
247 text = SPI_TEXT (obj);
248 g_return_if_fail (ATK_IS_TEXT (text->atko));
250 atk_text_get_character_extents (ATK_TEXT(text->atko), (gint) offset,
251 (gint *) x, (gint *) y, (gint *) width, (gint *) height,
252 (AtkCoordType) coordType);
258 impl__get_characterCount (PortableServer_Servant _servant,
259 CORBA_Environment * ev)
265 obj = (bonobo_object_from_servant (_servant));
266 g_return_val_if_fail (IS_TEXT (obj), (CORBA_long)0);
267 text = SPI_TEXT (obj);
269 retval = (CORBA_long)
270 atk_text_get_character_count (ATK_TEXT(text->atko));
278 impl_getOffsetAtPoint (PortableServer_Servant _servant,
279 const CORBA_long x, const CORBA_long y,
280 const CORBA_short coordType,
281 CORBA_Environment * ev)
286 obj = (bonobo_object_from_servant (_servant));
287 g_return_val_if_fail (IS_TEXT (obj), (CORBA_long)-1);
288 text = SPI_TEXT (obj);
291 atk_text_get_offset_at_point (ATK_TEXT(text->atko),
292 (gint) x, (gint) y, (AtkCoordType) coordType);
298 impl_getNSelections (PortableServer_Servant _servant,
299 CORBA_Environment * ev)
304 obj = (bonobo_object_from_servant (_servant));
305 g_return_val_if_fail (IS_TEXT (obj), (CORBA_long)0);
306 text = SPI_TEXT (obj);
309 atk_text_get_n_selections (ATK_TEXT(text->atko));
315 impl_getSelection (PortableServer_Servant _servant,
316 const CORBA_long selectionNum,
317 CORBA_long * startOffset, CORBA_long * endOffset,
318 CORBA_Environment * ev)
323 obj = (bonobo_object_from_servant (_servant));
324 g_return_if_fail (IS_TEXT (obj));
325 text = SPI_TEXT (obj);
327 atk_text_get_selection (ATK_TEXT(text->atko), (gint) selectionNum,
328 (gint *) startOffset, (gint *) endOffset);
334 impl_addSelection (PortableServer_Servant _servant,
335 const CORBA_long startOffset,
336 const CORBA_long endOffset,
337 CORBA_Environment * ev)
342 obj = (bonobo_object_from_servant (_servant));
343 g_return_val_if_fail (IS_TEXT (obj), (CORBA_boolean)FALSE);
344 text = SPI_TEXT (obj);
346 return (CORBA_boolean)
347 atk_text_add_selection (ATK_TEXT(text->atko),
348 (gint) startOffset, (gint) endOffset);
354 impl_removeSelection (PortableServer_Servant _servant,
355 const CORBA_long selectionNum,
356 CORBA_Environment * ev)
361 obj = (bonobo_object_from_servant (_servant));
362 g_return_val_if_fail (IS_TEXT (obj), (CORBA_boolean)FALSE);
363 text = SPI_TEXT (obj);
365 return (CORBA_boolean)
366 atk_text_remove_selection (ATK_TEXT(text->atko), (gint) selectionNum);
372 impl_setSelection (PortableServer_Servant _servant,
373 const CORBA_long selectionNum,
374 const CORBA_long startOffset,
375 const CORBA_long endOffset,
376 CORBA_Environment * ev)
381 obj = (bonobo_object_from_servant (_servant));
382 g_return_val_if_fail (IS_TEXT (obj), (CORBA_boolean)FALSE);
383 text = SPI_TEXT (obj);
385 return (CORBA_boolean)
386 atk_text_set_selection (ATK_TEXT(text->atko),
387 (gint) selectionNum, (gint) startOffset, (gint) endOffset);
393 impl_setCaretOffset (PortableServer_Servant _servant,
394 const CORBA_long value,
395 CORBA_Environment * ev)
400 obj = (bonobo_object_from_servant (_servant));
401 g_return_val_if_fail (IS_TEXT (obj), (CORBA_boolean)FALSE);
402 text = SPI_TEXT (obj);
404 return (CORBA_boolean)
405 atk_text_set_caret_offset (ATK_TEXT(text->atko), (gint) value);
411 impl_getRowColAtOffset (PortableServer_Servant _servant,
412 const CORBA_long offset, CORBA_long * row,
413 CORBA_long * column, CORBA_Environment * ev)
418 obj = (bonobo_object_from_servant (_servant));
419 g_return_if_fail (IS_TEXT (obj));
420 text = SPI_TEXT (obj);
422 g_print ("getRowColAtOffset not yet implemented\n");
426 spi_text_object_finalize (GObject *obj)
428 SpiText *text = SPI_TEXT (obj);
429 g_object_unref (text->atko);
431 spi_text_parent_class->finalize (obj);
435 spi_text_class_init (SpiTextClass *klass)
437 GObjectClass * object_class = (GObjectClass *) klass;
438 POA_Accessibility_Text__epv *epv = &klass->epv;
439 spi_text_parent_class = g_type_class_peek_parent (klass);
441 object_class->finalize = spi_text_object_finalize;
443 /* Initialize epv table */
445 epv->getText = impl_getText;
446 epv->getTextAfterOffset = impl_getTextAfterOffset;
447 epv->getCharacterAtOffset = impl_getCharacterAtOffset;
448 epv->getTextAtOffset = impl_getTextAtOffset;
449 epv->getTextBeforeOffset = impl_getTextBeforeOffset;
450 epv->_get_caretOffset = impl__get_caretOffset;
451 epv->getAttributes = impl_getAttributes;
452 epv->getCharacterExtents = impl_getCharacterExtents;
453 epv->_get_characterCount = impl__get_characterCount;
454 epv->getOffsetAtPoint = impl_getOffsetAtPoint;
455 epv->getNSelections = impl_getNSelections;
456 epv->getSelection = impl_getSelection;
457 epv->addSelection = impl_addSelection;
458 epv->removeSelection = impl_removeSelection;
459 epv->setSelection = impl_setSelection;
460 epv->setCaretOffset = impl_setCaretOffset;
464 spi_text_init (SpiText *text)
468 BONOBO_TYPE_FUNC_FULL (SpiText,
474 spi_text_interface_new (AtkObject *obj)
476 SpiText *new_text = g_object_new (SPI_TEXT_TYPE, NULL);
477 new_text->atko = obj;