From 0d9567534a152ea0e66333b622c90b551853188d Mon Sep 17 00:00:00 2001 From: "francois.grand" <francois.grand@irstea.fr> Date: Mon, 26 Mar 2018 12:11:06 +0200 Subject: [PATCH] =?UTF-8?q?=20#44=20enum=20ParamValueMode=20:=20ajout=20de?= =?UTF-8?q?=20la=20valeur=20CALCUL=20pour=20les=20param=C3=A8tres=20"?= =?UTF-8?q?=C3=A0=20calculer"=20-=20classe=20ParamValues=20:=20=5FsingleVa?= =?UTF-8?q?lue=20number->DefinedNumber,=20mode=20"=C3=A0=20calculer"=20par?= =?UTF-8?q?=20d=C3=A9faut,=20ajout=20de=20contr=C3=B4les=20de=20coh=C3=A9r?= =?UTF-8?q?ence=20mode/valeur(s)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/param/param-values.ts | 88 ++++++++++++++++++++++++++++++++++----- 1 file changed, 78 insertions(+), 10 deletions(-) diff --git a/src/param/param-values.ts b/src/param/param-values.ts index bd7eb3ef..d6877829 100644 --- a/src/param/param-values.ts +++ b/src/param/param-values.ts @@ -1,4 +1,5 @@ import { Pair } from "../util/pair" +import { DefinedNumber } from "../util/definedvalue"; /** * mode de génération des valeurs @@ -17,7 +18,12 @@ export enum ParamValueMode { /** * liste de valeurs discrètes */ - LISTE + LISTE, + + /** + * la valeur du paramètre est non définie et à calculer + */ + CALCUL } /** @@ -149,12 +155,12 @@ export class ParamValues { /** * mode de génération des valeurs : min/max, liste, ... */ - private _valueMode: ParamValueMode = ParamValueMode.MINMAX; + private _valueMode: ParamValueMode; /** - * valeur dans le cas ParamValueMode.SINGLE + * valeur numérique (éventuellement non définie) dans le mode "valeur unique" (ParamValueMode.SINGLE) */ - private _singleValue: number; + private _singleValue: DefinedNumber; /** * valeur min dans le cas ParamValueMode.MINMAX @@ -176,20 +182,27 @@ export class ParamValues { */ private _valueList: number[]; + constructor() { + this._singleValue = new DefinedNumber(); + this.valueMode = ParamValueMode.CALCUL; + } + public setValues(o: number | any, max?: number, step?: number) { if (typeof (o) === "number") { if (max == undefined) { - this._valueMode = ParamValueMode.SINGLE; - this._singleValue = o as number; + this.valueMode = ParamValueMode.SINGLE; + this._singleValue.value = o as number; } else { - this._valueMode = ParamValueMode.MINMAX; + this.valueMode = ParamValueMode.MINMAX; this._minValue = o as number; this._maxValue = max; this._stepValue = step; } } - else if (Array.isArray(o)) + else if (Array.isArray(o)) { + this.valueMode = ParamValueMode.LISTE; this._valueList = o; + } else throw new Error(`ParamValues.setValues() : appel invalide`); } @@ -200,50 +213,104 @@ export class ParamValues { public set valueMode(m: ParamValueMode) { this._valueMode = m; + switch (m) { + case ParamValueMode.SINGLE: + this._minValue = undefined; + this._maxValue = undefined; + this._stepValue = undefined; + this._valueList = undefined; + break; + + case ParamValueMode.LISTE: + this._singleValue.undefine(); + this._minValue = undefined; + this._maxValue = undefined; + this._stepValue = undefined; + break; + + case ParamValueMode.MINMAX: + this._singleValue.undefine(); + this._valueList = undefined; + break; + + case ParamValueMode.CALCUL: + this._singleValue.undefine(); + this._minValue = undefined; + this._maxValue = undefined; + this._stepValue = undefined; + this._valueList = undefined; + break; + } + } + + private checkValueMode(expected: ParamValueMode) { + if (this._valueMode != expected) + throw new Error(`ParamValues : mode de valeurs ${ParamValueMode[expected]} incorrect`); } public get singleValue() { - return this._singleValue; + this.checkValueMode(ParamValueMode.SINGLE); + return this._singleValue.value; + } + + public get uncheckedValue() { + this.checkValueMode(ParamValueMode.SINGLE); + return this._singleValue.uncheckedValue; } public set singleValue(v: number) { - this._singleValue = v; + this._singleValue.value = v; + this.valueMode = ParamValueMode.SINGLE; + } + + public get isDefined() { + this.checkValueMode(ParamValueMode.SINGLE); + return this._singleValue.isDefined; } public get min() { + this.checkValueMode(ParamValueMode.MINMAX); return this._minValue; } public set min(v: number) { this._minValue = v; + this.valueMode = ParamValueMode.MINMAX; } public get max() { + this.checkValueMode(ParamValueMode.MINMAX); return this._maxValue; } public set max(v: number) { this._maxValue = v; + this.valueMode = ParamValueMode.MINMAX; } public get stepRefValue(): Pair { + this.checkValueMode(ParamValueMode.MINMAX); return new Pair(1e-9, this._maxValue - this._minValue); } public get step() { + this.checkValueMode(ParamValueMode.MINMAX); return this._stepValue; } public set step(v: number) { this._stepValue = v; + this.valueMode = ParamValueMode.MINMAX; } public get valueList() { + this.checkValueMode(ParamValueMode.LISTE); return this._valueList; } public set valueList(l: number[]) { this._valueList = l; + this.valueMode = ParamValueMode.LISTE; } public getValuesIterator(reverse: boolean = false): ParamValueIterator { @@ -255,6 +322,7 @@ export class ParamValues { */ public copyMembers(n: ParamValues) { n._valueMode = this.valueMode; + n._singleValue = new DefinedNumber(this._singleValue.value); n._minValue = this._minValue; n._maxValue = this._maxValue; n._stepValue = this._stepValue; -- GitLab