API revisions: tweaks to key event API, added some reserved slots for
[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 <atk/atkeditabletext.h>
28 #include <libspi/editabletext.h>
29
30 /* Static function declarations */
31
32 static void
33 spi_editable_text_class_init (SpiEditableTextClass *klass);
34 static void
35 spi_editable_text_init (SpiEditableText *editable);
36 static CORBA_boolean
37 impl_setAttributes (PortableServer_Servant servant,
38                        const CORBA_char * attributes,
39                        const CORBA_long startPos,
40                        const CORBA_long endPos,
41                        CORBA_Environment *ev);
42 static void
43 impl_setTextContents (PortableServer_Servant servant,
44                       const CORBA_char * newContents,
45                       CORBA_Environment *ev);
46 static void 
47 impl_insertText (PortableServer_Servant servant,
48                  const CORBA_long position,
49                  const CORBA_char * text,
50                  const CORBA_long length,
51                  CORBA_Environment *ev);
52 static void 
53 impl_copyText (PortableServer_Servant servant,
54                const CORBA_long startPos, const CORBA_long endPos,
55                CORBA_Environment *ev);
56 static void 
57 impl_cutText (PortableServer_Servant servant,
58               const CORBA_long startPos, const CORBA_long endPos,
59               CORBA_Environment *ev);
60 static void 
61 impl_deleteText (PortableServer_Servant servant,
62                  const CORBA_long startPos, const CORBA_long endPos,
63                  CORBA_Environment *ev);
64 static void
65 impl_pasteText (PortableServer_Servant servant,
66                 const CORBA_long position, CORBA_Environment *ev);
67
68 BONOBO_TYPE_FUNC_FULL (SpiEditableText,
69                        Accessibility_EditableText,
70                        SPI_TEXT_TYPE,
71                        spi_editable_text);
72
73 static void
74 spi_editable_text_class_init (SpiEditableTextClass *klass)
75 {
76   POA_Accessibility_EditableText__epv *epv = &klass->epv;
77
78   /* Initialize epv table */
79
80   epv->setAttributes = impl_setAttributes;
81   epv->setTextContents = impl_setTextContents;
82   epv->insertText = impl_insertText;
83   epv->copyText = impl_copyText;
84   epv->cutText = impl_cutText;
85   epv->deleteText = impl_deleteText;
86   epv->pasteText = impl_pasteText;
87 }
88
89
90 static void
91 spi_editable_text_init (SpiEditableText *editable)
92 {
93 }
94
95
96 SpiEditableText *
97 spi_editable_text_interface_new (AtkObject *obj)
98 {
99   SpiEditableText *new_editable = g_object_new (
100           SPI_EDITABLE_TEXT_TYPE, NULL);
101
102   spi_text_construct (SPI_TEXT (new_editable), obj);
103
104   return new_editable;
105 }
106
107
108 static AtkEditableText *
109 get_editable_text_from_servant (PortableServer_Servant servant)
110 {
111   SpiBase *object = SPI_BASE (bonobo_object_from_servant (servant));
112
113   g_return_val_if_fail (object, NULL);
114   g_return_val_if_fail (ATK_IS_OBJECT(object->gobj), NULL);
115   return ATK_EDITABLE_TEXT (object->gobj);
116 }
117
118
119 static CORBA_boolean
120 impl_setAttributes (PortableServer_Servant servant,
121                     const CORBA_char * attributes,
122                     const CORBA_long startPos,
123                     const CORBA_long endPos,
124                     CORBA_Environment *ev)
125 {
126   AtkEditableText *editable = get_editable_text_from_servant (servant);
127
128   g_return_val_if_fail (editable != NULL, FALSE);
129
130   g_print ("setRunAttributes not implemented.\n");
131
132   return FALSE;
133 }
134
135
136 static void
137 impl_setTextContents (PortableServer_Servant servant,
138                       const CORBA_char     *newContents,
139                       CORBA_Environment    *ev)
140 {
141   AtkEditableText *editable = get_editable_text_from_servant (servant);
142
143   g_return_if_fail (editable != NULL);
144   
145   atk_editable_text_set_text_contents (editable, (gchar *) newContents);
146 }
147
148
149 static void 
150 impl_insertText (PortableServer_Servant servant,
151                  const CORBA_long      position,
152                  const CORBA_char     *text,
153                  const CORBA_long      length,
154                  CORBA_Environment    *ev)
155 {
156   AtkEditableText *editable = get_editable_text_from_servant (servant);
157
158   g_return_if_fail (editable != NULL);
159
160   atk_editable_text_insert_text (editable,
161                                  (gchar *) text,
162                                  (gint) length,
163                                  (gint *) &position);
164 }
165
166
167 static void 
168 impl_copyText (PortableServer_Servant servant,
169                const CORBA_long startPos, const CORBA_long endPos,
170                CORBA_Environment *ev)
171 {
172   AtkEditableText *editable = get_editable_text_from_servant (servant);
173
174   g_return_if_fail (editable != NULL);
175
176   atk_editable_text_copy_text (editable, (gint) startPos, (gint) endPos);
177 }
178
179
180 static void 
181 impl_cutText (PortableServer_Servant servant,
182               const CORBA_long startPos, const CORBA_long endPos,
183               CORBA_Environment *ev)
184 {
185   AtkEditableText *editable = get_editable_text_from_servant (servant);
186
187   g_return_if_fail (editable != NULL);
188
189   atk_editable_text_cut_text (editable, (gint) startPos, (gint) endPos);
190 }
191
192
193 static void 
194 impl_deleteText (PortableServer_Servant servant,
195                  const CORBA_long startPos, const CORBA_long endPos,
196                  CORBA_Environment *ev)
197 {
198   AtkEditableText *editable = get_editable_text_from_servant (servant);
199
200   g_return_if_fail (editable != NULL);
201
202   atk_editable_text_delete_text (editable, (gint) startPos, (gint) endPos);
203 }
204
205
206 static void
207 impl_pasteText (PortableServer_Servant servant,
208                 const CORBA_long position, CORBA_Environment *ev)
209 {
210   AtkEditableText *editable = get_editable_text_from_servant (servant);
211
212   g_return_if_fail (editable != NULL);
213
214   atk_editable_text_paste_text (editable, position);
215 }