MainPanel = function(){
this.preview = new Ext.Panel({
id: 'preview',
region: 'south',
cls:'preview',
autoScroll: true,
listeners: FeedViewer.LinkInterceptor,
tbar: [{
id:'tab',
text: 'View in New Tab',
iconCls: 'new-tab',
disabled:true,
handler : this.openTab,
scope: this
},
'-',
{
id:'win',
text: 'Go to Post',
iconCls: 'new-win',
disabled:true,
scope: this,
handler : function(){
window.open(this.gsm.getSelected().data.link);
}
}],
clear: function(){
this.body.update('');
var items = this.topToolbar.items;
items.get('tab').disable();
items.get('win').disable();
}
});
this.grid = new FeedGrid(this, {
tbar:[{
text:'Open All',
tooltip: {title:'Open All',text:'Opens all item in tabs'},
iconCls: 'tabs',
handler: this.openAll,
scope:this
},
'-',
{
split:true,
text:'Reading Pane',
tooltip: {title:'Reading Pane',text:'Show, move or hide the Reading Pane'},
iconCls: 'preview-bottom',
handler: this.movePreview.createDelegate(this, []),
menu:{
id:'reading-menu',
cls:'reading-menu',
width:100,
items: [{
text:'Bottom',
checked:true,
group:'rp-group',
checkHandler:this.movePreview,
scope:this,
iconCls:'preview-bottom'
},{
text:'Right',
checked:false,
group:'rp-group',
checkHandler:this.movePreview,
scope:this,
iconCls:'preview-right'
},{
text:'Hide',
checked:false,
group:'rp-group',
checkHandler:this.movePreview,
scope:this,
iconCls:'preview-hide'
}]
}
},
'-',
{
pressed: true,
enableToggle:true,
text:'Summary',
tooltip: {title:'Post Summary',text:'View a short summary of each item in the list'},
iconCls: 'summary',
scope:this,
toggleHandler: function(btn, pressed){
this.grid.togglePreview(pressed);
}
}]
});
MainPanel.superclass.constructor.call(this, {
id:'main-tabs',
activeTab:0,
region:'center',
margins:'0 5 5 0',
resizeTabs:true,
tabWidth:150,
minTabWidth: 120,
enableTabScroll: true,
plugins: new Ext.ux.TabCloseMenu(),
items: {
id:'main-view',
layout:'border',
title:'Loading...',
hideMode:'offsets',
items:[
this.grid, {
id:'bottom-preview',
layout:'fit',
items:this.preview,
height: 250,
split: true,
border:false,
region:'south'
}, {
id:'right-preview',
layout:'fit',
border:false,
region:'east',
width:350,
split: true,
hidden:true
}]
}
});
this.gsm = this.grid.getSelectionModel();
this.gsm.on('rowselect', function(sm, index, record){
FeedViewer.getTemplate().overwrite(this.preview.body, record.data);
var items = this.preview.topToolbar.items;
items.get('tab').enable();
items.get('win').enable();
}, this, {buffer:250});
this.grid.store.on('beforeload', this.preview.clear, this.preview);
this.grid.store.on('load', this.gsm.selectFirstRow, this.gsm);
this.grid.on('rowdblclick', this.openTab, this);
};
Ext.extend(MainPanel, Ext.TabPanel, {
loadFeed : function(feed){
this.grid.loadFeed(feed.url);
Ext.getCmp('main-view').setTitle(feed.text);
},
movePreview : function(m, pressed){
if(!m){ // cycle if not a menu item click
var items = Ext.menu.MenuMgr.get('reading-menu').items.items;
var b = items[0], r = items[1], h = items[2];
if(b.checked){
r.setChecked(true);
}else if(r.checked){
h.setChecked(true);
}else if(h.checked){
b.setChecked(true);
}
return;
}
if(pressed){
var preview = this.preview;
var right = Ext.getCmp('right-preview');
var bot = Ext.getCmp('bottom-preview');
var btn = this.grid.getTopToolbar().items.get(2);
switch(m.text){
case 'Bottom':
right.hide();
bot.add(preview);
bot.show();
bot.ownerCt.doLayout();
btn.setIconClass('preview-bottom');
break;
case 'Right':
bot.hide();
right.add(preview);
right.show();
right.ownerCt.doLayout();
btn.setIconClass('preview-right');
break;
case 'Hide':
preview.ownerCt.hide();
preview.ownerCt.ownerCt.doLayout();
btn.setIconClass('preview-hide');
break;
}
}
},
openTab : function(record){
record = (record && record.data) ? record : this.gsm.getSelected();
var d = record.data;
var id = !d.link ? Ext.id() : d.link.replace(/[^A-Z0-9-_]/gi, '');
var tab;
if(!(tab = this.getItem(id))){
tab = new Ext.Panel({
id: id,
cls:'preview single-preview',
title: d.title,
tabTip: d.title,
html: FeedViewer.getTemplate().apply(d),
closable:true,
listeners: FeedViewer.LinkInterceptor,
autoScroll:true,
border:true,
tbar: [{
text: 'Go to Post',
iconCls: 'new-win',
handler : function(){
window.open(d.link);
}
}]
});
this.add(tab);
}
this.setActiveTab(tab);
},
openAll : function(){
this.beginUpdate();
this.grid.store.data.each(this.openTab, this);
this.endUpdate();
}
});
Ext.reg('appmainpanel', MainPanel);