App-Widget
view release on metacpan or search on metacpan
lib/App/Widget/DualListSelect.pm view on Meta::CPAN
label => " Up ",
event => "move_up",
event_target => $name,
lightweight => 1,
);
$context->widget("${name}-dn_button",
class => "App::Widget::Button",
label => " Dn ",
event => "move_down",
event_target => $name,
lightweight => 1,
);
}
else {
$context->widget("${name}-select_button",
class => "App::Widget::ImageButton",
image => "images/DualListSelect/rtarrow.gif",
height => "19",
width => "19",
label => "Select",
event => "select",
event_target => $name,
lightweight => 1,
);
$context->widget("${name}-unselect_button",
class => "App::Widget::ImageButton",
image => "images/DualListSelect/lfarrow.gif",
height => "19",
width => "19",
label => "Unselect",
event => "unselect",
event_target => $name,
lightweight => 1,
);
$context->widget("${name}-up_button",
class => "App::Widget::ImageButton",
image => "images/DualListSelect/uparrow.gif",
height => "19",
width => "19",
label => "Up",
event => "move_up",
event_target => $name,
lightweight => 1,
);
$context->widget("${name}-dn_button",
class => "App::Widget::ImageButton",
image => "images/DualListSelect/dnarrow.gif",
height => "19",
width => "19",
label => "Down",
event => "move_down",
event_target => $name,
lightweight => 1,
);
}
my @curr_values = $self->get_values();
$self->SUPER::_init(@_);
}
######################################################################
# EVENTS
######################################################################
# Usage: $widget->handle_event($event, @args);
sub handle_event {
my ($self, $wname, $event, @args) = @_;
my $name = $self->{name};
my $context = $self->{context};
my $success = 0;
if ($event eq "select") {
$success = $self->select();
}
elsif ($event eq "unselect") {
$success = $self->unselect();
}
elsif ($event eq "move_up") {
$success = $self->move_up();
}
elsif ($event eq "move_down") {
$success = $self->move_down();
}
else {
$success = $self->SUPER::handle_event($wname, $event, @args);
}
return($success);
}
######################################################################
# METHODS
######################################################################
sub select {
my ($self) = @_;
my $unselected = $self->{unselected};
my @values = $self->get_values();
if ($unselected) {
if ($#values > -1) {
push(@values, @$unselected);
}
else {
@values = @$unselected;
}
}
$self->set_value(\@values);
return 1;
}
sub unselect {
my ($self) = @_;
my $selected = $self->{selected};
my @values = $self->get_values();
my (%unselected, @newvalues);
foreach my $value (@$selected) {
$unselected{$value} = 1;
}
foreach my $value (@values) {
if (!$unselected{$value}) {
push(@newvalues, $value);
}
}
$self->set_value(\@newvalues);
return 1;
}
sub move_up {
my ($self) = @_;
my $selected = $self->{selected};
my @values = $self->get_values();
my (%moved, @newvalues, $value);
foreach $value (@$selected) {
$moved{$value} = 1;
}
for (my $i = 0; $i < $#values; $i++) {
if ($moved{$values[$i+1]} && !$moved{$values[$i]}) {
$value = $values[$i+1];
$values[$i+1] = $values[$i];
$values[$i] = $value;
}
}
$self->set_value(\@values);
return 1;
}
( run in 0.578 second using v1.01-cache-2.11-cpan-98e64b0badf )