App-Widget
view release on metacpan or search on metacpan
lib/App/Widget/WizardSelector.pm view on Meta::CPAN
######################################################################
## $Id: WizardSelector.pm 7953 2006-10-16 19:16:56Z spadkins $
######################################################################
package App::Widget::WizardSelector;
$VERSION = (q$Revision: 7953 $ =~ /(\d[\d\.]*)/)[0]; # VERSION numbers generated by svn
use App;
use App::Widget::HierSelector;
use Data::Dumper;
@ISA = ( "App::Widget::HierSelector" );
use strict;
=head1 NAME
App::Widget::WizardSelector - A screen selector widget
=head1 SYNOPSIS
use App::Widget::WizardSelector;
$name = "get_data";
$w = App::Widget::WizardSelector->new($name);
print $w->html();
=cut
=head1 DESCRIPTION
This class implements a simple wizard screen selector.
=cut
######################################################################
# INITIALIZATION
######################################################################
sub _init {
my $self = shift;
$self->SUPER::_init(@_);
if (! $self->{selected}) {
$self->select_first();
}
}
sub select {
my ($self, $nodeattrib, $value) = @_;
my $success = $self->SUPER::select($nodeattrib, $value);
$self->open_selected_exclusively();
return($success);
}
sub open_exclusively {
my ($self, $opennodenumber) = @_;
#$self->{debug} .= "open_exclusively($opennodenumber)<br>";
$self->SUPER::open_exclusively($opennodenumber);
$self->select_first_open_leaf($opennodenumber);
}
# return the next enabled page in sequence.
sub next {
&App::sub_entry if ($App::trace);
my ($self) = @_;
my $context = $self->{context};
my $name = $self->{name};
my $node = $self->node_list();
my $selected_nodenumber = $self->{selected};
my @nodeidx = split(/\./,$selected_nodenumber);
my $nodelevel = $nodeidx[0];
my $nodebase = "";
if (defined $node->{1} && !defined $node->{2}) {
$nodelevel = 1;
$nodebase = "1.";
}
my $auth = $context->authorization();
my ($auth_name);
my $found = 0;
my $next;
for (; $nodelevel <= $#nodeidx; $nodelevel++) {
my $nodeidx = 1;
my $nodenumber = "$nodebase$nodeidx"; # create its node number
while (defined $node->{$nodenumber}) {
# the current node has been found, check to see if this page is the next active page in
# sequence. if so, then we're done.
if ($found) {
if (defined $node->{$nodenumber}) {
$auth_name = $node->{$nodenumber}{auth_name};
if (!$auth_name || $auth->is_authorized("/App/SessionObject/$name/$auth_name")) {
if ($node->{$nodenumber}{enabled} == 1) {
$next = $node->{$nodenumber}{wname};
last;
}
}
}
}
# if this is the current page, then mark it, and continue the traversal of pages for the next
# active page in the sequence.
$found = 1 if ($selected_nodenumber eq $nodenumber);
$nodeidx++;
$nodenumber = "$nodebase$nodeidx"; # create its node number
}
$nodebase .= "$nodeidx[$nodelevel].";
}
( run in 0.557 second using v1.01-cache-2.11-cpan-98e64b0badf )