From 76fa8e707a726e1c4c8474fa643b91ba42bd8534 Mon Sep 17 00:00:00 2001 From: Damien Churchill Date: Sun, 11 Apr 2010 23:11:54 +0100 Subject: [PATCH] Split out the OptionsPanel into seperate classes and files --- deluge/ui/web/js/deluge-all/add/AddWindow.js | 2 +- deluge/ui/web/js/deluge-all/add/FilesTab.js | 91 ++++++++ .../ui/web/js/deluge-all/add/OptionsPanel.js | 219 ++---------------- deluge/ui/web/js/deluge-all/add/OptionsTab.js | 185 +++++++++++++++ 4 files changed, 291 insertions(+), 206 deletions(-) create mode 100644 deluge/ui/web/js/deluge-all/add/FilesTab.js create mode 100644 deluge/ui/web/js/deluge-all/add/OptionsTab.js diff --git a/deluge/ui/web/js/deluge-all/add/AddWindow.js b/deluge/ui/web/js/deluge-all/add/AddWindow.js index 07443e100..4dc4edeb5 100644 --- a/deluge/ui/web/js/deluge-all/add/AddWindow.js +++ b/deluge/ui/web/js/deluge-all/add/AddWindow.js @@ -194,7 +194,7 @@ Deluge.add.AddWindow = Ext.extend(Deluge.add.Window, { this.file.on('add', this.onTorrentAdd, this); } - this.optionsPanel.getDefaults(); + this.optionsPanel.form.getDefaults(); }, onTorrentBeforeAdd: function(torrentId, text) { diff --git a/deluge/ui/web/js/deluge-all/add/FilesTab.js b/deluge/ui/web/js/deluge-all/add/FilesTab.js new file mode 100644 index 000000000..86ef7d03c --- /dev/null +++ b/deluge/ui/web/js/deluge-all/add/FilesTab.js @@ -0,0 +1,91 @@ +/*! + * Deluge.add.FilesTab.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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. + * + * 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. + */ +Ext.ns('Deluge.add'); + +/** + * @class Deluge.add.FilesTab + * @extends Ext.ux.tree.TreeGrid + */ +Deluge.add.FilesTab = Ext.extend(Ext.ux.tree.TreeGrid, { + + layout: 'fit', + title: _('Files'), + + autoScroll: true, + animate: false, + border: false, + disabled: true, + rootVisible: false, + + columns: [{ + header: _('Filename'), + width: 275, + dataIndex: 'filename' + },{ + header: _('Size'), + width: 80, + dataIndex: 'size', + tpl: new Ext.XTemplate('{size:this.fsize}', { + fsize: function(v) { + return fsize(v); + } + }) + }], + + clearFiles: function() { + var root = this.getRootNode(); + if (!root.hasChildNodes()) return; + root.cascade(function(node) { + if (!node.parentNode || !node.getOwnerTree()) return; + node.remove(); + }); + }, + + onFolderCheck: function(node, checked) { + var priorities = this.optionsManager.get('file_priorities'); + node.cascade(function(child) { + if (!child.ui.checkbox) { + child.attributes.checked = checked; + } else { + child.ui.checkbox.checked = checked; + } + priorities[child.attributes.fileindex] = checked; + }, this); + this.optionsManager.setDefault('file_priorities', priorities); + }, + + onNodeCheck: function(node, checked) { + var priorities = this.optionsManager.get('file_priorities'); + priorities[node.attributes.fileindex] = checked; + this.optionsManager.update('file_priorities', priorities); + } +}); diff --git a/deluge/ui/web/js/deluge-all/add/OptionsPanel.js b/deluge/ui/web/js/deluge-all/add/OptionsPanel.js index 948e476cc..59708cb08 100644 --- a/deluge/ui/web/js/deluge-all/add/OptionsPanel.js +++ b/deluge/ui/web/js/deluge-all/add/OptionsPanel.js @@ -43,146 +43,9 @@ Deluge.add.OptionsPanel = Ext.extend(Ext.TabPanel, { initComponent: function() { Deluge.add.OptionsPanel.superclass.initComponent.call(this); - this.files = this.add(new Ext.ux.tree.TreeGrid({ - layout: 'fit', - title: _('Files'), - autoScroll: true, - border: false, - animate: false, - disabled: true, - rootVisible: false, - - columns: [{ - header: _('Filename'), - width: 275, - dataIndex: 'filename' - },{ - xtype: 'tgrendercolumn', - header: _('Size'), - width: 80, - dataIndex: 'size', - renderer: fsize - }] - })); - - this.optionsManager = new Deluge.MultiOptionsManager(); - - this.form = this.add({ - xtype: 'form', - labelWidth: 1, - title: _('Options'), - bodyStyle: 'padding: 5px;', - border: false, - height: 170, - disabled: true - }); - - var fieldset = this.form.add({ - xtype: 'fieldset', - title: _('Download Location'), - border: false, - autoHeight: true, - defaultType: 'textfield', - labelWidth: 1, - fieldLabel: '', - style: 'padding-bottom: 5px; margin-bottom: 0px;' - }); - this.optionsManager.bind('download_location', fieldset.add({ - fieldLabel: '', - name: 'download_location', - width: 400, - labelSeparator: '' - })); - - var panel = this.form.add({ - border: false, - layout: 'column', - defaultType: 'fieldset' - }); - fieldset = panel.add({ - title: _('Allocation'), - border: false, - autoHeight: true, - defaultType: 'radio', - width: 100 - }); - - this.optionsManager.bind('compact_allocation', fieldset.add({ - xtype: 'radiogroup', - columns: 1, - vertical: true, - disabled: true, - labelSeparator: '', - items: [{ - name: 'compact_allocation', - value: false, - inputValue: false, - boxLabel: _('Full'), - fieldLabel: '', - labelSeparator: '' - }, { - name: 'compact_allocation', - value: true, - inputValue: true, - boxLabel: _('Compact'), - fieldLabel: '', - labelSeparator: '' - }] - })); - - fieldset = panel.add({ - title: _('Bandwidth'), - border: false, - autoHeight: true, - labelWidth: 100, - width: 200, - defaultType: 'spinnerfield' - }); - this.optionsManager.bind('max_download_speed', fieldset.add({ - fieldLabel: _('Max Down Speed'), - labelStyle: 'margin-left: 10px', - name: 'max_download_speed', - width: 60 - })); - this.optionsManager.bind('max_upload_speed', fieldset.add({ - fieldLabel: _('Max Up Speed'), - labelStyle: 'margin-left: 10px', - name: 'max_upload_speed', - width: 60 - })); - this.optionsManager.bind('max_connections', fieldset.add({ - fieldLabel: _('Max Connections'), - labelStyle: 'margin-left: 10px', - name: 'max_connections', - width: 60 - })); - this.optionsManager.bind('max_upload_slots', fieldset.add({ - fieldLabel: _('Max Upload Slots'), - labelStyle: 'margin-left: 10px', - name: 'max_upload_slots', - width: 60 - })); - - fieldset = panel.add({ - title: _('General'), - border: false, - autoHeight: true, - defaultType: 'checkbox' - }); - this.optionsManager.bind('add_paused', fieldset.add({ - name: 'add_paused', - boxLabel: _('Add In Paused State'), - fieldLabel: '', - labelSeparator: '' - })); - this.optionsManager.bind('prioritize_first_last_pieces', fieldset.add({ - name: 'prioritize_first_last_pieces', - boxLabel: _('Prioritize First/Last Pieces'), - fieldLabel: '', - labelSeparator: '' - })); - - this.form.on('render', this.onFormRender, this); + this.files = this.add(new Deluge.add.FilesTab()); + this.form = this.add(new Deluge.add.OptionsTab()); + //this.form.on('render', this.onFormRender, this); }, onFormRender: function(form) { @@ -204,49 +67,14 @@ Deluge.add.OptionsPanel = Ext.extend(Ext.TabPanel, { priorities[index] = fileIndexes[index]; }); - var oldId = this.optionsManager.changeId(torrent['info_hash'], true); - this.optionsManager.setDefault('file_priorities', priorities); - this.optionsManager.changeId(oldId, true); + var oldId = this.form.optionsManager.changeId(torrent['info_hash'], true); + this.form.optionsManager.setDefault('file_priorities', priorities); + this.form.optionsManager.changeId(oldId, true); }, clear: function() { - this.clearFiles(); - this.optionsManager.resetAll(); - }, - - clearFiles: function() { - var root = this.files.getRootNode(); - if (!root.hasChildNodes()) return; - root.cascade(function(node) { - if (!node.parentNode || !node.getOwnerTree()) return; - node.remove(); - }); - }, - - getDefaults: function() { - var keys = ['add_paused','compact_allocation','download_location', - 'max_connections_per_torrent','max_download_speed_per_torrent', - 'max_upload_slots_per_torrent','max_upload_speed_per_torrent', - 'prioritize_first_last_pieces']; - - deluge.client.core.get_config_values(keys, { - success: function(config) { - var options = { - 'file_priorities': [], - 'add_paused': config.add_paused, - 'compact_allocation': config.compact_allocation, - 'download_location': config.download_location, - 'max_connections': config.max_connections_per_torrent, - 'max_download_speed': config.max_download_speed_per_torrent, - 'max_upload_slots': config.max_upload_slots_per_torrent, - 'max_upload_speed': config.max_upload_speed_per_torrent, - 'prioritize_first_last_pieces': config.prioritize_first_last_pieces - } - this.optionsManager.options = options; - this.optionsManager.resetAll(); - }, - scope: this - }); + this.files.clearFiles(); + this.form.optionsManager.resetAll(); }, getFilename: function(torrentId) { @@ -254,9 +82,9 @@ Deluge.add.OptionsPanel = Ext.extend(Ext.TabPanel, { }, getOptions: function(torrentId) { - var oldId = this.optionsManager.changeId(torrentId, true); - var options = this.optionsManager.get(); - this.optionsManager.changeId(oldId, true); + var oldId = this.form.optionsManager.changeId(torrentId, true); + var options = this.form.optionsManager.get(); + this.form.optionsManager.changeId(oldId, true); Ext.each(options['file_priorities'], function(priority, index) { options['file_priorities'][index] = (priority) ? 1 : 0; }); @@ -267,11 +95,11 @@ Deluge.add.OptionsPanel = Ext.extend(Ext.TabPanel, { if (!torrentId) return; this.torrentId = torrentId; - this.optionsManager.changeId(torrentId); + this.form.optionsManager.changeId(torrentId); - this.clearFiles(); + this.files.clearFiles(); var root = this.files.getRootNode(); - var priorities = this.optionsManager.get('file_priorities'); + var priorities = this.form.optionsManager.get('file_priorities'); this.walkFileTree(this.torrents[torrentId]['files_tree'], function(filename, type, entry, parentNode) { if (type == 'dir') { @@ -312,24 +140,5 @@ Deluge.add.OptionsPanel = Ext.extend(Ext.TabPanel, { if (type == 'dir') this.walkFileTree(entry, callback, scope, ret); } - }, - - onFolderCheck: function(node, checked) { - var priorities = this.optionsManager.get('file_priorities'); - node.cascade(function(child) { - if (!child.ui.checkbox) { - child.attributes.checked = checked; - } else { - child.ui.checkbox.checked = checked; - } - priorities[child.attributes.fileindex] = checked; - }, this); - this.optionsManager.setDefault('file_priorities', priorities); - }, - - onNodeCheck: function(node, checked) { - var priorities = this.optionsManager.get('file_priorities'); - priorities[node.attributes.fileindex] = checked; - this.optionsManager.update('file_priorities', priorities); } }); diff --git a/deluge/ui/web/js/deluge-all/add/OptionsTab.js b/deluge/ui/web/js/deluge-all/add/OptionsTab.js new file mode 100644 index 000000000..45363d68e --- /dev/null +++ b/deluge/ui/web/js/deluge-all/add/OptionsTab.js @@ -0,0 +1,185 @@ +/*! + * Deluge.add.OptionsPanel.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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. + * + * 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. + */ +Ext.ns('Deluge.add'); + +/** + * @class Deluge.add.OptionsTab + * @extends Ext.form.FormPanel + */ +Deluge.add.OptionsTab = Ext.extend(Ext.form.FormPanel, { + + title: _('Options'), + height: 170, + + border: false, + bodyStyle: 'padding: 5px', + disabled: true, + labelWidth: 1, + + initComponent: function() { + Deluge.add.OptionsTab.superclass.initComponent.call(this); + + this.optionsManager = new Deluge.MultiOptionsManager(); + + var fieldset = this.add({ + xtype: 'fieldset', + title: _('Download Location'), + border: false, + autoHeight: true, + defaultType: 'textfield', + labelWidth: 1, + fieldLabel: '', + style: 'padding-bottom: 5px; margin-bottom: 0px;' + }); + + this.optionsManager.bind('download_location', fieldset.add({ + fieldLabel: '', + name: 'download_location', + width: 400, + labelSeparator: '' + })); + + var panel = this.add({ + border: false, + layout: 'column', + defaultType: 'fieldset' + }); + fieldset = panel.add({ + title: _('Allocation'), + border: false, + autoHeight: true, + defaultType: 'radio', + width: 100 + }); + + this.optionsManager.bind('compact_allocation', fieldset.add({ + xtype: 'radiogroup', + columns: 1, + vertical: true, + disabled: true, + labelSeparator: '', + items: [{ + name: 'compact_allocation', + value: false, + inputValue: false, + boxLabel: _('Full'), + fieldLabel: '', + labelSeparator: '' + }, { + name: 'compact_allocation', + value: true, + inputValue: true, + boxLabel: _('Compact'), + fieldLabel: '', + labelSeparator: '' + }] + })); + + fieldset = panel.add({ + title: _('Bandwidth'), + border: false, + autoHeight: true, + labelWidth: 100, + width: 200, + defaultType: 'spinnerfield' + }); + this.optionsManager.bind('max_download_speed', fieldset.add({ + fieldLabel: _('Max Down Speed'), + labelStyle: 'margin-left: 10px', + name: 'max_download_speed', + width: 60 + })); + this.optionsManager.bind('max_upload_speed', fieldset.add({ + fieldLabel: _('Max Up Speed'), + labelStyle: 'margin-left: 10px', + name: 'max_upload_speed', + width: 60 + })); + this.optionsManager.bind('max_connections', fieldset.add({ + fieldLabel: _('Max Connections'), + labelStyle: 'margin-left: 10px', + name: 'max_connections', + width: 60 + })); + this.optionsManager.bind('max_upload_slots', fieldset.add({ + fieldLabel: _('Max Upload Slots'), + labelStyle: 'margin-left: 10px', + name: 'max_upload_slots', + width: 60 + })); + + fieldset = panel.add({ + title: _('General'), + border: false, + autoHeight: true, + defaultType: 'checkbox' + }); + this.optionsManager.bind('add_paused', fieldset.add({ + name: 'add_paused', + boxLabel: _('Add In Paused State'), + fieldLabel: '', + labelSeparator: '' + })); + this.optionsManager.bind('prioritize_first_last_pieces', fieldset.add({ + name: 'prioritize_first_last_pieces', + boxLabel: _('Prioritize First/Last Pieces'), + fieldLabel: '', + labelSeparator: '' + })); + }, + + getDefaults: function() { + var keys = ['add_paused','compact_allocation','download_location', + 'max_connections_per_torrent','max_download_speed_per_torrent', + 'max_upload_slots_per_torrent','max_upload_speed_per_torrent', + 'prioritize_first_last_pieces']; + + deluge.client.core.get_config_values(keys, { + success: function(config) { + var options = { + 'file_priorities': [], + 'add_paused': config.add_paused, + 'compact_allocation': config.compact_allocation, + 'download_location': config.download_location, + 'max_connections': config.max_connections_per_torrent, + 'max_download_speed': config.max_download_speed_per_torrent, + 'max_upload_slots': config.max_upload_slots_per_torrent, + 'max_upload_speed': config.max_upload_speed_per_torrent, + 'prioritize_first_last_pieces': config.prioritize_first_last_pieces + } + this.optionsManager.options = options; + this.optionsManager.resetAll(); + }, + scope: this + }); + } +});