3 * Copyright(c) 2006-2009 Ext JS, LLC
5 * http://www.extjs.com/license
9 Ext.ux.TabScrollerMenu = Ext.extend(Object, {
12 menuPrefixText : 'Items',
13 constructor : function(config) {
14 config = config || {};
15 Ext.apply(this, config);
17 init : function(tabPanel) {
18 Ext.apply(tabPanel, this.tabPanelMethods);
20 tabPanel.tabScrollerMenu = this;
28 var newFn = tabPanel.createScrollers.createSequence(thisRef.createPanelsMenu, this);
29 tabPanel.createScrollers = newFn;
34 // private && sequeneced
35 createPanelsMenu : function() {
36 var h = this.stripWrap.dom.offsetHeight;
38 //move the right menu item to the left 18px
39 var rtScrBtn = this.header.dom.firstChild;
40 Ext.fly(rtScrBtn).applyStyles({
44 var stripWrap = Ext.get(this.strip.dom.parentNode);
45 stripWrap.applyStyles({
46 'margin-right' : '36px'
49 // Add the new righthand menu
50 var scrollMenu = this.header.insertFirst({
51 cls:'x-tab-tabmenu-right'
53 scrollMenu.setHeight(h);
54 scrollMenu.addClassOnOver('x-tab-tabmenu-over');
55 scrollMenu.on('click', this.showTabsMenu, this);
57 this.scrollLeft.show = this.scrollLeft.show.createSequence(function() {
61 this.scrollLeft.hide = this.scrollLeft.hide.createSequence(function() {
67 getPageSize : function() {
71 setPageSize : function(pageSize) {
72 this.pageSize = pageSize;
75 getMaxText : function() {
79 setMaxText : function(t) {
82 getMenuPrefixText : function() {
83 return this.menuPrefixText;
85 setMenuPrefixText : function(t) {
86 this.menuPrefixText = t;
88 // private && applied to the tab panel itself.
90 // all execute within the scope of the tab panel
92 showTabsMenu : function(e) {
93 if (! this.tabsMenu) {
94 this.tabsMenu = new Ext.menu.Menu();
95 this.on('beforedestroy', this.tabsMenu.destroy, this.tabsMenu);
98 this.tabsMenu.removeAll();
100 this.generateTabMenuItems();
102 var target = Ext.get(e.getTarget());
103 var xy = target.getXY();
105 //Y param + 24 pixels
108 this.tabsMenu.showAt(xy);
111 generateTabMenuItems : function() {
112 var curActive = this.getActiveTab();
113 var totalItems = this.items.getCount();
114 var pageSize = this.tabScrollerMenu.getPageSize();
117 if (totalItems > pageSize) {
118 var numSubMenus = Math.floor(totalItems / pageSize);
119 var remainder = totalItems % pageSize;
121 // Loop through all of the items and create submenus in chunks of 10
122 for (var i = 0 ; i < numSubMenus; i++) {
123 var curPage = (i + 1) * pageSize;
127 for (var x = 0; x < pageSize; x++) {
128 index = x + curPage - pageSize;
129 var item = this.items.get(index);
130 menuItems.push(this.autoGenMenuItem(item));
134 text : this.tabScrollerMenu.getMenuPrefixText() + ' ' + (curPage - pageSize + 1) + ' - ' + curPage,
141 var start = numSubMenus * pageSize;
143 for (var i = start ; i < totalItems; i ++ ) {
144 var item = this.items.get(i);
145 menuItems.push(this.autoGenMenuItem(item));
150 text : this.tabScrollerMenu.menuPrefixText + ' ' + (start + 1) + ' - ' + (start + menuItems.length),
158 this.items.each(function(item) {
159 if (item.id != curActive.id && ! item.hidden) {
160 menuItems.push(this.autoGenMenuItem(item));
166 autoGenMenuItem : function(item) {
167 var maxText = this.tabScrollerMenu.getMaxText();
168 var text = Ext.util.Format.ellipsis(item.title, maxText);
172 handler : this.showTabFromMenu,
174 disabled : item.disabled,
176 iconCls : item.iconCls
181 showTabFromMenu : function(menuItem) {
182 this.setActiveTab(menuItem.tabToShow);