#include "common.h" GtkWidget *window; GtkWidget *table; GtkWidget *button[9]; GtkWidget *image_enable[9]; static void button_pressed_callback(GtkWidget *widget, GdkEvent *event, gpointer image); static void button_released_callback(GtkWidget *widget, GdkEvent *event, gpointer image); void button_selection(); /* Create a new hbox with an image and a label packed into it * and return the box. */ static GtkWidget *xpm_label_box(gchar *label_text, gchar *xpm_filename) { GtkWidget *box; GtkWidget *label; GtkWidget *image; /* Create box for image and label */ box = gtk_vbox_new (FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (box), 2); /* Now on to the image stuff */ image = gtk_image_new_from_file (xpm_filename); /* Create a label for the button */ label = gtk_label_new (label_text); /* Pack the image and label into the box */ gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 3); gtk_box_pack_start (GTK_BOX (box), image, FALSE, FALSE, 3); gtk_widget_show (label); gtk_widget_show (image); return box; } /* static void hiding_showing_images(GtkWidget *widget, gint index) { GtkWidget *image; // guint index = (guint *)img; g_print("INDEX = %d, FLAG = %d \n",index ,flag); if(flag == 1) { g_print("INSIDE LEAVE\n"); gtk_widget_hide(image_enable[index-1]); image = gtk_image_new_from_file("radio_green.jpg"); gtk_table_attach_defaults (GTK_TABLE (table), image, index-1, index, 0, 1); gtk_widget_show (image); image_enable[index-1] = image; flag = 0; } else { g_print("INSIDE ENTER\n"); gtk_widget_hide(image_enable[index-1]); image = gtk_image_new_from_file("radio_red.jpg"); gtk_table_attach_defaults (GTK_TABLE (table), image, index-1, index, 0, 1); gtk_widget_show (image); image_enable[index-1] = image; flag = 1; } } */ /* Callback method */ static void button_released_callback(GtkWidget *widget, GdkEvent *event, gpointer img) { GtkWidget *image; guint index = (guint *)img; g_print("INSIDE LEAVE\n"); gtk_widget_hide(image_enable[index-1]); image = gtk_image_new_from_file("radio_green.jpg"); gtk_table_attach_defaults (GTK_TABLE (table), image, index-1, index, 0, 1); gtk_widget_show (image); image_enable[index-1] = image; } static void button_pressed_callback(GtkWidget *widget, GdkEvent *event, gpointer img) { GtkWidget *image; guint index = (guint *)img; g_print("INSIDE ENTER\n"); gtk_widget_hide(image_enable[index-1]); image = gtk_image_new_from_file("radio_red.jpg"); gtk_table_attach_defaults (GTK_TABLE (table), image, index-1, index, 0, 1); gtk_widget_show (image); image_enable[index-1] = image; } static GtkWidget *create_button(guint index) { GtkWidget *box; GtkWidget *button; GtkWidget *image; image = gtk_image_new_from_file("radio_green.jpg"); button = gtk_button_new(); switch(index) { case 1: { box = xpm_label_box(" ABC ", "soccer.gif"); gtk_container_add (GTK_CONTAINER (button), box); gtk_table_attach_defaults (GTK_TABLE (table), button, 0, 1, 1, 2); gtk_table_attach_defaults (GTK_TABLE (table), image, 0, 1, 0, 1); image_enable[0] = image; g_signal_connect(G_OBJECT(button), "button_press_event", G_CALLBACK (button_pressed_callback), (gpointer)index); g_signal_connect(G_OBJECT(button), "button_release_event", G_CALLBACK(button_released_callback), (gpointer)index); break; } case 2: { box = xpm_label_box(" DEF ", "soccer.gif"); gtk_container_add (GTK_CONTAINER (button), box); gtk_table_attach_defaults (GTK_TABLE (table), button, 1, 2, 1, 2); gtk_table_attach_defaults (GTK_TABLE (table), image, 1, 2, 0, 1); image_enable[1] = image; g_signal_connect (G_OBJECT (button), "button_press_event", G_CALLBACK (button_pressed_callback), (gpointer)index); g_signal_connect (G_OBJECT (button), "button_release_event", G_CALLBACK (button_released_callback), (gpointer)index); break; } case 3: { box = xpm_label_box(" GHI ", "soccer.gif"); gtk_container_add (GTK_CONTAINER (button), box); gtk_table_attach_defaults (GTK_TABLE (table), button, 2, 3, 1, 2); gtk_table_attach_defaults (GTK_TABLE (table), image, 2, 3, 0, 1); image_enable[2] = image; g_signal_connect (G_OBJECT (button), "button_press_event", G_CALLBACK (button_pressed_callback), (gpointer)index); g_signal_connect (G_OBJECT (button), "button_release_event", G_CALLBACK (button_released_callback), (gpointer)index); break; } case 4: { box = xpm_label_box(" JKL ", "soccer.gif"); gtk_container_add (GTK_CONTAINER (button), box); gtk_table_attach_defaults (GTK_TABLE (table), button, 3, 4, 1, 2); gtk_table_attach_defaults (GTK_TABLE (table), image, 3, 4, 0, 1); image_enable[3] = image; g_signal_connect (G_OBJECT (button), "button_press_event", G_CALLBACK (button_pressed_callback), (gpointer)index); g_signal_connect (G_OBJECT (button), "button_release_event", G_CALLBACK (button_released_callback), (gpointer)index); break; } case 5: { box = xpm_label_box(" MNO ", "soccer.gif"); gtk_container_add (GTK_CONTAINER (button), box); gtk_table_attach_defaults (GTK_TABLE (table), button, 4, 5, 1, 2); gtk_table_attach_defaults (GTK_TABLE (table), image, 4, 5, 0, 1); image_enable[4] = image; g_signal_connect (G_OBJECT (button), "button_press_event", G_CALLBACK (button_pressed_callback), (gpointer)index); g_signal_connect (G_OBJECT (button), "button_release_event", G_CALLBACK (button_released_callback), (gpointer)index); break; } case 6: { box = xpm_label_box(" PQR ", "soccer.gif"); gtk_container_add (GTK_CONTAINER (button), box); gtk_table_attach_defaults (GTK_TABLE (table), button, 5, 6, 1, 2); gtk_table_attach_defaults (GTK_TABLE (table), image, 5, 6, 0, 1); image_enable[5] = image; g_signal_connect (G_OBJECT (button), "button_press_event", G_CALLBACK (button_pressed_callback), (gpointer)index); g_signal_connect (G_OBJECT (button), "button_release_event", G_CALLBACK (button_released_callback), (gpointer)index); break; } case 7: { box = xpm_label_box(" STU ", "soccer.gif"); gtk_container_add (GTK_CONTAINER (button), box); gtk_table_attach_defaults (GTK_TABLE (table), button, 6, 7, 1, 2); gtk_table_attach_defaults (GTK_TABLE (table), image, 6, 7, 0, 1); image_enable[6] = image; g_signal_connect (G_OBJECT (button), "button_press_event", G_CALLBACK (button_pressed_callback), (gpointer)index); g_signal_connect (G_OBJECT (button), "button_release_event", G_CALLBACK (button_released_callback), (gpointer)index); break; } case 8: { box = xpm_label_box(" VWX ", "soccer.gif"); gtk_container_add (GTK_CONTAINER (button), box); gtk_table_attach_defaults (GTK_TABLE (table), button, 7, 8, 1, 2); gtk_table_attach_defaults (GTK_TABLE (table), image, 7, 8, 0, 1); image_enable[7] = image; g_signal_connect (G_OBJECT (button), "button_press_event", G_CALLBACK (button_pressed_callback), (gpointer)index); g_signal_connect (G_OBJECT (button), "button_release_event", G_CALLBACK (button_released_callback), (gpointer)index); break; } case 9: { box = xpm_label_box(" YZ ", "soccer.gif"); gtk_container_add (GTK_CONTAINER (button), box); gtk_table_attach_defaults (GTK_TABLE (table), button, 8, 9, 1, 2); gtk_table_attach_defaults (GTK_TABLE (table), image, 8, 9, 0, 1); image_enable[8] = image; g_signal_connect (G_OBJECT (button), "button_press_event", G_CALLBACK (button_pressed_callback), (gpointer)index); g_signal_connect (G_OBJECT (button), "button_release_event", G_CALLBACK (button_released_callback), (gpointer)index); break; } } gtk_widget_show (box); gtk_widget_show (button); gtk_widget_show (image); return button; } int main( int argc, char *argv[] ) { /* GtkWidget is the storage type for widgets */ /* Buttons */ pthread_t *thread_for_loop; guint i; gtk_init (&argc, &argv); /* Create a new window */ window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (window), "HOPE"); /* It's a good idea to do this for all windows. */ g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL); g_signal_connect (G_OBJECT (window), "delete_event", G_CALLBACK (gtk_main_quit), NULL); /* Sets the border width of the window. */ gtk_container_set_border_width (GTK_CONTAINER (window), 10); /* Create a 10x10 table */ table = gtk_table_new (8, 9, TRUE); /*Set table row spacing and column spacing*/ gtk_table_set_col_spacings (GTK_TABLE (table), 30); /* Put the table in the main window */ gtk_container_add (GTK_CONTAINER (window), table); /* Create buttons */ for(i = 0; i < 9; i++) { button[i] = create_button(i+1); gtk_widget_set_events(button[i], GDK_BUTTON_RELEASE_MASK|GDK_BUTTON_PRESS_MASK ); } gtk_widget_show (table); gtk_widget_show (window); thread_for_loop = (pthread_t *) malloc (sizeof (pthread_t)); pthread_create (thread_for_loop, NULL, (void *)button_selection,NULL); /* Rest in gtk_main and wait for the fun to begin! */ gtk_main (); return 0; } void button_selection() { guint i; while(1) { for(i=0; i < 9; i++) { g_print("Index is %d\n",i); gtk_grab_add(button[i]); g_signal_emit_by_name(button[i], "button_press_event"); sleep(3); g_signal_emit_by_name(button[i], "button_release_event"); gtk_grab_remove(button[i]); gtk_widget_show_all(window); } } }