1 2 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
|
#include <stdlib.h>
#include <gtk/gtk.h>
#include <unistd.h>
gboolean state = TRUE;
void OnButtonRefresh (GtkWidget *pWidget, gpointer data);
void OnButtonStop (GtkWidget *pWidget, gpointer data)
{
state = FALSE;
}
int main(int argc,char **argv)
{
GtkWidget* pWindow;
GtkWidget *pMainVBox;
GtkWidget *pProgress;
GtkWidget *pButton;
gtk_init(&argc,&argv);
pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(pWindow), "GtkProgressBar");
gtk_window_set_default_size(GTK_WINDOW(pWindow), 320, 200);
gtk_container_set_border_width(GTK_CONTAINER(pWindow), 4);
pMainVBox = gtk_vbox_new(TRUE, 0);
gtk_container_add(GTK_CONTAINER(pWindow), pMainVBox);
/* Creation de la barre de progression */
pProgress = gtk_progress_bar_new();
gtk_box_pack_start(GTK_BOX(pMainVBox), pProgress, TRUE, FALSE, 0);
pButton = gtk_button_new_from_stock(GTK_STOCK_REFRESH);
gtk_box_pack_start(GTK_BOX(pMainVBox), pButton, TRUE, FALSE, 0);
g_signal_connect_swapped(G_OBJECT(pButton), "clicked", G_CALLBACK(OnButtonRefresh), pProgress);
pButton = gtk_button_new_from_stock(GTK_STOCK_STOP);
gtk_box_pack_start(GTK_BOX(pMainVBox), pButton, TRUE, FALSE, 0);
g_signal_connect_swapped(G_OBJECT(pButton), "clicked", G_CALLBACK(OnButtonStop), pProgress);
gtk_widget_show_all(pWindow);
g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
gtk_main();
return EXIT_SUCCESS;
}
void OnButtonRefresh ( GtkWidget *pWidget, gpointer data )
{
gdouble dFraction;
gint i;
gint iTotal = 2000;
state = TRUE;
/* Initialisation */
gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(pWidget), 0.0);
/* Ici on grab sur la barre de progression pour 2 raisons : */
/* - cela evite a GTK+ de regarder tous les evenements ce qui rend plus rapide */
/* l'utilisation de gtk_main_iteration() */
/* - on empeche toute action de l'utilisateur */
// gtk_grab_add(pWidget);
for(i = 0 ; i < iTotal && state ; ++i)
{
dFraction = (gdouble)i / (gdouble)iTotal;
/* Modification de la valeur de la barre de progression */
gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(pWidget), dFraction);
usleep ( 5000 );
/* On donne la main a GTK+ */
while ( gtk_events_pending() ) gtk_main_iteration();
//gtk_main_iteration ();
}
/* On supprime le grab sur la barre de progression */
// gtk_grab_remove(pWidget);
} |
Partager