Author: spadkins
Date: Tue Aug 7 12:17:24 2007
New Revision: 9828
Added:
p5ee/trunk/App-Widget/lib/App/Widget/WizardSelector.pm (contents, props
changed)
Log:
Initial revision.
Added: p5ee/trunk/App-Widget/lib/App/Widget/WizardSelector.pm
==============================================================================
--- (empty file)
+++ p5ee/trunk/App-Widget/lib/App/Widget/WizardSelector.pm Tue Aug 7
12:17:24 2007
@@ -0,0 +1,307 @@
+
+######################################################################
+## $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;
[EMAIL PROTECTED] = ( "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].";
+ }
+
+ &App::sub_exit($next) if ($App::trace);
+ return($next);
+}
+
+
+# return the previous enabled page in sequence.
+sub prev {
+ &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 $nodeidx = $nodeidx[1];
+ my $nodebase = "";
+
+ if (defined $node->{1} && !defined $node->{2}) {
+ $nodelevel = 1;
+ $nodebase = "1.";
+ }
+
+ my $auth = $context->authorization();
+ my ($auth_name);
+
+ my $found = 0;
+ my $prev;
+
+ my $nodenumber = "$nodebase$nodeidx"; # create its node number
+
+ while ($nodeidx >=0 && defined $node->{$nodenumber}) {
+
+ 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) {
+ $prev = $node->{$nodenumber}{wname};
+ last;
+ }
+ }
+ }
+ }
+
+ $found = 1 if ($selected_nodenumber eq $nodenumber);
+
+ $nodeidx--;
+ $nodenumber = "$nodebase$nodeidx"; # create its node number
+ }
+
+ &App::sub_exit($prev) if ($App::trace);
+ return($prev);
+}
+
+# enable or disable a page in the selectors collection of pages.
+sub enable {
+ &App::sub_entry if ($App::trace);
+ my ($self, $nodeattrib, $value, $enable) = @_;
+ my $success = 0;
+ my $node = $self->{node};
+
+ $enable = ($enable =~ /y|yes|true|1/i) ? 1 : 0;
+
+ foreach my $nodenumber (keys %$node) {
+ if ($node->{$nodenumber}{$nodeattrib} eq $value) {
+ $node->{$nodenumber}{enabled} = $enable;
+ $success = 1;
+ last;
+ }
+ }
+ &App::sub_exit($success) if ($App::trace);
+ return($success);
+}
+
+
+
+######################################################################
+# OUTPUT METHODS
+######################################################################
+
+sub html {
+ my $self = shift;
+ my ($html, $label, $icon);
+ my $context = $self->{context};
+ my $name = $self->{name};
+ my $node = $self->node_list();
+
+ my ($bgcolor, $width, $fontface, $fontsize, $fontcolor, $fontbegin,
$fontend);
+ my ($html_url_dir, $xgif);
+
+ $bgcolor = $self->{bgcolor} || "#cccccc";
+ $width = $self->{width} || "100%";
+ $fontface = $self->{fontface} || "verdana,geneva,arial,sans-serif";
+ $fontsize = $self->{fontsize} || "-2";
+ $fontcolor = $self->{fontcolor} || "#ffffff";
+
+ $bgcolor = " bgcolor=\"$bgcolor\"";
+
+ #$fontbegin = "<font face=\"$fontface\" size=\"$fontsize\"
color=\"$fontcolor\">";
+ #$fontend = "</font>";
+
+ my ($nodebase, $nodeidx, $nodenumber, $nodelabel, $parentnodenumber,
$nodelevel, $opennodenumber);
+ my (@nodeidx, $selected_nodenumber, $w);
+
+ $selected_nodenumber = $self->{selected};
+ @nodeidx = split(/\./,$selected_nodenumber);
+
+ $html_url_dir = $context->get_option("html_url_dir");
+ $xgif = "$html_url_dir/images/Widget/dot_clear.gif";
+
+ $html = $self->{debug} || "";
+
+ $nodelevel = 0;
+ $nodebase = "";
+ if (defined $node->{1} && !defined $node->{2}) {
+ $nodelevel = 1;
+ $nodebase = "1.";
+ }
+ my $auth = $context->authorization();
+ my ($auth_name);
+ for (; $nodelevel <= $#nodeidx; $nodelevel++) {
+ $html .= '<table border="0" cellpadding="0" cellspacing="0"
width="100%">' . "\n";
+ $html .= " <tr><td rowspan=\"3\" width=\"1%\" height=\"19\" nowrap>";
+
+ $nodeidx = 1;
+ $nodenumber = "$nodebase$nodeidx"; # create its node number
+ while (defined $node->{$nodenumber}) {
+
+ $auth_name = $node->{$nodenumber}{auth_name};
+ if (!$auth_name ||
$auth->is_authorized("/App/SessionObject/$name/$auth_name")) {
+ $label = $node->{$nodenumber}{label};
+ $label = $node->{$nodenumber}{value} if (!defined $label);
+ $label = "" if (!defined $label);
+
+ if ($node->{$nodenumber}{enabled} == 1) {
+ $w = $context->widget("$name-button$nodenumber",
+ class => "App::Widget::ImageButton",
+ image_script => "App/app-button",
+ volatile => 1,
+ height => "19",
+ width => "127",
+ bevel => "2",
+ label => $label,
+ event_target => $name,
+ event => "open_exclusively",
+ args => $nodenumber,
+ type => "tab",
+ );
+
+ #$w->set("selected", $node->{$nodenumber}{open} ? 1 : 0);
+ if ($node->{$nodenumber}{open}) {
+ $w->set("selected", 1);
+ }
+ else {
+ $w->set("selected", 0);
+ }
+
+ $html .= $w->html();
+ } else {
+ # $html .= "DISABLED <br>";
+ }
+
+ $html .= "<!-- -->";
+ }
+
+ $nodeidx++;
+ $nodenumber = "$nodebase$nodeidx"; # create its node number
+ }
+ $nodebase .= "$nodeidx[$nodelevel].";
+ $html .= "</td>\n";
+ $html .= " <td height=16 width=\"99%\"$bgcolor><img src=transp.gif
height=16 width=1></td>\n";
+ $html .= " <td height=\"16\" width=\"99%\"></td>\n";
+ $html .= " </tr>\n";
+ $html .= " <tr>\n";
+ $html .= " <td height=\"1\" width=\"99%\" bgcolor=\"#000000\"><img
src=\"$xgif\" height=\"1\" width=\"1\"></td>\n";
+ $html .= " </tr>\n";
+ $html .= " <tr>\n";
+ $html .= " <td height=\"2\" width=\"99%\" bgcolor=\"#ffffff\"><img
src=\"$xgif\" height=\"2\" width=\"1\"></td>\n";
+ $html .= " </tr>\n";
+ $html .= "</table>\n";
+ }
+
+ $html;
+}
+1;