Upgrade to ExtJS 3.0.0 - Released 07/06/2009
[extjs.git] / docs / source / FeedPanel1.html
1 <html>\r
2 <head>\r
3   <title>The source code</title>\r
4     <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />\r
5     <script type="text/javascript" src="../resources/prettify/prettify.js"></script>\r
6 </head>\r
7 <body  onload="prettyPrint();">\r
8     <pre class="prettyprint lang-js">FeedPanel = function() {\r
9     FeedPanel.superclass.constructor.call(this, {\r
10         id:'feed-tree',\r
11         region:'west',\r
12         title:'Feeds',\r
13         split:true,\r
14         width: 225,\r
15         minSize: 175,\r
16         maxSize: 400,\r
17         collapsible: true,\r
18         margins:'0 0 5 5',\r
19         cmargins:'0 5 5 5',\r
20         rootVisible:false,\r
21         lines:false,\r
22         autoScroll:true,\r
23         root: new Ext.tree.TreeNode('My Feeds'),\r
24         collapseFirst:false,\r
25         tbar: [{\r
26             iconCls:'add-feed',\r
27             text:'Add Feed',\r
28             handler: this.showWindow,\r
29             scope: this\r
30         },{\r
31             id:'delete',\r
32             iconCls:'delete-icon',\r
33             text:'Remove',\r
34             handler: function(){\r
35                 var s = this.getSelectionModel().getSelectedNode();\r
36                 if(s){\r
37                     this.removeFeed(s.attributes.url);\r
38                 }\r
39             },\r
40             scope: this\r
41         }]\r
42     });\r
43 \r
44     this.feeds = this.root.appendChild(\r
45         new Ext.tree.TreeNode({\r
46             text:'My Feeds',\r
47             cls:'feeds-node',\r
48             expanded:true\r
49         })\r
50     );\r
51 \r
52     this.getSelectionModel().on({\r
53         'beforeselect' : function(sm, node){\r
54              return node.isLeaf();\r
55         },\r
56         'selectionchange' : function(sm, node){\r
57             if(node){\r
58                 this.fireEvent('feedselect', node.attributes);\r
59             }\r
60             this.getTopToolbar().items.get('delete').setDisabled(!node);\r
61         },\r
62         scope:this\r
63     });\r
64 \r
65     this.addEvents({feedselect:true});\r
66 \r
67     this.on('contextmenu', this.onContextMenu, this);\r
68 };\r
69 \r
70 Ext.extend(FeedPanel, Ext.tree.TreePanel, {\r
71 \r
72     onContextMenu : function(node, e){\r
73         if(!this.menu){ // create context menu on first right click\r
74             this.menu = new Ext.menu.Menu({\r
75                 id:'feeds-ctx',\r
76                 items: [{\r
77                     id:'load',\r
78                     iconCls:'load-icon',\r
79                     text:'Load Feed',\r
80                     scope: this,\r
81                     handler:function(){\r
82                         this.ctxNode.select();\r
83                     }\r
84                 },{\r
85                     text:'Remove',\r
86                     iconCls:'delete-icon',\r
87                     scope: this,\r
88                     handler:function(){\r
89                         this.ctxNode.ui.removeClass('x-node-ctx');\r
90                         this.removeFeed(this.ctxNode.attributes.url);\r
91                         this.ctxNode = null;\r
92                     }\r
93                 },'-',{\r
94                     iconCls:'add-feed',\r
95                     text:'Add Feed',\r
96                     handler: this.showWindow,\r
97                     scope: this\r
98                 }]\r
99             });\r
100             this.menu.on('hide', this.onContextHide, this);\r
101         }\r
102         if(this.ctxNode){\r
103             this.ctxNode.ui.removeClass('x-node-ctx');\r
104             this.ctxNode = null;\r
105         }\r
106         if(node.isLeaf()){\r
107             this.ctxNode = node;\r
108             this.ctxNode.ui.addClass('x-node-ctx');\r
109             this.menu.items.get('load').setDisabled(node.isSelected());\r
110             this.menu.showAt(e.getXY());\r
111         }\r
112     },\r
113 \r
114     onContextHide : function(){\r
115         if(this.ctxNode){\r
116             this.ctxNode.ui.removeClass('x-node-ctx');\r
117             this.ctxNode = null;\r
118         }\r
119     },\r
120 \r
121     showWindow : function(btn){\r
122         if(!this.win){\r
123             this.win = new FeedWindow();\r
124             this.win.on('validfeed', this.addFeed, this);\r
125         }\r
126         this.win.show(btn);\r
127     },\r
128 \r
129     selectFeed: function(url){\r
130         this.getNodeById(url).select();\r
131     },\r
132 \r
133     removeFeed: function(url){\r
134         var node = this.getNodeById(url);\r
135         if(node){\r
136             node.unselect();\r
137             Ext.fly(node.ui.elNode).ghost('l', {\r
138                 callback: node.remove, scope: node, duration: .4\r
139             });\r
140         }\r
141     },\r
142 \r
143     addFeed : function(attrs, inactive, preventAnim){\r
144         var exists = this.getNodeById(attrs.url);\r
145         if(exists){\r
146             if(!inactive){\r
147                 exists.select();\r
148                 exists.ui.highlight();\r
149             }\r
150             return;\r
151         }\r
152         Ext.apply(attrs, {\r
153             iconCls: 'feed-icon',\r
154             leaf:true,\r
155             cls:'feed',\r
156             id: attrs.url\r
157         });\r
158         var node = new Ext.tree.TreeNode(attrs);\r
159         this.feeds.appendChild(node);\r
160         if(!inactive){\r
161             if(!preventAnim){\r
162                 Ext.fly(node.ui.elNode).slideIn('l', {\r
163                     callback: node.select, scope: node, duration: .4\r
164                 });\r
165             }else{\r
166                 node.select();\r
167             }\r
168         }\r
169         return node;\r
170     },\r
171 \r
172     // prevent the default context menu when you miss the node\r
173     afterRender : function(){\r
174         FeedPanel.superclass.afterRender.call(this);\r
175         this.el.on('contextmenu', function(e){\r
176             e.preventDefault();\r
177         });\r
178     }\r
179 });\r
180 \r
181 Ext.reg('appfeedpanel', FeedPanel); </pre>    \r
182 </body>\r
183 </html>