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("mousedown", onMouseDown);
53 var last = active.last();
54 lastShow = new Date();
57 // Roo.get(document).on("mousedown", 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();
91 function onMouseDown(e){
92 Roo.log("on MouseDown");
93 if(lastShow.getElapsed() > 50 && active.length > 0 && !e.getTarget(".x-menu")){
101 function onBeforeCheck(mi, state){
103 var g = groups[mi.group];
104 for(var i = 0, l = g.length; i < l; i++){
106 g[i].setChecked(false);
115 * Hides all menus that are currently visible
117 hideAll : function(){
122 register : function(menu){
126 menus[menu.id] = menu;
127 menu.on("beforehide", onBeforeHide);
128 menu.on("hide", onHide);
129 menu.on("beforeshow", onBeforeShow);
130 menu.on("show", onShow);
132 if(g && menu.events["checkchange"]){
136 groups[g].push(menu);
137 menu.on("checkchange", onCheck);
142 * Returns a {@link Roo.menu.Menu} object
143 * @param {String/Object} menu The string menu id, an existing menu object reference, or a Menu config that will
144 * be used to generate and return a new Menu instance.
146 get : function(menu){
147 if(typeof menu == "string"){ // menu id
149 }else if(menu.events){ // menu instance
152 /*else if(typeof menu.length == 'number'){ // array of menu items?
153 return new Roo.bootstrap.Menu({items:menu});
154 }else{ // otherwise, must be a config
155 return new Roo.bootstrap.Menu(menu);
162 unregister : function(menu){
163 delete menus[menu.id];
164 menu.un("beforehide", onBeforeHide);
165 menu.un("hide", onHide);
166 menu.un("beforeshow", onBeforeShow);
167 menu.un("show", onShow);
169 if(g && menu.events["checkchange"]){
170 groups[g].remove(menu);
171 menu.un("checkchange", onCheck);
176 registerCheckable : function(menuItem){
177 var g = menuItem.group;
182 groups[g].push(menuItem);
183 menuItem.on("beforecheckchange", onBeforeCheck);
188 unregisterCheckable : function(menuItem){
189 var g = menuItem.group;
191 groups[g].remove(menuItem);
192 menuItem.un("beforecheckchange", onBeforeCheck);