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