App-Widget
view release on metacpan or search on metacpan
lib/App/Widget/DualListSelect.pm view on Meta::CPAN
$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;
}
sub move_down {
my ($self) = @_;
my $selected = $self->{selected};
my @values = $self->get_values();
my (%moved, @newvalues, $value);
foreach $value (@$selected) {
$moved{$value} = 1;
}
for (my $i = $#values; $i > 0; $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;
}
######################################################################
# OUTPUT METHODS
######################################################################
sub _set_child_widget_values {
my ($self, $values) = @_;
my $name = $self->{name};
my $context = $self->{context};
my $domain = $self->{domain};
my $allvalues = $context->value_domain($domain)->values();
my @selected_list = $self->get_values();
my @unselected_list = ();
my ($value, %value_exists, $value_exists);
foreach $value (@selected_list) {
if (defined $value) {
$value_exists{$value} = 1;
$value_exists = 1;
}
}
for (my $v = 0; $v <= $#$allvalues; $v++) {
$value = $allvalues->[$v];
if (!$value_exists{$value}) {
push(@unselected_list, $value);
}
}
push(@selected_list, $NONE) if ($#selected_list == -1);
push(@unselected_list, $NONE) if ($#unselected_list == -1);
$context->widget("$name-selected")->{values} = \@selected_list;
$context->widget("$name-unselected")->{values} = \@unselected_list;
$context->so_delete($name, "selected");
$context->so_delete($name, "unselected");
}
sub html {
my $self = shift;
my $context = $self->{context};
my $name = $self->{name};
$self->_set_child_widget_values();
my $unselected_list = $context->widget("${name}-unselected")->html();
my $selected_list = $context->widget("${name}-selected")->html();
my $select_button = $context->widget("${name}-select_button")->html();
my $unselect_button = $context->widget("${name}-unselect_button")->html();
my $up_button = $context->widget("${name}-up_button")->html();
my $dn_button = $context->widget("${name}-dn_button")->html();
my $html = <<EOF;
<table border=0 cellspacing=3>
<tr>
<td align=center valign=middle rowspan=2>$unselected_list</td>
<td align=center valign=bottom>$select_button</td>
<td align=center valign=middle rowspan=2>$selected_list</td>
<td align=center valign=bottom>$up_button</td>
</tr>
( run in 0.523 second using v1.01-cache-2.11-cpan-39bf76dae61 )