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);