cvsuser 05/08/09 12:26:19
Added: App-Widget/lib/App/Widget FileTreeSelector.pm
HierSelector.pm IconPaneSelector.pm
TabbedSelector.pm TreeSelector.pm
Removed: App-Widget/lib/App/Widget HierView.pm SelectorView.pm
TabbedView.pm TreeView.pm
Log:
Views renamed as Selectors
Revision Changes Path
1.1 p5ee/App-Widget/lib/App/Widget/FileTreeSelector.pm
Index: FileTreeSelector.pm
===================================================================
######################################################################
## $Id: FileTreeSelector.pm,v 1.1 2005/08/09 19:26:19 spadkins Exp $
######################################################################
package App::Widget::FileTreeSelector;
$VERSION = do { my @r=(q$Revision: 1.1 $=~/\d+/g); sprintf
"%d."."%02d"x$#r,@r};
use App;
use App::Widget::TreeSelector;
@ISA = ( "App::Widget::TreeSelector" );
use strict;
=head1 NAME
App::Widget::FileTreeSelector - An HTML tree view
=head1 SYNOPSIS
use App::Widget::FileTreeSelector;
$name = "get_data";
$w = App::Widget::FileTreeSelector->new($name);
print $w->html();
=cut
=head1 DESCRIPTION
This class implements a graphical tree view such as is used in
Windows Explorer.
=cut
######################################################################
# INITIALIZATION
######################################################################
sub _init {
my $self = shift;
$self->set_default("curr_dir", "/");
$self->{selected} = "1.1";
$self->{node} = {
1 => { open => 0, value => 'root', },
# 1.1 => { open => 1, value => 'Criteria', },
# 1.2 => { open => 0, value => 'Rate Comparison',},
# 1.3 => { open => 0, value => 'Rate Detail', },
# 1.4 => { open => 0, value => 'Profiles', },
# 1.5 => { open => 0, value => 'Request Queue', },
};
$self->SUPER::_init(@_);
}
1;
1.1 p5ee/App-Widget/lib/App/Widget/HierSelector.pm
Index: HierSelector.pm
===================================================================
######################################################################
## $Id: HierSelector.pm,v 1.1 2005/08/09 19:26:19 spadkins Exp $
######################################################################
package App::Widget::HierSelector;
$VERSION = do { my @r=(q$Revision: 1.1 $=~/\d+/g); sprintf
"%d."."%02d"x$#r,@r};
use App;
use App::Widget;
@ISA = ( "App::Widget" );
use strict;
=head1 NAME
App::Widget::HierSelector - A generic hierarchical view
=head1 SYNOPSIS
use App::Widget::HierSelector;
$name = "tree";
$w = App::Widget::HierSelector->new($name);
print $w->html();
=cut
######################################################################
# CONSTANTS
######################################################################
######################################################################
# ATTRIBUTES
######################################################################
# {node}{number}{type} # whether open or closed
# {node}{number}{open} # 1=open 0=closed
# {node}{number}{value} #
# {node}{number}{label} #
# {node}{number}{icon} # icon to use (default, closed)
# {node}{number}{openicon} # icon to use when open (optional)
# {node}{number}{hovericon} # icon to use when cursor over icon
# INPUTS FROM THE ENVIRONMENT
=head1 DESCRIPTION
This class implements a generic hierarchical view such as is useful
for a TreeSelector, a Menu, a ToolbarSet, or an IconPaneSelector.
The main function of a HierSelector is to display a hierarchical set of
data and allow the user to generate events based on that view.
=cut
######################################################################
# INITIALIZATION
######################################################################
# uncomment this when I need to do more than just call SUPER::_init()
sub _init {
my $self = shift;
$self->SUPER::_init(@_);
}
######################################################################
# EVENTS
######################################################################
# Usage: $widget->handle_event($wname, $event, @args);
sub handle_event {
my ($self, $wname, $event, @args) = @_;
my ($node, $nodenumber, $x, $y);
$node = $self->get("node");
$self->set("node", $node);
if ($event eq "open") {
($nodenumber, $x, $y) = @args;
$node->{$nodenumber}{open} = 1;
}
elsif ($event eq "open_exclusively") {
($nodenumber, $x, $y) = @args;
$self->open_exclusively($nodenumber);
}
elsif ($event eq "close") {
($nodenumber, $x, $y) = @args;
$node->{$nodenumber}{open} = 0;
}
elsif ($event eq "select") {
($nodenumber, $x, $y) = @args;
$self->set("selected", $nodenumber); # save node number
# intentionally bubble "select" event to the container
if ($wname =~ /^(.*)-([^.]+)$/) {
my $parent = $1;
my $result =
$self->{context}->widget($parent)->handle_event($wname, $event, @args);
return $result;
}
}
else {
return $self->SUPER::handle_event($wname, $event, @args);
}
return 1;
}
sub select_first {
my $self = shift;
my $node = $self->get("node");
my ($nodebase, $nodeidx, $nodenumber, $nodenumberfound, $nodelevel);
my (@nextnodebase, @nextnodeidx, @nextnodelevel);
@nextnodebase = (""); # the next nodenumber to check is
"$nodebase$nodeidx" (nodenumber = "1" is first)
@nextnodeidx = (1); # check nodenumber "1" next
@nextnodelevel = (1); # index into the resulting table that the folder
icon will go
$nodenumberfound = "";
while ($#nextnodebase > -1) {
$nodebase = pop(@nextnodebase); # get info about next node to check
$nodeidx = pop(@nextnodeidx);
$nodelevel = pop(@nextnodelevel);
$nodenumber = "$nodebase$nodeidx"; # create its node number
if (defined $node->{$nodenumber}) { # if the node exists...
if ($nodelevel > 1) { # we have found the first
node below the uppermost level
$nodenumberfound = $nodenumber;
last;
}
push(@nextnodebase, $nodebase); # let's search for the
node's brother (same depth, next idx)
push(@nextnodeidx, $nodeidx+1); # (next idx)
push(@nextnodelevel, $nodelevel); # (same level)
push(@nextnodebase, "${nodenumber}."); # let's search for the
node's children (1 deeper, idx 1)
push(@nextnodeidx, 1); # (idx is 1)
push(@nextnodelevel, $nodelevel+1); # (1 deeper)
}
}
if ($nodenumberfound) {
$self->set("selected", $nodenumberfound);
my $basenodenumber = $nodenumberfound;
$basenodenumber =~ s/\..*//;
$self->open_exclusively($basenodenumber);
}
else {
$self->open_exclusively("1");
}
}
sub select {
my ($self, $nodeattrib, $value) = @_;
my $node = $self->get("node");
my $success = 0;
foreach my $nodenumber (keys %$node) {
if ($node->{$nodenumber}{$nodeattrib} eq $value) {
$self->set("selected", $nodenumber);
$success = 1;
last;
}
}
return($success);
}
sub open_selected_exclusively {
my ($self) = @_;
$self->open_exclusively($self->{selected});
}
sub open_exclusively {
my ($self, $opennodenumber) = @_;
my ($nodebase, $nodeidx, $nodenumber);
my $node = $self->get("node");
$self->set("node", $node);
$nodebase = $opennodenumber;
if ($nodebase =~ /(.*)\.[^\.]+$/) {
$nodebase = $1 . ".";
}
else {
$nodebase = "";
}
$nodeidx = 1;
while (1) {
$nodenumber = "$nodebase$nodeidx";
last if (!defined $node->{$nodenumber});
$node->{$nodenumber}{open} = 0;
$nodeidx++;
}
if (defined $node->{$opennodenumber}) {
$node->{$opennodenumber}{open} = 1;
}
if (!defined $node->{"$opennodenumber.1"}) {
$self->set("selected", $opennodenumber);
}
}
######################################################################
# METHODS
######################################################################
sub get_selected {
my ($self, $nodeattrib) = @_;
my ($node, $nodenumber);
$nodenumber = $self->get("selected");
return undef if (!defined $nodenumber);
return $nodenumber if (!defined $nodeattrib);
$node = $self->get("node");
return $node->{$nodenumber}{$nodeattrib};
}
######################################################################
# OUTPUT METHODS
######################################################################
sub html {
my $self = shift;
my ($node, $html, $label);
$node = $self->get("node");
my ($nodebase, $nodeidx, $nodenumber, $nodelevel);
my (@nextnodebase, @nextnodeidx, @nextnodelevel);
@nextnodebase = (""); # the next nodenumber to check is
"$nodebase$nodeidx" (nodenumber = "1" is first)
@nextnodeidx = (1); # check nodenumber "1" next
@nextnodelevel = (1); # index into the resulting table that the folder
icon will go
$html = "";
while ($#nextnodebase > -1) {
$nodebase = pop(@nextnodebase); # get info about next node to check
$nodeidx = pop(@nextnodeidx);
$nodelevel = pop(@nextnodelevel);
$nodenumber = "$nodebase$nodeidx"; # create its node number
if (defined $node->{$nodenumber}) { # if the node exists...
$label = $node->{$nodenumber}{label};
$label = $node->{$nodenumber}{value} if (!defined $label);
$label = "" if (!defined $label);
$html .= (" " x ($nodelevel-1)) if ($nodelevel > 1);
$html .= $label;
$html .= $node->{$nodenumber}{open} ? " (open)" : " (closed)";
$html .= "<br>\n";
push(@nextnodebase, $nodebase); # let's search for the
node's brother (same depth, next idx)
push(@nextnodeidx, $nodeidx+1); # (next idx)
push(@nextnodelevel, $nodelevel); # (same level)
push(@nextnodebase, "${nodenumber}."); # let's search for the
node's children (1 deeper, idx 1)
push(@nextnodeidx, 1); # (idx is 1)
push(@nextnodelevel, $nodelevel+1); # (1 deeper)
}
}
$html;
}
1;
1.1 p5ee/App-Widget/lib/App/Widget/IconPaneSelector.pm
Index: IconPaneSelector.pm
===================================================================
######################################################################
## $Id: IconPaneSelector.pm,v 1.1 2005/08/09 19:26:19 spadkins Exp $
######################################################################
package App::Widget::IconPaneSelector;
$VERSION = do { my @r=(q$Revision: 1.1 $=~/\d+/g); sprintf
"%d."."%02d"x$#r,@r};
use App;
use App::Widget::HierSelector;
@ISA = ( "App::Widget::HierSelector" );
use strict;
=head1 NAME
App::Widget::IconPaneSelector - A screen selector widget
=head1 SYNOPSIS
use App::Widget::IconPaneSelector;
$name = "get_data";
$w = App::Widget::IconPaneSelector->new($name);
print $w->html();
=cut
=head1 DESCRIPTION
This class implements a screen selector view such as is used in
M$ Outlook.
=cut
######################################################################
# INITIALIZATION
######################################################################
sub _init {
my $self = shift;
$self->SUPER::_init(@_);
if (! $self->get("selected")) {
$self->select_first();
}
}
######################################################################
# OUTPUT METHODS
######################################################################
sub html {
my $self = shift;
my ($context, $name, $node, $html, $label, $icon);
$context = $self->{context};
$name = $self->{name};
$node = $self->get("node");
my ($bgcolor, $fontface, $fontsize, $fontcolor, $fontbegin, $fontend);
$bgcolor = $self->get("bgcolor", "#888888");
$fontface = $self->get("fontface", "verdana,geneva,arial,sans-serif");
$fontsize = $self->get("fontsize", "-2");
$fontcolor = $self->get("fontcolor", "#ffffff");
$fontbegin = "<font face=\"$fontface\" size=\"$fontsize\"
color=\"$fontcolor\">";
$fontend = "</font>";
my ($nodebase, $nodeidx, $nodenumber, $nodelabel, $parentnodenumber,
$nodelevel, $opennodenumber);
my (@nextnodebase, @nextnodeidx, @nextnodelevel);
@nextnodebase = (""); # the next nodenumber to check is
"$nodebase$nodeidx" (nodenumber = "1" is first)
@nextnodeidx = (1); # check nodenumber "1" next
@nextnodelevel = (1); # index into the resulting table that the folder
icon will go
$html = <<EOF;
<table border="0" cellpadding="0" cellspacing="0" height="100%" width="1%">
<tr>
<td bgcolor="$bgcolor" align="center" valign="top">$fontbegin
EOF
$opennodenumber = 9999;
while ($#nextnodebase > -1) {
$nodebase = pop(@nextnodebase); # get info about next node to check
$nodeidx = pop(@nextnodeidx);
$nodelevel = pop(@nextnodelevel);
$nodenumber = "$nodebase$nodeidx"; # create its node number
if (defined $node->{$nodenumber}) { # if the node exists...
if ($nodelevel == 1) {
$opennodenumber = $nodenumber if ($node->{$nodenumber}{open});
if ($nodenumber == $opennodenumber+1) {
$html .= <<EOF;
<p> $fontend</td>
</tr>
<tr>
<td bgcolor="$bgcolor" align="center" valign="bottom">$fontbegin
EOF
}
$label = $node->{$nodenumber}{label};
$label = $node->{$nodenumber}{value} if (!defined $label);
$label = "" if (!defined $label);
$html .= $context->widget("$name-button$nodenumber",
class => "App::Widget::ImageButton",
image_script => "app-button",
volatile => 1,
height => "19",
width => "98",
bevel => "2",
label => $label,
event_target => $name,
event => "open_exclusively",
args => $nodenumber,
)->html();
$html .= "<br>\n";
}
else {
$icon = $node->{$nodenumber}{icon};
if (!defined $icon) {
$parentnodenumber = $nodenumber;
$parentnodenumber =~ s/\.[^.]+$//;
$icon = $node->{$parentnodenumber}{icon};
}
$icon = "notes.gif" if (!defined $icon);
$label = $node->{$nodenumber}{label};
$label = $node->{$nodenumber}{value} if (!defined $label);
$label = "" if (!defined $label);
$nodelabel = $nodenumber;
$nodelabel =~ s/\./_/g;
$html .= "<p>";
$html .= $context->widget("$name-button$nodelabel",
class => "App::Widget::ImageButton",
image => "images/IconPaneSelector/$icon",
height => "36",
width => "36",
label => $label,
event => "select",
event_target => $name,
args => $nodenumber,
)->html();
$html .= "<br>$label\n";
}
push(@nextnodebase, $nodebase); # let's search for the
node's brother (same depth, next idx)
push(@nextnodeidx, $nodeidx+1); # (next idx)
push(@nextnodelevel, $nodelevel); # (same level)
if ($node->{$nodenumber}{open} || $nodelevel > 1) {
push(@nextnodebase, "${nodenumber}."); # let's search for
the node's children (1 deeper, idx 1)
push(@nextnodeidx, 1); # (idx is 1)
push(@nextnodelevel, $nodelevel+1); # (1 deeper)
}
}
}
$html .= <<EOF;
$fontend</td>
</tr>
</table>
EOF
$html;
}
1;
1.1 p5ee/App-Widget/lib/App/Widget/TabbedSelector.pm
Index: TabbedSelector.pm
===================================================================
######################################################################
## $Id: TabbedSelector.pm,v 1.1 2005/08/09 19:26:19 spadkins Exp $
######################################################################
package App::Widget::TabbedSelector;
$VERSION = do { my @r=(q$Revision: 1.1 $=~/\d+/g); sprintf
"%d."."%02d"x$#r,@r};
use App;
use App::Widget::HierSelector;
@ISA = ( "App::Widget::HierSelector" );
use strict;
=head1 NAME
App::Widget::TabbedSelector - A screen selector widget
=head1 SYNOPSIS
use App::Widget::TabbedSelector;
$name = "get_data";
$w = App::Widget::TabbedSelector->new($name);
print $w->html();
=cut
=head1 DESCRIPTION
This class implements a screen selector view such as is used in
M$ Outlook.
=cut
######################################################################
# INITIALIZATION
######################################################################
sub _init {
my $self = shift;
$self->SUPER::_init(@_);
if (! $self->get("selected")) {
$self->select_first();
}
}
sub select {
my ($self, $nodeattrib, $value) = @_;
my $success = $self->SUPER::select($nodeattrib, $value);
$self->open_selected_exclusively();
return($success);
}
######################################################################
# OUTPUT METHODS
######################################################################
sub html {
my $self = shift;
my ($context, $name, $node, $html, $label, $icon);
$context = $self->{context};
$name = $self->{name};
$node = $self->get("node");
my ($bgcolor, $width, $fontface, $fontsize, $fontcolor, $fontbegin,
$fontend);
my ($html_url_dir, $xgif);
$bgcolor = $self->get("bgcolor", "#888888");
$width = $self->get("width", "100%");
$fontface = $self->get("fontface", "verdana,geneva,arial,sans-serif");
$fontsize = $self->get("fontsize", "-2");
$fontcolor = $self->get("fontcolor", "#ffffff");
#$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 = "";
$nodelevel = 0;
$nodebase = "";
if (defined $node->{1} && !defined $node->{2}) {
$nodelevel = 1;
$nodebase = "1.";
}
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}) {
$label = $node->{$nodenumber}{label};
$label = $node->{$nodenumber}{value} if (!defined $label);
$label = "" if (!defined $label);
$w = $context->widget("$name-button$nodenumber",
class => "App::Widget::ImageButton",
image_script => "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();
$html .= "<!--\n -->";
$nodeidx++;
$nodenumber = "$nodebase$nodeidx"; # create its node number
}
$nodebase .= "$nodeidx[$nodelevel].";
$html .= "</td>\n";
$html .= " <td height=16 width=\"99%\"><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;
1.1 p5ee/App-Widget/lib/App/Widget/TreeSelector.pm
Index: TreeSelector.pm
===================================================================
######################################################################
## $Id: TreeSelector.pm,v 1.1 2005/08/09 19:26:19 spadkins Exp $
######################################################################
package App::Widget::TreeSelector;
$VERSION = do { my @r=(q$Revision: 1.1 $=~/\d+/g); sprintf
"%d."."%02d"x$#r,@r};
use App;
use App::Widget::HierSelector;
@ISA = ( "App::Widget::HierSelector" );
use strict;
=head1 NAME
App::Widget::TreeSelector - An HTML tree view
=head1 SYNOPSIS
use App::Widget::TreeSelector;
$name = "get_data";
$w = App::Widget::TreeSelector->new($name);
print $w->html();
=cut
=head1 DESCRIPTION
This class implements a graphical tree view such as is used in
Windows Explorer.
=cut
######################################################################
# INITIALIZATION
######################################################################
# uncomment this when I need to do more than just call SUPER::_init()
#sub _init {
# my $self = shift;
# $self->SUPER::_init(@_);
#}
######################################################################
# OUTPUT METHODS
######################################################################
sub html {
my $self = shift;
my ($context, $name, $node);
$context = $self->{context};
$name = $self->{name};
$node = $self->get("node");
my ($nodebase, $nodeidx, $nodenumber, $nodelevel, $maxnodelevel);
my (@nextnodebase, @nextnodeidx, @nextnodelevel, @shownnodenumber,
@shownnodelevel);
@nextnodebase = (""); # the next nodenumber to check is
"$nodebase$nodeidx" (nodenumber = "1" is first)
@nextnodeidx = (1); # check nodenumber "1" next
@nextnodelevel = (1); # index into the resulting table that the folder
icon will go
@shownnodenumber = (); # list of the nodenumbers which are to be shown
@shownnodelevel = (); # the levels at which those shown nodes exist
$maxnodelevel = 0;
while ($#nextnodebase > -1) {
$nodebase = pop(@nextnodebase); # get info about next node to check
$nodeidx = pop(@nextnodeidx);
$nodelevel = pop(@nextnodelevel);
$nodenumber = "$nodebase$nodeidx"; # create its node number
if (defined $node->{$nodenumber}) { # if the node exists...
push(@shownnodenumber, $nodenumber); # take note that it exists
so that we can display it
push(@shownnodelevel, $nodelevel); # take note of its depth
(so we display it properly)
push(@nextnodebase, $nodebase); # let's search for the
node's brother (same depth, next idx)
push(@nextnodeidx, $nodeidx+1); # (next idx)
push(@nextnodelevel, $nodelevel); # (same level)
$maxnodelevel = $nodelevel+1 if ($nodelevel+1 > $maxnodelevel);
# maxnodelevel will be # cols in table
if ($node->{$nodenumber}{open}) { # if the node is
open...
push(@nextnodebase, "${nodenumber}."); # let's search for
the node's children (1 deeper, idx 1)
push(@nextnodeidx, 1); # (idx is 1)
push(@nextnodelevel, $nodelevel+1); # (1 deeper)
}
}
}
my ($row, $col, $row2, @colislink);
my ($html_url_dir, $imgstart, $imgend, $imgbuttonstart, $imgbuttonend);
my ($html, $label, $colspan, $isparent, $open);
for ($row = $#shownnodenumber; $row >= 0; $row--) {
$nodenumber = $shownnodenumber[$row];
$nodelevel = $shownnodelevel[$row];
$col = $nodelevel - 1;
for ($row2 = $row-1; $row2 >= 0; $row2--) {
$colislink[$row2][$col] = 1;
last if ($shownnodelevel[$row2] == $nodelevel - 1);
}
}
$html_url_dir = $self->{context}->get_option("html_url_dir");
$imgstart = "<img src=\"$html_url_dir/images/TreeSelector/";
$imgend = "\" width=\"19\" height=\"16\" border=\"0\"/>";
$imgbuttonstart = "<input type=\"image\"
src=$html_url_dir/images/TreeSelector/";
$imgbuttonend = " width=\"19\" height=\"16\" border=\"0\"/>";
$html = "";
$html .= "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n";
for ($row = 0; $row <= $#shownnodenumber; $row++) {
$nodenumber = $shownnodenumber[$row];
$nodelevel = $shownnodelevel[$row];
$html .= " <tr>\n";
for ($col = 0; $col <= $maxnodelevel+1; $col++) {
if ($col < $nodelevel-1) {
if ($colislink[$row][$col]) {
$html .= " <td>${imgstart}vbar.gif${imgend}</td>\n";
}
else {
$html .= " <td></td>\n";
}
}
elsif ($col == $nodelevel-1) {
$isparent = (defined $node->{"$nodenumber.1"});
$open = $node->{$nodenumber}{open};
if ($isparent) {
if ($open) {
$html .= " <td>${imgbuttonstart}minus.gif
name=\"app.event.$name.close($nodenumber)\" ${imgbuttonend}</td>\n";
}
else {
$html .= " <td>${imgbuttonstart}plus.gif
name=\"app.event.$name.open($nodenumber)\" ${imgbuttonend}</td>\n";
}
}
else {
if ($colislink[$row][$col]) {
$html .= " <td>${imgstart}tee.gif${imgend}</td>\n";
}
else {
$html .= " <td>${imgstart}ell.gif${imgend}</td>\n";
}
}
}
elsif ($col == $nodelevel) {
if ($node->{$nodenumber}{open}) {
$html .= " <td>${imgbuttonstart}ofolder.gif
name=\"app.event.$name.select($nodenumber)\" ${imgbuttonend}</td>\n";
}
else {
$html .= " <td>${imgbuttonstart}cfolder.gif
name=\"app.event.$name.select($nodenumber)\" ${imgbuttonend}</td>\n";
}
}
else {
$colspan = $maxnodelevel - $nodelevel;
$label = $node->{$nodenumber}{label};
$label = $node->{$nodenumber}{value} if (!defined $label);
$label = "" if (!defined $label);
$html .= " <td nowrap colspan=\"$colspan\"><font
face=\"verdana,geneva,arial,sans-serif\" size=\"-2\">$label</font></td>\n";
last;
}
}
$html .= " </tr>\n";
}
$html .= "</table>\n";
$html;
}
1;