123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 |
- Ext.define('Ext.tab.TabCloseMenu', {
- alias: 'plugin.tabclosemenu',
- alternateClassName: 'Ext.ux.TabCloseMenu',
- mixins: {
- observable: 'Ext.util.Observable'
- },
-
- closeTabText: 'Close Tab',
-
- showCloseOthers: true,
-
- closeOthersTabsText: 'Close Other Tabs',
-
- showCloseAll: true,
-
- closeAllTabsText: 'Close All Tabs',
-
- extraItemsHead: null,
-
- extraItemsTail: null,
-
- constructor: function (config) {
- this.addEvents(
- 'aftermenu',
- 'beforemenu');
- this.mixins.observable.constructor.call(this, config);
- },
- init : function(tabpanel){
- this.tabPanel = tabpanel;
- this.tabBar = tabpanel.down("tabbar");
- this.mon(this.tabPanel, {
- scope: this,
- afterlayout: this.onAfterLayout,
- single: true
- });
- },
- onAfterLayout: function() {
- this.mon(this.tabBar.el, {
- scope: this,
- contextmenu: this.onContextMenu,
- delegate: 'div.x-tab'
- });
- },
- onBeforeDestroy : function(){
- Ext.destroy(this.menu);
- this.callParent(arguments);
- },
-
- onContextMenu : function(event, target){
- var me = this,
- menu = me.createMenu(),
- disableAll = true,
- disableOthers = true,
- tab = me.tabBar.getChildByElement(target),
- index = me.tabBar.items.indexOf(tab);
- me.item = me.tabPanel.getComponent(index);
- menu.child('*[text="' + me.closeTabText + '"]').setDisabled(!me.item.closable);
- if (me.showCloseAll || me.showCloseOthers) {
- me.tabPanel.items.each(function(item) {
- if (item.closable) {
- disableAll = false;
- if (item != me.item) {
- disableOthers = false;
- return false;
- }
- }
- return true;
- });
- if (me.showCloseAll) {
- menu.child('*[text="' + me.closeAllTabsText + '"]').setDisabled(disableAll);
- }
- if (me.showCloseOthers) {
- menu.child('*[text="' + me.closeOthersTabsText + '"]').setDisabled(disableOthers);
- }
- }
- event.preventDefault();
- me.fireEvent('beforemenu', menu, me.item, me);
- menu.showAt(event.getXY());
- },
- createMenu : function() {
- var me = this;
- if (!me.menu) {
- var items = [{
- text: me.closeTabText,
- scope: me,
- handler: me.onClose
- }];
- if (me.showCloseAll || me.showCloseOthers) {
- items.push('-');
- }
- if (me.showCloseOthers) {
- items.push({
- text: me.closeOthersTabsText,
- scope: me,
- handler: me.onCloseOthers
- });
- }
- if (me.showCloseAll) {
- items.push({
- text: me.closeAllTabsText,
- scope: me,
- handler: me.onCloseAll
- });
- }
- if (me.extraItemsHead) {
- items = me.extraItemsHead.concat(items);
- }
- if (me.extraItemsTail) {
- items = items.concat(me.extraItemsTail);
- }
- me.menu = Ext.create('Ext.menu.Menu', {
- items: items,
- listeners: {
- hide: me.onHideMenu,
- scope: me
- }
- });
- }
- return me.menu;
- },
- onHideMenu: function () {
- var me = this;
- me.item = null;
- me.fireEvent('aftermenu', me.menu, me);
- },
- onClose : function(){
- this.tabPanel.remove(this.item);
- },
- onCloseOthers : function(){
- this.doClose(true);
- },
- onCloseAll : function(){
- this.doClose(false);
- },
- doClose : function(excludeActive){
- var items = [];
- this.tabPanel.items.each(function(item){
- if(item.closable){
- if(!excludeActive || item != this.item){
- items.push(item);
- }
- }
- }, this);
- Ext.each(items, function(item){
- this.tabPanel.remove(item);
- }, this);
- }
- });
|