Ext.require(['*']);
Ext.onReady(function() {
var cw;
Ext.state.Manager.setProvider(Ext.create('Ext.state.CookieProvider'));
function closeRegion (e, target, header, tool) {
var panel = header.ownerCt;
newRegions.unshift(panel.initialConfig);
viewport.remove(panel);
}
var newRegions = [{
region: 'north',
title: 'North 2',
height: 100,
collapsible: true,
weight: -120
}, {
region: 'east',
title: 'East 2',
width: 100,
collapsible: true,
weight: -110
}, {
region: 'west',
title: 'West 2',
width: 100,
collapsible: true,
weight: -110
}];
var viewport = Ext.create('Ext.Viewport', {
layout: {
type: 'border',
padding: 5
},
defaults: {
split: true
},
items: [{
region: 'north',
collapsible: true,
title: 'North',
split: true,
height: 100,
minHeight: 60,
html: 'north'
},{
region: 'west',
collapsible: true,
layout: 'absolute',
title: 'Starts at width 30%',
split: true,
width: '30%',
minWidth: 100,
minHeight: 140,
bodyPadding: 10,
stateId: 'westRegion',
stateful: true,
html: '
'+
'west
I am floatable and stateful!
',
items: [{
xtype: 'regionsetter'
}],
tools: [{
type: 'gear',
callback: function (panel, tool) {
function setWeight () {
panel.setRegionWeight(parseInt(this.text, 10));
}
var regionMenu = panel.regionMenu || (panel.regionMenu =
Ext.widget({
xtype: 'menu',
items: [{
text: 'North',
glyph: '9650@',
handler: function () {
panel.setBorderRegion('north');
}
},{
text: 'South',
glyph: '9660@',
handler: function () {
panel.setBorderRegion('south');
}
},{
text: 'East',
glyph: '9658@',
handler: function () {
panel.setBorderRegion('east');
}
},{
text: 'West',
glyph: '9668@',
handler: function () {
panel.setBorderRegion('west');
}
},
'-', {
text: 'Weight',
menu: [{
text: '-10',
group: 'weight',
xtype: 'menucheckitem',
handler: setWeight
},{
text: '10',
group: 'weight',
xtype: 'menucheckitem',
handler: setWeight
},{
text: '20',
group: 'weight',
xtype: 'menucheckitem',
handler: setWeight
},{
text: '50',
group: 'weight',
xtype: 'menucheckitem',
handler: setWeight
},{
text: '100',
group: 'weight',
xtype: 'menucheckitem',
handler: setWeight
}]
}]
}));
regionMenu.showBy(tool.el);
}
}]
},{
region: 'center',
html: 'center center',
title: 'Center',
minHeight: 80,
items: [cw = Ext.create('Ext.Window', {
xtype: 'window',
closable: false,
minimizable: true,
title: 'Constrained Window',
height: 200,
width: 400,
constrain: true,
html: 'I am in a Container',
itemId: 'center-window',
minimize: function() {
this.floatParent.down('button#toggleCw').toggle();
}
})],
bbar: [ 'Text followed by a spacer', ' ', {
itemId: 'toggleCw',
text: 'Constrained Window',
enableToggle: true,
toggleHandler: function() {
cw.setVisible(!cw.isVisible());
}
}, {
text: 'Add Region',
listeners: {
click: function () {
if (newRegions.length) {
var region = newRegions.pop();
region.tools = [ { type: 'close', handler: closeRegion }];
viewport.add(region);
} else {
Ext.Msg.show({
title: 'All added',
msg: 'Close one of the dynamic regions first',
//minWidth: Ext.Msg.minWidth,
buttons: Ext.Msg.OK,
icon: Ext.Msg.ERROR
});
}
}
}
}, {
text: 'Change Titles',
listeners: {
click: function () {
var panels = viewport.query('panel');
Ext.suspendLayouts();
Ext.Array.forEach(panels, function (panel) {
panel.setTitle(panel.title + '!');
});
Ext.resumeLayouts(true);
}
}
}]
},{
region: 'east',
collapsible: true,
floatable: true,
split: true,
width: 200,
minWidth: 120,
minHeight: 140,
title: 'East',
layout: {
type: 'vbox',
padding: 5,
align: 'stretch'
},
items: [{
xtype: 'textfield',
labelWidth: 70,
fieldLabel: 'Text field'
}, {
xtype: 'component',
html: 'I am floatable'
}]
},{
region: 'south',
height: 100,
split: true,
collapsible: true,
title: 'Splitter above me',
minHeight: 60,
html: 'center south',
weight: -100
},{
region: 'south',
collapsible: true,
split: true,
height: 200,
minHeight: 120,
title: 'South',
layout: {
type: 'border',
padding: 5
},
items: [{
title: 'South Central',
region: 'center',
minWidth: 80,
html: 'South Central'
}, {
title: 'South Eastern',
region: 'east',
flex: 1,
minWidth: 80,
html: 'South Eastern',
split: true,
collapsible: true
}, {
title: 'South Western - not resizable',
region: 'west',
flex: 1,
minWidth: 80,
html: 'South Western
I collapse to nothing',
split: true,
collapsible: true,
splitterResize: false,
collapseMode: 'mini'
}]
}]
});
});
Ext.define('Ext.example.RegionSetter', {
extend: 'Ext.Component',
xtype: 'regionsetter',
style: 'font-size: 30px;',
autoEl: {
tag: 'table',
cn: [{
tag: 'tr',
cn: [{
tag: 'td',
colspan: 3,
align: 'center',
cls: 'ux-arrow ux-arrow-up',
//html: '☝'
html: '▲'
}]
},{
tag: 'tr',
cn: [{
tag: 'td',
cls: 'ux-arrow ux-arrow-left',
//html: '☜'
html: '◄'
},{
tag: 'td',
style: 'font-size: 120%',
html: '☀'
},{
tag: 'td',
cls: 'ux-arrow ux-arrow-right',
//html: '☞'
html: '►'
}]
},{
tag: 'tr',
cn: [{
tag: 'td',
colspan: 3,
align: 'center',
cls: 'ux-arrow ux-arrow-down',
//html: '☟'
html: '▼'
}]
}]
},
afterRender: function () {
this.callParent();
this.ownerCt.on({
changeregion: 'onChangeRegion',
scope: this
});
this.onChangeRegion(this.ownerCt);
this.el.on({
click: this.onClick,
mouseover: this.onMouseOver,
mouseout: this.onMouseOut,
scope: this
});
},
onClick: function (e) {
var target = Ext.fly(e.getTarget());
var region;
if (target.hasCls('ux-arrow-up')) {
region = 'north';
} else if (target.hasCls('ux-arrow-left')) {
region = 'west';
} else if (target.hasCls('ux-arrow-right')) {
region = 'east';
} else if (target.hasCls('ux-arrow-down')) {
region = 'south';
}
if (region && region !== this.ownerCt.region) {
this.ownerCt.setBorderRegion(region);
}
},
onMouseOver: function (e) {
var target = Ext.fly(e.getTarget());
if (target.hasCls('ux-arrow')) {
target.addCls('ux-arrow-over');
}
},
onMouseOut: function (e) {
var target = Ext.fly(e.getTarget());
target.removeCls('ux-arrow-over');
},
onChangeRegion: function (panel, oldRegion) {
if (oldRegion) {
this.removeCls('ux-arrow-current-' + oldRegion);
}
this.addCls('ux-arrow-current-' + panel.region);
}
});