+ /**\r
+ * Init a form part : creates a pane, a set of fields, etc.\r
+ * @param label {String} A label\r
+ * @return {Map} The form part.\r
+ */\r
+ _initFormObject : function(label){\r
+ this.formObject = {};\r
+ this.formObject.hiddenFields = {};\r
+ this.formObject.freeFields = [];\r
+ this.formObject.fields = {};\r
+ this.formObject.label = label;\r
+ this.formObject.pane = new qx.ui.container.Composite(new qx.ui.layout.VBox(5));\r
+ return this.formObject;\r
+ },\r
+ \r
+ /**\r
+ * Creates a simple label/input form entry.\r
+ * @param formObject {Map} The form part\r
+ * @param fieldName {String} Name\r
+ * @param fieldLabel {String} Label of the field\r
+ * @param defaultValue {String} The default value\r
+ * @param choiceValues {Map} An map of values\r
+ * @param disabled {Boolean} The field is not writable\r
+ * @param subType {String} The type expected (string, integer, etc).\r
+ */\r
+ _addFormInputText : function(formObject, fieldName, fieldLabel, defaultValue, disabled, subType, choiceValues){\r
+ var labelElement;\r
+ if(choiceValues){\r
+ var fieldElement = new qx.ui.form.SelectBox();\r
+ for(var key in choiceValues){\r
+ fieldElement.add(new qx.ui.form.ListItem(choiceValues[key], null, key));\r
+ }\r
+ fieldElement.addListener("changeSelected", function(e){this.fireEvent("modified")}, this);\r
+ }else{\r
+ var fieldElement = new qx.ui.form.TextField();\r
+ if(subType == "integer"){\r
+ fieldElement.addListener("changeValue", function(e){\r
+ var isNum = !isNaN(e.getData() * 1);\r
+ if(!isNum){\r
+ alert("Warning, this field only accepts Integers!");\r
+ }\r
+ }, this); \r
+ }\r
+ fieldElement.addListener("input", function(e){this.fireEvent("modified")}, this); \r
+ }\r
+ if(defaultValue){\r
+ fieldElement.setValue(defaultValue);\r
+ }\r
+ if(fieldName && fieldLabel){\r
+ labelElement = new qx.ui.basic.Label(fieldLabel);\r
+ formObject.fields[fieldName] = fieldElement;\r
+ }else{\r
+ labelElement = new qx.ui.form.TextField();\r
+ formObject.freeFields.push({\r
+ labelEl:labelElement, \r
+ valueEl:fieldElement\r
+ });\r
+ }\r
+ if(disabled) fieldElement.setEnabled(false);\r
+ this._addFormEntry(formObject, labelElement, fieldElement);\r
+ },\r
+ \r
+ /**\r
+ * Add an header\r
+ * @param formObject {Map} The form part\r
+ * @param content {Mixed} Content to add.\r
+ * @param additionnalButton {Mixed} Any widget to add on the east.\r
+ */\r
+ _addFormHeader : function(formObject, content, additionnalButton){\r
+ var header = new qx.ui.basic.Label('<big><b>'+content+'</b></big>');\r
+ header.setRich(true); \r
+ if(!additionnalButton){\r
+ header.setPaddingBottom(10);\r
+ formObject.pane.add(header);\r
+ }else{\r
+ var pane = new qx.ui.container.Composite(new qx.ui.layout.Dock());\r
+ pane.setPaddingBottom(10);\r
+ pane.setPaddingRight(10);\r
+ pane.add(header, {edge:'center'});\r
+ pane.add(additionnalButton, {edge:'east'});\r
+ formObject.pane.add(pane);\r
+ }\r
+ },\r
+ \r
+ /**\r
+ * Adds a label/input like entry in the form.\r
+ * @param formObject {Map} The form part\r
+ * @param labelElement {Object} Either a label or an input \r
+ * @param fieldElement {Object} Any form input.\r
+ */\r
+ _addFormEntry : function(formObject, labelElement, fieldElement){\r
+ var entryPane = new qx.ui.container.Composite(new qx.ui.layout.HBox(5));\r
+ labelElement.setWidth(150);\r
+ labelElement.setTextAlign("right"); \r
+ entryPane.add(labelElement);\r
+ entryPane.add(new qx.ui.basic.Label(':'));\r
+ fieldElement.setWidth(150);\r
+ entryPane.add(fieldElement);\r
+ formObject.pane.add(entryPane);\r
+ },\r
+ \r