Author: damoxc
Revision: 5130
Log:
Add the files tab back
Diff:
Modified: trunk/deluge/ui/web/js/Deluge.Details.Files.js
===================================================================
--- trunk/deluge/ui/web/js/Deluge.Details.Files.js 2009-04-21 23:41:22 UTC
(rev 5129)
+++ trunk/deluge/ui/web/js/Deluge.Details.Files.js 2009-04-21 23:43:46 UTC
(rev 5130)
@@ -0,0 +1,195 @@
+/*
+Script: Deluge.Details.Files.js
+ The files tab displayed in the details panel.
+
+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.
+
+ 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.
+*/
+(function() {
+ /* Renderers for the column tree */
+ function fileProgressRenderer(value) {
+ var progress = value * 100;
+ return Deluge.progressBar(progress, this.width - 50,
progress.toFixed(2) + '%');
+ }
+ function priorityRenderer(value) {
+ return String.format('<div class="{0}">{1}</div>',
FILE_PRIORITY_CSS[value], _(FILE_PRIORITY[value]));
+ }
+
+ Ext.deluge.details.FilesTab = Ext.extend(Ext.tree.ColumnTree, {
+
+ constructor: function(config) {
+ config = Ext.apply({
+ title: _('Files'),
+ rootVisible: false,
+ autoScroll: true,
+ selModel: new Ext.tree.MultiSelectionModel(),
+
+ columns: [{
+ header: _('Filename'),
+ width: 330,
+ dataIndex: 'filename'
+ }, {
+ header: _('Size'),
+ width: 150,
+ dataIndex: 'size',
+ renderer: fsize
+ }, {
+ header: _('Progress'),
+ width: 150,
+ dataIndex: 'progress',
+ renderer: fileProgressRenderer
+ }, {
+ header: _('Priority'),
+ width: 150,
+ dataIndex: 'priority',
+ renderer: priorityRenderer
+ }],
+
+ root: new Ext.tree.TreeNode({
+ text: 'Files'
+ })
+ }, config);
+
Ext.deluge.details.FilesTab.superclass.constructor.call(this, config);
+ },
+
+ onRender: function(ct, position) {
+
Ext.deluge.details.FilesTab.superclass.onRender.call(this, ct, position);
+ Deluge.Menus.FilePriorities.on('itemclick',
this.onItemClick, this);
+ this.on('contextmenu', this.onContextMenu, this);
+ this.sorter = new Ext.tree.TreeSorter(this, {
+ folderSort: true
+ });
+ },
+
+ clear: function() {
+ var root = this.getRootNode();
+ if (!root.hasChildNodes()) return;
+ root.cascade(function(node) {
+ var parent = node.parentNode;
+ if (!parent) return;
+ if (!parent.ownerTree) return;
+ parent.removeChild(node);
+ });
+ },
+
+ update: function(torrentId) {
+ if (this.torrentId != torrentId) {
+ this.clear();
+ this.torrentId = torrentId;
+ }
+
+ Deluge.Client.web.get_torrent_files(torrentId, {
+ success: this.onRequestComplete,
+ scope: this,
+ torrentId: torrentId
+ });
+ },
+
+ onContextMenu: function(node, e) {
+ e.stopEvent();
+ var selModel = this.getSelectionModel();
+ if (selModel.getSelectedNodes().length < 2) {
+ selModel.clearSelections();
+ node.select();
+ }
+ Deluge.Menus.FilePriorities.showAt(e.getPoint());
+ },
+
+ onItemClick: function(baseItem, e) {
+ switch (baseItem.id) {
+ case 'expandAll':
+ this.panel.expandAll();
+ break;
+ default:
+ var indexes = {};
+ function walk(node) {
+ if (!node.attributes.fileIndex)
return;
+
indexes[node.attributes.fileIndex] = node.attributes.priority;
+ }
+ this.getRootNode().cascade(walk);
+
+ var nodes =
this.getSelectionModel().getSelectedNodes();
+ Ext.each(nodes, function(node) {
+ if (!node.attributes.fileIndex)
return;
+
indexes[node.attributes.fileIndex] = baseItem.filePriority;
+ });
+
+ alert(Ext.keys(indexes));
+
+ priorities = new
Array(Ext.keys(indexes).length);
+ for (var index in indexes) {
+ priorities[index] =
indexes[index];
+ }
+
+ alert(this.torrentId);
+ alert(priorities);
+
Deluge.Client.core.set_torrent_file_priorities(this.torrentId, priorities, {
+ success: function() {
+ Ext.each(nodes,
function(node) {
+
node.setColumnValue(3, baseItem.filePriority);
+ });
+ },
+ scope: this
+ });
+ break;
+ }
+ },
+
+ onRequestComplete: function(files, options) {
+ function walk(files, parent) {
+ for (var file in files) {
+ var item = files[file];
+ var child = parent.findChild('id',
file);
+ if (Ext.type(item) == 'object') {
+ if (!child) {
+ child = new
Ext.tree.TreeNode({
+ id: file,
+ text: file
+ });
+
parent.appendChild(child);
+ }
+ walk(item, child);
+ } else {
+ if (!child) {
+ child = new
Ext.tree.ColumnTreeNode({
+ id: file,
+ filename: file,
+ text: file, //
this needs to be here for sorting
+ fileIndex:
item[0],
+ size: item[1],
+ progress:
item[2],
+ priority:
item[3],
+ leaf: true,
+ iconCls:
'x-deluge-file',
+ uiProvider:
Ext.tree.ColumnNodeUI
+ });
+
parent.appendChild(child);
+ }
+ child.setColumnValue(1,
item[1]);
+ child.setColumnValue(2,
item[2]);
+ child.setColumnValue(3,
item[3]);
+ }
+ }
+ }
+ var root = this.getRootNode();
+ walk(files, root);
+ root.firstChild.expand();
+ }
+ });
+ Deluge.Details.add(new Ext.deluge.details.FilesTab());
+})();
\ 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
-~----------~----~----~----~------~----~------~--~---