3 * Copyright(c) 2006-2010 Ext JS, LLC
5 * http://www.extjs.com/license
7 FeedPanel = function() {
\r
8 FeedPanel.superclass.constructor.call(this, {
\r
22 root: new Ext.tree.TreeNode('My Feeds'),
\r
23 collapseFirst:false,
\r
27 handler: this.showWindow,
\r
31 iconCls:'delete-icon',
\r
33 handler: function(){
\r
34 var s = this.getSelectionModel().getSelectedNode();
\r
36 this.removeFeed(s.attributes.url);
\r
43 this.feeds = this.root.appendChild(
\r
44 new Ext.tree.TreeNode({
\r
51 this.getSelectionModel().on({
\r
52 'beforeselect' : function(sm, node){
\r
53 return node.isLeaf();
\r
55 'selectionchange' : function(sm, node){
\r
57 this.fireEvent('feedselect', node.attributes);
\r
59 this.getTopToolbar().items.get('delete').setDisabled(!node);
\r
64 this.addEvents({feedselect:true});
\r
66 this.on('contextmenu', this.onContextMenu, this);
\r
69 Ext.extend(FeedPanel, Ext.tree.TreePanel, {
\r
71 onContextMenu : function(node, e){
\r
72 if(!this.menu){ // create context menu on first right click
\r
73 this.menu = new Ext.menu.Menu({
\r
77 iconCls:'load-icon',
\r
81 this.ctxNode.select();
\r
85 iconCls:'delete-icon',
\r
88 this.ctxNode.ui.removeClass('x-node-ctx');
\r
89 this.removeFeed(this.ctxNode.attributes.url);
\r
90 this.ctxNode = null;
\r
95 handler: this.showWindow,
\r
99 this.menu.on('hide', this.onContextHide, this);
\r
102 this.ctxNode.ui.removeClass('x-node-ctx');
\r
103 this.ctxNode = null;
\r
106 this.ctxNode = node;
\r
107 this.ctxNode.ui.addClass('x-node-ctx');
\r
108 this.menu.items.get('load').setDisabled(node.isSelected());
\r
109 this.menu.showAt(e.getXY());
\r
113 onContextHide : function(){
\r
115 this.ctxNode.ui.removeClass('x-node-ctx');
\r
116 this.ctxNode = null;
\r
120 showWindow : function(btn){
\r
122 this.win = new FeedWindow();
\r
123 this.win.on('validfeed', this.addFeed, this);
\r
125 this.win.show(btn);
\r
128 selectFeed: function(url){
\r
129 this.getNodeById(url).select();
\r
132 removeFeed: function(url){
\r
133 var node = this.getNodeById(url);
\r
136 Ext.fly(node.ui.elNode).ghost('l', {
\r
137 callback: node.remove, scope: node, duration: .4
\r
142 addFeed : function(attrs, inactive, preventAnim){
\r
143 var exists = this.getNodeById(attrs.url);
\r
147 exists.ui.highlight();
\r
152 iconCls: 'feed-icon',
\r
157 var node = new Ext.tree.TreeNode(attrs);
\r
158 this.feeds.appendChild(node);
\r
161 Ext.fly(node.ui.elNode).slideIn('l', {
\r
162 callback: node.select, scope: node, duration: .4
\r
171 // prevent the default context menu when you miss the node
\r
172 afterRender : function(){
\r
173 FeedPanel.superclass.afterRender.call(this);
\r
174 this.el.on('contextmenu', function(e){
\r
175 e.preventDefault();
\r
180 Ext.reg('appfeedpanel', FeedPanel);