diff options
Diffstat (limited to 'src/gtkext/easygtk.c')
-rw-r--r-- | src/gtkext/easygtk.c | 186 |
1 files changed, 159 insertions, 27 deletions
diff --git a/src/gtkext/easygtk.c b/src/gtkext/easygtk.c index fcbaa19..61e8953 100644 --- a/src/gtkext/easygtk.c +++ b/src/gtkext/easygtk.c @@ -28,6 +28,10 @@ +/* Termine la construction d'un composant 'GtkButton'. */ +static void _finish_button_with_img(GtkWidget *, GObject *, const char *, GtkWidget *, const char *); + + /****************************************************************************** * * @@ -399,6 +403,113 @@ GtkWidget *qck_create_button_with_img(GObject *object, const char *name, const c /****************************************************************************** * * +* Paramètres : button = composant graphique dont la définition est à finir.* +* object = espace dédié à l'inscription de références. * +* name = nom à donner au nouveau composant. * +* picture = éventuelle image sous forme de composant GTK. * +* label = contenu de l'étiquette éventuelle associée. * +* * +* Description : Termine la construction d'un composant 'GtkButton'. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void _finish_button_with_img(GtkWidget *button, GObject *object, const char *name, GtkWidget *picture, const char *label) +{ + GtkWidget *caption; /* Etiquette à coller */ + GtkWidget *hbox; /* Séparation horizontale */ + + /* Création des éléments internes (2/2) */ + + if (label != NULL) + { + caption = gtk_label_new_with_mnemonic(label); + gtk_widget_show(caption); + } + + /* Mise en place */ + + if (picture != NULL && label != NULL) + { + hbox = gtk_hbox_new(FALSE, 2); + gtk_widget_show(hbox); + gtk_container_add(GTK_CONTAINER(button), hbox); + + gtk_box_pack_start(GTK_BOX(hbox), picture, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(hbox), caption, FALSE, FALSE, 0); + + } + + else if (picture != NULL) + gtk_container_add(GTK_CONTAINER(button), picture); + + else /*if (label != NULL)*/ + gtk_container_add(GTK_CONTAINER(button), caption); + + /* Interactions GTK... */ + + if (G_IS_OBJECT(object) && name != NULL) + { + g_object_ref(G_OBJECT(button)); + g_object_set_data_full(object, name, button, (GDestroyNotify)g_object_unref); + } + + gtk_widget_show(button); + +} + + +/****************************************************************************** +* * +* Paramètres : object = espace dédié à l'inscription de références. * +* name = nom à donner au nouveau composant. * +* image = nom de l'image stockée dans GTK. * +* size = taille de l'image éventuelle à faire figurer. * +* label = contenu de l'étiquette éventuelle associée. * +* handler = éventuelle fonction de sélection associée. * +* data = données à transmettre avec l'événement si besoin. * +* * +* Description : Crée et enregistre un composant 'GtkButton'. * +* * +* Retour : Simple bouton mis en place. * +* * +* Remarques : - * +* * +******************************************************************************/ + +GtkWidget *qck_create_button_with_named_img(GObject *object, const char *name, const char *image, GtkIconSize size, const char *label, GCallback handler, gpointer data) +{ + GtkWidget *result; /* Résultat à renvoyer */ + GtkWidget *picture; /* Image de représentation */ + + result = gtk_button_new(); + gtk_widget_set_can_default(result, TRUE); + + /* Création des éléments internes (1/2) */ + + if (image != NULL) + { + picture = gtk_image_new_from_icon_name(image, size); + gtk_widget_show(picture); + } + else + picture = NULL; + + _finish_button_with_img(result, object, name, picture, label); + + if (handler != NULL) + g_signal_connect(result, "clicked", handler, data); + + return result; + +} + + +/****************************************************************************** +* * * Paramètres : object = espace dédié à l'inscription de références. * * name = nom à donner au nouveau composant. * * image = nom de l'image stockée dans GTK. * @@ -418,13 +529,11 @@ GtkWidget *qck_create_button_with_css_img(GObject *object, const char *name, con { GtkWidget *result; /* Résultat à renvoyer */ GtkWidget *picture; /* Image de représentation */ - GtkWidget *caption; /* Etiquette à coller */ - GtkWidget *hbox; /* Séparation horizontale */ result = gtk_button_new(); gtk_widget_set_can_default(result, TRUE); - /* Création des éléments internes */ + /* Création des éléments internes (1/2) */ if (image != NULL) { @@ -434,44 +543,59 @@ GtkWidget *qck_create_button_with_css_img(GObject *object, const char *name, con gtk_widget_set_name(picture, image); } + else + picture = NULL; - if (label != NULL) - { - caption = gtk_label_new_with_mnemonic(label); - gtk_widget_show(caption); - } + _finish_button_with_img(result, object, name, picture, label); - /* Mise en place */ + if (handler != NULL) + g_signal_connect(result, "clicked", handler, data); - if (image != NULL && label != NULL) - { - hbox = gtk_hbox_new(FALSE, 2); - gtk_widget_show(hbox); - gtk_container_add(GTK_CONTAINER(result), hbox); + return result; - gtk_box_pack_start(GTK_BOX(hbox), picture, FALSE, FALSE, 0); - gtk_box_pack_start(GTK_BOX(hbox), caption, FALSE, FALSE, 0); +} - } - else if (image != NULL) - gtk_container_add(GTK_CONTAINER(result), picture); +/****************************************************************************** +* * +* Paramètres : object = espace dédié à l'inscription de références. * +* name = nom à donner au nouveau composant. * +* image = nom de l'image stockée dans GTK. * +* size = taille de l'image éventuelle à faire figurer. * +* label = contenu de l'étiquette éventuelle associée. * +* handler = éventuelle fonction de sélection associée. * +* data = données à transmettre avec l'événement si besoin. * +* * +* Description : Crée et enregistre un composant 'GtkCheckButton'. * +* * +* Retour : Simple bouton mis en place. * +* * +* Remarques : - * +* * +******************************************************************************/ + +GtkWidget *qck_create_toggle_button_with_named_img(GObject *object, const char *name, const char *image, GtkIconSize size, const char *label, GCallback handler, gpointer data) +{ + GtkWidget *result; /* Résultat à renvoyer */ + GtkWidget *picture; /* Image de représentation */ - else /*if (label != NULL)*/ - gtk_container_add(GTK_CONTAINER(result), caption); + result = gtk_toggle_button_new(); + gtk_widget_set_can_default(result, TRUE); - /* Interactions GTK... */ + /* Création des éléments internes (1/2) */ - if (G_IS_OBJECT(object) && name != NULL) + if (image != NULL) { - g_object_ref(G_OBJECT(result)); - g_object_set_data_full(object, name, result, (GDestroyNotify)g_object_unref); + picture = gtk_image_new_from_icon_name(image, size); + gtk_widget_show(picture); } + else + picture = NULL; - gtk_widget_show(result); + _finish_button_with_img(result, object, name, picture, label); if (handler != NULL) - g_signal_connect(result, "clicked", handler, data); + g_signal_connect(result, "toggled", handler, data); return result; @@ -802,6 +926,14 @@ void add_accelerator_to_menu_item(GtkWidget *item, const char *accelerator, GtkA gtk_accelerator_parse(accelerator, &key, &mods); + + gboolean force_accel_activation(GtkWidget *widget, guint signal_id, gpointer data) + { + return TRUE; + } + + g_signal_connect(item, "can-activate-accel", force_accel_activation, NULL); + gtk_widget_add_accelerator(item, "activate", group, key, mods, GTK_ACCEL_VISIBLE); |