summaryrefslogtreecommitdiff
path: root/src/gtkext/easygtk.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gtkext/easygtk.c')
-rw-r--r--src/gtkext/easygtk.c186
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);