2008-05-28 Mark Doffman <mark.doffman@codethink.co.uk>
[platform/core/uifw/at-spi2-atk.git] / tests / dummyatk / my-atk-hyperlink.c
1 #include <atk/atk.h>
2
3 #include "my-atk-text.h"
4 #include "my-atk-hyperlink.h"
5 #include "resources_storage.h"
6
7 //***************************implementation****************************************
8 static MyAtkTextClass *parent_class_atk_hyperlink = NULL;
9
10 // Implementation of virtual functions
11 //***************************my_atk_hyperlink_get_uri**************
12 gchar* my_atk_hyperlink_get_uri(AtkHyperlink* link_, gint index)
13 {
14     MyAtkHyperlink* self = (MyAtkHyperlink*)link_;
15     
16     if(index < 0 || index >= self->number_of_anchors) return NULL;
17     return g_strdup(self->uri);
18 }
19 //**************************my_atk_hyperlink_is_valid**************************
20 gboolean my_atk_hyperlink_is_valid(AtkHyperlink* link_)
21 {
22     MyAtkHyperlink* self = (MyAtkHyperlink*)link_;
23     
24     return (resource_storage_get(self->uri) != NULL);
25 }
26 //*************************my_atk_hyperlink_get_object************************
27 AtkObject* my_atk_hyperlink_get_object(AtkHyperlink* link_, gint index)
28 {
29     MyAtkHyperlink* self = (MyAtkHyperlink*)link_;
30     
31     if(index < 0 || index >= self->number_of_anchors) return NULL;
32     return resource_storage_get(self->uri);
33 }
34 //***************************my_atk_hyperlink_get_start_index**************
35 gint my_atk_hyperlink_get_start_index(AtkHyperlink* link_)
36 {
37     MyAtkHyperlink* self = (MyAtkHyperlink*)link_;
38     
39     return self->start_index;
40 }
41 //***************************my_atk_hyperlink_get_end_index**************
42 gint my_atk_hyperlink_get_end_index(AtkHyperlink* link_)
43 {
44     MyAtkHyperlink* self = (MyAtkHyperlink*)link_;
45     
46     return self->end_index;
47 }
48 //***************************my_atk_hyperlink_link_state*******************
49 guint my_atk_hyperlink_link_state(AtkHyperlink* link_)
50 {
51     return 0;
52 }
53 //***************************my_atk_hyperlink_get_n_anchors*******************
54 gboolean my_atk_hyperlink_get_n_anchors(AtkHyperlink* link_)
55 {
56     return ((MyAtkHyperlink*)link_)->number_of_anchors;
57 }
58 //***************************my_atk_hypertlink_is_selected_link***********
59 gboolean my_atk_hyperlink_is_selected_link(AtkHyperlink* link_)
60 {
61     MyAtkHyperlink* self = (MyAtkHyperlink*)link_;
62     
63     return self->is_selected;
64 }
65 //others functions
66 MyAtkHyperlink* my_atk_hyperlink_new(gint start_index, gint end_index,const gchar* uri)
67 {
68     MyAtkHyperlink* result = g_object_new(MY_TYPE_ATK_HYPERLINK, NULL);
69     if(result == NULL) return NULL;
70     result->start_index = start_index;
71     result->end_index = end_index;
72     result->uri = g_strdup(uri);
73     result->number_of_anchors = 1;
74     return result;
75 }
76 void my_atk_hyperlink_activate(MyAtkHyperlink* hyperlink)
77 {
78     g_signal_emit_by_name(hyperlink, "link-activated");
79 }
80 //initialize/finalize functions
81 static void my_atk_hyperlink_instance_init(GTypeInstance *obj, gpointer g_class)
82 {
83     MyAtkHyperlink *self = (MyAtkHyperlink*)obj;
84     
85     self->start_index = self->end_index = 0;
86     self->uri = NULL;
87     self->is_selected = FALSE;
88     self->number_of_anchors = 0;
89 }
90 static void my_atk_hyperlink_instance_finalize(GObject* obj)
91 {
92     MyAtkHyperlink *self = (MyAtkHyperlink*)obj;
93     
94     g_free(self->uri);
95 }
96
97 static void my_atk_hyperlink_class_init(gpointer g_class, gpointer class_data)
98 {
99     GObjectClass* g_object_class = (GObjectClass*)g_class;
100     //GObject virtual table
101     g_object_class->finalize = my_atk_hyperlink_instance_finalize;
102     //parent_class
103     parent_class_atk_hyperlink = g_type_class_peek_parent(g_class);
104     //
105     AtkHyperlinkClass* atkHyperlinkClass = (AtkHyperlinkClass*)g_class;
106     
107     atkHyperlinkClass->get_uri = my_atk_hyperlink_get_uri;
108     atkHyperlinkClass->get_object = my_atk_hyperlink_get_object;
109     atkHyperlinkClass->get_start_index = my_atk_hyperlink_get_start_index;
110     atkHyperlinkClass->get_end_index = my_atk_hyperlink_get_end_index;
111     atkHyperlinkClass->is_valid = my_atk_hyperlink_is_valid;
112     atkHyperlinkClass->link_state = my_atk_hyperlink_link_state;
113     atkHyperlinkClass->get_n_anchors = my_atk_hyperlink_get_n_anchors;
114     atkHyperlinkClass->is_selected_link = my_atk_hyperlink_is_selected_link; 
115 }
116
117 GType my_atk_hyperlink_get_type()
118 {
119     static GType type = 0;
120     if(type == 0)
121     {
122         static const GTypeInfo typeInfo = 
123         {
124             sizeof(MyAtkHyperlinkClass),
125             NULL,                       //base_init
126             NULL,                       //base_finalize
127             my_atk_hyperlink_class_init,     //class_init
128             NULL,                       //class_finalize
129             NULL,                       //class_data
130             sizeof(MyAtkHyperlink),
131             0,                          //n_preallocs
132             my_atk_hyperlink_instance_init   //instance_init
133         };
134         type = g_type_register_static(ATK_TYPE_HYPERLINK, "MyAtkHyperlink", &typeInfo, 0);
135     }
136     return type;    
137 }