135 lines
2.5 KiB
JavaScript
135 lines
2.5 KiB
JavaScript
|
|
var Widget = require('./widget');
|
|
|
|
module.exports = new Class({
|
|
Extends: Widget
|
|
,Tag: 'htk-field'
|
|
,Child: 'param'
|
|
,Properties:
|
|
{
|
|
value: {
|
|
type: String
|
|
,set: function(x) {
|
|
if (Vn.Value.compare(x, this._value))
|
|
return;
|
|
|
|
if (x instanceof Date)
|
|
x = x.clone();
|
|
|
|
this.valueChanged(x);
|
|
this.putValue(x);
|
|
}
|
|
,get: function(x) {
|
|
return this._value;
|
|
}
|
|
},
|
|
param: {
|
|
type: Vn.Param
|
|
,set: function(x) {
|
|
this.link({_param: x}, {'changed': this.onParamChange});
|
|
this.onParamChange();
|
|
}
|
|
,get: function() {
|
|
return this._param;
|
|
}
|
|
},
|
|
editable: {
|
|
type: Boolean
|
|
,set: function(x) {
|
|
if (x != this._editable) {
|
|
this._editable = x;
|
|
this.setEditable(x);
|
|
}
|
|
}
|
|
,get: function() {
|
|
return this._editable;
|
|
}
|
|
},
|
|
form: {
|
|
type: Db.Iterator
|
|
,set: function(x) {
|
|
this._form = x;
|
|
this.bindToForm();
|
|
}
|
|
,get: function() {
|
|
return this._form;
|
|
}
|
|
},
|
|
column: {
|
|
type: String
|
|
,set: function(x) {
|
|
this._paramName = x;
|
|
this.bindToForm();
|
|
}
|
|
,get: function() {
|
|
return this._paramName;
|
|
}
|
|
},
|
|
conditionalFunc: {
|
|
type: Function
|
|
,value: null
|
|
}
|
|
}
|
|
|
|
,_value: undefined
|
|
,_param: null
|
|
,_editable: true
|
|
,_blockParamChange: false
|
|
,_blockValueChange: false
|
|
|
|
,onParamChange: function() {
|
|
if (!this._blockValueChange) {
|
|
this._blockParamChange = true;
|
|
this.value = this._param.value;
|
|
this._blockParamChange = false;
|
|
}
|
|
}
|
|
|
|
,bindToForm: function() {
|
|
if (this._form && this._paramName)
|
|
this.param = new Db.Param
|
|
({
|
|
form: this._form
|
|
,column: this._paramName
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Virtual method that must be implemented by class childs to set the entry
|
|
* editable.
|
|
*
|
|
* @param {Boolean} editable Whether the user is allowed to edit the entry
|
|
**/
|
|
,setEditable: function(editable) {}
|
|
|
|
/**
|
|
* Virtual method that must be implemented by class childs to put the value
|
|
* on the associated entry.
|
|
*
|
|
* @param {Object} value The new value for the entry
|
|
**/
|
|
,putValue: function(value) {}
|
|
|
|
/**
|
|
* Protected method that should be called from class childs when the value
|
|
* on the associated entry changes.
|
|
*
|
|
* @param {Object} value The new entry value
|
|
**/
|
|
,valueChanged: function(value) {
|
|
this._value = value;
|
|
|
|
if (this.conditionalFunc)
|
|
this.conditionalFunc(this, value);
|
|
|
|
if (this._param && !this._blockParamChange) {
|
|
this._blockValueChange = true;
|
|
this._param.value = value;
|
|
this._blockValueChange = false;
|
|
}
|
|
|
|
this.signalEmit('changed');
|
|
}
|
|
});
|
|
|