| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 
 | #include <stdlib.h>
#include <gtk/gtk.h>
 
typedef struct FenetreObj FenetreObj;
struct FenetreObj
{
    gpointer window;
    gpointer entry;
    gpointer label;
    gpointer progressbar;
    gpointer spinner;
    gpointer checkbutton;
    gpointer buttonQuit;
    gpointer buttonPbar;
    gpointer comboBoxText;
};
 
static void cb_quit (GtkWidget *p_wid, gpointer *p_data)
{
    gtk_main_quit();
}
 
static void test_f(GtkWidget *p_wid, FenetreObj *p_data)
{
    const gchar *text = gtk_entry_get_text(GTK_ENTRY( p_data->entry));
    printf("\ncoucou : %s \n", text);
 
    gtk_label_set_text(GTK_LABEL(p_data->label), text);
}
 
static void spin_f(GtkWidget *p_wid, FenetreObj *p_data)
{
    const gint checkEtat = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(p_data->checkbutton));
    printf("\ncheckbox état  : %d \n", checkEtat);
 
    if(checkEtat)
        gtk_spinner_start(              GTK_SPINNER(p_data->spinner));
    else
        gtk_spinner_stop(               GTK_SPINNER(p_data->spinner));
}
 
static void pBar_f(GtkWidget *p_wid, FenetreObj *p_data)
{
    gint i = 0;
    gchar text[4] = "00";
    gtk_grab_add(p_wid); //bloque l'utilisateur
    for(i=0; i<=100; i+=1)
    {
        //g_usleep (100000);
        gtk_progress_bar_set_fraction(  GTK_PROGRESS_BAR(p_data->progressbar), (gdouble)i/100);
        sprintf(text,"%d", i);
        gtk_progress_bar_set_text(      GTK_PROGRESS_BAR(p_data->progressbar), text);
        //gtk_events_pending();
        gtk_main_iteration(); //doevents
        //gtk_main_iteration_do(1); //marche pas non plus
        printf("\ndebug j=%f, text=%s", (gdouble)i/100, text);
    }
    gtk_grab_remove(p_wid); //on rend la main
}
 
static void cb_changed(GtkWidget *p_wid, FenetreObj *p_data)
{
    const gchar *cbtext = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(p_data->comboBoxText));
    printf("\ndebug : %s, a été selectionné dans comboboxtext", cbtext);
 
}
 
 
int main (int argc, char **argv)
{
    GtkBuilder *p_builder = NULL;
    GError *p_err = NULL;
 
    gtk_init (&argc, &argv);/* Initialisation de GTK+ */
    p_builder = gtk_builder_new();/* Creation d'un nouveau GtkBuilder */
    if (p_builder != NULL)
    {
        gtk_builder_add_from_file(p_builder, "1.glade", &p_err);/* Chargement du XML dans p_builder */
        if (p_err == NULL)
        {
            //initialisation des pointeurs dans la structure
            FenetreObj fen1;
            fen1.window         = gtk_builder_get_object (p_builder, "window1");
            fen1.entry          = gtk_builder_get_object (p_builder, "entry1");
            fen1.label          = gtk_builder_get_object (p_builder, "label1");
            fen1.progressbar    = gtk_builder_get_object (p_builder, "progressbar1");
            fen1.checkbutton    = gtk_builder_get_object (p_builder, "checkbutton1");
            fen1.buttonQuit     = gtk_builder_get_object (p_builder, "button1");
            fen1.buttonPbar     = gtk_builder_get_object (p_builder, "button2");
            fen1.spinner        = gtk_builder_get_object (p_builder, "spinner1");
            fen1.comboBoxText   = gtk_builder_get_object (p_builder, "comboboxtext1");
 
            //connection callbacks
            g_signal_connect(       fen1.buttonQuit,   "clicked", G_CALLBACK (cb_quit), &fen1);
            g_signal_connect(       fen1.entry,        "changed", G_CALLBACK (test_f), &fen1);
            g_signal_connect(       fen1.checkbutton,  "toggled", G_CALLBACK (spin_f), &fen1);
            g_signal_connect(       fen1.buttonPbar,   "clicked", G_CALLBACK (pBar_f), &fen1);
            g_signal_connect(       fen1.comboBoxText, "changed", G_CALLBACK (cb_changed), &fen1);
 
 
            //comboBoxText
            gtk_combo_box_text_append_text( GTK_COMBO_BOX_TEXT(fen1.comboBoxText), "Texte 1");
            gtk_combo_box_text_append_text( GTK_COMBO_BOX_TEXT(fen1.comboBoxText), "Texte 2");
            gtk_combo_box_text_append_text( GTK_COMBO_BOX_TEXT(fen1.comboBoxText), "Texte 3");
            gtk_combo_box_text_append_text( GTK_COMBO_BOX_TEXT(fen1.comboBoxText), "Texte 4");
            gtk_combo_box_text_remove(      GTK_COMBO_BOX_TEXT(fen1.comboBoxText), 1);
 
 
            //paramatrage fenetre
            /*GTK_WIN_POS_NONE : la fenêtre aura une position aléatoire lors de son affichage ;
            GTK_WIN_POS_CENTER : la fenêtre sera centrée à l'écran ;
            GTK_WIN_POS_MOUSE : le coin supérieur droit de la fenêtre correspondra à la position de la souris au moment de l'affichage ;
            GTK_WIN_POS_CENTER_ALWAYS : la fenêtre sera centrée et ne pourra être déplacée ;
            GTK_WIN_POS_CENTER_ON_PARENT : la fenêtre sera centrée par rapport à la fenêtre parente (notion abordée dans le prochain chapitre).*/
            gtk_window_set_position(        GTK_WINDOW(fen1.window), GTK_WIN_POS_CENTER);
            gtk_window_set_title(           GTK_WINDOW(fen1.window), "Titre");
            //gtk_window_move(GTK_WINDOW(p_win), GTK_WIN_POS_CENTER_ALWAYS, GTK_WIN_POS_CENTER_ALWAYS);
 
 
            gtk_widget_show_all(            fen1.window);
            gtk_main();
        }
        else
        {
            /* Affichage du message d'erreur de GTK+ */
            g_error("%s", p_err->message);
            g_error_free(p_err);
        }
    }
 
    return EXIT_SUCCESS;
} | 
Partager