cvs commit: p5ee/App-Widget/lib/App/Widget HierSelector.pm TabbedSelector.pm

[email protected] (Stephen Adkins)
Newsgroups perl.cvs.p5ee
Message-ID <[email protected]>
cvsuser     06/02/27 09:33:41

  Modified:    App-Widget/lib/App/Widget HierSelector.pm TabbedSelector.pm
  Log:
  fix up multi-level tab selector
  
  Revision  Changes    Path
  1.2       +53 -8     p5ee/App-Widget/lib/App/Widget/HierSelector.pm
  
  Index: HierSelector.pm
  ===================================================================
  RCS file: /cvs/public/p5ee/App-Widget/lib/App/Widget/HierSelector.pm,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- HierSelector.pm	9 Aug 2005 19:26:19 -0000	1.1
  +++ HierSelector.pm	27 Feb 2006 17:33:41 -0000	1.2
  @@ -166,37 +166,82 @@
       $self->open_exclusively($self->{selected});
   }
   
  +# i.e. $self->open_exclusively("2.2");
  +# this should "open" 2 and close 1,3,4,5,...
  +# this should "open" 2.2 and close 2.1,2.3,2.4,...
  +# if "2.2.1" exists, it should set the first open to the "selected"
  +# else it should set itself "2.2" as the "selected"
   sub open_exclusively {
       my ($self, $opennodenumber) = @_;
       my ($nodebase, $nodeidx, $nodenumber);
       my $node = $self->get("node");
  +    # set after get to ensure a deep data structure is stored in the session
       $self->set("node", $node);
   
  -    $nodebase = $opennodenumber;
  -    if ($nodebase =~ /(.*)\.[^\.]+$/) {
  -        $nodebase = $1 . ".";
  +    $nodebase = $opennodenumber;   # i.e. "2.2.3", "2.2" or "2"
  +    if ($nodebase =~ /(.*)\.[^\.]+$/) {  # all but the last number
  +        $nodebase = $1 . ".";      # i.e. "2.2.",  "2."
       }
       else {
  -        $nodebase = "";
  +        $nodebase = "";            # if top level, $nodebase is blank ""
       }
       $nodeidx = 1;
   
       while (1) {
           $nodenumber = "$nodebase$nodeidx";
           last if (!defined $node->{$nodenumber});
  -        $node->{$nodenumber}{open} = 0;
  +        $node->{$nodenumber}{open} = 0;  # close all others at this level
           $nodeidx++;
       }
   
       if (defined $node->{$opennodenumber}) {
  -        $node->{$opennodenumber}{open} = 1;
  +        $node->{$opennodenumber}{open} = 1;  # open this one
       }
   
  +    # Hmmm. I don't think I should be selecting anything here... just opening/closing.
       if (!defined $node->{"$opennodenumber.1"}) {
           $self->set("selected", $opennodenumber);
       }
   }
   
  +# i.e. $self->select_first_open_leaf("2.2");
  +# this should scan 2.2.1 through 2.2.n for the first open
  +# this should "open" 2.2 and close 2.1,2.3,2.4,...
  +# if "2.2.1" exists, it should set the first open to the "selected"
  +# else it should set itself "2.2" as the "selected"
  +sub select_first_open_leaf {
  +    my ($self, $selected_nodenumber) = @_;
  +
  +    my $node = $self->{node};
  +    my $nodebase = $selected_nodenumber;
  +    my $nodeidx = 1;
  +    my ($nodenumber);
  +    my $found = 0;
  +
  +    while (!$found) {
  +        $nodenumber = "$nodebase.$nodeidx";
  +        if (!defined $node->{$nodenumber}) {
  +            if ($nodeidx == 1) {  # there are no leaves. $nodebase must be a leaf.
  +                $self->{selected} = $nodebase;
  +                $found = 1;
  +            }
  +            else {  # no "open" leaves on this branch
  +                $node->{"$nodebase.1"}{open} = 1;
  +                $self->{selected} = "$nodebase.1";
  +                $found = 1;
  +            }
  +        }
  +        elsif ($node->{$nodenumber}{open}) {
  +            $nodebase = $nodenumber;
  +            $nodeidx  = 1;
  +        }
  +        else {
  +            $nodeidx++;
  +        }
  +    }
  +    #$self->{debug} .= "select_first_open_leaf($selected_nodenumber): [$nodenumber]<br>";
  +}
  +
   ######################################################################
   # METHODS
   ######################################################################
  
  
  
  1.2       +18 -9     p5ee/App-Widget/lib/App/Widget/TabbedSelector.pm
  
  Index: TabbedSelector.pm
  ===================================================================
  RCS file: /cvs/public/p5ee/App-Widget/lib/App/Widget/TabbedSelector.pm,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TabbedSelector.pm	9 Aug 2005 19:26:19 -0000	1.1
  +++ TabbedSelector.pm	27 Feb 2006 17:33:41 -0000	1.2
  @@ -52,6 +52,13 @@
       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);
  +}
  +
   ######################################################################
   # OUTPUT METHODS
   ######################################################################
  @@ -66,11 +73,13 @@
       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");
  +    $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>";
  @@ -84,7 +93,7 @@
       $html_url_dir = $context->get_option("html_url_dir");
       $xgif = "$html_url_dir/images/Widget/dot_clear.gif";
   
  -    $html = "";
  +    $html = $self->{debug} || "";
   
       $nodelevel = 0;
       $nodebase = "";
  @@ -132,7 +141,7 @@
           }
           $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%\"$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";
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.