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
| #include <stdlib.h>
#include <stdio.h>
#include <windows.h>
// Specific librairies
#include <gtk/gtk.h>
void OnDestroy(GtkWidget *pWidget, gpointer pData);
void OnTop(GtkWidget *pWidget, gpointer pData);
static GtkWidget *pProgressBar;
int main(int argc,char **argv)
{
// Declare widgets
GtkWidget *pWindow;
GtkWidget *pTable;
GtkWidget *pTopBtn;
gtk_init(&argc,&argv);
// Create the main window
pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_position(GTK_WINDOW(pWindow), GTK_WIN_POS_CENTER);
gtk_window_set_default_size(GTK_WINDOW(pWindow), 320, 200);
gtk_window_set_title(GTK_WINDOW(pWindow), "Control Panel");
g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(OnDestroy), NULL);
// Create table : 2 rows / 4 columns
pTable=gtk_table_new(2,4,TRUE);
gtk_container_add(GTK_CONTAINER(pWindow), GTK_WIDGET(pTable));
// Create TOP Button
pTopBtn = gtk_button_new_with_label("Click on me");
g_signal_connect(G_OBJECT(pTopBtn), "clicked", G_CALLBACK(OnTop),NULL);
// Create progress bar
pProgressBar = gtk_progress_bar_new();
gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(pProgressBar),
GTK_PROGRESS_LEFT_TO_RIGHT);
// Insert the widgets in the table
gtk_table_attach_defaults(GTK_TABLE(pTable), pTopBtn,
1, 3, 0, 1);
gtk_table_attach(GTK_TABLE(pTable), pProgressBar,
0, 4, 1, 2,
GTK_EXPAND | GTK_FILL, GTK_EXPAND,
0, 0);
// Display main window
gtk_widget_show_all(pWindow);
// Start events loop
gtk_main();
return EXIT_SUCCESS;
}
void OnDestroy(GtkWidget *pWidget, gpointer pData)
{
gtk_main_quit();
}
void OnTop(GtkWidget *pWidget, gpointer pData)
{
gdouble dFraction;
gint i, iTotal;
iTotal = 10;
// Use grab to prevent the user to press any button
gtk_grab_add(pProgressBar);
for(i = 1 ; i <= iTotal ; ++i)
{
Sleep(500);
dFraction = (gdouble)i / (gdouble)iTotal;
gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(pProgressBar), dFraction);
// GTK+ becomes active to refresh the progress bar
gtk_main_iteration ();
}
gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(pProgressBar), 0.0);
// Give the hand to the user
gtk_grab_remove(pProgressBar);
} |
Partager