Author: spadkins
Date: Tue May 16 09:42:57 2006
New Revision: 6301

Modified:
   p5ee/trunk/App-Widget/lib/App/Widget/ImageBarSelector.pm
   p5ee/trunk/App-Widget/lib/App/Widget/TabbedSelector.pm

Log:
added multi-level, auth, outer table

Modified: p5ee/trunk/App-Widget/lib/App/Widget/ImageBarSelector.pm
==============================================================================
--- p5ee/trunk/App-Widget/lib/App/Widget/ImageBarSelector.pm    (original)
+++ p5ee/trunk/App-Widget/lib/App/Widget/ImageBarSelector.pm    Tue May 16 
09:42:57 2006
@@ -28,7 +28,7 @@
 
 =head1 DESCRIPTION
 
-This class implements a widget selector which is implemented as a 
+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.
 
@@ -53,6 +53,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
 ######################################################################
@@ -60,13 +67,17 @@
 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 $context    = $self->{context};
+    my $name       = $self->{name};
+    my $node       = $self->{node};
+    my $pad        = $self->{pad};
+    my $align      = $self->{align};
+    my $valign     = $self->{valign};
+    my $bar_height = $self->{height};
+    my $bar_width  = $self->{width};
+    my $bar_background = $self->{background};
+    my $theme      = $context->so_get("theme") || $context->{options}{theme} 
|| "app";
 
-    my ($width, $height);
     my $html = "";
 
     my ($nodebase, $nodeidx, $nodenumber, $nodelabel, $parentnodenumber, 
$nodelevel, $opennodenumber);
@@ -85,42 +96,56 @@
         $nodelevel = 1;
         $nodebase = "1.";
     }
-    my (@args, $table_dims);
+    my $table_opts = ($bar_width) ? " width=\"$bar_width\"" : " 
width=\"100%\"";
+    my $td_opts = "";
+    $td_opts .= " align=\"$align\"" if ($align);
+    $td_opts .= " valign=\"$valign\"" if ($valign);
+    $td_opts .= " height=\"$bar_height\"" if ($bar_height);
+    $td_opts .= " width=\"$bar_width\"" if ($bar_width);
+    if ($bar_background) {
+        $td_opts .= " 
background=\"$html_url_dir/theme/$theme/$bar_background\"";
+    }
+    my $auth = $context->authorization();
+    my (@args, $auth_name);
     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 .= "\n<!-- ImageBarSelector (BEGIN) -->\n";
+        $html .= "<table border=\"0\" cellpadding=\"0\" 
cellspacing=\"0\"${table_opts}><tr><td${td_opts}>\n";
+        $html .= "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\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});
+            $auth_name = $node->{$nodenumber}{auth_name};
+            if (!$auth_name || 
$auth->is_authorized("/App/SessionObject/$name/$auth_name")) {
+                @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>";
+                $html .= $w->html();
+                $html .= "</td>\n";
+                $html .= "<td>&nbsp;</td>\n";
             }
-            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
@@ -144,11 +169,11 @@
             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 .= "</td></tr></table>\n";
+        $html .= "<!-- ImageBarSelector (END) -->\n";
     }
 
     $html;

Modified: p5ee/trunk/App-Widget/lib/App/Widget/TabbedSelector.pm
==============================================================================
--- p5ee/trunk/App-Widget/lib/App/Widget/TabbedSelector.pm      (original)
+++ p5ee/trunk/App-Widget/lib/App/Widget/TabbedSelector.pm      Tue May 16 
09:42:57 2006
@@ -101,6 +101,8 @@
         $nodelevel = 1;
         $nodebase = "1.";
     }
+    my $auth = $context->authorization();
+    my ($auth_name);
     for (; $nodelevel <= $#nodeidx; $nodelevel++) {
         $html .= '<table border="0" cellpadding="0" cellspacing="0" 
width="100%">' . "\n";
         $html .= "  <tr><td rowspan=\"3\" width=\"1%\" height=\"19\" nowrap>";
@@ -109,32 +111,35 @@
         $nodenumber = "$nodebase$nodeidx"; # create its node number
         while (defined $node->{$nodenumber}) {
 
-            $label = $node->{$nodenumber}{label};
-            $label = $node->{$nodenumber}{value} if (!defined $label);
-            $label = "" if (!defined $label);
-
-            $w = $context->widget("$name-button$nodenumber",
-                class => "App::Widget::ImageButton",
-                image_script => "app-button",
-                volatile     => 1,
-                height       => "19",
-                width        => "127",
-                bevel        => "2",
-                label        => $label,
-                event_target => $name,
-                event        => "open_exclusively",
-                args         => $nodenumber,
-                type         => "tab",
-            );
-            #$w->set("selected", $node->{$nodenumber}{open} ? 1 : 0);
-            if ($node->{$nodenumber}{open}) {
-                $w->set("selected", 1);
+            $auth_name = $node->{$nodenumber}{auth_name};
+            if (!$auth_name || 
$auth->is_authorized("/App/SessionObject/$name/$auth_name")) {
+                $label = $node->{$nodenumber}{label};
+                $label = $node->{$nodenumber}{value} if (!defined $label);
+                $label = "" if (!defined $label);
+
+                $w = $context->widget("$name-button$nodenumber",
+                    class => "App::Widget::ImageButton",
+                    image_script => "app-button",
+                    volatile     => 1,
+                    height       => "19",
+                    width        => "127",
+                    bevel        => "2",
+                    label        => $label,
+                    event_target => $name,
+                    event        => "open_exclusively",
+                    args         => $nodenumber,
+                    type         => "tab",
+                );
+                #$w->set("selected", $node->{$nodenumber}{open} ? 1 : 0);
+                if ($node->{$nodenumber}{open}) {
+                    $w->set("selected", 1);
+                }
+                else {
+                    $w->set("selected", 0);
+                }
+                $html .= $w->html();
+                $html .= "<!--\n    -->";
             }
-            else {
-                $w->set("selected", 0);
-            }
-            $html .= $w->html();
-            $html .= "<!--\n    -->";
 
             $nodeidx++;
             $nodenumber = "$nodebase$nodeidx"; # create its node number

Reply via email to