#!perl
use strict;
use warnings;
use Glib qw/TRUE FALSE/;
use Gtk2 -init;
use Gtk2::Phat;
my $window = Gtk2::Window->new;
$window->set_title('Fanslider Demo');
$window->set_border_width(5);
$window->set_position('center');
$window->signal_connect('delete-event' => sub { Gtk2->main_quit });
my $vbox = Gtk2::VBox->new(FALSE, 5);
$window->add($vbox);
$vbox->show;
my $adj = Gtk2::Adjustment->new(0, -1, 1, 0.01, 0.1, 0);
my $slider = Gtk2::Phat::HFanSlider->new($adj);
$vbox->pack_start($slider, TRUE, TRUE, 0);
$slider->show;
my $hbox = Gtk2::HBox->new(FALSE, 5);
$vbox->pack_start($hbox, TRUE, TRUE, 0);
$hbox->show;
my $label = Gtk2::Label->new('Value:');
$hbox->pack_start($label, TRUE, TRUE, 0);
$label->show;
my $spin = Gtk2::SpinButton->new($adj, 0, 2);
$hbox->pack_start($spin, TRUE, TRUE, 0);
$spin->show;
$label = Gtk2::Label->new('Lower:');
$hbox->pack_start($label, TRUE, TRUE, 0);
$label->show;
my $spin_adj = Gtk2::Adjustment->new(-1, -5, 0, 0.01, 0, 0);
$spin_adj->signal_connect('value-changed' => \&cb_lower, $adj);
$spin = Gtk2::SpinButton->new($spin_adj, 0, 2);
$hbox->pack_start($spin, TRUE, TRUE, 0);
$spin->show;
$label = Gtk2::Label->new('Upper:');
$hbox->pack_start($label, TRUE, TRUE, 0);
$label->show;
$spin_adj = Gtk2::Adjustment->new(1, 0, 5, 0.01, 0, 0);
$spin_adj->signal_connect('value-changed' => \&cb_upper, $adj);
$spin = Gtk2::SpinButton->new($spin_adj, 0, 2);
$hbox->pack_start($spin, TRUE, TRUE, 0);
$spin->show;
my $check = Gtk2::CheckButton->new_with_label('Inverted');
$check->signal_connect('toggled' => \&cb_inverted, $slider);
$hbox->pack_start($check, TRUE, TRUE, 0);
$check->show;
$check = Gtk2::CheckButton->new_with_label('Sensitive');
$check->set_active(TRUE);
$check->signal_connect('toggled' => \&cb_sensitive, $slider);
$hbox->pack_start($check, TRUE, TRUE, 0);
$check->show;
$adj = Gtk2::Adjustment->new(0, -1, 1, 0.01, 0.1, 0);
$slider = Gtk2::Phat::VFanSlider->new($adj);
$vbox->pack_start($slider, TRUE, TRUE, 0);
$slider->show;
$hbox = Gtk2::HBox->new(FALSE, 5);
$vbox->pack_start($hbox, TRUE, TRUE, 0);
$hbox->show;
$label = Gtk2::Label->new('Value:');
$hbox->pack_start($label, TRUE, TRUE, 0);
$label->show;
$spin = Gtk2::SpinButton->new($adj, 0, 2);
$hbox->pack_start($spin, TRUE, TRUE, 0);
$spin->show;
$label = Gtk2::Label->new('Lower:');
$hbox->pack_start($label, TRUE, TRUE, 0);
$label->show;
$spin_adj = Gtk2::Adjustment->new(-1, -5, 0, 0.01, 0, 0);
$spin_adj->signal_connect('value-changed' => \&cb_lower, $adj);
$spin = Gtk2::SpinButton->new($spin_adj, 0, 2);
$hbox->pack_start($spin, TRUE, TRUE, 0);
$spin->show;
$label = Gtk2::Label->new('Upper:');
$hbox->pack_start($label, TRUE, TRUE, 0);
$label->show;
$spin_adj = Gtk2::Adjustment->new(1, 0, 5, 0.01, 0, 0);
$spin_adj->signal_connect('value-changed' => \&cb_upper, $adj);
$spin = Gtk2::SpinButton->new($spin_adj, 0, 2);
$hbox->pack_start($spin, TRUE, TRUE, 0);
$spin->show;
$check = Gtk2::CheckButton->new_with_label('Inverted');
$check->signal_connect('toggled' => \&cb_inverted, $slider);
$hbox->pack_start($check, TRUE, TRUE, 0);
$check->show;
$check = Gtk2::CheckButton->new_with_label('Sensitive');
$check->set_active(TRUE);
$check->signal_connect('toggled' => \&cb_sensitive, $slider);
$hbox->pack_start($check, TRUE, TRUE, 0);
$check->show;
$window->show;
Gtk2->main;
sub cb_inverted {
my ($check, $slider) = @_;
$slider->set_inverted($check->get_active);
}
sub cb_sensitive {
my ($check, $slider) = @_;
$slider->set_sensitive($check->get_active);
}
sub cb_lower {
my ($lower, $slider) = @_;
if ($lower->value >= $slider->upper) {
$lower->set_value($slider->upper - 0.01);
return;
}
if ($lower->value > $slider->value) {
$lower->set_value($slider->value);
return;
}
$slider->lower($lower->value);
$slider->changed;
}
sub cb_upper {
my ($upper, $slider) = @_;
if ($upper->value <= $slider->lower) {
$upper->set_value($slider->lower - 0.01);
return;
}
if ($upper->value < $slider->value) {
$upper->set_value($slider->value);
return;
}
$slider->upper($upper->value);
$slider->changed;
}