Utiliser les fichiers ressource avec GTK

Date de publication : 20/10/2007 , Date de mise à jour : 20/10/2007




IV. Conclusion
IV-A. Exemple
IV-B. Conclusion


IV. Conclusion


IV-A. Exemple

Voici un exemple correct et complet :
main.c
#include <stdlib.h>
#include <gtk/gtk.h>
#include "callbacks.h"

int main (int argc, char *argv[])
{
        /* initialisation de GTK+ */
    gtk_init(&argc, &argv);

        /* définition du fichier de ressource */
    gtk_rc_parse("gtk.rc");

        /* création des variables */
    GtkWidget* pWindow;
    GtkWidget* pButton;
    GtkWidget* pLabel;
    GtkWidget* pBox;

        /* définitions des widgets */
    pBox = gtk_vbox_new(2, TRUE);
    pButton = gtk_button_new_with_label("Message");
    gtk_widget_set_name(pButton, "my_green_button");
    g_signal_connect(G_OBJECT(pButton), "clicked", G_CALLBACK(OnHelloWord), pWindow);
    pLabel = gtk_label_new("Coucou !");
    gtk_widget_set_name(pLabel, "my_red_label");

        /* création et paramètrage de la fenêtre */
    pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_default_size(GTK_WINDOW(pWindow), 330, 80);
    gtk_window_set_title(GTK_WINDOW(pWindow), "Les fichiers de ressources avec GTK+");
    g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
    gtk_widget_set_name(pWindow, "my_blue_window");

        /* ajout des éléments dans la VBox */
    gtk_box_pack_start(GTK_BOX(pBox), pButton, TRUE, TRUE, 0);
    gtk_box_pack_start(GTK_BOX(pBox), pLabel, FALSE, FALSE, 0);
    gtk_container_add(GTK_CONTAINER(pWindow), pBox);

        /* affichage des widgets */
    gtk_widget_show_all(pWindow);

        /* lancement de la boucle événementielle */
    gtk_main();
    return EXIT_SUCCESS;
}
callbacks.h
#include <stdlib.h>
#include <gtk/gtk.h>

void OnHelloWord(GtkWidget* pButton, gpointer data);
callbacks.c
#include <stdlib.h>
#include <gtk/gtk.h>

void OnHelloWord(GtkWidget* pButton, gpointer data)
{
        /* création d'une boîte de dialogue */
    GtkWidget* pDialog = gtk_dialog_new_with_buttons
("Hello Word !", NULL, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL);
    gtk_widget_set_name(pDialog, "my_yellow_dialog");

        /* placement les éléments dans la boîte de dialogue */
    GtkWidget* pLabel = gtk_label_new("Hello Word !");
    gtk_widget_set_name(GTK_WIDGET(pLabel), "my_pink_label");
    GtkWidget* pImage = gtk_image_new_from_stock(GTK_STOCK_INFO, GTK_ICON_SIZE_DIALOG);
    gtk_box_pack_start(GTK_BOX(GTK_DIALOG(pDialog)->vbox), pImage, FALSE, FALSE, 0);
    gtk_box_pack_start(GTK_BOX(GTK_DIALOG(pDialog)->vbox), pLabel, FALSE, FALSE, 0);

        /* connexion des signaux */
    g_signal_connect_swapped(pDialog, "response", G_CALLBACK(gtk_widget_destroy), pDialog);

        /* affichage de la boîte de dialogue  */
    gtk_widget_show_all(pDialog);
}
gtk.rc
# Pour la fenêtre bleue
style "blue_window"
{
	bg[NORMAL] = {0.0, 0.0, 1.0}
	bg[PRELIGHT] = {0.0, 0.0, 1.0}
	bg[SELECTED] = {0.0, 0.0, 1.0}
	bg[INSENSITIVE] = {0.0, 0.0, 1.0}
}

# Pour la boîte de dialogue jaune
style "yellow_window"
{
	bg[NORMAL] = {1.0, 1.0, 0.0}
	bg[PRELIGHT] = {1.0, 1.0, 0.0}
	bg[SELECTED] = {1.0, 1.0, 0.0}
	bg[INSENSITIVE] = {1.0, 1.0, 0.0}
}

# Pour le label rose
style "pink_label"
{
  	fg[NORMAL] = {1.0, 0.0, 1.0}
	fg[PRELIGHT] = {1.0, 0.0, 1.0}
	fg[SELECTED] = {1.0, 0.0, 1.0}
	fg[INSENSITIVE] = {1.0, 0.0, 1.0}
}

# Pour le bouton vert
style "green_button"
{
  	fg[NORMAL] = {0.0, 1.0, 0.0}
	fg[PRELIGHT] = {0.0, 1.0, 0.0}
	fg[SELECTED] = {0.0, 1.0, 0.0}
	fg[INSENSITIVE] = {0.0, 1.0, 0.0}
}

# Pour le label rouge
style "red_label"
{
	fg[NORMAL] = {1.0, 0.0, 0.0}
	fg[PRELIGHT] = {1.0, 0.0, 0.0}
	fg[SELECTED] = {1.0, 0.0, 0.0}
	fg[INSENSITIVE] = {1.0, 0.0, 0.0}
}

# Attribution des styles aux classes
widget "*my_blue_window" style "blue_window"
widget "*my_pink_label" style "pink_label"
widget "*my_green_button" style "green_button"
widget "*my_red_label" style "red_label"
widget "*my_yellow_dialog" style "yellow_window"
Vous pouvez télécharger le code source de l'exemple sous forme de zip src ici(mirroir HTTP).
Quelques remarques :

  1. Vous pouvez remarquer que j'ai attribué "manuellement" un style à un nom de widget, j'aurais très bien pu appliquer le style "red_label" à tous les labels, mais pour les besoins de l'exemple j'ai utilisé plusieurs couleurs.
  2. Ne perdez pas de vu que la plupart des contrôles GTK+ en contiennent d'autres, ainsi, si j'avais utilisé le style "red_label" de manière générique sur tous les labels, le texte du bouton(qui est un label) aurait été rouge aussi !
  3. Je n'ai pas ici eu besoin de l'héritage de style, mais rien ne vous empêche de l'utiliser.
  4. Il est possible d'intéragir avec les fichiers RC depuis votre programme, plus d'informations en ici.
Observez bien cet exemple... Si vous l'avez compris, vous avez tout compris ! Résultat de l'éxécution du programme


IV-B. Conclusion

Les fichiers de ressources GTK+ offrent une personnalisation des applications très puissante comme nous l'avons vu au cours de ce tutoriel. Habillement utilisé les fichiers de ressources GTK+ offrent une très grande souplesse et une grande puissance. Je ne puis que vous souhaitez bon développement !



 

Valid XHTML 1.1!Valid CSS!