changeset 1168:40a07eb873bf

Add numberfield with error/warning functionality and use for Messprogramm form.
author Tom Gottfried <tom@intevation.de>
date Fri, 01 Jul 2016 14:01:02 +0200
parents e9bf88db2bbb
children e552e82ceb8a
files app/view/form/Messprogramm.js app/view/widget/base/NumberField.js
diffstat 2 files changed, 115 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/app/view/form/Messprogramm.js	Fri Jul 01 13:55:09 2016 +0200
+++ b/app/view/form/Messprogramm.js	Fri Jul 01 14:01:02 2016 +0200
@@ -21,6 +21,7 @@
         'Lada.view.widget.Probenart',
         'Lada.view.widget.Umwelt',
         'Lada.view.widget.base.TextField',
+        'Lada.view.widget.base.NumberField',
         'Lada.view.widget.base.FieldSet',
         'Lada.model.Messprogramm',
         'Lada.model.MmtMessprogramm',
@@ -212,7 +213,7 @@
                             width: '40%',
                             name: 'probenintervall'
                         }, {
-                            xtype: 'numberfield',
+                            xtype: 'numfield',
                             fieldLabel: i18n.getMsg('teilintervallVon'),
                             margin: '0, 10, 5, 10',
                             labelWidth: 90,
@@ -220,7 +221,7 @@
                             name: 'teilintervallVon',
                             period: 'start'
                         }, {
-                            xtype: 'numberfield',
+                            xtype: 'numfield',
                             fieldLabel: i18n.getMsg('teilintervallBis'),
                             margin: '0, 15, 5, 5',
                             labelWidth: 18,
@@ -228,7 +229,7 @@
                             name: 'teilintervallBis',
                             period: 'end'
                         }, {
-                            xtype: 'numberfield',
+                            xtype: 'numfield',
                             margin: '0, 10, 5, 5',
                             fieldLabel: i18n.getMsg('offset'),
                             labelWidth: 45,
@@ -620,6 +621,8 @@
         this.down('fset[name=probenIntervallFieldset]').clearMessages();
         this.down('cbox[name=probenintervall]').clearWarningOrError();
         this.down('fset[name=gueltigPeriodFieldset]').clearMessages();
+        this.down('numfield[name=teilintervallVon]').clearWarningOrError();
+        this.down('numfield[name=teilintervallBis]').clearWarningOrError();
         this.down('datetime[name=gueltigVon]').clearWarningOrError();
         this.down('datetime[name=gueltigBis]').clearWarningOrError();
         //no clear for probeNehmerId
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/view/widget/base/NumberField.js	Fri Jul 01 14:01:02 2016 +0200
@@ -0,0 +1,109 @@
+/* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz
+ * Software engineering by Intevation GmbH
+ *
+ * This file is Free Software under the GNU GPL (v>=3)
+ * and comes with ABSOLUTELY NO WARRANTY! Check out
+ * the documentation coming with IMIS-Labordaten-Application for details.
+ */
+
+/**
+ * This Widget extends a Panel to create a Numberfield
+ */
+Ext.define('Lada.view.widget.base.NumberField', {
+    extend: 'Ext.panel.Panel',
+    alias: 'widget.numfield',
+
+    layout: 'hbox',
+
+    border: 0,
+    margin: '0, 0, 5, 0',
+
+    initComponent: function() {
+        this.items = [{
+            xtype: 'numberfield',
+            flex: 1,
+            name: this.name,
+            msgTarget: 'none',
+            maxLength: this.maxLength || 1000,
+            enforceMaxLength: this.enforceMaxLength || true,
+            fieldLabel: this.fieldLabel,
+            labelWidth: this.labelWidth,
+            readOnly: this.readOnly || false,
+            listeners: this.listeners
+        }, {
+            xtype: 'image',
+            name: 'warnImg',
+            src: 'resources/img/dialog-warning.png',
+            width: 14,
+            height: 14,
+            hidden: true
+        }, {
+            xtype: 'image',
+            name: 'errorImg',
+            src: 'resources/img/emblem-important.png',
+            width: 14,
+            height: 14,
+            hidden: true
+        }];
+        this.callParent(arguments);
+        if (this.regex) {
+            Ext.apply(this.down('numberfield'), {regex: this.regex});
+        }
+        if (this.allowBlank === false) {
+            Ext.apply(this.down('numberfield'), {allowBlank: this.allowBlank});
+        }
+    },
+
+    showWarnings: function(warnings) {
+        var img = this.down('image[name=warnImg]');
+        Ext.create('Ext.tip.ToolTip', {
+            target: img.getEl(),
+            html: warnings
+        });
+        img.show();
+        this.down('numberfield').invalidCls = 'x-lada-warning';
+        this.down('numberfield').markInvalid('');
+        var fieldset = this.up('fieldset[collapsible=true]');
+        if (fieldset) {
+            var i18n = Lada.getApplication().bundle;
+            var warningText = i18n.getMsg(this.name) + ': ' + warnings;
+            fieldset.showWarningOrError(true, warningText);
+        }
+    },
+
+    showErrors: function(errors) {
+        var img = this.down('image[name=errorImg]');
+        var warnImg = this.down('image[name=warnImg]');
+        warnImg.hide();
+        Ext.create('Ext.tip.ToolTip', {
+            target: img.getEl(),
+            html: errors
+        });
+        this.down('numberfield').invalidCls = 'x-lada-error';
+        this.down('numberfield').markInvalid('');
+        img.show();
+        var fieldset = this.up('fieldset[collapsible=true]');
+        if (fieldset) {
+            var i18n = Lada.getApplication().bundle;
+            var errorText = i18n.getMsg(this.name) + ': ' + errors;
+            fieldset.showWarningOrError(false, '', true, errorText);
+        }
+    },
+
+    getValue: function() {
+        return this.down('numberfield').getValue();
+    },
+
+    setValue: function(value) {
+        this.down('numberfield').setValue(value);
+    },
+
+    clearWarningOrError: function() {
+        this.down('image[name=errorImg]').hide();
+        this.down('image[name=warnImg]').hide();
+    },
+
+    setReadOnly: function(value) {
+        this.down('numberfield').setReadOnly(value);
+    }
+});

http://lada.wald.intevation.org