3 #include "my-atk-text.h"
4 #include "my-atk-hyperlink.h"
5 #include "resources_storage.h"
7 //***************************implementation****************************************
8 static MyAtkTextClass *parent_class_atk_hyperlink = NULL;
10 // Implementation of virtual functions
11 //***************************my_atk_hyperlink_get_uri**************
12 gchar* my_atk_hyperlink_get_uri(AtkHyperlink* link_, gint index)
14 MyAtkHyperlink* self = (MyAtkHyperlink*)link_;
16 if(index < 0 || index >= self->number_of_anchors) return NULL;
17 return g_strdup(self->uri);
19 //**************************my_atk_hyperlink_is_valid**************************
20 gboolean my_atk_hyperlink_is_valid(AtkHyperlink* link_)
22 MyAtkHyperlink* self = (MyAtkHyperlink*)link_;
24 return (resource_storage_get(self->uri) != NULL);
26 //*************************my_atk_hyperlink_get_object************************
27 AtkObject* my_atk_hyperlink_get_object(AtkHyperlink* link_, gint index)
29 MyAtkHyperlink* self = (MyAtkHyperlink*)link_;
31 if(index < 0 || index >= self->number_of_anchors) return NULL;
32 return resource_storage_get(self->uri);
34 //***************************my_atk_hyperlink_get_start_index**************
35 gint my_atk_hyperlink_get_start_index(AtkHyperlink* link_)
37 MyAtkHyperlink* self = (MyAtkHyperlink*)link_;
39 return self->start_index;
41 //***************************my_atk_hyperlink_get_end_index**************
42 gint my_atk_hyperlink_get_end_index(AtkHyperlink* link_)
44 MyAtkHyperlink* self = (MyAtkHyperlink*)link_;
46 return self->end_index;
48 //***************************my_atk_hyperlink_link_state*******************
49 guint my_atk_hyperlink_link_state(AtkHyperlink* link_)
53 //***************************my_atk_hyperlink_get_n_anchors*******************
54 gboolean my_atk_hyperlink_get_n_anchors(AtkHyperlink* link_)
56 return ((MyAtkHyperlink*)link_)->number_of_anchors;
58 //***************************my_atk_hypertlink_is_selected_link***********
59 gboolean my_atk_hyperlink_is_selected_link(AtkHyperlink* link_)
61 MyAtkHyperlink* self = (MyAtkHyperlink*)link_;
63 return self->is_selected;
66 MyAtkHyperlink* my_atk_hyperlink_new(gint start_index, gint end_index,const gchar* uri)
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;
76 void my_atk_hyperlink_activate(MyAtkHyperlink* hyperlink)
78 g_signal_emit_by_name(hyperlink, "link-activated");
80 //initialize/finalize functions
81 static void my_atk_hyperlink_instance_init(GTypeInstance *obj, gpointer g_class)
83 MyAtkHyperlink *self = (MyAtkHyperlink*)obj;
85 self->start_index = self->end_index = 0;
87 self->is_selected = FALSE;
88 self->number_of_anchors = 0;
90 static void my_atk_hyperlink_instance_finalize(GObject* obj)
92 MyAtkHyperlink *self = (MyAtkHyperlink*)obj;
97 static void my_atk_hyperlink_class_init(gpointer g_class, gpointer class_data)
99 GObjectClass* g_object_class = (GObjectClass*)g_class;
100 //GObject virtual table
101 g_object_class->finalize = my_atk_hyperlink_instance_finalize;
103 parent_class_atk_hyperlink = g_type_class_peek_parent(g_class);
105 AtkHyperlinkClass* atkHyperlinkClass = (AtkHyperlinkClass*)g_class;
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;
117 GType my_atk_hyperlink_get_type()
119 static GType type = 0;
122 static const GTypeInfo typeInfo =
124 sizeof(MyAtkHyperlinkClass),
126 NULL, //base_finalize
127 my_atk_hyperlink_class_init, //class_init
128 NULL, //class_finalize
130 sizeof(MyAtkHyperlink),
132 my_atk_hyperlink_instance_init //instance_init
134 type = g_type_register_static(ATK_TYPE_HYPERLINK, "MyAtkHyperlink", &typeInfo, 0);