2001-11-19 Michael Meeks <michael@ximian.com>
[platform/core/uifw/at-spi2-atk.git] / libspi / editabletext.c
1 /*
2  * AT-SPI - Assistive Technology Service Provider Interface
3  * (Gnome Accessibility Project; http://developer.gnome.org/projects/gap)
4  *
5  * Copyright 2001 Sun Microsystems Inc.
6  *
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.
11  *
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.
16  *
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.
21  */
22
23 /*
24  * component.c : bonobo wrapper for accessible component implementation
25  *
26  */
27 #include <config.h>
28 #include <bonobo/Bonobo.h>
29
30 #include <stdio.h>
31
32 /*
33  * This pulls the CORBA definitions for the "Accessibility::Accessible" server
34  */
35 #include <libspi/Accessibility.h>
36
37 /*
38  * This pulls the definition of the SpiEditableText bonobo object
39  */
40 #include "editabletext.h"
41
42 /*
43  * Static function declarations
44  */
45
46 static void
47 spi_editable_text_class_init (SpiEditableTextClass *klass);
48 static void
49 spi_editable_text_init (SpiEditableText *editable);
50 static void
51 spi_editable_text_finalize (GObject *obj);
52 static CORBA_boolean
53 impl_setAttributes (PortableServer_Servant _servant,
54                        const CORBA_char * attributes,
55                        const CORBA_long startPos,
56                        const CORBA_long endPos,
57                        CORBA_Environment * ev);
58 static void
59 impl_setTextContents (PortableServer_Servant _servant,
60                       const CORBA_char * newContents,
61                       CORBA_Environment * ev);
62 static void 
63 impl_insertText (PortableServer_Servant _servant,
64                  const CORBA_long position,
65                  const CORBA_char * text,
66                  const CORBA_long length,
67                  CORBA_Environment * ev);
68 static void 
69 impl_copyText (PortableServer_Servant _servant,
70                const CORBA_long startPos, const CORBA_long endPos,
71                CORBA_Environment * ev);
72 static void 
73 impl_cutText (PortableServer_Servant _servant,
74               const CORBA_long startPos, const CORBA_long endPos,
75               CORBA_Environment * ev);
76 static void 
77 impl_deleteText (PortableServer_Servant _servant,
78                  const CORBA_long startPos, const CORBA_long endPos,
79                  CORBA_Environment * ev);
80 static void
81 impl_pasteText (PortableServer_Servant _servant,
82                 const CORBA_long position, CORBA_Environment * ev);
83
84 static GObjectClass *parent_class;
85
86
87 BONOBO_TYPE_FUNC_FULL (SpiEditableText,
88                        Accessibility_EditableText,
89                        SPI_TEXT_TYPE,
90                        spi_editable_text);
91
92 static void
93 spi_editable_text_class_init (SpiEditableTextClass *klass)
94 {
95   GObjectClass * object_class = (GObjectClass *) klass;
96   POA_Accessibility_EditableText__epv *epv = &klass->epv;
97   parent_class = g_type_interface_peek_parent (klass);
98
99   object_class->finalize = spi_editable_text_finalize;
100   
101   /* Initialize epv table */
102
103   epv->setAttributes = impl_setAttributes;
104   epv->setTextContents = impl_setTextContents;
105   epv->insertText = impl_insertText;
106   epv->copyText = impl_copyText;
107   epv->cutText = impl_cutText;
108   epv->deleteText = impl_deleteText;
109   epv->pasteText = impl_pasteText;
110 }
111
112 static void
113 spi_editable_text_init (SpiEditableText *editable)
114 {
115 }
116
117 static void
118 spi_editable_text_finalize (GObject *obj)
119 {
120   parent_class->finalize (obj);
121 }
122
123 SpiEditableText *
124 spi_editable_text_interface_new (AtkObject *obj)
125 {
126   SpiEditableText *new_editable =
127     SPI_EDITABLE_TEXT(g_object_new (SPI_EDITABLE_TEXT_TYPE, NULL));
128   (SPI_TEXT (new_editable))->atko = obj;
129   g_object_ref (obj);
130   return new_editable;
131 }
132
133 static CORBA_boolean
134 impl_setAttributes (PortableServer_Servant _servant,
135                        const CORBA_char * attributes,
136                        const CORBA_long startPos,
137                        const CORBA_long endPos,
138                                          CORBA_Environment * ev)
139 {
140   SpiEditableText *editable;
141   BonoboObject *obj;
142   obj = (bonobo_object_from_servant (_servant));
143   g_return_val_if_fail (IS_SPI_EDITABLE_TEXT (obj), FALSE);
144   editable = SPI_EDITABLE_TEXT(bonobo_object_from_servant (_servant));
145   g_return_val_if_fail (ATK_IS_EDITABLE_TEXT ( (SPI_TEXT (obj))->atko), FALSE);
146
147   g_print ("setRunAttributes not implemented.\n");
148
149   return FALSE;
150 }
151
152 static void
153 impl_setTextContents (PortableServer_Servant _servant,
154                       const CORBA_char * newContents,
155                       CORBA_Environment * ev)
156 {
157   SpiEditableText *editable;
158   BonoboObject *obj;
159   obj = (bonobo_object_from_servant (_servant));
160   g_return_if_fail (IS_SPI_EDITABLE_TEXT (obj));
161   editable = SPI_EDITABLE_TEXT(bonobo_object_from_servant (_servant));
162   g_return_if_fail (ATK_IS_EDITABLE_TEXT ( (SPI_TEXT (obj))->atko));
163   
164   atk_editable_text_set_text_contents (ATK_EDITABLE_TEXT( SPI_TEXT (editable)->atko),
165                                        (gchar *) newContents);
166 }
167
168
169
170 static void 
171 impl_insertText (PortableServer_Servant _servant,
172                  const CORBA_long position,
173                  const CORBA_char * text,
174                  const CORBA_long length,
175                  CORBA_Environment * ev)
176 {
177   SpiEditableText *editable;
178   BonoboObject *obj;
179   obj = (bonobo_object_from_servant (_servant));
180   g_return_if_fail (IS_SPI_EDITABLE_TEXT (obj));
181   editable = SPI_EDITABLE_TEXT(bonobo_object_from_servant (_servant));
182   g_return_if_fail (ATK_IS_EDITABLE_TEXT ( (SPI_TEXT (obj))->atko));
183
184   atk_editable_text_insert_text (ATK_EDITABLE_TEXT( SPI_TEXT (editable)->atko),
185                                  (gchar *) text,
186                                  (gint) length,
187                                  (gint *) &position);
188 }
189
190
191 static void 
192 impl_copyText (PortableServer_Servant _servant,
193                const CORBA_long startPos, const CORBA_long endPos,
194                CORBA_Environment * ev)
195 {
196   SpiEditableText *editable;
197   BonoboObject *obj;
198   obj = (bonobo_object_from_servant (_servant));
199   g_return_if_fail (IS_SPI_EDITABLE_TEXT (obj));
200   editable = SPI_EDITABLE_TEXT(bonobo_object_from_servant (_servant));
201   g_return_if_fail (ATK_IS_EDITABLE_TEXT ( (SPI_TEXT (obj))->atko));
202
203   atk_editable_text_copy_text (ATK_EDITABLE_TEXT( SPI_TEXT(editable)->atko),
204                                (gint) startPos, (gint) endPos);
205 }
206
207
208
209 static void 
210 impl_cutText (PortableServer_Servant _servant,
211               const CORBA_long startPos, const CORBA_long endPos,
212               CORBA_Environment * ev)
213 {
214   SpiEditableText *editable;
215   BonoboObject *obj;
216   obj = (bonobo_object_from_servant (_servant));
217   g_return_if_fail (IS_SPI_EDITABLE_TEXT (obj));
218   editable = SPI_EDITABLE_TEXT(bonobo_object_from_servant (_servant));
219   g_return_if_fail (ATK_IS_EDITABLE_TEXT ( (SPI_TEXT (obj))->atko));
220
221   atk_editable_text_cut_text (ATK_EDITABLE_TEXT(SPI_TEXT (editable)->atko),
222                                  (gint) startPos, (gint) endPos);
223 }
224
225
226
227
228 static void 
229 impl_deleteText (PortableServer_Servant _servant,
230                  const CORBA_long startPos, const CORBA_long endPos,
231                  CORBA_Environment * ev)
232 {
233   SpiEditableText *editable;
234   BonoboObject *obj;
235   obj = (bonobo_object_from_servant (_servant));
236   g_return_if_fail (IS_SPI_EDITABLE_TEXT (obj));
237   editable = SPI_EDITABLE_TEXT(bonobo_object_from_servant (_servant));
238   g_return_if_fail (ATK_IS_EDITABLE_TEXT ( (SPI_TEXT (obj))->atko));
239
240   atk_editable_text_delete_text (ATK_EDITABLE_TEXT( SPI_TEXT(editable)->atko),
241                                  (gint) startPos, (gint) endPos);
242 }
243
244
245 static void
246 impl_pasteText (PortableServer_Servant _servant,
247                 const CORBA_long position, CORBA_Environment * ev)
248 {
249   SpiEditableText *editable;
250   BonoboObject *obj;
251   obj = (bonobo_object_from_servant (_servant));
252   g_return_if_fail (IS_SPI_EDITABLE_TEXT (obj));
253   editable = SPI_EDITABLE_TEXT(bonobo_object_from_servant (_servant));
254   g_return_if_fail (ATK_IS_EDITABLE_TEXT ( (SPI_TEXT (obj))->atko));
255
256   atk_editable_text_paste_text (ATK_EDITABLE_TEXT( SPI_TEXT(editable)->atko), position);
257 }
258