App-Widget
view release on metacpan or search on metacpan
lib/App/Widget/IconPaneSelector.pm view on Meta::CPAN
######################################################################
## $Id: IconPaneSelector.pm 7850 2006-09-21 16:49:54Z spadkins $
######################################################################
package App::Widget::IconPaneSelector;
$VERSION = (q$Revision: 7850 $ =~ /(\d[\d\.]*)/)[0]; # VERSION numbers generated by svn
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 ($html, $label, $icon);
my $context = $self->{context};
my $name = $self->{name};
my $node = $self->node_list();
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",
( run in 0.468 second using v1.01-cache-2.11-cpan-39bf76dae61 )