need help in tutorial(alpha)
- From: Mat Wilson <mat jnm com au>
- To: gtk-perl-list gnome org
- Subject: need help in tutorial(alpha)
- Date: Thu, 18 May 2006 11:00:25 +1000
Hi all,
i'm a newb coming from a windows background and have fallen in love with
linux and am trying my hand at perl and gtk at the same time. I cant
seem to get this example code to run
use Glib qw/TRUE FALSE/;
use Gtk2 '-init';
my ($hscale, $vscale);
sub cb_pos_menu_select
{
my ($widget, $pos) = @_;
$hscale->set_value_pos($pos);
$vscale->set_value_pos($pos);
}
sub cb_update_menu_select
{
my ($widget, $policy) = @_;
$hscale->set_update_policy($policy);
$vscale->set_update_policy($policy);
}
sub cb_digits_scale
{
my ($adjustment) = @_;
# Set the number of decimal places to which adj->value is rounded
$hscale->set_digits($adjustment->value);
$vscale->set_digits($adjustment->value);
}
# We do not have a Glib::CLAMP function, so we provide it here.
sub clamp ($val, $low, $high)
{
return (($val > $high) ? $high : (($val < $low) ? $low : $val));
}
sub cb_page_size
{
my ($get, $set) = @_;
# Set the page size and page increment size of the sample
# adjustment to the value specified by the "Page Size" scale
$set->page_size($get->value);
$set->page_increment($get->value);
# This sets the adjustment and make it emit the "changed" signal to
# reconfigure all the widgets that are attached to this signal.
$set->set_value(clamp ($set->value,
$set->upper - $set->page_size,
$set->lower));
$set->signal_emit("changed");
}
sub cb_draw_value
{
my $button = shift;
$hscale->set_draw_value($button->get_active());
$vscale->set_draw_value($button->get_active());
}
# Convenience functions
sub make_menu_item
{
my ($name, $func, $data) = @_;
$item = Gtk2::MenuItem->new_with_label($name);
$item->signal_connect(activate => $func, $data);
$item->show;
return $item;
}
sub scale_set_default_values
{
my $scale = shift;
$scale->set_update_policy('continuous');
$scale->set_digits(1);
$scale->set_value_pos('top');
$scale->set_draw_value(TRUE);
}
# makes the sample window
sub create_range_controls
{
# Standard window-creating stuff
$window = Gtk2::Window->new('toplevel');
$window->signal_connect(destroy => sub { Gtk2->main_quit; });
$window->set_title("range controls");
$box1 = Gtk2::VBox->new(FALSE, 0);
$window->add($box1);
$box1->show;
$box2 = Gtk2::HBox->new(FALSE, 10);
$box2->set_border_width(10);
$box1->pack_start($box2, TRUE, TRUE, 0);
$box2->show;
# value, lower, upper, step_increment, page_increment, page_size
# Note that the page_size value only makes a difference for
# scrollbar widgets, and the highest value you'll get is actually
# (upper - page_size).
$adj1 = Gtk2::Adjustment->new(0.0, 0.0, 101.0, 0.1, 1.0, 1.0);
$vscale = Gtk2::VScale->new($adj1);
scale_set_default_values($vscale);
$box2->pack_start($vscale, TRUE, TRUE, 0);
$vscale->show;
$box3 = Gtk2::VBox->new(FALSE, 10);
$box2->pack_start($box3, TRUE, TRUE, 0);
$box3->show;
# Reuse the same adjustment
$hscale = Gtk2::HScale->new($adj1);
$hscale->set_size_request(200, -1);
scale_set_default_values($hscale);
$box3->pack_start($hscale, TRUE, TRUE, 0);
$hscale->show;
# Reuse the same adjustment again
$scrollbar = Gtk2::HScrollBar->new($adj1);
# Notice how this causes the scales to always be updated
# continuously when the scrollbar is moved
$scrollbar->set_update_policy('continuous');
$box3->pack_start($scrollbar, TRUE, TRUE, 0);
$scrollbar->show;
$box2 = Gtk2::HBox->new(FALSE, 10);
$box2->set_border_width(10);
$box1->pack_start($box2, TRUE, TRUE, 0);
$box2->show;
# A checkbutton to control whether the value is displayed or not
$button = Gtk2::CheckButton->new("Display value on scale widgets");
$button->set_active(TRUE);
$button->signal_connect(toggled => \&cb_draw_value);
$box2->pack_start($button, TRUE, TRUE, 0);
$button->show;
$box2 = Gtk2::HBox->new(FALSE, 10);
$box2->set_border_width(10);
# An option menu to change the position of the value
$label = Gtk2::Label->new("Scale Value Position:");
$box2->pack_start($label, FALSE, FALSE, 0);
$label->show;
$opt = Gtk2::OptionMenu->new;
$menu = Gtk2::Menu->new;
$item = make_menu_item("Top", \&cb_pos_menu_select, 'top');
$menu->append($item);
$item = make_menu_item("Bottom", \&cb_pos_menu_select, 'bottom');
$menu->append($item);
$item = make_menu_item("Left", \&cb_pos_menu_select, 'left');
$menu->append($item);
$item = make_menu_item("Right", \&cb_pos_menu_select, 'right');
$menu->append($item);
$opt->set_menu($menu);
$box2->pack_start($opt, TRUE, TRUE, 0);
$opt->show;
$box1->pack_start($box2, TRUE, TRUE, 0);
$box2->show;
$box2 = Gtk2::HBox->new(FALSE, 10);
$box2->set_border_width(10);
# Yet another option menu, this time for the update policy of the
# scale widgets
$label = Gtk2::Label->new("Scale Update Policy:");
$box2->pack_start($label, FALSE, FALSE, 0);
$label->show;
$opt = Gtk2::OptionMenu->new;
$menu = Gtk2::Menu->new;
$item = make_menu_item("Continuous", \&cb_update_menu_select, 'continuous');
$menu->append($item);
$item = make_menu_item("Discontinuous", \&cb_update_menu_select, 'discontinuous');
$menu->append($item);
$item = make_menu_item("Delayed", \&cb_update_menu_select, 'delayed');
$menu->append($item);
$opt->set_menu($menu);
$box2->pack_start($opt, TRUE, TRUE, 0);
$opt->show;
$box1->pack_start($box2, TRUE, TRUE, 0);
$box2->show;
$box2 = Gtk2::HBox->new(FALSE, 10);
$box2->set_border_width(10);
# An HScale widget for adjusting the number of digits on the
# sample scales.
$label = Gtk2::Label->new("Scale Digits:");
$box2->pack_start($label, FALSE, FALSE, 0);
$label->show;
$adj2 = Gtk2::Adjustment->new(1.0, 0.0, 5.0, 1.0, 1.0, 0.0);
$adj2->signal_connect(value_changed => \&cb_digits_scale);
$scale = Gtk2::HScale->new($adj2);
$scale->set_digits(0);
$box2->pack_start($scale, TRUE, TRUE, 0);
$scale->show;
$box1->pack_start($box2, TRUE, TRUE, 0);
$box2->show;
$box2 = Gtk2::HBox->new(FALSE, 10);
$box2->set_border_width(10);
# And, one last HScale widget for adjusting the page size of the
# scrollbar.
$label = Gtk2::Label->new("Scrollbar Page Size:");
$box2->pack_start($label, FALSE, FALSE, 0);
$label->show;
$adj2 = Gtk2::Adjustment->new(1.0, 1.0, 101.0, 1.0, 1.0, 0.0);
$adj2->signal_connect(value_changed => \&cb_page_size, $adj1);
$scale = Gtk2::HScale->new($adj2);
$scale->set_digits(0);
$box2->pack_start($scale, TRUE, TRUE, 0);
$scale->show;
$box1->pack_start($box2, TRUE, TRUE, 0);
$box2->show;
$separator = Gtk2::HSeparator->new;
$box1->pack_start($separator, FALSE, TRUE, 0);
$separator->show;
$box2 = Gtk2::VBox->new(FALSE, 10);
$box2->set_border_width(10);
$box1->pack_start($box2, FALSE, TRUE, 0);
$box2->show;
$button = Gtk2::Button->new("Quit");
$button->signal_connect(clicked => sub { Gtk2->main_quit; });
$box2->pack_start($button, TRUE, TRUE, 0);
$button->can_default(TRUE);
$button->grab_default;
$button->show;
$window->show;
}
create_range_controls();
Gtk2->main;
0;
I think the error is the lines
# This sets the adjustment and make it emit the "changed" signal to
# reconfigure all the widgets that are attached to this signal.
$set->set_value(clamp ($set->value,
$set->upper - $set->page_size,
$set->lower));
to do with the commas but i dont know how re-write this to get it to
work. (my perl reference doesn't explain how to fix this).
Thanks in advance.
Mat
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]