Author: damoxc
Revision: 5785
Log:
just some whitespace changes
Diff:
Modified: trunk/deluge/ui/web/js/Deluge.Sidebar.js
===================================================================
--- trunk/deluge/ui/web/js/Deluge.Sidebar.js 2009-09-28 16:48:02 UTC (rev
5784)
+++ trunk/deluge/ui/web/js/Deluge.Sidebar.js 2009-09-28 16:53:52 UTC (rev
5785)
@@ -1,35 +1,35 @@
/*
Script: deluge-bars.js
- Contains all objects and functions related to the statusbar, toolbar and
- sidebar.
+ Contains all objects and functions related to the statusbar, toolbar and
+ sidebar.
Copyright:
- (C) Damien Churchill 2009 <[email protected]>
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ (C) Damien Churchill 2009 <[email protected]>
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program. If not, write to:
- The Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor
- Boston, MA 02110-1301, USA.
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, write to:
+ The Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor
+ Boston, MA 02110-1301, USA.
- In addition, as a special exception, the copyright holders give
- permission to link the code of portions of this program with the OpenSSL
- library.
- You must obey the GNU General Public License in all respects for all of
- the code used other than OpenSSL. If you modify file(s) with this
- exception, you may extend this exception to your version of the file(s),
- but you are not obligated to do so. If you do not wish to do so, delete
- this exception statement from your version. If you delete this exception
- statement from all source files in the program, then also delete it
here.
+ In addition, as a special exception, the copyright holders give
+ permission to link the code of portions of this program with the OpenSSL
+ library.
+ You must obey the GNU General Public License in all respects for all of
+ the code used other than OpenSSL. If you modify file(s) with this
+ exception, you may extend this exception to your version of the file(s),
+ but you are not obligated to do so. If you do not wish to do so, delete
+ this exception statement from your version. If you delete this exception
+ statement from all source files in the program, then also delete it here.
*/
@@ -38,199 +38,199 @@
// _('Tracker Host')
(function() {
- // Renderer for the items in the filter grids.
- function filterRenderer(value, p, r) {
- var lname = value.toLowerCase().replace('.', '_');
+ // Renderer for the items in the filter grids.
+ function filterRenderer(value, p, r) {
+ var lname = value.toLowerCase().replace('.', '_');
- var image = '';
- if (r.store.id == 'tracker_host') {
- if (value != 'Error') {
- image = String.format('url(/tracker/{0})',
value);
- } else {
- lname = null;
- }
- }
- if (image) {
- return String.format('<div class="x-deluge-filter"
style="background-image: {2};">{0} ({1})</div>', value, r.data['count'], image);
- } else if (lname) {
- return String.format('<div class="x-deluge-filter
x-deluge-{2}">{0} ({1})</div>', value, r.data['count'], lname);
- } else {
- return String.format('<div class="x-deluge-filter">{0}
({1})</div>', value, r.data['count']);
- }
- }
+ var image = '';
+ if (r.store.id == 'tracker_host') {
+ if (value != 'Error') {
+ image = String.format('url(/tracker/{0})', value);
+ } else {
+ lname = null;
+ }
+ }
+ if (image) {
+ return String.format('<div class="x-deluge-filter"
style="background-image: {2};">{0} ({1})</div>', value, r.data['count'], image);
+ } else if (lname) {
+ return String.format('<div class="x-deluge-filter
x-deluge-{2}">{0} ({1})</div>', value, r.data['count'], lname);
+ } else {
+ return String.format('<div class="x-deluge-filter">{0}
({1})</div>', value, r.data['count']);
+ }
+ }
- Ext.deluge.Sidebar = Ext.extend(Ext.Panel, {
+ Ext.deluge.Sidebar = Ext.extend(Ext.Panel, {
- // private
- panels: {},
-
- // private
- selected: null,
-
- constructor: function(config) {
- config = Ext.apply({
- id: 'sidebar',
- region: 'west',
- cls: 'deluge-sidebar',
- title: _('Filters'),
- layout: 'accordion',
- split: true,
- width: 200,
- minSize: 175,
- collapsible: true,
- margins: '5 0 0 5',
- cmargins: '5 0 0 5'
- }, config);
- Ext.deluge.Sidebar.superclass.constructor.call(this,
config);
- },
-
- // private
- initComponent: function() {
- Ext.deluge.Sidebar.superclass.initComponent.call(this);
- Deluge.Events.on("disconnect", this.onDisconnect, this);
- },
-
- createFilter: function(filter, states) {
- var store = new Ext.data.SimpleStore({
- id: filter,
- fields: [
- {name: 'filter'},
- {name: 'count'}
- ]
- });
-
- var title = filter.replace('_', ' ');
- var parts = title.split(' ');
- title = '';
- Ext.each(parts, function(part) {
- firstLetter = part.substring(0, 1);
- firstLetter = firstLetter.toUpperCase();
- part = firstLetter + part.substring(1);
- title += part + ' ';
- });
-
- var panel = new Ext.grid.GridPanel({
- id: filter + '-panel',
- border: false,
- store: store,
- title: _(title),
- columns: [
- {id: 'filter', sortable: false,
renderer: filterRenderer, dataIndex: 'filter'}
- ],
- stripeRows: false,
- selModel: new Ext.grid.RowSelectionModel({
- singleSelect: true,
- listeners: {
- 'rowselect': {fn:
this.onFilterSelect, scope: this}
- }
- }),
- hideHeaders: true,
- autoExpandColumn: 'filter',
- deferredRender: false,
- autoScroll: true
- });
-
- if (Deluge.config['sidebar_show_zero'] == false) {
- states = this.removeZero(states);
- }
-
- store.loadData(states);
- this.add(panel);
-
- this.doLayout();
- this.panels[filter] = panel;
-
- if (!this.selected) {
- panel.getSelectionModel().selectFirstRow();
- this.selected = {
- row: 0,
- filter: states[0][0],
- panel: panel
- }
- }
- },
-
- getFilters: function() {
- var filters = {}
- if (!this.selected) {
- return filters;
- }
- if (!this.selected.filter || !this.selected.panel) {
- return filters;
- }
- var filterType = this.selected.panel.store.id;
- if (filterType == "state" && this.selected.filter ==
"All") {
- return filters;
- }
-
- filters[filterType] = this.selected.filter;
- return filters;
- },
-
- // private
- onDisconnect: function() {
- Ext.each(Ext.getKeys(this.panels), function(filter) {
- this.remove(filter + '-panel');
- }, this);
- this.panels = {};
- this.selected = null;
- },
-
- onFilterSelect: function(selModel, rowIndex, record) {
- if (!this.selected) needsUpdate = true;
- else if (this.selected.row != rowIndex) needsUpdate =
true;
- else needsUpdate = false;
- this.selected = {
- row: rowIndex,
- filter: record.get('filter'),
- panel: this.panels[record.store.id]
- }
-
- if (needsUpdate) Deluge.UI.update();
- },
-
- /**
- * Remove the states with zero torrents in them.
- */
- removeZero: function(states) {
- var newStates = [];
- Ext.each(states, function(state) {
- if (state[1] > 0 || state[0] == _('All')) {
- newStates.push(state);
- }
- });
- return newStates;
- },
-
- update: function(filters) {
- for (var filter in filters) {
- var states = filters[filter];
- if (Ext.getKeys(this.panels).indexOf(filter) >
-1) {
- this.updateFilter(filter, states);
- } else {
- this.createFilter(filter, states);
- }
- }
-
- // Perform a cleanup of fitlers that aren't enabled any
more
- Ext.each(Ext.keys(this.panels), function(filter) {
- if (Ext.keys(filters).indexOf(filter) == -1) {
- // We need to remove the panel
- this.panels[filter]
- }
- }, this);
- },
-
- updateFilter: function(filter, states) {
- if (Deluge.config['sidebar_show_zero'] == false) {
- states = this.removeZero(states);
- }
-
- this.panels[filter].store.loadData(states);
- if (this.selected && this.selected.panel ==
this.panels[filter]) {
-
this.panels[filter].getSelectionModel().selectRow(this.selected.row);
- }
- }
- });
- Deluge.Sidebar = new Ext.deluge.Sidebar();
+ // private
+ panels: {},
+
+ // private
+ selected: null,
+
+ constructor: function(config) {
+ config = Ext.apply({
+ id: 'sidebar',
+ region: 'west',
+ cls: 'deluge-sidebar',
+ title: _('Filters'),
+ layout: 'accordion',
+ split: true,
+ width: 200,
+ minSize: 175,
+ collapsible: true,
+ margins: '5 0 0 5',
+ cmargins: '5 0 0 5'
+ }, config);
+ Ext.deluge.Sidebar.superclass.constructor.call(this, config);
+ },
+
+ // private
+ initComponent: function() {
+ Ext.deluge.Sidebar.superclass.initComponent.call(this);
+ Deluge.Events.on("disconnect", this.onDisconnect, this);
+ },
+
+ createFilter: function(filter, states) {
+ var store = new Ext.data.SimpleStore({
+ id: filter,
+ fields: [
+ {name: 'filter'},
+ {name: 'count'}
+ ]
+ });
+
+ var title = filter.replace('_', ' ');
+ var parts = title.split(' ');
+ title = '';
+ Ext.each(parts, function(part) {
+ firstLetter = part.substring(0, 1);
+ firstLetter = firstLetter.toUpperCase();
+ part = firstLetter + part.substring(1);
+ title += part + ' ';
+ });
+
+ var panel = new Ext.grid.GridPanel({
+ id: filter + '-panel',
+ border: false,
+ store: store,
+ title: _(title),
+ columns: [
+ {id: 'filter', sortable: false, renderer: filterRenderer,
dataIndex: 'filter'}
+ ],
+ stripeRows: false,
+ selModel: new Ext.grid.RowSelectionModel({
+ singleSelect: true,
+ listeners: {
+ 'rowselect': {fn: this.onFilterSelect, scope: this}
+ }
+ }),
+ hideHeaders: true,
+ autoExpandColumn: 'filter',
+ deferredRender: false,
+ autoScroll: true
+ });
+
+ if (Deluge.config['sidebar_show_zero'] == false) {
+ states = this.removeZero(states);
+ }
+
+ store.loadData(states);
+ this.add(panel);
+
+ this.doLayout();
+ this.panels[filter] = panel;
+
+ if (!this.selected) {
+ panel.getSelectionModel().selectFirstRow();
+ this.selected = {
+ row: 0,
+ filter: states[0][0],
+ panel: panel
+ }
+ }
+ },
+
+ getFilters: function() {
+ var filters = {}
+ if (!this.selected) {
+ return filters;
+ }
+ if (!this.selected.filter || !this.selected.panel) {
+ return filters;
+ }
+ var filterType = this.selected.panel.store.id;
+ if (filterType == "state" && this.selected.filter == "All") {
+ return filters;
+ }
+
+ filters[filterType] = this.selected.filter;
+ return filters;
+ },
+
+ // private
+ onDisconnect: function() {
+ Ext.each(Ext.getKeys(this.panels), function(filter) {
+ this.remove(filter + '-panel');
+ }, this);
+ this.panels = {};
+ this.selected = null;
+ },
+
+ onFilterSelect: function(selModel, rowIndex, record) {
+ if (!this.selected) needsUpdate = true;
+ else if (this.selected.row != rowIndex) needsUpdate = true;
+ else needsUpdate = false;
+ this.selected = {
+ row: rowIndex,
+ filter: record.get('filter'),
+ panel: this.panels[record.store.id]
+ }
+
+ if (needsUpdate) Deluge.UI.update();
+ },
+
+ /**
+ * Remove the states with zero torrents in them.
+ */
+ removeZero: function(states) {
+ var newStates = [];
+ Ext.each(states, function(state) {
+ if (state[1] > 0 || state[0] == _('All')) {
+ newStates.push(state);
+ }
+ });
+ return newStates;
+ },
+
+ update: function(filters) {
+ for (var filter in filters) {
+ var states = filters[filter];
+ if (Ext.getKeys(this.panels).indexOf(filter) > -1) {
+ this.updateFilter(filter, states);
+ } else {
+ this.createFilter(filter, states);
+ }
+ }
+
+ // Perform a cleanup of fitlers that aren't enabled any more
+ Ext.each(Ext.keys(this.panels), function(filter) {
+ if (Ext.keys(filters).indexOf(filter) == -1) {
+ // We need to remove the panel
+ this.panels[filter]
+ }
+ }, this);
+ },
+
+ updateFilter: function(filter, states) {
+ if (Deluge.config['sidebar_show_zero'] == false) {
+ states = this.removeZero(states);
+ }
+
+ this.panels[filter].store.loadData(states);
+ if (this.selected && this.selected.panel == this.panels[filter]) {
+
this.panels[filter].getSelectionModel().selectRow(this.selected.row);
+ }
+ }
+ });
+ Deluge.Sidebar = new Ext.deluge.Sidebar();
})();
Modified: trunk/deluge/ui/web/js/Deluge.Torrents.js
===================================================================
--- trunk/deluge/ui/web/js/Deluge.Torrents.js 2009-09-28 16:48:02 UTC (rev
5784)
+++ trunk/deluge/ui/web/js/Deluge.Torrents.js 2009-09-28 16:53:52 UTC (rev
5785)
@@ -1,24 +1,24 @@
/*
-Script: deluge-torrents.js
+Script: Deluge.Torrents.js
Contains all objects and functions related to the torrent grid.
Copyright:
- (C) Damien Churchill 2009 <[email protected]>
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ (C) Damien Churchill 2009 <[email protected]>
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program. If not, write to:
- The Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor
- Boston, MA 02110-1301, USA.
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, write to:
+ The Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor
+ Boston, MA 02110-1301, USA.
In addition, as a special exception, the copyright holders give
permission to link the code of portions of this program with the OpenSSL
@@ -33,274 +33,275 @@
*/
(function() {
- /* Renderers for the Torrent Grid */
- function queueRenderer(value) {
- return (value == -1) ? '' : value + 1;
- }
- function torrentNameRenderer(value, p, r) {
- return String.format('<div class="torrent-name
x-deluge-{0}">{1}</div>', r.data['state'].toLowerCase(), value);
- }
- function torrentSpeedRenderer(value) {
- if (!value) return;
- return fspeed(value);
- }
- function torrentProgressRenderer(value, p, r) {
- value = new Number(value);
- var progress = value;
- var text = r.data['state'] + ' ' + value.toFixed(2) + '%'
- var width = new Number(this.style.match(/\w+:\s*(\d+)\w+/)[1])
- 8;
- return Deluge.progressBar(value, width, text);
- }
- function seedsRenderer(value, p, r) {
- if (r.data['total_seeds'] > -1) {
- return String.format('{0} ({1})', value,
r.data['total_seeds']);
- } else {
- return value;
- }
- }
- function peersRenderer(value, p, r) {
- if (r.data['total_peers'] > -1) {
- return String.format('{0} ({1})', value,
r.data['total_peers']);
- } else {
- return value;
- }
- }
- function availRenderer(value, p, r) {
- return new Number(value).toFixed(3);
- }
- function trackerRenderer(value, p, r) {
- return String.format('<div style="background: url(/tracker/{0})
no-repeat; padding-left: 20px;">{0}</div>', value);
- }
-
- /**
- * Ext.deluge.TorrentGrid Class
- *
- * @author Damien Churchill <[email protected]>
- * @version 1.2
- *
- * @class Ext.deluge.TorrentGrid
- * @extends Ext.grid.GridPanel
- * @constructor
- * @param {Object} config Configuration options
- */
- Ext.deluge.TorrentGrid = Ext.extend(Ext.grid.GridPanel, {
- constructor: function(config) {
- config = Ext.apply({
- id: 'torrentGrid',
- store: new Ext.data.SimpleStore({
- fields: [
- {name: 'queue'},
- {name: 'name'},
- {name: 'size', type: 'int'},
- {name: 'state'},
- {name: 'progress', type:
'float'},
- {name: 'seeds', type: 'int'},
- {name: 'total_seeds', type:
'int'},
- {name: 'peers', type: 'int'},
- {name: 'total_peers', type:
'int'},
- {name: 'downspeed', type:
'int'},
- {name: 'upspeed', type: 'int'},
- {name: 'eta', type: 'int'},
- {name: 'ratio', type: 'float'},
- {name: 'avail', type: 'float'},
- {name: 'added', type: 'int'},
- {name: 'tracker'}
- ],
- id: 16
- }),
- 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: 'size'
- }, {
- header: _('Progress'),
- width: 150,
- sortable: true,
- renderer: torrentProgressRenderer,
- dataIndex: 'progress'
- }, {
- header: _('Seeders'),
- width: 60,
- sortable: true,
- renderer: seedsRenderer,
- dataIndex: 'seeds'
- }, {
- header: _('Peers'),
- width: 60,
- sortable: true,
- renderer: peersRenderer,
- dataIndex: 'peers'
- }, {
- header: _('Down Speed'),
- width: 80,
- sortable: true,
- renderer: torrentSpeedRenderer,
- dataIndex: 'downspeed'
- }, {
- header: _('Up Speed'),
- width: 80,
- sortable: true,
- renderer: torrentSpeedRenderer,
- dataIndex: 'upspeed'
- }, {
- 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: 'avail'
- }, {
- header: _('Added'),
- width: 80,
- sortable: true,
- renderer: fdate,
- dataIndex: 'added'
- }, {
- header: _('Tracker'),
- width: 120,
- sortable: true,
- renderer: trackerRenderer,
- dataIndex: 'tracker'
- }],
- region: 'center',
- cls: 'deluge-torrents',
- stripeRows: true,
- autoExpandColumn: 'name',
- deferredRender:false,
- autoScroll:true,
- margins: '5 5 0 0'
- }, config);
-
Ext.deluge.TorrentGrid.superclass.constructor.call(this, config);
- },
+ /* Renderers for the Torrent Grid */
+ function queueRenderer(value) {
+ return (value == -1) ? '' : value + 1;
+ }
+ function torrentNameRenderer(value, p, r) {
+ return String.format('<div class="torrent-name
x-deluge-{0}">{1}</div>', r.data['state'].toLowerCase(), value);
+ }
+ function torrentSpeedRenderer(value) {
+ if (!value) return;
+ return fspeed(value);
+ }
+ function torrentProgressRenderer(value, p, r) {
+ value = new Number(value);
+ var progress = value;
+ var text = r.data['state'] + ' ' + value.toFixed(2) + '%'
+ var width = new Number(this.style.match(/\w+:\s*(\d+)\w+/)[1]) - 8;
+ return Deluge.progressBar(value, width, text);
+ }
+ function seedsRenderer(value, p, r) {
+ if (r.data['total_seeds'] > -1) {
+ return String.format('{0} ({1})', value, r.data['total_seeds']);
+ } else {
+ return value;
+ }
+ }
+ function peersRenderer(value, p, r) {
+ if (r.data['total_peers'] > -1) {
+ return String.format('{0} ({1})', value, r.data['total_peers']);
+ } else {
+ return value;
+ }
+ }
+ function availRenderer(value, p, r) {
+ return new Number(value).toFixed(3);
+ }
+ function trackerRenderer(value, p, r) {
+ return String.format('<div style="background: url(/tracker/{0})
no-repeat; padding-left: 20px;">{0}</div>', value);
+ }
- initComponent: function() {
-
Ext.deluge.TorrentGrid.superclass.initComponent.call(this);
- Deluge.Events.on('torrentRemoved',
this.onTorrentRemoved, this);
- this.on('rowcontextmenu', function(grid, rowIndex, e) {
- e.stopEvent();
- var selection = grid.getSelectionModel();
- if (!selection.hasSelection()) {
- selection.selectRow(rowIndex);
- }
- Deluge.Menus.Torrent.showAt(e.getPoint());
- });
- },
-
- /**
- * Returns the record representing the torrent at the specified
index.
- *
- * @param {int} The row index of the torrent you wish to
retrieve.
- * @return {Ext.data.Record} The record representing the
torrent.
- */
- getTorrent: function(rowIndex) {
- return this.getStore().getAt(rowIndex);
- },
-
- getSelected: function() {
- return this.getSelectionModel().getSelected();
- },
-
- getSelections: function() {
- return this.getSelectionModel().getSelections();
- },
-
- update: function(torrents) {
- //var torrents = [];
- var store = this.getStore();
- for (var torrentId in torrents) {
- var record = store.getById(torrentId);
- var torrent = torrents[torrentId];
- if (!record) {
- // We need to create a new record
- var data = [
- torrent.queue,
- torrent.name,
- torrent.total_size,
- torrent.state,
- torrent.progress,
- torrent.num_seeds,
- torrent.total_seeds,
- torrent.num_peers,
- torrent.total_peers,
- torrent.download_payload_rate,
- torrent.upload_payload_rate,
- torrent.eta,
- torrent.ratio,
- torrent.distributed_copies,
- torrent.time_added,
- torrent.tracker_host,
- torrentId
- ];
- store.loadData([data], true);
- } else {
- // We just need to do an update
- record.set('queue', torrent.queue);
- record.set('name', torrent.name);
- record.set('size', torrent.total_size);
- record.set('state', torrent.state);
- record.set('progress',
torrent.progress);
- record.set('seeds', torrent.num_seeds);
- record.set('total_seeds',
torrent.total_seeds);
- record.set('peers', torrent.num_peers);
- record.set('total_peers',
torrent.total_peers);
- record.set('downspeed',
torrent.download_payload_rate);
- record.set('upspeed',
torrent.upload_payload_rate);
- record.set('eta', torrent.eta);
- record.set('ratio', torrent.ratio);
- record.set('avail',
torrent.distributed_copies);
- record.set('added', torrent.time_added);
- record.set('tracker',
torrent.tracker_host);
- record.commit();
- }
- }
-
- var torrentIds = Ext.keys(torrents);
- store.each(function(record) {
- if (torrentIds.indexOf(record.id) == -1) {
- // Torrent is no longer in the grid so
we must remove it.
- store.remove(record);
- }
- }, this);
- },
-
- // private
- onTorrentRemoved: function(torrentIds) {
- var selModel = this.getSelectionModel();
- Ext.each(torrentIds, function(torrentId) {
- var record = this.getStore().getById(torrentId);
- if (selModel.isSelected(record)) {
-
selModel.deselectRow(this.getStore().indexOf(record));
- }
- this.getStore().remove(record);
- }, this);
- }
- });
- Deluge.Torrents = new Ext.deluge.TorrentGrid();
+ /**
+ * Ext.deluge.TorrentGrid Class
+ *
+ * @author Damien Churchill <[email protected]>
+ * @version 1.2
+ *
+ * @class Ext.deluge.TorrentGrid
+ * @extends Ext.grid.GridPanel
+ * @constructor
+ * @param {Object} config Configuration options
+ */
+ Ext.deluge.TorrentGrid = Ext.extend(Ext.grid.GridPanel, {
+ constructor: function(config) {
+ config = Ext.apply({
+ id: 'torrentGrid',
+ store: new Ext.data.SimpleStore({
+ fields: [
+ {name: 'queue'},
+ {name: 'name'},
+ {name: 'size', type: 'int'},
+ {name: 'state'},
+ {name: 'progress', type: 'float'},
+ {name: 'seeds', type: 'int'},
+ {name: 'total_seeds', type: 'int'},
+ {name: 'peers', type: 'int'},
+ {name: 'total_peers', type: 'int'},
+ {name: 'downspeed', type: 'int'},
+ {name: 'upspeed', type: 'int'},
+ {name: 'eta', type: 'int'},
+ {name: 'ratio', type: 'float'},
+ {name: 'avail', type: 'float'},
+ {name: 'added', type: 'int'},
+ {name: 'tracker'}
+ ],
+ id: 16
+ }),
+ 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: 'size'
+ }, {
+ header: _('Progress'),
+ width: 150,
+ sortable: true,
+ renderer: torrentProgressRenderer,
+ dataIndex: 'progress'
+ }, {
+ header: _('Seeders'),
+ width: 60,
+ sortable: true,
+ renderer: seedsRenderer,
+ dataIndex: 'seeds'
+ }, {
+ header: _('Peers'),
+ width: 60,
+ sortable: true,
+ renderer: peersRenderer,
+ dataIndex: 'peers'
+ }, {
+ header: _('Down Speed'),
+ width: 80,
+ sortable: true,
+ renderer: torrentSpeedRenderer,
+ dataIndex: 'downspeed'
+ }, {
+ header: _('Up Speed'),
+ width: 80,
+ sortable: true,
+ renderer: torrentSpeedRenderer,
+ dataIndex: 'upspeed'
+ }, {
+ 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: 'avail'
+ }, {
+ header: _('Added'),
+ width: 80,
+ sortable: true,
+ renderer: fdate,
+ dataIndex: 'added'
+ }, {
+ header: _('Tracker'),
+ width: 120,
+ sortable: true,
+ renderer: trackerRenderer,
+ dataIndex: 'tracker'
+ }],
+ region: 'center',
+ cls: 'deluge-torrents',
+ stripeRows: true,
+ autoExpandColumn: 'name',
+ deferredRender:false,
+ autoScroll:true,
+ margins: '5 5 0 0',
+ stateful: true
+ }, config);
+ Ext.deluge.TorrentGrid.superclass.constructor.call(this, config);
+ },
+
+ initComponent: function() {
+ Ext.deluge.TorrentGrid.superclass.initComponent.call(this);
+ Deluge.Events.on('torrentRemoved', this.onTorrentRemoved, this);
+ this.on('rowcontextmenu', function(grid, rowIndex, e) {
+ e.stopEvent();
+ var selection = grid.getSelectionModel();
+ if (!selection.hasSelection()) {
+ selection.selectRow(rowIndex);
+ }
+ Deluge.Menus.Torrent.showAt(e.getPoint());
+ });
+ },
+
+ /**
+ * Returns the record representing the torrent at the specified index.
+ *
+ * @param {int} The row index of the torrent you wish to retrieve.
+ * @return {Ext.data.Record} The record representing the torrent.
+ */
+ getTorrent: function(rowIndex) {
+ return this.getStore().getAt(rowIndex);
+ },
+
+ getSelected: function() {
+ return this.getSelectionModel().getSelected();
+ },
+
+ getSelections: function() {
+ return this.getSelectionModel().getSelections();
+ },
+
+ update: function(torrents) {
+ //var torrents = [];
+ var store = this.getStore();
+ for (var torrentId in torrents) {
+ var record = store.getById(torrentId);
+ var torrent = torrents[torrentId];
+ if (!record) {
+ // We need to create a new record
+ var data = [
+ torrent.queue,
+ torrent.name,
+ torrent.total_size,
+ torrent.state,
+ torrent.progress,
+ torrent.num_seeds,
+ torrent.total_seeds,
+ torrent.num_peers,
+ torrent.total_peers,
+ torrent.download_payload_rate,
+ torrent.upload_payload_rate,
+ torrent.eta,
+ torrent.ratio,
+ torrent.distributed_copies,
+ torrent.time_added,
+ torrent.tracker_host,
+ torrentId
+ ];
+ store.loadData([data], true);
+ } else {
+ // We just need to do an update
+ record.set('queue', torrent.queue);
+ record.set('name', torrent.name);
+ record.set('size', torrent.total_size);
+ record.set('state', torrent.state);
+ record.set('progress', torrent.progress);
+ record.set('seeds', torrent.num_seeds);
+ record.set('total_seeds', torrent.total_seeds);
+ record.set('peers', torrent.num_peers);
+ record.set('total_peers', torrent.total_peers);
+ record.set('downspeed', torrent.download_payload_rate);
+ record.set('upspeed', torrent.upload_payload_rate);
+ record.set('eta', torrent.eta);
+ record.set('ratio', torrent.ratio);
+ record.set('avail', torrent.distributed_copies);
+ record.set('added', torrent.time_added);
+ record.set('tracker', torrent.tracker_host);
+ record.commit();
+ }
+ }
+
+ var torrentIds = Ext.keys(torrents);
+ store.each(function(record) {
+ if (torrentIds.indexOf(record.id) == -1) {
+ // Torrent is no longer in the grid so we must remove it.
+ store.remove(record);
+ }
+ }, this);
+ },
+
+ // private
+ onTorrentRemoved: function(torrentIds) {
+ var selModel = this.getSelectionModel();
+ Ext.each(torrentIds, function(torrentId) {
+ var record = this.getStore().getById(torrentId);
+ if (selModel.isSelected(record)) {
+ selModel.deselectRow(this.getStore().indexOf(record));
+ }
+ this.getStore().remove(record);
+ }, this);
+ }
+});
+Deluge.Torrents = new Ext.deluge.TorrentGrid();
})();
\ No newline at end of file
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---