]> Pileus Git - ~andy/gtk/blob - modules/other/gail/tests/testimage.c
207f6fb3a1e700b573b43533adfd934fd0f6f28c
[~andy/gtk] / modules / other / gail / tests / testimage.c
1 #include <gtk/gtk.h>
2 #include "testlib.h"
3 #include <stdlib.h>
4
5 /*
6  * This test modules tests the AtkImage interface. When the module is loaded
7  * with testgtk , it also creates a dialog that contains GtkArrows and a 
8  * GtkImage. 
9  *
10  */
11
12 typedef struct
13 {
14   GtkWidget *dialog;
15   GtkWidget *arrow1;
16   GtkWidget *arrow2;
17   GtkWidget *arrow3;
18   GtkWidget *arrow4;
19   GtkWidget *close_button;
20   GtkImage  *image;
21 }MainDialog;
22
23 static void destroy (GtkWidget *widget, gpointer data)
24 {
25   gtk_widget_destroy(GTK_WIDGET(data));
26 }
27
28 static void _check_arrows (AtkObject *obj)
29 {
30   GtkWidget *content_area, *action_area;
31   AtkRole role;
32   MainDialog *md;
33   static gint visibleDialog = 0;
34
35
36   role = atk_object_get_role(obj);
37   if(role == ATK_ROLE_FRAME) {
38
39         md = (MainDialog *) malloc (sizeof(MainDialog));
40         if (visibleDialog == 0)
41     {
42                 md->arrow1 = gtk_arrow_new(GTK_ARROW_UP,GTK_SHADOW_IN);
43                 md->arrow2 = gtk_arrow_new(GTK_ARROW_DOWN,GTK_SHADOW_IN);
44                 md->arrow3 = gtk_arrow_new(GTK_ARROW_LEFT,GTK_SHADOW_OUT);
45                 md->arrow4 = gtk_arrow_new(GTK_ARROW_RIGHT,GTK_SHADOW_OUT);
46                 md->dialog = gtk_dialog_new();
47                 gtk_window_set_modal(GTK_WINDOW(md->dialog), TRUE);
48
49                 content_area = gtk_dialog_get_content_area (GTK_DIALOG (md->dialog));
50                 action_area = gtk_dialog_get_action_area (GTK_DIALOG (md->dialog));
51
52                 gtk_box_pack_start(GTK_BOX (content_area), md->arrow1, TRUE,TRUE, 0);
53                 gtk_box_pack_start(GTK_BOX (content_area), md->arrow2, TRUE,TRUE, 0);
54                 gtk_box_pack_start(GTK_BOX (content_area), md->arrow3, TRUE,TRUE, 0);
55                 gtk_box_pack_start(GTK_BOX (content_area), md->arrow4, TRUE,TRUE, 0);
56                 g_signal_connect(md->dialog, "destroy",
57                                  G_CALLBACK (destroy), md->dialog);
58
59                 md->image = GTK_IMAGE(gtk_image_new_from_file("circles.xbm"));
60                 gtk_box_pack_start(GTK_BOX (content_area), GTK_WIDGET(md->image), TRUE,TRUE, 0);
61                 md->close_button = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
62                 g_signal_connect(md->close_button, "clicked",
63                                  G_CALLBACK (destroy), md->dialog);
64
65                 gtk_box_pack_start(GTK_BOX (action_area), md->close_button, TRUE,TRUE, 0);
66
67                 gtk_widget_show_all(md->dialog);
68                 visibleDialog = 1;
69     }
70  }
71 }
72
73
74 static void 
75 _print_image_info(AtkObject *obj) {
76
77   gint height, width;
78   G_CONST_RETURN gchar *desc;
79   G_CONST_RETURN gchar *name = atk_object_get_name (obj);
80   G_CONST_RETURN gchar *type_name = g_type_name(G_TYPE_FROM_INSTANCE (obj));
81
82   height = width = 0;
83
84
85   if(!ATK_IS_IMAGE(obj)) 
86         return;
87
88   g_print("atk_object_get_name : %s\n", name ? name : "<NULL>");
89   g_print("atk_object_get_type_name : %s\n",type_name ?type_name :"<NULL>");
90   g_print("*** Start Image Info ***\n");
91   desc = atk_image_get_image_description(ATK_IMAGE(obj));
92   g_print ("atk_image_get_image_desc returns : %s\n",desc ? desc:"<NULL>");
93   atk_image_get_image_size(ATK_IMAGE(obj), &height ,&width);
94   g_print("atk_image_get_image_size returns: height %d width %d\n",
95                                                                                         height,width);
96   if(atk_image_set_image_description(ATK_IMAGE(obj),"New image Description")){
97         desc = atk_image_get_image_description(ATK_IMAGE(obj));
98         g_print ("atk_image_get_image_desc now returns : %s\n",desc?desc:"<NULL>");
99   }
100   g_print("*** End Image Info ***\n");
101
102
103 }
104 static void _traverse_children (AtkObject *obj)
105 {
106   gint n_children, i;
107
108   n_children = atk_object_get_n_accessible_children (obj);
109   for (i = 0; i < n_children; i++)
110   {
111     AtkObject *child;
112
113     child = atk_object_ref_accessible_child (obj, i);
114         _print_image_info(child);
115     _traverse_children (child);
116     g_object_unref (G_OBJECT (child));
117   }
118 }
119
120
121 static void _check_objects (AtkObject *obj)
122 {
123   AtkRole role;
124
125   g_print ("Start of _check_values\n");
126
127   _check_arrows(obj);
128   role = atk_object_get_role (obj);
129
130   if (role == ATK_ROLE_FRAME || role == ATK_ROLE_DIALOG)
131   {
132     /*
133      * Add handlers to all children.
134      */
135     _traverse_children (obj);
136   }
137   g_print ("End of _check_values\n");
138 }
139
140
141 static void
142 _create_event_watcher (void)
143 {
144   atk_add_focus_tracker (_check_objects);
145 }
146
147 int
148 gtk_module_init(gint argc, char* argv[])
149 {
150   g_print("testimages Module loaded\n");
151
152   _create_event_watcher();
153
154   return 0;
155 }