cvs commit: p5ee/App-Widget/lib/App/Widget ImageBarSelector.pm

[email protected] (Stephen Adkins)
Newsgroups perl.cvs.p5ee
Message-ID <[email protected]>
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;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.