summaryrefslogtreecommitdiffstats
path: root/deluge/ui/web/js/ext-extensions-debug.js
diff options
context:
space:
mode:
authorDamien Churchill <damoc@gmail.com>2009-08-06 18:58:37 +0000
committerDamien Churchill <damoc@gmail.com>2009-08-06 18:58:37 +0000
commit5af8fec10a566b7324e7155f10ae6e928c4111e1 (patch)
tree509cb1f068fea1f18901af8da4a38e270ed01d5a /deluge/ui/web/js/ext-extensions-debug.js
parent9bf89455e6078276e47e31a7350d9fda91417def (diff)
downloaddeluge-5af8fec10a566b7324e7155f10ae6e928c4111e1.tar.gz
deluge-5af8fec10a566b7324e7155f10ae6e928c4111e1.tar.bz2
deluge-5af8fec10a566b7324e7155f10ae6e928c4111e1.zip
add a spinnergroup widget to make the port sections in the network preferences easier
Diffstat (limited to 'deluge/ui/web/js/ext-extensions-debug.js')
-rw-r--r--deluge/ui/web/js/ext-extensions-debug.js166
1 files changed, 164 insertions, 2 deletions
diff --git a/deluge/ui/web/js/ext-extensions-debug.js b/deluge/ui/web/js/ext-extensions-debug.js
index 51b87d595..2e20232d0 100644
--- a/deluge/ui/web/js/ext-extensions-debug.js
+++ b/deluge/ui/web/js/ext-extensions-debug.js
@@ -306,7 +306,7 @@ Ext.extend(Ext.ux.form.Spinner, Ext.form.TriggerField, {
setValue: function(value) {
value = this.strategy.fixBoundries(value);
- this.setRawValue(value);
+ Ext.ux.form.Spinner.superclass.setValue.call(this, value);
}
});
@@ -793,4 +793,166 @@ Ext.override(Ext.form.RadioGroup, {
item.setValue(checked);
});
}
-}); \ No newline at end of file
+});
+
+Ext.ux.form.SpinnerGroup = Ext.extend(Ext.form.CheckboxGroup, {
+
+ // private
+ defaultType: 'uxspinner',
+
+ // private
+ groupCls: 'x-form-uxspinner-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('uxspinnergroup', Ext.ux.form.SpinnerGroup); \ No newline at end of file