123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- /*
- * Ext JS Library 3.3.0
- * Copyright(c) 2006-2010 Ext JS, Inc.
- * licensing@extjs.com
- * http://www.extjs.com/license
- */
- /**
- * @class Ext.ux.TabCloseMenu
- * @extends Object
- * Plugin (ptype = 'tabclosemenu') for adding a close context menu to tabs. Note that the menu respects
- * the closable configuration on the tab. As such, commands like remove others and remove all will not
- * remove items that are not closable.
- *
- * @constructor
- * @param {Object} config The configuration options
- * @ptype tabclosemenu
- */
- Ext.ux.TabCloseMenu = Ext.extend(Object, {
- /**
- * @cfg {String} closeTabText
- * The text for closing the current tab. Defaults to <tt>'Close Tab'</tt>.
- */
- closeTabText: 'Close Tab',
- /**
- * @cfg {String} closeOtherTabsText
- * The text for closing all tabs except the current one. Defaults to <tt>'Close Other Tabs'</tt>.
- */
- closeOtherTabsText: 'Close Other Tabs',
-
- /**
- * @cfg {Boolean} showCloseAll
- * Indicates whether to show the 'Close All' option. Defaults to <tt>true</tt>.
- */
- showCloseAll: true,
- /**
- * @cfg {String} closeAllTabsText
- * <p>The text for closing all tabs. Defaults to <tt>'Close All Tabs'</tt>.
- */
- closeAllTabsText: 'Close All Tabs',
-
- constructor : function(config){
- Ext.apply(this, config || {});
- },
- //public
- init : function(tabs){
- this.tabs = tabs;
- tabs.on({
- scope: this,
- contextmenu: this.onContextMenu,
- destroy: this.destroy
- });
- },
-
- destroy : function(){
- Ext.destroy(this.menu);
- delete this.menu;
- delete this.tabs;
- delete this.active;
- },
- // private
- onContextMenu : function(tabs, item, e){
- this.active = item;
- var m = this.createMenu(),
- disableAll = true,
- disableOthers = true,
- closeAll = m.getComponent('closeall');
-
- m.getComponent('close').setDisabled(!item.closable);
- tabs.items.each(function(){
- if(this.closable){
- disableAll = false;
- if(this != item){
- disableOthers = false;
- return false;
- }
- }
- });
- m.getComponent('closeothers').setDisabled(disableOthers);
- if(closeAll){
- closeAll.setDisabled(disableAll);
- }
-
- e.stopEvent();
- m.showAt(e.getPoint());
- },
-
- createMenu : function(){
- if(!this.menu){
- var items = [{
- itemId: 'close',
- text: this.closeTabText,
- scope: this,
- handler: this.onClose
- }];
- if(this.showCloseAll){
- items.push('-');
- }
- items.push({
- itemId: 'closeothers',
- text: this.closeOtherTabsText,
- scope: this,
- handler: this.onCloseOthers
- });
- if(this.showCloseAll){
- items.push({
- itemId: 'closeall',
- text: this.closeAllTabsText,
- scope: this,
- handler: this.onCloseAll
- });
- }
- this.menu = new Ext.menu.Menu({
- items: items
- });
- }
- return this.menu;
- },
-
- onClose : function(){
- this.tabs.remove(this.active);
- },
-
- onCloseOthers : function(){
- this.doClose(true);
- },
-
- onCloseAll : function(){
- this.doClose(false);
- },
-
- doClose : function(excludeActive){
- var items = [];
- this.tabs.items.each(function(item){
- if(item.closable){
- if(!excludeActive || item != this.active){
- items.push(item);
- }
- }
- }, this);
- Ext.each(items, function(item){
- this.tabs.remove(item);
- }, this);
- }
- });
- Ext.preg('tabclosemenu', Ext.ux.TabCloseMenu);
|