b8a35f10eacd2d4540d2e1d8c772e337e2b8b85b
[platform/upstream/at-spi2-atk.git] / tests / dummyatk / my-atk-hyperlink.c
1 /*
2  * Copyright 2008 Codethink Ltd.
3  * Copyright (c) 2015 Samsung Electronics Co., Ltd.
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the
17  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18  * Boston, MA 02110-1301, USA.
19  */
20
21 #include <glib.h>
22 #include <string.h>
23 #include <atk/atk.h>
24 #include <stdio.h>
25
26 #include "my-atk-object.h"
27 #include "my-atk-hyperlink.h"
28 #include "my-atk-text.h"
29
30 typedef struct _MyAtkHyperlinkInfo MyAtkHyperlinkInfo;
31
32 G_DEFINE_TYPE (MyAtkHyperlink, my_atk_hyperlink, ATK_TYPE_HYPERLINK)
33
34 gint
35 my_atk_set_hyperlink (AtkHyperlink *obj, const gchar *uri, gint start, gint end)
36 {
37   MyAtkHyperlink *self = MY_ATK_HYPERLINK (obj);
38   g_return_val_if_fail (MY_IS_ATK_HYPERLINK (obj), -1);
39
40   self->uri = g_strdup (uri);
41   self->start = start;
42   self->end = end;
43   self->state = FALSE;
44   self->selected = FALSE;
45
46   return 0;
47 }
48
49 MyAtkHyperlink *
50 new_MyAtkHyperlink (void)
51 {
52   return g_object_new (MY_TYPE_ATK_HYPERLINK, NULL);
53 }
54
55 static gchar*
56 my_atk_hyperlink_get_uri (AtkHyperlink *obj, gint i)
57 {
58   MyAtkHyperlink *self = MY_ATK_HYPERLINK (obj);
59   g_return_val_if_fail (MY_IS_ATK_HYPERLINK (obj), NULL);
60
61   return self->uri;
62 }
63
64 static AtkObject *
65 my_atk_hyperlink_get_object (AtkHyperlink *obj, gint i)
66 {
67   MyAtkHyperlink *self = MY_ATK_HYPERLINK (obj);
68   MyAtkText *text;
69   g_return_val_if_fail (MY_IS_ATK_HYPERLINK (obj), NULL);
70
71   text = my_atk_text_new ();
72   my_atk_set_text (ATK_TEXT (text),
73                    self->uri,
74                    10,
75                    50,
76                    self->end - self->start,
77                    15,
78                    NULL);
79
80   return ATK_OBJECT (text);
81 }
82
83 static gint
84 my_atk_hyperlink_get_end_index (AtkHyperlink *obj)
85 {
86   MyAtkHyperlink *self = MY_ATK_HYPERLINK (obj);
87   g_return_val_if_fail (MY_IS_ATK_HYPERLINK (obj), -1);
88
89   return self->end;
90 }
91
92 static gint
93 my_atk_hyperlink_get_start_index (AtkHyperlink *obj)
94 {
95   MyAtkHyperlink *self = MY_ATK_HYPERLINK (obj);
96   g_return_val_if_fail (MY_IS_ATK_HYPERLINK (obj), -1);
97
98   return self->start;
99 }
100
101 static gboolean
102 my_atk_hyperlink_is_valid (AtkHyperlink *obj)
103 {
104   g_return_val_if_fail (MY_IS_ATK_HYPERLINK (obj), FALSE);
105
106   return TRUE;
107 }
108
109 static gint
110 my_atk_hyperlink_get_n_anchors (AtkHyperlink *obj)
111 {
112   g_return_val_if_fail (MY_IS_ATK_HYPERLINK (obj), -1);
113
114   return 1;
115 }
116
117 static guint
118 my_atk_hyperlink_link_state (AtkHyperlink *obj)
119 {
120   MyAtkHyperlink *self = MY_ATK_HYPERLINK (obj);
121   g_return_val_if_fail (MY_IS_ATK_HYPERLINK (obj), -1);
122
123   return self->state;
124 }
125
126 static gboolean
127 my_atk_hyperlink_is_selected_link (AtkHyperlink *obj)
128 {
129   MyAtkHyperlink *self = MY_ATK_HYPERLINK (obj);
130   g_return_val_if_fail (MY_IS_ATK_HYPERLINK (obj), FALSE);
131
132   return self->selected;
133 }
134
135 static void
136 my_atk_hyperlink_link_activated (AtkHyperlink *obj)
137 {
138   MyAtkHyperlink *self = MY_ATK_HYPERLINK (obj);
139   g_return_if_fail (MY_IS_ATK_HYPERLINK (obj));
140
141   self->selected = !self->selected;
142 }
143
144 static void
145 my_atk_hyperlink_init (MyAtkHyperlink *self)
146 {
147   self->uri =NULL;
148   self->start = -1;
149   self->end = -1;
150   self->state = FALSE;
151   self->selected = FALSE;
152 }
153
154 static void
155 my_atk_hyperlink_set_property (GObject *obj,
156                                guint id,
157                                const GValue *value,
158                                GParamSpec *spec)
159 {
160   switch (id) {
161   case 1:
162     break;
163   case 2:
164     break;
165   case 3:
166     break;
167   default:
168     //G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, id, pspec);
169     break;
170   }
171 }
172
173 static void
174 my_atk_hyperlink_get_property (GObject *obj,
175                                guint id,
176                                GValue *value,
177                                GParamSpec *pspec)
178 {
179 }
180
181 static void
182 my_atk_hyperlink_class_finalize (GObject *obj)
183 {
184 }
185
186 static void
187 my_atk_hyperlink_class_init (MyAtkHyperlinkClass *my_class)
188 {
189   GObjectClass *gobject_class = G_OBJECT_CLASS (my_class);
190   AtkHyperlinkClass *iface = ATK_HYPERLINK_CLASS (my_class);
191   const gchar *inst_tab[] = {"accessible-name", "accessible-description", "accessible-role", NULL};
192
193   gobject_class->finalize = my_atk_hyperlink_class_finalize;
194   gobject_class->set_property = my_atk_hyperlink_set_property;
195   gobject_class->get_property = my_atk_hyperlink_get_property;
196
197   gint i;
198   for (i = 0; inst_tab[i] != NULL ; i++)
199     g_object_class_install_property (gobject_class,
200                                      i+1,
201                                      g_param_spec_string (inst_tab[i],
202                                          inst_tab[i],
203                                          inst_tab[i],
204                                          NULL,
205                                          G_PARAM_READWRITE)
206                                     );
207
208   iface->get_uri = my_atk_hyperlink_get_uri;
209   iface->get_object = my_atk_hyperlink_get_object;
210   iface->get_end_index = my_atk_hyperlink_get_end_index;
211   iface->get_start_index = my_atk_hyperlink_get_start_index;
212   iface->is_valid = my_atk_hyperlink_is_valid;
213   iface->get_n_anchors = my_atk_hyperlink_get_n_anchors;
214   iface->link_state = my_atk_hyperlink_link_state;
215   iface->is_selected_link = my_atk_hyperlink_is_selected_link;
216   iface->link_activated = my_atk_hyperlink_link_activated;
217 }