Module: deluge Branch: master Commit: fb4bfe7656b06a455ca7b802196f9b95344124e1
Author: Damien Churchill <[email protected]> Date: Mon Apr 19 16:47:30 2010 +0100 re-add the SpinnerGroup type and enable the Network preferences page --- .../web/js/deluge-all/preferences/NetworkPage.js | 4 +- .../js/deluge-all/preferences/PreferencesWindow.js | 2 +- .../ui/web/js/ext-extensions/form/SpinnerGroup.js | 197 ++++++++++++++++++++ 3 files changed, 200 insertions(+), 3 deletions(-) diff --git a/deluge/ui/web/js/deluge-all/preferences/NetworkPage.js b/deluge/ui/web/js/deluge-all/preferences/NetworkPage.js index cdd2002..bfc0cff 100644 --- a/deluge/ui/web/js/deluge-all/preferences/NetworkPage.js +++ b/deluge/ui/web/js/deluge-all/preferences/NetworkPage.js @@ -80,7 +80,7 @@ Deluge.preferences.Network = Ext.extend(Ext.form.FormPanel, { }, items: [{ fieldLabel: 'From', - width: 80, + width: 50, strategy: { xtype: 'number', decimalPrecision: 0, @@ -89,7 +89,7 @@ Deluge.preferences.Network = Ext.extend(Ext.form.FormPanel, { } }, { fieldLabel: 'To', - width: 80, + width: 50, strategy: { xtype: 'number', decimalPrecision: 0, diff --git a/deluge/ui/web/js/deluge-all/preferences/PreferencesWindow.js b/deluge/ui/web/js/deluge-all/preferences/PreferencesWindow.js index 6b38376..066cfa4 100644 --- a/deluge/ui/web/js/deluge-all/preferences/PreferencesWindow.js +++ b/deluge/ui/web/js/deluge-all/preferences/PreferencesWindow.js @@ -114,7 +114,7 @@ Deluge.preferences.PreferencesWindow = Ext.extend(Ext.Window, { initPages: function() { deluge.preferences = this; this.addPage(new Deluge.preferences.Downloads()); - //this.addPage(new Deluge.preferences.Network()); + this.addPage(new Deluge.preferences.Network()); this.addPage(new Deluge.preferences.Encryption()); this.addPage(new Deluge.preferences.Bandwidth()); this.addPage(new Deluge.preferences.Interface()); diff --git a/deluge/ui/web/js/ext-extensions/form/SpinnerGroup.js b/deluge/ui/web/js/ext-extensions/form/SpinnerGroup.js new file mode 100644 index 0000000..0a8fdfa --- /dev/null +++ b/deluge/ui/web/js/ext-extensions/form/SpinnerGroup.js @@ -0,0 +1,197 @@ +/*! + * Ext.ux.form.SpinnerGroup.js + * + * Copyright (c) Damien Churchill 2009-2010 <[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. + * + * 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('Ext.ux.form'); + +/** + * + */ +Ext.ux.form.SpinnerGroup = Ext.extend(Ext.form.CheckboxGroup, { + + // private + defaultType: 'spinnerfield', + + // private + groupCls: 'x-form-spinner-group', + + colCfg: {}, + + // private + onRender : function(ct, position){ + if(!this.el){ + var panelCfg = { + cls: this.groupCls, + layout: 'column', + border: false, + renderTo: ct + }; + var colCfg = Ext.apply({ + defaultType: this.defaultType, + layout: 'form', + border: false, + labelWidth: 60, + defaults: { + hideLabel: true, + anchor: '100%' + } + }, this.colCfg); + + if(this.items[0].items){ + + // The container has standard ColumnLayout configs, so pass them in directly + + Ext.apply(panelCfg, { + layoutConfig: {columns: this.items.length}, + defaults: this.defaults, + items: this.items + }) + for(var i=0, len=this.items.length; i<len; i++){ + Ext.applyIf(this.items[i], colCfg); + }; + + }else{ + + // The container has field item configs, so we have to generate the column + // panels first then move the items into the columns as needed. + + var numCols, cols = []; + + if(typeof this.columns == 'string'){ // 'auto' so create a col per item + this.columns = this.items.length; + } + if(!Ext.isArray(this.columns)){ + var cs = []; + for(var i=0; i<this.columns; i++){ + cs.push((100/this.columns)*.01); // distribute by even % + } + this.columns = cs; + } + + numCols = this.columns.length; + + // Generate the column configs with the correct width setting + for(var i=0; i<numCols; i++){ + var cc = Ext.apply({items:[]}, colCfg); + cc[this.columns[i] <= 1 ? 'columnWidth' : 'width'] = this.columns[i]; + if(this.defaults){ + cc.defaults = Ext.apply(cc.defaults || {}, this.defaults) + } + cols.push(cc); + }; + + // Distribute the original items into the columns + if(this.vertical){ + var rows = Math.ceil(this.items.length / numCols), ri = 0; + for(var i=0, len=this.items.length; i<len; i++){ + if(i>0 && i%rows==0){ + ri++; + } + if(this.items[i].fieldLabel){ + this.items[i].hideLabel = false; + } + cols[ri].items.push(this.items[i]); + }; + }else{ + for(var i=0, len=this.items.length; i<len; i++){ + var ci = i % numCols; + if(this.items[i].fieldLabel){ + this.items[i].hideLabel = false; + } + cols[ci].items.push(this.items[i]); + }; + } + + Ext.apply(panelCfg, { + layoutConfig: {columns: numCols}, + items: cols + }); + } + + this.panel = new Ext.Panel(panelCfg); + this.el = this.panel.getEl(); + + if(this.forId && this.itemCls){ + var l = this.el.up(this.itemCls).child('label', true); + if(l){ + l.setAttribute('htmlFor', this.forId); + } + } + + var fields = this.panel.findBy(function(c){ + return c.isFormField; + }, this); + + this.items = new Ext.util.MixedCollection(); + this.items.addAll(fields); + + this.items.each(function(field) { + field.on('change', this.onFieldChange, this); + }, this); + } + + Ext.ux.form.SpinnerGroup.superclass.onRender.call(this, ct, position); + }, + + onFieldChange: function(spinner, value) { + this.fireEvent('change', this, this.getValue()); + }, + + initValue : Ext.emptyFn, + + getValue: function() { + var value = [this.items.getCount()]; + this.items.each(function(item, i) { + value[i] = Number(item.getValue()); + }); + return value; + }, + + getRawValue: function() { + var value = [this.items.getCount()]; + this.items.each(function(item, i) { + value[i] = Number(item.getRawValue()); + }); + return value; + }, + + setValue: function(value) { + this.items.each(function(item, i) { + item.setValue(value[i]); + }); + }, + + setRawValue: function(value) { + this.items.each(function(item, i) { + item.setRawValue(value[i]); + }); + } +}); +Ext.reg('spinnergroup', Ext.ux.form.SpinnerGroup); -- 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.
