cvsuser     05/08/11 06:48:46

  Added:       App-Widget/lib/App/Widget ImageBarSelector.pm
  Log:
  new
  
  Revision  Changes    Path
  1.1                  p5ee/App-Widget/lib/App/Widget/ImageBarSelector.pm
  
  Index: ImageBarSelector.pm
  ===================================================================
  
  ######################################################################
  ## $Id: ImageBarSelector.pm,v 1.1 2005/08/11 13:48:46 spadkins Exp $
  ######################################################################
  
  package App::Widget::ImageBarSelector;
  $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::ImageBarSelector - A screen selector widget
  
  =head1 SYNOPSIS
  
     use App::Widget::ImageBarSelector;
  
     $name = "get_data";
     $w = App::Widget::ImageBarSelector->new($name);
     print $w->html();
  
  =cut
  
  =head1 DESCRIPTION
  
  This class implements a widget selector which is implemented as a 
  set of images side-by-side in an image-bar with a padding image
  filling out the full width.
  
  =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  = $self->{context};
      my $name     = $self->{name};
      my $node     = $self->{node};
      my $pad      = $self->{pad};
      my $theme    = $context->so_get("theme") || $context->{options}{theme} || 
"app";
  
      my ($width, $height);
      my $html = "";
  
      my ($nodebase, $nodeidx, $nodenumber, $nodelabel, $parentnodenumber, 
$nodelevel, $opennodenumber);
      my (@nodeidx, $selected_nodenumber, $w);
  
      $selected_nodenumber = $self->{selected};
      @nodeidx = split(/\./,$selected_nodenumber);
  
      my $html_url_dir = $context->get_option("html_url_dir");
  
      $html = "";
  
      $nodelevel = 0;
      $nodebase = "";
      if (defined $node->{1} && !defined $node->{2}) {
          $nodelevel = 1;
          $nodebase = "1.";
      }
      my (@args, $table_dims);
      for (; $nodelevel <= $#nodeidx; $nodelevel++) {
          $table_dims = " width=\"100%\"";
          $table_dims = " width=\"$self->{width}\"" if ($self->{width});
          $html .= "<table border=\"0\" cellpadding=\"0\" 
cellspacing=\"0\"${table_dims}>\n";
          $html .= "  <tr>";
  
          $nodeidx = 1;
          $nodenumber = "$nodebase$nodeidx"; # create its node number
          while (defined $node->{$nodenumber}) {
  
              @args = ();
              push(@args, height => $node->{$nodenumber}{height}) if 
($node->{$nodenumber}{height});
              push(@args, width => $node->{$nodenumber}{width}) if 
($node->{$nodenumber}{width});
              push(@args, label => $node->{$nodenumber}{label}) if 
($node->{$nodenumber}{label});
              push(@args, image => $node->{$nodenumber}{image}) if 
($node->{$nodenumber}{image});
  
              $w = $context->widget("$name-button$nodenumber",
                  class => "App::Widget::ImageButton",
                  volatile     => 1,
                  event_target => $name,
                  event        => "open_exclusively",
                  args         => $nodenumber,
                  @args
              );
              if ($node->{$nodenumber}{open}) {
                  $w->set("selected", 1);
                  $w->set("image", "$html_url_dir/theme/$theme/" . 
$node->{$nodenumber}{selected_image});
              }
              else {
                  $w->set("selected", 0);
                  $w->set("image", "$html_url_dir/theme/$theme/" . 
$node->{$nodenumber}{image});
              }
              $html .= "<td width=\"1%\">";
              $html .= $w->html();
              $html .= "</td>\n";
  
              $nodeidx++;
              $nodenumber = "$nodebase$nodeidx"; # create its node number
          }
          $nodebase .= "$nodeidx[$nodelevel].";
          if ($pad) {
              my $td_dims = "";
              my $image_dims = "";
              if ($pad->{height}) {
                  $td_dims    .= " height=\"$pad->{height}\"";
                  $image_dims .= " height=\"$pad->{height}\"";
              }
              if ($pad->{width}) {
                  $td_dims    .= " width=\"$pad->{width}\"";
                  $image_dims .= " width=\"$pad->{width}\"";
              }
              else {
                  $td_dims    .= " width=\"99%\"";
                  $image_dims .= " width=\"99%\"";
              }
              my $bgimage = "$html_url_dir/theme/$theme/" . $pad->{image};
              $html .= "<td${td_dims} background=\"$bgimage\"><img 
src=\"$bgimage\" border=\"0\"${image_dims}></td>\n";
          }
          else {
              $html .= "<td width=\"99%\">&nbsp;</td>\n";
          }
          $html .= "  </tr>\n";
          $html .= "</table>\n";
      }
  
      $html;
  }
  
  1;
  
  
  
  

Reply via email to