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 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
| #include <stdlib.h> /* définition de EXIT_SUCCESS */
#include <gtk/gtk.h>
/* Prototypes des fonctions de callback */
static gboolean cb_show_spin (GtkSpinButton *, GdkEvent *, GtkWidget *);
static void cb_value_spin_changed (GtkSpinButton *, GtkScale *);
static void cb_value_scale_changed (GtkScale *, GtkSpinButton *);
int main (int argc, char *argv[])
{
/* Initialisation de GTK */
gtk_init (&argc, &argv);
/* Déclaration des objets */
GtkWindow *window, *popup;
GtkGrid *grid;
GtkAdjustment *adj1, *adj2;
GtkSpinButton *spin;
GtkScale *scale;
GtkLabel *label;
/* Initialisation des objets */
window = GTK_WINDOW (gtk_window_new (GTK_WINDOW_TOPLEVEL));
popup = GTK_WINDOW (gtk_window_new (GTK_WINDOW_TOPLEVEL));
grid = GTK_GRID (gtk_grid_new ());
adj1 = GTK_ADJUSTMENT (gtk_adjustment_new (0.5, 0.0, 1.02, 0.01, 0.02, 0.02));
adj2 = GTK_ADJUSTMENT (gtk_adjustment_new (0.5, 0.0, 1.02, 0.01, 0.02, 0.02));
spin = GTK_SPIN_BUTTON (gtk_spin_button_new (adj1, 0.01, 2)); /* après adj1 */
scale = GTK_SCALE (gtk_scale_new (GTK_ORIENTATION_VERTICAL, adj2)); /* après adj2 */
label = GTK_LABEL (gtk_label_new ("Valeur :"));
/* Paramétrage des objets */
gtk_window_set_title (window, "Mon exemple 1");
gtk_container_set_border_width (GTK_CONTAINER (window), 10);
gtk_widget_set_size_request (GTK_WIDGET (window), 600, 600);
gtk_window_set_decorated (popup, FALSE);
gtk_widget_set_size_request (GTK_WIDGET (popup), 1, 100);
gtk_scale_set_digits (scale, 2);
gtk_scale_set_draw_value (scale, FALSE);
gtk_grid_set_row_spacing (grid, 5);
gtk_grid_set_column_homogeneous (grid, FALSE);
gtk_grid_set_row_homogeneous (grid, FALSE);
gtk_widget_set_halign (GTK_WIDGET (grid), GTK_ALIGN_START);
gtk_widget_set_valign (GTK_WIDGET (grid), GTK_ALIGN_START);
/* Attachement des objets les uns dans les autres */
gtk_grid_attach (grid, GTK_WIDGET (label), 0 , 0, 1, 1);
gtk_grid_attach_next_to (grid, GTK_WIDGET (spin), GTK_WIDGET (label), GTK_POS_RIGHT, 1, 1);
gtk_container_add (GTK_CONTAINER (window), GTK_WIDGET (grid));
gtk_container_add (GTK_CONTAINER (popup), GTK_WIDGET (scale));
/* Déclaration des fonctions de callback */
g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL);
g_signal_connect (G_OBJECT (spin), "enter-notify-event", G_CALLBACK (cb_show_spin), (gpointer) popup);
g_signal_connect (G_OBJECT (spin), "value_changed", G_CALLBACK (cb_value_spin_changed), (gpointer) scale);
g_signal_connect (G_OBJECT (scale), "value_changed", G_CALLBACK (cb_value_scale_changed), (gpointer) spin);
/* Et c'est parti ! */
gtk_widget_show_all (GTK_WIDGET (window));
gtk_main ();
return EXIT_SUCCESS;
}
static gboolean cb_show_spin (GtkSpinButton *spin, GdkEvent *event, GtkWidget *popup)
{
gtk_widget_show_all (popup);
(void) spin;
(void) event;
return TRUE;
}
static void cb_value_spin_changed (GtkSpinButton *spin, GtkScale *scale)
{
gtk_range_set_value (GTK_RANGE (scale), gtk_spin_button_get_value (spin));
}
static void cb_value_scale_changed (GtkScale *scale, GtkSpinButton *spin)
{
gtk_spin_button_set_value (spin, gtk_range_get_value (GTK_RANGE (scale)));
} |
Partager