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 )