function make_adj (low, up, step, pg_inc, pg_size) { local adj = new(GtkAdjustment); adj.lower = low; adj.upper = up; adj.step_increment = step; adj.page_increment = pg_inc; adj.page_size = pg_size; adj; } function change_digits(spinner, spin) { spinner.digits = spin.get_value_as_int(); } function get_value(spinner, data, label) { if (data == 1) label.set_text(format("%d", spinner.get_value_as_int())); else label.set_text(format("%f", spinner.get_value_as_float())); } function create_spins () { local frame, hbox, main_vbox, vbox, vbox2, spinner2, spinner, button, label, val_label, adj; win_spins = new (GtkWindow); win_spins.signal ("destroy", #win_spins = nil); win_spins.title = "GtkSpinButton"; win_spins.border_width = 0; main_vbox = new(GtkVBox); main_vbox.spacing = 5; main_vbox.border_width = 10; win_spins.add(main_vbox); frame = new(GtkFrame); frame.label = "Not accelerated"; main_vbox.pack_start(frame, TRUE, TRUE, 0); vbox = new(GtkVBox); vbox.border_width = 5; frame.add(vbox); /* Day, month, year spinners */ hbox = new(GtkHBox); vbox.pack_start(hbox, TRUE, TRUE, 5); vbox2 = new(GtkVBox); hbox.pack_start(vbox2, TRUE, TRUE, 5); label = new(GtkLabel); label.set_text("Day :"); label.set_alignment(0, 0.5); vbox2.pack_start(label, FALSE, TRUE, 0); adj = make_adj(1.0, 31.0, 1.0, 5.0, 0.0); spinner = new(GtkSpinButton); spinner.configure(adj, 0, 0); spinner.set_value(1); spinner.set_wrap(TRUE); spinner.set_shadow_type(GTK_SHADOW_OUT); vbox2.pack_start(spinner, FALSE, TRUE, 0); vbox2 = new(GtkVBox); hbox.pack_start(vbox2, TRUE, TRUE, 5); label = new(GtkLabel); label.set_text("Month :"); label.set_alignment(0, 0.5); vbox2.pack_start(label, FALSE, TRUE, 0); adj = make_adj(1.0, 12.0, 1.0, 5.0, 0.0); spinner = new(GtkSpinButton); spinner.configure(adj, 0, 0); spinner.set_value(1); spinner.set_wrap(TRUE); spinner.set_shadow_type(GTK_SHADOW_ETCHED_IN); vbox2.pack_start(spinner, FALSE, TRUE, 0); vbox2 = new(GtkVBox); hbox.pack_start(vbox2, TRUE, TRUE, 5); label = new(GtkLabel); label.set_text("Year :"); label.set_alignment(0, 0.5); vbox2.pack_start(label, FALSE, TRUE, 0); adj = make_adj(0.0, 2100.0, 1.0, 100.0, 0.0); spinner = new(GtkSpinButton); spinner.configure(adj, 0, 0); spinner.set_value(1998); spinner.set_wrap(TRUE); spinner.set_shadow_type(GTK_SHADOW_IN); spinner.set_usize(55, 0); vbox2.pack_start(spinner, FALSE, TRUE, 0); frame = new(GtkFrame); frame.label = "Accelerated"; main_vbox.pack_start(frame, TRUE, TRUE, 0); vbox = new(GtkVBox); vbox.border_width = 5; frame.add(vbox); hbox = new(GtkHBox); vbox.pack_start(hbox, FALSE, TRUE, 5); vbox2 = new(GtkVBox); hbox.pack_start(vbox2, TRUE, TRUE, 5); label = new(GtkLabel); label.set_text("Value :"); label.set_alignment(0, 0.5); vbox2.pack_start(label, FALSE, TRUE, 0); adj = make_adj(-100000.0, 10000.0, 0.5, 100.0, 0.0); spinner1 = new(GtkSpinButton); spinner1.configure(adj, 1.0, 2); spinner1.set_value(0.0); spinner1.set_wrap(TRUE); spinner1.set_usize(100, 0); vbox2.pack_start(spinner1, FALSE, TRUE, 0); vbox2 = new(GtkVBox); hbox.pack_start(vbox2, TRUE, TRUE, 5); label = new(GtkLabel); label.set_text("Digits :"); label.set_alignment(0, 0.5); vbox2.pack_start(label, FALSE, TRUE, 0); adj = make_adj(1, 5, 1, 1, 0); spinner2 = new(GtkSpinButton); spinner2.configure(adj, 0.0, 0); spinner2.set_value(2); spinner2.set_wrap(TRUE); adj.signal("value_changed", `change_digits(@spinner1, @spinner2)); vbox2.pack_start(spinner2, FALSE, TRUE, 0); hbox = new(GtkHBox); vbox.pack_start(hbox, FALSE, TRUE, 5); button = new(GtkCheckButton); button.label = "Snap to 0.5-ticks"; button.signal("clicked", `(@spinner1).set_snap_to_ticks((@button).get_active())); vbox.pack_start(button, TRUE, TRUE, 0); button.set_active(TRUE); button = new(GtkCheckButton); button.label = "Numeric only input mode"; button.signal("clicked", `(@spinner1).set_numeric((@button).get_active())); vbox.pack_start(button, TRUE, TRUE, 0); button.set_active(TRUE); val_label = new(GtkLabel); hbox = new(GtkHBox); vbox.pack_start(hbox, FALSE, TRUE, 5); button = new(GtkButton); button.label = "Value as Int"; button.user_data = val_label; button.signal("clicked", `get_value(@spinner1, 1, @val_label)); hbox.pack_start(button, TRUE, TRUE, 5); button = new(GtkButton); button.label = "Value as Float"; button.user_data = val_label; button.signal("clicked", `get_value(@spinner1, 2, @val_label)); hbox.pack_start(button, TRUE, TRUE, 5); vbox.pack_start(val_label, TRUE, TRUE, 0); val_label.set_text("0"); hbox = new(GtkHBox); main_vbox.pack_start(hbox, FALSE, TRUE, 0); button = new(GtkButton); button.label = "Close"; button.signal("clicked", `(@win_spins).destroy()); hbox.pack_start(button, TRUE, TRUE, 5); win_spins.show_all(); win_spins; } function main () { local window, win_spins; TRUE=1; FALSE=0; window = create_spins (); window.signal ("destroy", #exit_program(0)); init_ipc("spins", "spinsq"); gtk_main (); }
Copyright © 1995-2010 by Cogent Real-Time Systems, Inc. All rights reserved.