Author: damoxc
Revision: 5629
Log:
add a spinnergroup widget to make the port sections in the network
preferences easier
Diff:
Modified: trunk/deluge/ui/web/js/ext-extensions-debug.js
===================================================================
--- trunk/deluge/ui/web/js/ext-extensions-debug.js 2009-08-06 18:21:18 UTC
(rev 5628)
+++ trunk/deluge/ui/web/js/ext-extensions-debug.js 2009-08-06 18:58:37 UTC
(rev 5629)
@@ -306,7 +306,7 @@
setValue: function(value) {
value = this.strategy.fixBoundries(value);
- this.setRawValue(value);
+ Ext.ux.form.Spinner.superclass.setValue.call(this, value);
}
});
@@ -793,4 +793,166 @@
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
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---