Module: deluge
Branch: master
Commit: bfdaa47aff235385ee1ba25b81b399796a624141

Author: Damien Churchill <[email protected]>
Date:   Mon Apr 26 00:10:10 2010 +0100

add helper methods for adding and removing columns to the torrent status grid

---

 deluge/ui/web/js/deluge-all/Plugin.js   |   43 ++++++
 deluge/ui/web/js/deluge-all/Torrents.js |  224 ++++++++++++++++---------------
 2 files changed, 157 insertions(+), 110 deletions(-)

diff --git a/deluge/ui/web/js/deluge-all/Plugin.js 
b/deluge/ui/web/js/deluge-all/Plugin.js
index b22ebbd..40468e3 100644
--- a/deluge/ui/web/js/deluge-all/Plugin.js
+++ b/deluge/ui/web/js/deluge-all/Plugin.js
@@ -78,6 +78,49 @@ Deluge.Plugin = Ext.extend(Ext.util.Observable, {
        enable: function() {
                this.fireEvent("enable", this);
                if (this.onEnable) this.onEnable();
+       },
+
+       registerTorrentStatus: function(key, header, options) {
+               options = options || {};
+               var cc = options.colCfg || {}, sc = options.storeCfg || {};
+               sc = Ext.apply(sc, {name: key});
+               deluge.torrents.meta.fields.push(sc);
+               
deluge.torrents.getStore().reader.onMetaChange(deluge.torrents.meta);
+
+               cc = Ext.apply(cc, {
+                       header: header,
+                       dataIndex: key
+               });
+               var cols = deluge.torrents.columns.slice(0);
+               cols.push(cc);
+               deluge.torrents.colModel.setConfig(cols);
+               deluge.torrents.columns = cols;
+
+               Deluge.Keys.Grid.push(key);
+               deluge.torrents.getView().refresh(true);
+       },
+
+       deregisterTorrentStatus: function(key) {
+               var fields = [];
+               Ext.each(deluge.torrents.meta.fields, function(field) {
+                       if (field.name != key) fields.push(field);
+               });
+               deluge.torrents.meta.fields = fields;
+               
deluge.torrents.getStore().reader.onMetaChange(deluge.torrents.meta);
+
+               var cols = [];
+               Ext.each(deluge.torrents.columns, function(col) {
+                       if (col.dataIndex != key) cols.push(col);
+               });
+               deluge.torrents.colModel.setConfig(cols);
+               deluge.torrents.columns = cols;
+
+               var keys = [];
+               Ext.each(Deluge.Keys.Grid, function(k) {
+                       if (k == key) keys.push(k);
+               });
+               Deluge.Keys.Grid = keys;
+               deluge.torrents.getView().refresh(true);
        }
 });
 
diff --git a/deluge/ui/web/js/deluge-all/Torrents.js 
b/deluge/ui/web/js/deluge-all/Torrents.js
index 29f8543..8536edc 100644
--- a/deluge/ui/web/js/deluge-all/Torrents.js
+++ b/deluge/ui/web/js/deluge-all/Torrents.js
@@ -91,119 +91,123 @@
                // object to store contained torrent ids
                torrents: {},
 
+               columns: [{
+                       id:'queue',
+                       header: _('#'), 
+                       width: 30, 
+                       sortable: true, 
+                       renderer: queueRenderer,
+                       dataIndex: 'queue'
+               }, {
+                       id:'name',
+                       header: _('Name'),
+                       width: 150,
+                       sortable: true,
+                       renderer: torrentNameRenderer,
+                       dataIndex: 'name'
+               }, {
+                       header: _('Size'),
+                       width: 75,
+                       sortable: true,
+                       renderer: fsize,
+                       dataIndex: 'total_size'
+               }, {
+                       header: _('Progress'),
+                       width: 150, 
+                       sortable: true, 
+                       renderer: torrentProgressRenderer,
+                       dataIndex: 'progress'
+               }, {
+                       header: _('Seeders'),
+                       width: 60,
+                       sortable: true,
+                       renderer: seedsRenderer,
+                       dataIndex: 'num_seeds'
+               }, {
+                       header: _('Peers'),
+                       width: 60,
+                       sortable: true,
+                       renderer: peersRenderer,
+                       dataIndex: 'num_peers'
+               }, {
+                       header: _('Down Speed'),
+                       width: 80,
+                       sortable: true,
+                       renderer: torrentSpeedRenderer,
+                       dataIndex: 'download_payload_rate'
+               }, {
+                       header: _('Up Speed'),
+                       width: 80,
+                       sortable: true,
+                       renderer: torrentSpeedRenderer,
+                       dataIndex: 'upload_payload_rate'
+               }, {
+                       header: _('ETA'),
+                       width: 60,
+                       sortable: true,
+                       renderer: ftime,
+                       dataIndex: 'eta'
+               }, {
+                       header: _('Ratio'),
+                       width: 60,
+                       sortable: true,
+                       renderer: availRenderer,
+                       dataIndex: 'ratio'
+               }, {
+                       header: _('Avail'),
+                       width: 60,
+                       sortable: true,
+                       renderer: availRenderer,
+                       dataIndex: 'distributed_copies'
+               }, {
+                       header: _('Added'),
+                       width: 80,
+                       sortable: true,
+                       renderer: fdate,
+                       dataIndex: 'time_added'
+               }, {
+                       header: _('Tracker'),
+                       width: 120,
+                       sortable: true,
+                       renderer: trackerRenderer,
+                       dataIndex: 'tracker_host'
+               }, {
+                       header: _('Save Path'),
+                       width: 120,
+                       sortable: true,
+                       renderer: fplain,
+                       dataIndex: 'save_path'
+               }],
+
+               meta: {
+                       root: 'torrents',
+                       idProperty: 'id',
+                       fields: [
+                               {name: 'queue', sortType: 
Deluge.data.SortTypes.asQueuePosition},
+                               {name: 'name'},
+                               {name: 'total_size', type: 'int'},
+                               {name: 'state'},
+                               {name: 'progress', type: 'float'},
+                               {name: 'num_seeds', type: 'int'},
+                               {name: 'total_seeds', type: 'int'},
+                               {name: 'num_peers', type: 'int'},
+                               {name: 'total_peers', type: 'int'},
+                               {name: 'download_payload_rate', type: 'int'},
+                               {name: 'upload_payload_speed', type: 'int'},
+                               {name: 'eta', type: 'int', sortType: etaSorter},
+                               {name: 'ratio', type: 'float'},
+                               {name: 'distributed_copies', type: 'float'},
+                               {name: 'time_added', type: 'int'},
+                               {name: 'tracker_host'},
+                               {name: 'save_path'}
+                       ]
+               },
+
                constructor: function(config) {
                        config = Ext.apply({
                                id: 'torrentGrid',
-                               store: new Ext.data.JsonStore({
-                                       root: 'torrents',
-                                       idProperty: 'id',
-                                       fields: [
-                                               {name: 'queue', sortType: 
Deluge.data.SortTypes.asQueuePosition},
-                                               {name: 'name'},
-                                               {name: 'total_size', type: 
'int'},
-                                               {name: 'state'},
-                                               {name: 'progress', type: 
'float'},
-                                               {name: 'num_seeds', type: 
'int'},
-                                               {name: 'total_seeds', type: 
'int'},
-                                               {name: 'num_peers', type: 
'int'},
-                                               {name: 'total_peers', type: 
'int'},
-                                               {name: 'download_payload_rate', 
type: 'int'},
-                                               {name: 'upload_payload_speed', 
type: 'int'},
-                                               {name: 'eta', type: 'int', 
sortType: etaSorter},
-                                               {name: 'ratio', type: 'float'},
-                                               {name: 'distributed_copies', 
type: 'float'},
-                                               {name: 'time_added', type: 
'int'},
-                                               {name: 'tracker_host'},
-                                               {name: 'save_path'}
-                                       ]
-                               }),
-                               columns: [{
-                                       id:'queue',
-                                       header: _('#'), 
-                                       width: 30, 
-                                       sortable: true, 
-                                       renderer: queueRenderer,
-                                       dataIndex: 'queue'
-                               }, {
-                                       id:'name',
-                                       header: _('Name'),
-                                       width: 150,
-                                       sortable: true,
-                                       renderer: torrentNameRenderer,
-                                       dataIndex: 'name'
-                               }, {
-                                       header: _('Size'),
-                                       width: 75,
-                                       sortable: true,
-                                       renderer: fsize,
-                                       dataIndex: 'total_size'
-                               }, {
-                                       header: _('Progress'),
-                                       width: 150, 
-                                       sortable: true, 
-                                       renderer: torrentProgressRenderer,
-                                       dataIndex: 'progress'
-                               }, {
-                                       header: _('Seeders'),
-                                       width: 60,
-                                       sortable: true,
-                                       renderer: seedsRenderer,
-                                       dataIndex: 'num_seeds'
-                               }, {
-                                       header: _('Peers'),
-                                       width: 60,
-                                       sortable: true,
-                                       renderer: peersRenderer,
-                                       dataIndex: 'num_peers'
-                               }, {
-                                       header: _('Down Speed'),
-                                       width: 80,
-                                       sortable: true,
-                                       renderer: torrentSpeedRenderer,
-                                       dataIndex: 'download_payload_rate'
-                               }, {
-                                       header: _('Up Speed'),
-                                       width: 80,
-                                       sortable: true,
-                                       renderer: torrentSpeedRenderer,
-                                       dataIndex: 'upload_payload_rate'
-                               }, {
-                                       header: _('ETA'),
-                                       width: 60,
-                                       sortable: true,
-                                       renderer: ftime,
-                                       dataIndex: 'eta'
-                               }, {
-                                       header: _('Ratio'),
-                                       width: 60,
-                                       sortable: true,
-                                       renderer: availRenderer,
-                                       dataIndex: 'ratio'
-                               }, {
-                                       header: _('Avail'),
-                                       width: 60,
-                                       sortable: true,
-                                       renderer: availRenderer,
-                                       dataIndex: 'distributed_copies'
-                               }, {
-                                       header: _('Added'),
-                                       width: 80,
-                                       sortable: true,
-                                       renderer: fdate,
-                                       dataIndex: 'time_added'
-                               }, {
-                                       header: _('Tracker'),
-                                       width: 120,
-                                       sortable: true,
-                                       renderer: trackerRenderer,
-                                       dataIndex: 'tracker_host'
-                               }, {
-                                       header: _('Save Path'),
-                                       width: 120,
-                                       sortable: true,
-                                       renderer: fplain,
-                                       dataIndex: 'save_path'
-                               }],
+                               store: new Ext.data.JsonStore(this.meta),
+                               columns: this.columns,
                                region: 'center',
                                cls: 'deluge-torrents',
                                stripeRows: true,

-- 
You received this message because you are subscribed to the Google Groups 
"deluge-commit" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/deluge-commit?hl=en.

Reply via email to