Upgrade to ExtJS 3.1.0 - Released 12/16/2009
[extjs.git] / examples / ux / TabCloseMenu.js
1 /*!
2  * Ext JS Library 3.1.0
3  * Copyright(c) 2006-2009 Ext JS, LLC
4  * licensing@extjs.com
5  * http://www.extjs.com/license
6  */
7 /**\r
8  * @class Ext.ux.TabCloseMenu\r
9  * @extends Object \r
10  * Plugin (ptype = 'tabclosemenu') for adding a close context menu to tabs.\r
11  * \r
12  * @ptype tabclosemenu\r
13  */\r
14 Ext.ux.TabCloseMenu = function(){\r
15     var tabs, menu, ctxItem;\r
16     this.init = function(tp){\r
17         tabs = tp;\r
18         tabs.on('contextmenu', onContextMenu);\r
19     };\r
20 \r
21     function onContextMenu(ts, item, e){\r
22         if(!menu){ // create context menu on first right click\r
23             menu = new Ext.menu.Menu({            \r
24             items: [{\r
25                 id: tabs.id + '-close',\r
26                 text: 'Close Tab',\r
27                 handler : function(){\r
28                     tabs.remove(ctxItem);\r
29                 }\r
30             },{\r
31                 id: tabs.id + '-close-others',\r
32                 text: 'Close Other Tabs',\r
33                 handler : function(){\r
34                     tabs.items.each(function(item){\r
35                         if(item.closable && item != ctxItem){\r
36                             tabs.remove(item);\r
37                         }\r
38                     });\r
39                 }\r
40             }]});\r
41         }\r
42         ctxItem = item;\r
43         var items = menu.items;\r
44         items.get(tabs.id + '-close').setDisabled(!item.closable);\r
45         var disableOthers = true;\r
46         tabs.items.each(function(){\r
47             if(this != item && this.closable){\r
48                 disableOthers = false;\r
49                 return false;\r
50             }\r
51         });\r
52         items.get(tabs.id + '-close-others').setDisabled(disableOthers);\r
53         e.stopEvent();\r
54         menu.showAt(e.getPoint());\r
55     }\r
56 };\r
57 \r
58 Ext.preg('tabclosemenu', Ext.ux.TabCloseMenu);\r