Author: spadkins
Date: Thu Sep 17 05:40:39 2009
New Revision: 13356

Added:
   p5ee/trunk/App-Widget-ExtJS/lib/App/Widget/ExtJS/AppFrame.pm
   p5ee/trunk/App-Widget-ExtJS/lib/App/Widget/ExtJS/MenuSelector.pm

Log:
new

Added: p5ee/trunk/App-Widget-ExtJS/lib/App/Widget/ExtJS/AppFrame.pm
==============================================================================
--- (empty file)
+++ p5ee/trunk/App-Widget-ExtJS/lib/App/Widget/ExtJS/AppFrame.pm        Thu Sep 
17 05:40:39 2009
@@ -0,0 +1,240 @@
+
+######################################################################
+## $Id: AppFrame.pm 3668 2006-03-11 20:51:13Z spadkins $
+######################################################################
+
+package App::Widget::ExtJS::AppFrame;
+$VERSION = (q$Revision: 3668 $ =~ /(\d[\d\.]*)/)[0];  # VERSION numbers 
generated by svn
+
+use App;
+use App::Widget::TabbedAppFrame;
+use App::Widget::ExtJS;
+...@isa = ( "App::Widget::TabbedAppFrame", "App::Widget::ExtJS" );
+
+use strict;
+
+=head1 NAME
+
+App::Widget::ExtJS::AppFrame - An application frame.
+
+=head1 SYNOPSIS
+
+   $name = "office";
+
+   # official way
+   use Widget;
+   $context = App->context();
+   $w = $context->widget($name);
+
+   # internal way
+   use App::Widget::ExtJS::AppFrame;
+   $w = App::Widget::ExtJS::AppFrame->new($name);
+
+=cut
+
+######################################################################
+# CONSTANTS
+######################################################################
+
+######################################################################
+# ATTRIBUTES
+######################################################################
+
+# INPUTS FROM THE ENVIRONMENT
+
+=head1 DESCRIPTION
+
+This class implements an application frame.
+This includes a menu, an application toolbar, a screen selector, 
+a screen title, a screen toolbar, and 
+a screen frame.  The application is actually implemented by the set
+of screens that the application frame is configured to allow navigation
+to.
+
+The application frame can implement itself in frames if it is
+configured to do so.  Otherwise, it implements itself as a table.
+
+=cut
+
+######################################################################
+# INITIALIZATION
+######################################################################
+
+sub _init {
+    &App::sub_entry if ($App::trace);
+    my $self = shift;
+    $self->SUPER::_init(@_);
+    $self->init_js();
+    &App::sub_exit() if ($App::trace);
+}
+
+######################################################################
+# EVENTS
+######################################################################
+
+sub handle_event {
+    my ($self, $wname, $event, @args) = @_;
+    my ($context, $name, $node);
+    my ($selector_widget, $screen_wname, $screen_widget, $screen_settings);
+    my ($screen_msg, $target);
+
+    $name = $self->{name};
+    $context   = $self->{context};
+
+    if ($wname eq "$name-selector" && $event eq "select") {
+        $selector_widget = $context->widget("$name-selector");
+        $screen_wname    = $selector_widget->get_selected("wname");
+        $screen_widget   = $context->widget($screen_wname);
+        $screen_settings = $selector_widget->get_selected("set");
+
+        if ($screen_settings) {
+            foreach (keys %$screen_settings) {
+                $screen_widget->set($_, $screen_settings->{$_});
+            }
+        }
+        else {
+            $screen_msg = $selector_widget->get_selected("send");
+            if ($screen_msg && ref($screen_msg) eq "ARRAY" && $#$screen_msg >= 
1) {
+                my ($target_widget, $target_wname, $method, @args);
+                ($target_wname, $method, @args) = @$screen_msg;
+                $target_widget = $context->widget($target_wname);
+                $target_widget->$method(@args);
+            }
+        }
+
+        #my $frame = $selector_widget->get_selected("frame");
+        #if (defined $frame) {
+        #    my ($key);
+        #    foreach $key (keys %$frame) {
+        #        $self->set($key,$frame->{$key});
+        #    }
+        #}
+
+        #my $target = $selector_widget->get_selected("target");
+        #if ($target) {
+        #    $main::target = $target;
+        #}
+
+        #$self->{noframe} = $selector_widget->get_selected("noframe");
+
+        return 1;
+    }
+    else {
+        return $self->SUPER::handle_event($wname, $event, @args);
+    }
+}
+
+
+######################################################################
+# OUTPUT METHODS
+######################################################################
+
+sub html {
+    my $self = shift;
+    my ($context, $name, $html);
+    $name = $self->{name};
+    $context = $self->{context};
+
+    my ($menu, $toolbar, $screentitle, $screentoolbar);
+    my ($selector_widget, $selector);
+    my ($screen_wname, $screen, $screen_widget, $screen_bgcolor);
+    my ($screentitle_widget, $screentitle_bgcolor, $screentitle_value);
+
+    #$menu            = $context->widget("$name-menu",
+    #                       class => "App::Widget::Menu",
+    #                   )->html();
+
+    #$toolbar         = $context->widget("$name-toolbar",
+    #                       class => "App::Widget::Toolbar",
+    #                   )->html();
+
+    #$screentoolbar   = $context->widget("$name-screentoolbar",
+    #                       class => "App::Widget::Toolbar",
+    #                   )->html();
+
+    $selector_widget = $context->widget("$name-selector",
+                           class => "App::Widget::ExtJS::MenuSelector",
+                       );
+
+    $selector        = $selector_widget->html();
+    $screen_wname    = $selector_widget->get_selected("wname");
+
+    if ($screen_wname) {
+        $screen_widget     = $context->widget($screen_wname);
+        $screentitle_value = $selector_widget->get_selected("value");
+        $screentitle_value = $screen_widget->label() if (!$screentitle_value);
+        if ($screen_widget->can("html")) {
+            $screen        = $screen_widget->html();
+        }
+        else {
+            $screen        = "[$screen_wname: not yet defined]";
+        }
+        $screen_bgcolor    = $screen_widget->get("bgcolor");
+        $screen_bgcolor    = "#ffffff" if (!defined $screen_bgcolor);
+    }
+    else {
+        $screentitle_value = " ";
+        $screen            = " ";
+        $screen_bgcolor    = "#cccccc";
+    }
+
+    $screentitle_bgcolor = "#888888";
+    $screentitle = "<font face=verdana,geneva,arial,sans-serif size=+1 
color=#ffffff>$screentitle_value</font>";
+
+    my ($messages, $messagebox);
+    $messages = $context->get_messages();
+    $messages =~ s/\n/<br>\n/g;
+    $messagebox = "";
+    if (defined $messages && $messages ne "") {
+        my ($elem_begin, $elem_end, $font_face, $font_size, $font_color);
+        $font_face  = $self->{font_face} || "verdana,geneva,arial,sans-serif";
+        $font_size  = $self->{font_size} || "+1";
+        $font_color = $self->{font_color};
+        $elem_begin = "";
+        $elem_end = "";
+        if ($font_face || $font_size || $font_color) {
+            $elem_begin = "<font";
+            $elem_begin .= " face=\"$font_face\""   if ($font_face);
+            $elem_begin .= " size=\"" . ($font_size+1) . "\""   if 
($font_size);
+            $elem_begin .= " color=\"$font_color\"" if ($font_color);
+            $elem_begin .= ">";
+            $elem_end = "</font>";
+        }
+
+        $messagebox = <<EOF;
+<table width=100% border=0 cellspacing=0 cellpadding=4>
+  <TR>
+    <TD>
+      <table width=100% border=0 cellspacing=0 cellpadding=4>
+        <TR>
+          <TD class=body_sub1 valign=top align=left 
bgcolor=#ffaaaa>$elem_begin<B>Messages</B>$elem_end</TD>
+        </TR>
+        <TR>
+          <TD valign=top align=left class=body_sub2>
+            $elem_begin$messages$elem_end
+          </TD>
+        </TR>
+        <TR>
+          <TD valign=top align=left height=4></TD>
+        </TR>
+      </table>
+    </td>
+  </tr>
+</table>
+EOF
+    }
+
+    $html = <<EOF;
+<div id="$name">
+<div id="$name-selector">
+$selector
+$screen
+</div>
+</div>
+EOF
+    return($html);
+}
+
+
+1;
+

Added: p5ee/trunk/App-Widget-ExtJS/lib/App/Widget/ExtJS/MenuSelector.pm
==============================================================================
--- (empty file)
+++ p5ee/trunk/App-Widget-ExtJS/lib/App/Widget/ExtJS/MenuSelector.pm    Thu Sep 
17 05:40:39 2009
@@ -0,0 +1,352 @@
+
+######################################################################
+## $Id: MenuSelector.pm 9449 2007-04-25 14:56:42Z spadkins $
+######################################################################
+
+package App::Widget::ExtJS::MenuSelector;
+$VERSION = (q$Revision: 9449 $ =~ /(\d[\d\.]*)/)[0];  # VERSION numbers 
generated by svn
+
+use App;
+use App::Widget::HierSelector;
+use App::Widget::ExtJS;
+...@isa = ( "App::Widget::ExtJS", "App::Widget::HierSelector" );
+
+use strict;
+
+=head1 NAME
+
+App::Widget::ExtJS::MenuSelector - A screen selector widget
+
+=head1 SYNOPSIS
+
+   use App::Widget::ExtJS::MenuSelector;
+
+   $name = "get_data";
+   $w = App::Widget::ExtJS::MenuSelector->new($name);
+   print $w->html();
+
+=cut
+
+=head1 DESCRIPTION
+
+This class implements a widget selector which is implemented as an
+Ext/JS menu.
+
+=cut
+
+######################################################################
+# INITIALIZATION
+######################################################################
+
+sub _init {
+    &App::sub_entry if ($App::trace);
+    my $self = shift;
+    $self->SUPER::_init(@_);
+    if (! $self->get("selected")) {
+        $self->select_first();
+    }
+    &App::sub_exit() if ($App::trace);
+}
+
+######################################################################
+# OUTPUT METHODS
+######################################################################
+
+sub html {
+    &App::sub_entry if ($App::trace);
+    my $self = shift;
+
+    my $context      = $self->{context};
+    my $options      = $context->{options};
+    my $name         = $self->{name};
+    my $node         = $self->node_list();
+    my $theme        = $context->so_get("theme") || $options->{theme} || "app";
+    my $html_url_dir = $options->{html_url_dir};
+
+    my $html = "";
+
+    my ($nodebase, $nodeidx, $nodenumber, $nodelabel, $parentnodenumber, 
$nodelevel);
+    my (@nodeidx, $w);
+
+    @nodeidx = ("1");
+
+
+    $html = "";
+
+    $nodelevel = 0;
+    $nodebase = "";
+    if (defined $node->{1} && !defined $node->{2}) {
+        $nodelevel = 1;
+        $nodebase = "1.";
+    }
+    my $auth = $context->authorization();
+    my (@args, $auth_name);
+    for (; $nodelevel <= $#nodeidx; $nodelevel++) {
+        $html .= "\n<!-- ExtJS::MenuSelector (BEGIN) -->\n";
+
+        $nodeidx = 1;
+        $nodenumber = "$nodebase$nodeidx"; # create its node number
+        while (defined $node->{$nodenumber}) {
+
+            $auth_name = $node->{$nodenumber}{auth_name};
+            if (!$auth_name || 
$auth->is_authorized("/App/SessionObject/$name/$auth_name")) {
+            }
+
+            $nodeidx++;
+            $nodenumber = "$nodebase$nodeidx"; # create its node number
+        }
+        $nodebase .= "$nodeidx[$nodelevel].";
+    }
+
+    $html = <<EOF;
+<script type="text/javascript">
+App.callbacks.menuItemSelected = function(button) {
+    alert('you clicked ' + button.text);
+}
+
+Ext.onReady(function(){
+
+    var authOrgSubmenu = [
+        { 
+            text: 'Org', 
+            icon: appOptions.urlDocRoot + 
'/members/car_rpm/resources/icons/arrow_divide.png',
+            handler: App.callbacks.menuItemSelected
+        }, 
+        { 
+            text: 'OrgUsrMemb', 
+            icon: appOptions.urlDocRoot + 
'/members/car_rpm/resources/icons/arrow_divide.png',
+            handler: App.callbacks.menuItemSelected
+        },    
+        {
+            text: 'OrgUsrAccess', 
+            icon: appOptions.urlDocRoot + 
'/members/car_rpm/resources/icons/arrow_divide.png',
+            handler: App.callbacks.menuItemSelected
+        },
+        { 
+            text: 'OrgAppAccess', 
+            icon: appOptions.urlDocRoot + 
'/members/car_rpm/resources/icons/arrow_divide.png',
+            handler: App.callbacks.menuItemSelected
+        }    
+    ];
+    
+    var authMenu = [
+        { 
+            text: 'Org SubMenu', 
+            icon: appOptions.urlDocRoot + 
'/members/car_rpm/resources/icons/arrow_divide.png',
+            menu: authOrgSubmenu 
+        },
+        { 
+            text: 'User', 
+            icon: appOptions.urlDocRoot + 
'/members/car_rpm/resources/icons/arrow_divide.png',
+            handler: App.callbacks.menuItemSelected
+        },
+        { 
+            text: 'User Setup', 
+            icon: appOptions.urlDocRoot + 
'/members/car_rpm/resources/icons/arrow_divide.png',
+            handler: App.callbacks.menuItemSelected
+        },        
+        {
+            text: 'CorpOrgMemb', 
+            icon: appOptions.urlDocRoot + 
'/members/car_rpm/resources/icons/arrow_divide.png',
+            handler: App.callbacks.menuItemSelected
+        },
+        { 
+            text: 'User Email', 
+            icon: appOptions.urlDocRoot + 
'/members/car_rpm/resources/icons/arrow_divide.png',
+            handler: App.callbacks.menuItemSelected
+        },
+        { 
+            text: 'User Prefs', 
+            icon: appOptions.urlDocRoot + 
'/members/car_rpm/resources/icons/arrow_divide.png',
+            handler: App.callbacks.menuItemSelected
+        },
+        { 
+            text: 'UsrCorpAffil', 
+            icon: appOptions.urlDocRoot + 
'/members/car_rpm/resources/icons/arrow_divide.png',
+            handler: App.callbacks.menuItemSelected
+        },
+        { 
+            text: 'App', 
+            icon: appOptions.urlDocRoot + 
'/members/car_rpm/resources/icons/arrow_divide.png',
+            handler: App.callbacks.menuItemSelected
+        },
+        { 
+            text: 'Role', 
+            icon: appOptions.urlDocRoot + 
'/members/car_rpm/resources/icons/arrow_divide.png',
+            handler: App.callbacks.menuItemSelected
+        },
+        {
+            text: 'RoleUsrGrant', 
+            icon: appOptions.urlDocRoot + 
'/members/car_rpm/resources/icons/arrow_divide.png',
+            handler: App.callbacks.menuItemSelected
+        },
+        {
+            text: 'Perm', 
+            icon: appOptions.urlDocRoot + 
'/members/car_rpm/resources/icons/arrow_divide.png',
+            handler: App.callbacks.menuItemSelected
+        },
+        { 
+            text: 'PermRoleGrant', 
+            icon: appOptions.urlDocRoot + 
'/members/car_rpm/resources/icons/arrow_divide.png',
+            handler: App.callbacks.menuItemSelected
+        },
+        { 
+            text: 'SalesInquiry', 
+            icon: appOptions.urlDocRoot + 
'/members/car_rpm/resources/icons/arrow_divide.png',
+            handler: App.callbacks.menuItemSelected
+        },     
+        { 
+            text: 'SalesPreauth', 
+            icon: appOptions.urlDocRoot + 
'/members/car_rpm/resources/icons/arrow_divide.png',
+            handler: App.callbacks.menuItemSelected
+        }     
+    ];
+    
+    var generalMenu = [
+        { 
+            text: 'Task Schedule', 
+            icon: appOptions.urlDocRoot + 
'/members/car_rpm/resources/icons/arrow_divide.png',
+            handler: App.callbacks.menuItemSelected
+        },
+        { 
+            text: 'Currency (xignite)', 
+            icon: appOptions.urlDocRoot + 
'/members/car_rpm/resources/icons/arrow_divide.png',
+            handler: App.callbacks.menuItemSelected
+        }
+    ];
+       
+    var carMenu = [
+        { 
+            text: 'Car Orgs', 
+            icon: appOptions.urlDocRoot + 
'/members/car_rpm/resources/icons/arrow_divide.png',
+            handler: App.callbacks.menuItemSelected
+        },
+        { 
+            text: 'Car Users', 
+            icon: appOptions.urlDocRoot + 
'/members/car_rpm/resources/icons/arrow_divide.png',
+            handler: App.callbacks.menuItemSelected
+        },
+        { 
+            text: 'Car Sources', 
+            icon: appOptions.urlDocRoot + 
'/members/car_rpm/resources/icons/arrow_divide.png',
+            handler: App.callbacks.menuItemSelected
+        },
+        { 
+            text: 'Profiles', 
+            icon: appOptions.urlDocRoot + 
'/members/car_rpm/resources/icons/arrow_divide.png',
+            handler: App.callbacks.menuItemSelected
+        },
+        { 
+            text: 'Shop Requests', 
+            icon: appOptions.urlDocRoot + 
'/members/car_rpm/resources/icons/arrow_divide.png',
+            handler: App.callbacks.menuItemSelected
+        }
+    ];
+
+    var airMenu = [
+        { 
+            text: 'Air Orgs', 
+            icon: appOptions.urlDocRoot + 
'/members/car_rpm/resources/icons/arrow_divide.png',
+            handler: App.callbacks.menuItemSelected
+        },
+        { 
+            text: 'Air Users', 
+            icon: appOptions.urlDocRoot + 
'/members/car_rpm/resources/icons/arrow_divide.png',
+            handler: App.callbacks.menuItemSelected
+        },
+        { 
+            text: 'Air Sources', 
+            icon: appOptions.urlDocRoot + 
'/members/car_rpm/resources/icons/arrow_divide.png',
+            handler: App.callbacks.menuItemSelected
+        }
+    ];
+  
+    var hotelMenu = [
+        { 
+            text: 'Props', 
+            icon: appOptions.urlDocRoot + 
'/members/car_rpm/resources/icons/arrow_divide.png',
+            handler: App.callbacks.menuItemSelected
+        },
+        { 
+            text: 'Chains', 
+            icon: appOptions.urlDocRoot + 
'/members/car_rpm/resources/icons/arrow_divide.png',
+            handler: App.callbacks.menuItemSelected
+        },
+        { 
+            text: 'E-Mail', 
+            icon: appOptions.urlDocRoot + 
'/members/car_rpm/resources/icons/arrow_divide.png',
+            handler: App.callbacks.menuItemSelected
+        },
+        { 
+            text: 'Profiles', 
+            icon: appOptions.urlDocRoot + 
'/members/car_rpm/resources/icons/arrow_divide.png',
+            handler: App.callbacks.menuItemSelected
+        },
+        {
+            text: 'Users', 
+            icon: appOptions.urlDocRoot + 
'/members/car_rpm/resources/icons/arrow_divide.png',
+            handler: App.callbacks.menuItemSelected
+        },
+        {
+            text: 'Demand Load', 
+            icon: appOptions.urlDocRoot + 
'/members/car_rpm/resources/icons/arrow_divide.png',
+            handler: App.callbacks.menuItemSelected
+        },
+        { 
+            text: 'Contracts', 
+            icon: appOptions.urlDocRoot + 
'/members/car_rpm/resources/icons/arrow_divide.png',
+            handler: App.callbacks.menuItemSelected
+        },
+        { 
+            text: 'Dist Mgmt', 
+            icon: appOptions.urlDocRoot + 
'/members/car_rpm/resources/icons/arrow_divide.png',
+            handler: App.callbacks.menuItemSelected
+        }     
+    ];
+
+    var exampleToolbar = [
+        new Ext.Toolbar.MenuButton({
+            text: 'Auth',
+            menu: { items: authMenu }
+        }),
+        ' ', ' ', ' ',
+        new Ext.Toolbar.MenuButton({
+            text: 'General', 
+            menu: { items: generalMenu }
+        }),
+        ' ', ' ', ' ',
+        new Ext.Toolbar.MenuButton({
+            text: 'Rental Cars', 
+            menu: { items: carMenu }
+        }),
+        ' ', ' ', ' ',
+        new Ext.Toolbar.MenuButton({
+            text: 'Airlines', 
+            menu: { items: airMenu }
+        }),
+        ' ', ' ', ' ',
+        new Ext.Toolbar.MenuButton({
+            text: 'Hotels', 
+            menu: { items: hotelMenu }
+        })
+    ];
+    
+    var menuPanel = new Ext.Panel({
+        id: 'MenuPanel',
+        tbar: exampleToolbar,
+        html: '<br/><br/><center><b>Tables or other content would go 
here</b></center><br/><br/>'
+    });
+    
+    menuPanel.render('$name');
+   
+});
+</script>
+EOF
+    $html .= "<!-- ExtJS::MenuSelector (END) -->\n";
+
+    &App::sub_exit() if ($App::trace);
+    $html;
+}
+
+1;
+

Reply via email to