/*!
- * Ext JS Library 3.0.3
- * Copyright(c) 2006-2009 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