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.bootstrap.MenuMgr
14 * Provides a common registry of all menu items on a page so that they can be easily accessed by id.
17 Roo.bootstrap.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("mouseup", onMouseDown);
53 var last = active.last();
54 lastShow = new Date();
57 Roo.get(document).on("mouseup", onMouseDown);
62 //m.getEl().setZIndex(parseInt(m.parentMenu.getEl().getStyle("z-index"), 10) + 3);
63 m.parentMenu.activeChild = m;
64 }else if(last && last.isVisible()){
65 //m.getEl().setZIndex(parseInt(last.getEl().getStyle("z-index"), 10) + 3);
70 function onBeforeHide(m){
75 clearTimeout(m.autoHideTimer);
76 delete m.autoHideTimer;
81 function onBeforeShow(m){
82 var pm = m.parentMenu;
83 if(!pm && !m.allowOtherMenus){
85 }else if(pm && pm.activeChild && active != m){
86 pm.activeChild.hide();
90 // private this should really trigger on mouseup..
91 function onMouseDown(e){
92 Roo.log("on Mouse Up");
94 if(lastShow.getElapsed() > 50 && active.length > 0 && !e.getTarget(".dropdown-menu") && !e.getTarget('.user-menu')){
95 Roo.log("MenuManager hideAll");
104 function onBeforeCheck(mi, state){
106 var g = groups[mi.group];
107 for(var i = 0, l = g.length; i < l; i++){
109 g[i].setChecked(false);
118 * Hides all menus that are currently visible
120 hideAll : function(){
125 register : function(menu){
129 menus[menu.id] = menu;
130 menu.on("beforehide", onBeforeHide);
131 menu.on("hide", onHide);
132 menu.on("beforeshow", onBeforeShow);
133 menu.on("show", onShow);
135 if(g && menu.events["checkchange"]){
139 groups[g].push(menu);
140 menu.on("checkchange", onCheck);
145 * Returns a {@link Roo.menu.Menu} object
146 * @param {String/Object} menu The string menu id, an existing menu object reference, or a Menu config that will
147 * be used to generate and return a new Menu instance.
149 get : function(menu){
150 if(typeof menu == "string"){ // menu id
152 }else if(menu.events){ // menu instance
155 /*else if(typeof menu.length == 'number'){ // array of menu items?
156 return new Roo.bootstrap.Menu({items:menu});
157 }else{ // otherwise, must be a config
158 return new Roo.bootstrap.Menu(menu);
165 unregister : function(menu){
166 delete menus[menu.id];
167 menu.un("beforehide", onBeforeHide);
168 menu.un("hide", onHide);
169 menu.un("beforeshow", onBeforeShow);
170 menu.un("show", onShow);
172 if(g && menu.events["checkchange"]){
173 groups[g].remove(menu);
174 menu.un("checkchange", onCheck);
179 registerCheckable : function(menuItem){
180 var g = menuItem.group;
185 groups[g].push(menuItem);
186 menuItem.on("beforecheckchange", onBeforeCheck);
191 unregisterCheckable : function(menuItem){
192 var g = menuItem.group;
194 groups[g].remove(menuItem);
195 menuItem.un("beforecheckchange", onBeforeCheck);