4 * Copyright(c) 2006-2007, Ext JS, LLC.
6 * Originally Released Under LGPL - original licence link has changed is not relivant.
9 * <script type="text/javascript">
13 * @class Roo.menu.MenuMgr
14 * Provides a common registry of all menu items on a page so that they can be easily accessed by id.
17 Roo.menu.MenuMgr = function(){
18 var menus, active, groups = {}, attached = false, lastShow = new Date();
20 // private - called when first menu is created
23 active = new Roo.util.MixedCollection();
24 Roo.get(document).addKeyListener(27, function(){
25 if(active.length > 0){
33 if(active && active.length > 0){
34 var c = active.clone();
44 if(active.length < 1){
45 Roo.get(document).un("mousedown", onMouseDown);
52 var last = active.last();
53 lastShow = new Date();
56 Roo.get(document).on("mousedown", onMouseDown);
60 m.getEl().setZIndex(parseInt(m.parentMenu.getEl().getStyle("z-index"), 10) + 3);
61 m.parentMenu.activeChild = m;
62 }else if(last && last.isVisible()){
63 m.getEl().setZIndex(parseInt(last.getEl().getStyle("z-index"), 10) + 3);
68 function onBeforeHide(m){
73 clearTimeout(m.autoHideTimer);
74 delete m.autoHideTimer;
79 function onBeforeShow(m){
80 var pm = m.parentMenu;
81 if(!pm && !m.allowOtherMenus){
83 }else if(pm && pm.activeChild && active != m){
84 pm.activeChild.hide();
89 function onMouseDown(e){
90 if(lastShow.getElapsed() > 50 && active.length > 0 && !e.getTarget(".x-menu")){
96 function onBeforeCheck(mi, state){
98 var g = groups[mi.group];
99 for(var i = 0, l = g.length; i < l; i++){
101 g[i].setChecked(false);
110 * Hides all menus that are currently visible
112 hideAll : function(){
117 register : function(menu){
121 menus[menu.id] = menu;
122 menu.on("beforehide", onBeforeHide);
123 menu.on("hide", onHide);
124 menu.on("beforeshow", onBeforeShow);
125 menu.on("show", onShow);
127 if(g && menu.events["checkchange"]){
131 groups[g].push(menu);
132 menu.on("checkchange", onCheck);
137 * Returns a {@link Roo.menu.Menu} object
138 * @param {String/Object} menu The string menu id, an existing menu object reference, or a Menu config that will
139 * be used to generate and return a new Menu instance.
141 get : function(menu){
142 if(typeof menu == "string"){ // menu id
144 }else if(menu.events){ // menu instance
146 }else if(typeof menu.length == 'number'){ // array of menu items?
147 return new Roo.menu.Menu({items:menu});
148 }else{ // otherwise, must be a config
149 return new Roo.menu.Menu(menu);
154 unregister : function(menu){
155 delete menus[menu.id];
156 menu.un("beforehide", onBeforeHide);
157 menu.un("hide", onHide);
158 menu.un("beforeshow", onBeforeShow);
159 menu.un("show", onShow);
161 if(g && menu.events["checkchange"]){
162 groups[g].remove(menu);
163 menu.un("checkchange", onCheck);
168 registerCheckable : function(menuItem){
169 var g = menuItem.group;
174 groups[g].push(menuItem);
175 menuItem.on("beforecheckchange", onBeforeCheck);
180 unregisterCheckable : function(menuItem){
181 var g = menuItem.group;
183 groups[g].remove(menuItem);
184 menuItem.un("beforecheckchange", onBeforeCheck);