Upgrade to ExtJS 3.2.0 - Released 03/30/2010
[extjs.git] / examples / desktop / js / StartMenu.js
index d62a897..ea1f35a 100644 (file)
 /*!
- * Ext JS Library 3.1.1
- * Copyright(c) 2006-2010 Ext JS, LLC
+ * Ext JS Library 3.2.0
+ * Copyright(c) 2006-2010 Ext JS, Inc.
  * licensing@extjs.com
  * http://www.extjs.com/license
  */
-/**\r
- * @class Ext.ux.StartMenu\r
- * @extends Ext.menu.Menu\r
- * A start menu object.\r
- * @constructor\r
- * Creates a new StartMenu\r
- * @param {Object} config Configuration options\r
- *\r
- * SAMPLE USAGE:\r
- *\r
- * this.startMenu = new Ext.ux.StartMenu({\r
- *             iconCls: 'user',\r
- *             height: 300,\r
- *             shadow: true,\r
- *             title: get_cookie('memberName'),\r
- *             width: 300\r
- *     });\r
- *\r
- * this.startMenu.add({\r
- *             text: 'Grid Window',\r
- *             iconCls:'icon-grid',\r
- *             handler : this.createWindow,\r
- *             scope: this\r
- *     });\r
- *\r
- * this.startMenu.addTool({\r
- *             text:'Logout',\r
- *             iconCls:'logout',\r
- *             handler:function(){ window.location = "logout.php"; },\r
- *             scope:this\r
- *     });\r
- */\r
-\r
-Ext.namespace("Ext.ux");\r
-\r
-Ext.ux.StartMenu = Ext.extend(Ext.menu.Menu, {\r
-    initComponent: function(config) {\r
-       Ext.ux.StartMenu.superclass.initComponent.call(this, config);\r
-\r
-        var tools = this.toolItems;\r
-        this.toolItems = new Ext.util.MixedCollection();\r
-        if(tools){\r
-            this.addTool.apply(this, tools);\r
-        }\r
-    },\r
-\r
-    // private\r
-    onRender : function(ct, position){\r
-        Ext.ux.StartMenu.superclass.onRender.call(this, ct, position);\r
-        var el = this.el.addClass('ux-start-menu');\r
-\r
-        var header = el.createChild({\r
-               tag: "div",\r
-               cls: "x-window-header x-unselectable x-panel-icon "+this.iconCls\r
-        });\r
-\r
-               this.header = header;\r
-\r
-               var headerText = header.createChild({\r
-                       tag: "span",\r
-                       cls: "x-window-header-text"\r
-               });\r
-               var tl = header.wrap({\r
-                       cls: "ux-start-menu-tl"\r
-               });\r
-               var tr = header.wrap({\r
-                       cls: "ux-start-menu-tr"\r
-               });\r
-               var tc = header.wrap({\r
-                       cls: "ux-start-menu-tc"\r
-               });\r
-\r
-               this.menuBWrap = el.createChild({\r
-                       tag: "div",\r
-                       cls: "x-window-body x-border-layout-ct ux-start-menu-body"\r
-               });\r
-               var ml = this.menuBWrap.wrap({\r
-                       cls: "ux-start-menu-ml"\r
-               });\r
-               var mc = this.menuBWrap.wrap({\r
-                       cls: "x-window-mc ux-start-menu-bwrap"\r
-               });\r
-\r
-               this.menuPanel = this.menuBWrap.createChild({\r
-                       tag: "div",\r
-                       cls: "x-panel x-border-panel ux-start-menu-apps-panel"\r
-               });\r
-               this.toolsPanel = this.menuBWrap.createChild({\r
-                       tag: "div",\r
-                       cls: "x-panel x-border-panel ux-start-menu-tools-panel"\r
-               });\r
-\r
-               var bwrap = ml.wrap({cls: "x-window-bwrap"});\r
-               var bc = bwrap.createChild({\r
-                       tag: "div",\r
-                       cls: "ux-start-menu-bc"\r
-               });\r
-               var bl = bc.wrap({\r
-                       cls: "ux-start-menu-bl x-panel-nofooter"\r
-               });\r
-               var br = bc.wrap({\r
-                       cls: "ux-start-menu-br"\r
-               });\r
-\r
-        this.ul.appendTo(this.menuPanel);\r
-\r
-        var toolsUl = this.toolsPanel.createChild({\r
-               tag: "ul",\r
-               cls: "x-menu-list"\r
-        });\r
-\r
-        this.mon(toolsUl, 'click', this.onClick, this);\r
-        this.mon(toolsUl, 'mouseover', this.onMouseOver, this);\r
-        this.mon(toolsUl, 'mouseout', this.onMouseOut, this);\r
-\r
-        this.items.each(function(item){\r
-            item.parentMenu = this;\r
-        }, this);\r
-\r
-        this.toolItems.each(\r
-               function(item){\r
-                   var li = document.createElement("li");\r
-                   li.className = "x-menu-list-item";\r
-                   toolsUl.dom.appendChild(li);\r
-                   item.render(li);\r
-                item.parentMenu = this;\r
-               }, this);\r
-\r
-        this.toolsUl = toolsUl;\r
-\r
-        this.menuBWrap.setStyle('position', 'relative');\r
-        this.menuBWrap.setHeight(this.height - 28);\r
-\r
-        this.menuPanel.setStyle({\r
-               padding: '2px',\r
-               position: 'absolute',\r
-               overflow: 'auto'\r
-        });\r
-\r
-        this.toolsPanel.setStyle({\r
-               padding: '2px 4px 2px 2px',\r
-               position: 'absolute',\r
-               overflow: 'auto'\r
-        });\r
-\r
-        this.setTitle(this.title);\r
-    },\r
-\r
-    // private\r
-    findTargetItem : function(e){\r
-        var t = e.getTarget(".x-menu-list-item", this.ul,  true);\r
-        if(t && t.menuItemId){\r
-               if(this.items.get(t.menuItemId)){\r
-               return this.items.get(t.menuItemId);\r
-            }else{\r
-               return this.toolItems.get(t.menuItemId);\r
-            }\r
-        }\r
-    },\r
-\r
-    /**\r
-     * Displays this menu relative to another element\r
-     * @param {Mixed} element The element to align to\r
-     * @param {String} position (optional) The {@link Ext.Element#alignTo} anchor position to use in aligning to\r
-     * the element (defaults to this.defaultAlign)\r
-     * @param {Ext.ux.StartMenu} parentMenu (optional) This menu's parent menu, if applicable (defaults to undefined)\r
-     */\r
-    show : function(el, pos, parentMenu){\r
-        this.parentMenu = parentMenu;\r
-        if(!this.el){\r
-            this.render();\r
-        }\r
-\r
-        this.fireEvent("beforeshow", this);\r
-        this.showAt(this.el.getAlignToXY(el, pos || this.defaultAlign), parentMenu, false);\r
-        var tPanelWidth = 100;\r
-        var box = this.menuBWrap.getBox();\r
-        this.menuPanel.setWidth(box.width-tPanelWidth);\r
-        this.menuPanel.setHeight(box.height);\r
-\r
-        this.toolsPanel.setWidth(tPanelWidth);\r
-        this.toolsPanel.setX(box.x+box.width-tPanelWidth);\r
-        this.toolsPanel.setHeight(box.height);\r
-    },\r
-\r
-    addTool : function(){\r
-        var a = arguments, l = a.length, item;\r
-        for(var i = 0; i < l; i++){\r
-            var el = a[i];\r
-            if(el.render){ // some kind of Item\r
-                item = this.addToolItem(el);\r
-            }else if(typeof el == "string"){ // string\r
-                if(el == "separator" || el == "-"){\r
-                    item = this.addToolSeparator();\r
-                }else{\r
-                    item = this.addText(el);\r
-                }\r
-            }else if(el.tagName || el.el){ // element\r
-                item = this.addElement(el);\r
-            }else if(typeof el == "object"){ // must be menu item config?\r
-                item = this.addToolMenuItem(el);\r
-            }\r
-        }\r
-        return item;\r
-    },\r
-\r
-    /**\r
-     * Adds a separator bar to the Tools\r
-     * @return {Ext.menu.Item} The menu item that was added\r
-     */\r
-    addToolSeparator : function(){\r
-        return this.addToolItem(new Ext.menu.Separator({itemCls: 'ux-toolmenu-sep'}));\r
-    },\r
-\r
-    addToolItem : function(item){\r
-        this.toolItems.add(item);\r
-        if(this.ul){\r
-            var li = document.createElement("li");\r
-            li.className = "x-menu-list-item";\r
-            this.ul.dom.appendChild(li);\r
-            item.render(li, this);\r
-            this.delayAutoWidth();\r
-        }\r
-        return item;\r
-    },\r
-\r
-    addToolMenuItem : function(config){\r
-        if(!(config instanceof Ext.menu.Item)){\r
-            if(typeof config.checked == "boolean"){ // must be check menu item config?\r
-                config = new Ext.menu.CheckItem(config);\r
-            }else{\r
-                config = new Ext.menu.Item(config);\r
-            }\r
-        }\r
-        return this.addToolItem(config);\r
-    },\r
-\r
-    setTitle : function(title, iconCls){\r
-        this.title = title;\r
-        this.header.child('span').update(title);\r
-        return this;\r
-    }\r
+/**
+ * @class Ext.ux.StartMenu
+ * @extends Ext.menu.Menu
+ * A start menu object.
+ * @constructor
+ * Creates a new StartMenu
+ * @param {Object} config Configuration options
+ *
+ * SAMPLE USAGE:
+ *
+ * this.startMenu = new Ext.ux.StartMenu({
+ *             iconCls: 'user',
+ *             height: 300,
+ *             shadow: true,
+ *             title: get_cookie('memberName'),
+ *             width: 300
+ *     });
+ *
+ * this.startMenu.add({
+ *             text: 'Grid Window',
+ *             iconCls:'icon-grid',
+ *             handler : this.createWindow,
+ *             scope: this
+ *     });
+ *
+ * this.startMenu.addTool({
+ *             text:'Logout',
+ *             iconCls:'logout',
+ *             handler:function(){ window.location = "logout.php"; },
+ *             scope:this
+ *     });
+ */
+
+Ext.namespace("Ext.ux");
+
+Ext.ux.StartMenu = Ext.extend(Ext.menu.Menu, {
+    initComponent: function(config) {
+       Ext.ux.StartMenu.superclass.initComponent.call(this, config);
+
+        var tools = this.toolItems;
+        this.toolItems = new Ext.util.MixedCollection();
+        if(tools){
+            this.addTool.apply(this, tools);
+        }
+    },
+
+    // private
+    onRender : function(ct, position){
+        Ext.ux.StartMenu.superclass.onRender.call(this, ct, position);
+        var el = this.el.addClass('ux-start-menu');
+
+        var header = el.createChild({
+               tag: "div",
+               cls: "x-window-header x-unselectable x-panel-icon "+this.iconCls
+        });
+
+               this.header = header;
+
+               var headerText = header.createChild({
+                       tag: "span",
+                       cls: "x-window-header-text"
+               });
+               var tl = header.wrap({
+                       cls: "ux-start-menu-tl"
+               });
+               var tr = header.wrap({
+                       cls: "ux-start-menu-tr"
+               });
+               var tc = header.wrap({
+                       cls: "ux-start-menu-tc"
+               });
+
+               this.menuBWrap = el.createChild({
+                       tag: "div",
+                       cls: "x-window-body x-border-layout-ct ux-start-menu-body"
+               });
+               var ml = this.menuBWrap.wrap({
+                       cls: "ux-start-menu-ml"
+               });
+               var mc = this.menuBWrap.wrap({
+                       cls: "x-window-mc ux-start-menu-bwrap"
+               });
+
+               this.menuPanel = this.menuBWrap.createChild({
+                       tag: "div",
+                       cls: "x-panel x-border-panel ux-start-menu-apps-panel"
+               });
+               this.toolsPanel = this.menuBWrap.createChild({
+                       tag: "div",
+                       cls: "x-panel x-border-panel ux-start-menu-tools-panel"
+               });
+
+               var bwrap = ml.wrap({cls: "x-window-bwrap"});
+               var bc = bwrap.createChild({
+                       tag: "div",
+                       cls: "ux-start-menu-bc"
+               });
+               var bl = bc.wrap({
+                       cls: "ux-start-menu-bl x-panel-nofooter"
+               });
+               var br = bc.wrap({
+                       cls: "ux-start-menu-br"
+               });
+
+        this.ul.appendTo(this.menuPanel);
+
+        var toolsUl = this.toolsPanel.createChild({
+               tag: "ul",
+               cls: "x-menu-list"
+        });
+
+        this.mon(toolsUl, 'click', this.onClick, this);
+        this.mon(toolsUl, 'mouseover', this.onMouseOver, this);
+        this.mon(toolsUl, 'mouseout', this.onMouseOut, this);
+
+        this.items.each(function(item){
+            item.parentMenu = this;
+        }, this);
+
+        this.toolItems.each(
+               function(item){
+                   var li = document.createElement("li");
+                   li.className = "x-menu-list-item";
+                   toolsUl.dom.appendChild(li);
+                   item.render(li);
+                item.parentMenu = this;
+               }, this);
+
+        this.toolsUl = toolsUl;
+
+        this.menuBWrap.setStyle('position', 'relative');
+        this.menuBWrap.setHeight(this.height - 28);
+
+        this.menuPanel.setStyle({
+               padding: '2px',
+               position: 'absolute',
+               overflow: 'auto'
+        });
+
+        this.toolsPanel.setStyle({
+               padding: '2px 4px 2px 2px',
+               position: 'absolute',
+               overflow: 'auto'
+        });
+
+        this.setTitle(this.title);
+    },
+
+    // private
+    findTargetItem : function(e){
+        var t = e.getTarget(".x-menu-list-item", this.ul,  true);
+        if(t && t.menuItemId){
+               if(this.items.get(t.menuItemId)){
+               return this.items.get(t.menuItemId);
+            }else{
+               return this.toolItems.get(t.menuItemId);
+            }
+        }
+    },
+
+    /**
+     * Displays this menu relative to another element
+     * @param {Mixed} element The element to align to
+     * @param {String} position (optional) The {@link Ext.Element#alignTo} anchor position to use in aligning to
+     * the element (defaults to this.defaultAlign)
+     * @param {Ext.ux.StartMenu} parentMenu (optional) This menu's parent menu, if applicable (defaults to undefined)
+     */
+    show : function(el, pos, parentMenu){
+        this.parentMenu = parentMenu;
+        if(!this.el){
+            this.render();
+        }
+
+        this.fireEvent("beforeshow", this);
+        this.showAt(this.el.getAlignToXY(el, pos || this.defaultAlign), parentMenu, false);
+        var tPanelWidth = 100;
+        var box = this.menuBWrap.getBox();
+        this.menuPanel.setWidth(box.width-tPanelWidth);
+        this.menuPanel.setHeight(box.height);
+
+        this.toolsPanel.setWidth(tPanelWidth);
+        this.toolsPanel.setX(box.x+box.width-tPanelWidth);
+        this.toolsPanel.setHeight(box.height);
+    },
+
+    addTool : function(){
+        var a = arguments, l = a.length, item;
+        for(var i = 0; i < l; i++){
+            var el = a[i];
+            if(el.render){ // some kind of Item
+                item = this.addToolItem(el);
+            }else if(typeof el == "string"){ // string
+                if(el == "separator" || el == "-"){
+                    item = this.addToolSeparator();
+                }else{
+                    item = this.addText(el);
+                }
+            }else if(el.tagName || el.el){ // element
+                item = this.addElement(el);
+            }else if(typeof el == "object"){ // must be menu item config?
+                item = this.addToolMenuItem(el);
+            }
+        }
+        return item;
+    },
+
+    /**
+     * Adds a separator bar to the Tools
+     * @return {Ext.menu.Item} The menu item that was added
+     */
+    addToolSeparator : function(){
+        return this.addToolItem(new Ext.menu.Separator({itemCls: 'ux-toolmenu-sep'}));
+    },
+
+    addToolItem : function(item){
+        this.toolItems.add(item);
+        if(this.ul){
+            var li = document.createElement("li");
+            li.className = "x-menu-list-item";
+            this.ul.dom.appendChild(li);
+            item.render(li, this);
+            this.delayAutoWidth();
+        }
+        return item;
+    },
+
+    addToolMenuItem : function(config){
+        if(!(config instanceof Ext.menu.Item)){
+            if(typeof config.checked == "boolean"){ // must be check menu item config?
+                config = new Ext.menu.CheckItem(config);
+            }else{
+                config = new Ext.menu.Item(config);
+            }
+        }
+        return this.addToolItem(config);
+    },
+
+    setTitle : function(title, iconCls){
+        this.title = title;
+        this.header.child('span').update(title);
+        return this;
+    }
 });
\ No newline at end of file