2 * @class Roo.bootstrap.MenuMgr
4 * Provides a common registry of all menu items on a page so that they can be easily accessed by id.
7 Roo.bootstrap.menu.Manager = function(){
8 var menus, active, groups = {}, attached = false, lastShow = new Date();
10 // private - called when first menu is created
13 active = new Roo.util.MixedCollection();
14 Roo.get(document).addKeyListener(27, function(){
15 if(active.length > 0){
23 if(active && active.length > 0){
24 var c = active.clone();
34 if(active.length < 1){
35 Roo.get(document).un("mouseup", onMouseDown);
43 var last = active.last();
44 lastShow = new Date();
47 Roo.get(document).on("mouseup", onMouseDown);
52 //m.getEl().setZIndex(parseInt(m.parentMenu.getEl().getStyle("z-index"), 10) + 3);
53 m.parentMenu.activeChild = m;
54 }else if(last && last.isVisible()){
55 //m.getEl().setZIndex(parseInt(last.getEl().getStyle("z-index"), 10) + 3);
60 function onBeforeHide(m){
65 clearTimeout(m.autoHideTimer);
66 delete m.autoHideTimer;
71 function onBeforeShow(m){
72 var pm = m.parentMenu;
73 if(!pm && !m.allowOtherMenus){
75 }else if(pm && pm.activeChild && active != m){
76 pm.activeChild.hide();
80 // private this should really trigger on mouseup..
81 function onMouseDown(e){
82 Roo.log("on Mouse Up");
84 if(lastShow.getElapsed() > 50 && active.length > 0 && !e.getTarget(".dropdown-menu") && !e.getTarget('.user-menu')){
85 Roo.log("MenuManager hideAll");
94 function onBeforeCheck(mi, state){
96 var g = groups[mi.group];
97 for(var i = 0, l = g.length; i < l; i++){
99 g[i].setChecked(false);
108 * Hides all menus that are currently visible
110 hideAll : function(){
115 register : function(menu){
119 menus[menu.id] = menu;
120 menu.on("beforehide", onBeforeHide);
121 menu.on("hide", onHide);
122 menu.on("beforeshow", onBeforeShow);
123 menu.on("show", onShow);
125 if(g && menu.events["checkchange"]){
129 groups[g].push(menu);
130 menu.on("checkchange", onCheck);
135 * Returns a {@link Roo.menu.Menu} object
136 * @param {String/Object} menu The string menu id, an existing menu object reference, or a Menu config that will
137 * be used to generate and return a new Menu instance.
139 get : function(menu){
140 if(typeof menu == "string"){ // menu id
142 }else if(menu.events){ // menu instance
145 /*else if(typeof menu.length == 'number'){ // array of menu items?
146 return new Roo.bootstrap.Menu({items:menu});
147 }else{ // otherwise, must be a config
148 return new Roo.bootstrap.Menu(menu);
155 unregister : function(menu){
156 delete menus[menu.id];
157 menu.un("beforehide", onBeforeHide);
158 menu.un("hide", onHide);
159 menu.un("beforeshow", onBeforeShow);
160 menu.un("show", onShow);
162 if(g && menu.events["checkchange"]){
163 groups[g].remove(menu);
164 menu.un("checkchange", onCheck);
169 registerCheckable : function(menuItem){
170 var g = menuItem.group;
175 groups[g].push(menuItem);
176 menuItem.on("beforecheckchange", onBeforeCheck);
181 unregisterCheckable : function(menuItem){
182 var g = menuItem.group;
184 groups[g].remove(menuItem);
185 menuItem.un("beforecheckchange", onBeforeCheck);