6 static GtkWidget *spinner1;
8 void toggle_snap( GtkWidget *widget,
11 gtk_spin_button_set_snap_to_ticks (spin, GTK_TOGGLE_BUTTON (widget)->active);
14 void toggle_numeric( GtkWidget *widget,
17 gtk_spin_button_set_numeric (spin, GTK_TOGGLE_BUTTON (widget)->active);
20 void change_digits( GtkWidget *widget,
23 gtk_spin_button_set_digits (GTK_SPIN_BUTTON (spinner1),
24 gtk_spin_button_get_value_as_int (spin));
27 void get_value( GtkWidget *widget,
34 spin = GTK_SPIN_BUTTON (spinner1);
35 label = GTK_LABEL (g_object_get_data (G_OBJECT (widget), "user_data"));
36 if (GPOINTER_TO_INT (data) == 1)
37 sprintf (buf, "%d", gtk_spin_button_get_value_as_int (spin));
39 sprintf (buf, "%0.*f", spin->digits,
40 gtk_spin_button_get_value (spin));
41 gtk_label_set_text (label, buf);
62 gtk_init (&argc, &argv);
64 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
66 g_signal_connect (G_OBJECT (window), "destroy",
67 G_CALLBACK (gtk_main_quit),
70 gtk_window_set_title (GTK_WINDOW (window), "Spin Button");
72 main_vbox = gtk_vbox_new (FALSE, 5);
73 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 10);
74 gtk_container_add (GTK_CONTAINER (window), main_vbox);
76 frame = gtk_frame_new ("Not accelerated");
77 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
79 vbox = gtk_vbox_new (FALSE, 0);
80 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
81 gtk_container_add (GTK_CONTAINER (frame), vbox);
83 /* Day, month, year spinners */
85 hbox = gtk_hbox_new (FALSE, 0);
86 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 5);
88 vbox2 = gtk_vbox_new (FALSE, 0);
89 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
91 label = gtk_label_new ("Day :");
92 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
93 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
95 adj = (GtkAdjustment *) gtk_adjustment_new (1.0, 1.0, 31.0, 1.0,
97 spinner = gtk_spin_button_new (adj, 0, 0);
98 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
99 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
101 vbox2 = gtk_vbox_new (FALSE, 0);
102 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
104 label = gtk_label_new ("Month :");
105 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
106 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
108 adj = (GtkAdjustment *) gtk_adjustment_new (1.0, 1.0, 12.0, 1.0,
110 spinner = gtk_spin_button_new (adj, 0, 0);
111 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
112 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
114 vbox2 = gtk_vbox_new (FALSE, 0);
115 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
117 label = gtk_label_new ("Year :");
118 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
119 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
121 adj = (GtkAdjustment *) gtk_adjustment_new (1998.0, 0.0, 2100.0,
123 spinner = gtk_spin_button_new (adj, 0, 0);
124 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), FALSE);
125 gtk_widget_set_size_request (spinner, 55, -1);
126 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
128 frame = gtk_frame_new ("Accelerated");
129 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
131 vbox = gtk_vbox_new (FALSE, 0);
132 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
133 gtk_container_add (GTK_CONTAINER (frame), vbox);
135 hbox = gtk_hbox_new (FALSE, 0);
136 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
138 vbox2 = gtk_vbox_new (FALSE, 0);
139 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
141 label = gtk_label_new ("Value :");
142 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
143 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
145 adj = (GtkAdjustment *) gtk_adjustment_new (0.0, -10000.0, 10000.0,
147 spinner1 = gtk_spin_button_new (adj, 1.0, 2);
148 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner1), TRUE);
149 gtk_widget_set_size_request (spinner1, 100, -1);
150 gtk_box_pack_start (GTK_BOX (vbox2), spinner1, FALSE, TRUE, 0);
152 vbox2 = gtk_vbox_new (FALSE, 0);
153 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
155 label = gtk_label_new ("Digits :");
156 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
157 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
159 adj = (GtkAdjustment *) gtk_adjustment_new (2, 1, 5, 1, 1, 0);
160 spinner2 = gtk_spin_button_new (adj, 0.0, 0);
161 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner2), TRUE);
162 g_signal_connect (G_OBJECT (adj), "value_changed",
163 G_CALLBACK (change_digits),
164 (gpointer) spinner2);
165 gtk_box_pack_start (GTK_BOX (vbox2), spinner2, FALSE, TRUE, 0);
167 hbox = gtk_hbox_new (FALSE, 0);
168 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
170 button = gtk_check_button_new_with_label ("Snap to 0.5-ticks");
171 g_signal_connect (G_OBJECT (button), "clicked",
172 G_CALLBACK (toggle_snap),
173 (gpointer) spinner1);
174 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
175 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
177 button = gtk_check_button_new_with_label ("Numeric only input mode");
178 g_signal_connect (G_OBJECT (button), "clicked",
179 G_CALLBACK (toggle_numeric),
180 (gpointer) spinner1);
181 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
182 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
184 val_label = gtk_label_new ("");
186 hbox = gtk_hbox_new (FALSE, 0);
187 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
188 button = gtk_button_new_with_label ("Value as Int");
189 g_object_set_data (G_OBJECT (button), "user_data", val_label);
190 g_signal_connect (G_OBJECT (button), "clicked",
191 G_CALLBACK (get_value),
192 GINT_TO_POINTER (1));
193 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
195 button = gtk_button_new_with_label ("Value as Float");
196 g_object_set_data (G_OBJECT (button), "user_data", val_label);
197 g_signal_connect (G_OBJECT (button), "clicked",
198 G_CALLBACK (get_value),
199 GINT_TO_POINTER (2));
200 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
202 gtk_box_pack_start (GTK_BOX (vbox), val_label, TRUE, TRUE, 0);
203 gtk_label_set_text (GTK_LABEL (val_label), "0");
205 hbox = gtk_hbox_new (FALSE, 0);
206 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
208 button = gtk_button_new_with_label ("Close");
209 g_signal_connect_swapped (G_OBJECT (button), "clicked",
210 G_CALLBACK (gtk_widget_destroy),
212 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
214 gtk_widget_show_all (window);
216 /* Enter the event loop */