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";
  
  
  

Reply via email to