From 3820adb0aa4eb3a612f1ad6ff4299580dc34e517 Mon Sep 17 00:00:00 2001
From: "francois.grand" <francois.grand@irstea.fr>
Date: Mon, 26 Mar 2018 13:43:55 +0200
Subject: [PATCH 1/5] =?UTF-8?q?=20#76=20classe=20NgParameter=20:=20suppres?=
 =?UTF-8?q?ion=20du=20membre=20=5Fvalues=20(ParamValues),=20l'aspect=20cor?=
 =?UTF-8?q?respondant=20est=20g=C3=A9r=C3=A9=20dans=20la=20classe=20BasePa?=
 =?UTF-8?q?ram?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/app/formulaire/ngparam.ts | 62 +++++++++++++++++++----------------
 1 file changed, 34 insertions(+), 28 deletions(-)

diff --git a/src/app/formulaire/ngparam.ts b/src/app/formulaire/ngparam.ts
index 20ee43cdf..887133a57 100644
--- a/src/app/formulaire/ngparam.ts
+++ b/src/app/formulaire/ngparam.ts
@@ -41,8 +41,6 @@ export class NgParameter extends InputField {
     public radioConfig: ParamRadioConfig;
     public radioState: ParamRadioConfig;
 
-    private _values: ParamValues;
-
     /**
      * true si ce paramètre est celui par défaut dans un formulaire (cf. fichier de conf des calculettes, objet "options", champ "idCal")
      */
@@ -62,7 +60,6 @@ export class NgParameter extends InputField {
 
     constructor(private _paramDef: ParamDefinition, isTmpl = false) {
         super(isTmpl);
-        this._values = new ParamValues();
     }
 
     get symbol(): string {
@@ -83,6 +80,10 @@ export class NgParameter extends InputField {
         this._confId = id;
     }
 
+    private get _paramValues() {
+        return this._paramDef.paramValues;
+    }
+
     /**
      * notification envoyée après la modification de la valeur du paramètre
      */
@@ -198,14 +199,19 @@ export class NgParameter extends InputField {
     }
 
     public get valueMode() {
-        return this._values.valueMode;
+        return this._paramDef.valueMode;
     }
 
-    public set valueMode(m: ParamValueMode) {
+    public setValueMode(m: ParamValueMode, sender?: any) {
         // undefined si on clique en dehors du select après l'avoir ouvert (cad sans avoir fait de sélection)
         // et au même niveau, cad à côté du bouton et non à côté du menu déroulant
-        if (m != undefined)
-            this._values.valueMode = m;
+        if (m != undefined) {
+            const changed: boolean = this._paramValues.valueMode !== m;
+            if (changed) {
+                this._paramValues.valueMode = m;
+                this.notifyObservers({ "valuemode": m }, sender = undefined ? this : sender);
+            }
+        }
     }
 
     /**
@@ -215,7 +221,7 @@ export class NgParameter extends InputField {
         if (v == undefined)
             return false;
 
-        if (this._values.valueMode == ParamValueMode.MINMAX)
+        if (this._paramValues.valueMode == ParamValueMode.MINMAX)
             try {
                 this.checkValue(v);
             }
@@ -231,62 +237,62 @@ export class NgParameter extends InputField {
     }
 
     public checkMin(min: number): boolean {
-        return this.isMinMaxDomainValid(min) && (min < this._values.max);
+        return this.isMinMaxDomainValid(min) && (min < this._paramValues.max);
     }
 
     public checkMax(max: number): boolean {
-        return this.isMinMaxDomainValid(max) && (this._values.min < max);
+        return this.isMinMaxDomainValid(max) && (this._paramValues.min < max);
     }
 
     public get isMinMaxValid(): boolean {
-        return this.checkMinMax(this._values.min, this._values.max);
+        return this.checkMinMax(this._paramValues.min, this._paramValues.max);
     }
 
     public get minValue() {
-        return this._values.min;
+        return this._paramValues.min;
     }
 
     public set minValue(v: number) {
-        this._values.min = v;
+        this._paramValues.min = v;
     }
 
     public get maxValue() {
-        return this._values.max;
+        return this._paramValues.max;
     }
 
     public set maxValue(v: number) {
-        this._values.max = v;
+        this._paramValues.max = v;
     }
 
     public checkStep(step: number): boolean {
-        return this.isMinMaxValid && this._values.stepRefValue.intervalHasValue(step);
+        return this.isMinMaxValid && this._paramValues.stepRefValue.intervalHasValue(step);
     }
 
     public get stepRefValue(): Pair {
-        return this._values.stepRefValue;
+        return this._paramValues.stepRefValue;
     }
 
     public get stepValue() {
-        return this._values.step;
+        return this._paramValues.step;
     }
 
     public set stepValue(v: number) {
-        this._values.step = v;
+        this._paramValues.step = v;
     }
 
     public get valueList() {
-        return this._values.valueList;
+        return this._paramValues.valueList;
     }
 
     public set valueList(l: number[]) {
-        this._values.valueList = l;
+        this._paramValues.valueList = l;
     }
 
     private get isListValid(): boolean {
-        if (this._values.valueList == undefined)
+        if (this._paramValues.valueList == undefined)
             return false;
 
-        for (let v of this._values.valueList)
+        for (let v of this._paramValues.valueList)
             try {
                 this.checkValue(v);
             }
@@ -297,15 +303,15 @@ export class NgParameter extends InputField {
     }
 
     private get isRangeValid(): boolean {
-        switch (this._values.valueMode) {
+        switch (this._paramValues.valueMode) {
             case ParamValueMode.LISTE:
                 return this.isListValid;
 
             case ParamValueMode.MINMAX:
-                return this.checkStep(this._values.step);
+                return this.checkStep(this._paramValues.step);
         }
 
-        throw new Error(`"NgParameter.isRangeValid() : valeur ${this._values.valueMode} de ParamValueMode non prise en compte`);
+        throw new Error(`"NgParameter.isRangeValid() : valeur ${ParamValueMode[this._paramValues.valueMode]} de ParamValueMode non prise en compte`);
     }
 
     private get isValueValid(): boolean {
@@ -381,7 +387,7 @@ export class NgParameter extends InputField {
     }
 
     public get valuesIterator(): ParamValueIterator {
-        return this._values.getValuesIterator();
+        return this._paramValues.getValuesIterator();
     }
 
     public updateLocalisation(loc: StringMap) {
@@ -401,7 +407,7 @@ export class NgParameter extends InputField {
         n.radioConfig = this.radioConfig;
         n.radioState = this.radioState;
         n.isDefault = this.isDefault;
-        this._values.copyMembers(n._values);
+        this._paramValues.copyMembers(n._paramValues);
     }
 
     /**
-- 
GitLab


From 6efa1b21c644e4ef90b91fdc8de5eca87048d7a1 Mon Sep 17 00:00:00 2001
From: "francois.grand" <francois.grand@irstea.fr>
Date: Mon, 26 Mar 2018 17:01:40 +0200
Subject: [PATCH 2/5] =?UTF-8?q?correction=20d'un=20bug=20d'ajout=20multipl?=
 =?UTF-8?q?e=20du=20m=C3=AAme=20observateur?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/app/services/observer.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/app/services/observer.ts b/src/app/services/observer.ts
index 6a1e85b46..b7ecdb17c 100644
--- a/src/app/services/observer.ts
+++ b/src/app/services/observer.ts
@@ -30,7 +30,7 @@ export class Observable implements IObservable {
      * ajoute un observateur à la liste
      */
     public addObserver(o: Observer) {
-        if (!this._observers.includes(o))
+        if (this._observers.indexOf(o) == -1)
             this._observers.push(o);
     }
 
-- 
GitLab


From 06bb0c84f93ce03d1fd7e4799dddbb281261e0e2 Mon Sep 17 00:00:00 2001
From: "francois.grand" <francois.grand@irstea.fr>
Date: Mon, 26 Mar 2018 17:33:08 +0200
Subject: [PATCH 3/5] =?UTF-8?q?FormulaireLechaptCalmon=20:=20m=C3=A9nage?=
 =?UTF-8?q?=20imports?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../formulaire/definition/concrete/form-lechapt-calmon.ts    | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/src/app/formulaire/definition/concrete/form-lechapt-calmon.ts b/src/app/formulaire/definition/concrete/form-lechapt-calmon.ts
index 8a7070d00..44f3de56e 100644
--- a/src/app/formulaire/definition/concrete/form-lechapt-calmon.ts
+++ b/src/app/formulaire/definition/concrete/form-lechapt-calmon.ts
@@ -1,13 +1,8 @@
 import { CalculatorType } from "jalhyd";
 
 import { FormResultFixedVar } from "../form-result-fixedvar";
-import { FormResultSection } from "../form-result-section";
-import { FormulaireElement } from "../../formulaire-element";
-import { NgParameter, ParamRadioConfig } from "../../ngparam";
-import { Field } from "../../field";
 import { ParamService } from "../../../services/param/param.service";
 import { ApplicationSetupService } from "../../../services/app-setup/app-setup.service";
-import { FormDefSection } from "../form-def-section";
 import { FormDefFixedVar } from "../form-def-fixedvar";
 import { FormComputeLechaptCalmon } from "../form-compute-lechapt-calmon";
 import { FormulaireDefinition } from "../form-definition";
-- 
GitLab


From 428c5d7e6e56cb4c6205c73983f9e0cce9a1fcae Mon Sep 17 00:00:00 2001
From: "francois.grand" <francois.grand@irstea.fr>
Date: Tue, 27 Mar 2018 17:06:43 +0200
Subject: [PATCH 4/5] =?UTF-8?q?=20#76=20gestion=20au=20niveau=20de=20Param?=
 =?UTF-8?q?FieldLineComponent=20du=20changement=20de=20mode=20de=20g=C3=A9?=
 =?UTF-8?q?n=C3=A9ration=20des=20valeurs=20d'un=20param=C3=A8tre?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../param-field-line.component.ts                 | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/src/app/components/param-field-line/param-field-line.component.ts b/src/app/components/param-field-line/param-field-line.component.ts
index 51df675e6..5ec1d3de0 100644
--- a/src/app/components/param-field-line/param-field-line.component.ts
+++ b/src/app/components/param-field-line/param-field-line.component.ts
@@ -4,6 +4,7 @@ import { InternationalisationService } from "../../services/internationalisation
 import { NgParameter, ParamRadioConfig } from "../../formulaire/ngparam";
 import { NgParamInputComponent } from "../ngparam-input/ngparam-input.component";
 import { FormulaireService } from "../../services/formulaire/formulaire.service";
+import { ParamValueMode } from "jalhyd";
 
 @Component({
     selector: "param-field-line",
@@ -166,6 +167,20 @@ export class ParamFieldLineComponent implements OnChanges {
     private onRadio = new EventEmitter<any>();
 
     private onRadioClick(option: string) {
+        switch (option) {
+            case "fix":
+                this._param.valueMode = ParamValueMode.SINGLE;
+                break;
+
+            case "var":
+                this._param.valueMode = ParamValueMode.MINMAX; // min/max par défaut
+                break;
+
+            case "cal":
+                this._param.valueMode = ParamValueMode.CALCUL;
+                break;
+        }
+
         this.onRadio.emit({
             "param": this._param,
             "option": option
-- 
GitLab


From a2d8bd239d2b17ebafbeb1efa2d4c8489dacf740 Mon Sep 17 00:00:00 2001
From: "francois.grand" <francois.grand@irstea.fr>
Date: Tue, 27 Mar 2018 17:09:23 +0200
Subject: [PATCH 5/5] =?UTF-8?q?=20#76=20utilisation=20par=20VarResultsComp?=
 =?UTF-8?q?onent,=20RemousResultsComponent,=20ResultsGraphComponent,=20Var?=
 =?UTF-8?q?Results=20de=20l'it=C3=A9rateur=20de=20valeurs=20pour=20un=20pa?=
 =?UTF-8?q?ram=C3=A8tre=20-=20utilisation=20par=20FormComputeFixedVar=20de?=
 =?UTF-8?q?=20Nub.CalcSerie()?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../fixedvar-results/var-results.component.ts |  6 +-
 .../remous-results.component.ts               | 24 +++++---
 .../results-graph/results-graph.component.ts  | 16 ++++--
 .../definition/form-compute-fixedvar.ts       | 55 +++++++------------
 src/app/formulaire/definition/form-compute.ts | 14 ++++-
 src/app/formulaire/ngparam.ts                 | 15 +++--
 src/app/results/var-results.ts                | 14 -----
 7 files changed, 70 insertions(+), 74 deletions(-)

diff --git a/src/app/components/fixedvar-results/var-results.component.ts b/src/app/components/fixedvar-results/var-results.component.ts
index 9848d1ec6..5ffd22794 100644
--- a/src/app/components/fixedvar-results/var-results.component.ts
+++ b/src/app/components/fixedvar-results/var-results.component.ts
@@ -39,9 +39,11 @@ export class VarResultsComponent {
 
         if (this._varResults) {
             const nDigits = this.appSetupService.displayDigits;
-            for (let i = 0; i < this._varResults.xValues.length; i++) {
-                const pval = this._varResults.xValues[i].toFixed(nDigits);
+            let i = 0;
+            for (const x of this._varResults.variatedParameter.valuesIterator) {
+                const pval = x.toFixed(nDigits);
                 this._results.push({ "param": pval, "result": this._varResults.resultElements[i] });
+                i++
             }
 
             this._headers.push(CalculatorResults.paramLabel(this._varResults.variatedParameter, false));
diff --git a/src/app/components/remous-results/remous-results.component.ts b/src/app/components/remous-results/remous-results.component.ts
index d22884898..c553ecc73 100644
--- a/src/app/components/remous-results/remous-results.component.ts
+++ b/src/app/components/remous-results/remous-results.component.ts
@@ -1,6 +1,6 @@
 import { Component, ViewChild } from "@angular/core";
 
-import { Result, ArrayReverseIterator, ResultElement, ParamValueIterator } from "jalhyd";
+import { Result, ArrayReverseIterator, ResultElement } from "jalhyd";
 
 import { InternationalisationService } from "../../services/internationalisation/internationalisation.service";
 import { LogComponent } from "../../components/log/log.component";
@@ -167,9 +167,11 @@ export class RemousResultsComponent {
             });
 
             let minXflu; // abscisse de début de la courbe fluviale
-            const itXFlu: ParamValueIterator = this._remousResults.xValues.getValuesIterator();
+            this._remousResults.xValues.initIterator();
             for (let re of this._remousResults.result.resultElements) {
-                const x = itXFlu.next;
+                if (!this._remousResults.xValues.hasNext)
+                    throw new Error("RemousResultsComponent.connectRessaut() : erreur interne (itérateur sur x)")
+                const x = this._remousResults.xValues.next;
                 if (re.getExtraResult("flu") != undefined) {
                     minXflu = x;
                     break;
@@ -187,9 +189,11 @@ export class RemousResultsComponent {
 
             let maxXtor; // abscisse de fin de la courbe torrentielle
             const itRE = new ArrayReverseIterator<ResultElement>(this._remousResults.result.resultElements);
-            const itXTor: ParamValueIterator = this._remousResults.xValues.getValuesIterator(true);
+            this._remousResults.xValues.initIterator();
             for (let r of itRE) {
-                const x = itXTor.next().value;
+                if (!this._remousResults.xValues.hasNext)
+                    throw new Error("RemousResultsComponent.connectRessaut() : erreur interne (itérateur sur x)")
+                const x = this._remousResults.xValues.next;
                 if (r.getExtraResult("tor") != undefined) {
                     maxXtor = x;
                     break;
@@ -218,7 +222,9 @@ export class RemousResultsComponent {
         let labs: number[] = [];
         if (this._remousResults.result.ok) {
             var xmax = -1e8;
-            for (let x of this._remousResults.xValues.getValuesIterator()) {
+            this._remousResults.xValues.initIterator();
+            while (this._remousResults.xValues.hasNext) {
+                const x = this._remousResults.xValues.next;
                 labs.push(x);
                 xmax = Math.max(x, xmax);
             }
@@ -262,10 +268,12 @@ export class RemousResultsComponent {
                 lineExtra = gr1.newLine(2);
         }
 
-        const itX = this._remousResults.xValues.getValuesIterator();
+        this._remousResults.xValues.initIterator();
         for (let re of this._remousResults.result.resultElements) {
-            const x = itX.next().value;
+            if (!this._remousResults.xValues.hasNext)
+                throw new Error("RemousResultsComponent.generateGraph() : erreur interne (itérateur sur x)")
 
+            const x = this._remousResults.xValues.next;
             const yExtra = re.getExtraResult("tRes");
             if (yExtra != undefined)
                 lineExtra.mapPoint(x, yExtra);
diff --git a/src/app/components/results-graph/results-graph.component.ts b/src/app/components/results-graph/results-graph.component.ts
index 7f8700b96..b24994a39 100644
--- a/src/app/components/results-graph/results-graph.component.ts
+++ b/src/app/components/results-graph/results-graph.component.ts
@@ -68,12 +68,13 @@ export class ResultsGraphComponent {
     private generateLineGraph() {
         let labs = [];
         let dat = [];
-        for (let i = 0; i < this._results.xValues.length; i++) {
-            const x = this._results.xValues[i];
+        let i = 0;
+        for (const x of this._results.variatedParameter.valuesIterator) {
             labs.push(String(x));
 
             const y = this._results.yValues[i];
             dat.push(y);
+            i++;
         }
 
         this.graph_options.title.text = this._results.graphTitle;
@@ -95,12 +96,14 @@ export class ResultsGraphComponent {
     private generateBarGraph() {
         let labs = [];
         let dat = [];
-        for (let i = 0; i < this._results.xValues.length; i++) {
-            const x = this._results.xValues[i];
+        let i = 0;
+        for (const x of this._results.variatedParameter.valuesIterator) {
             labs.push(x);
 
             const y = this._results.yValues[i];
             dat.push(y);
+
+            i++;
         }
 
         this.graph_options.title.text = this._results.graphTitle;
@@ -128,10 +131,11 @@ export class ResultsGraphComponent {
      */
     private generateScatterGraph() {
         let dat = [];
-        for (let i = 0; i < this._results.xValues.length; i++) {
-            const x = this._results.xValues[i];
+        let i = 0;
+        for (const x of this._results.variatedParameter.valuesIterator) {
             const y = this._results.yValues[i];
             dat.push({ x: x, y: y });
+            i++;
         }
 
         this.graph_options.title.text = this._results.graphTitle;
diff --git a/src/app/formulaire/definition/form-compute-fixedvar.ts b/src/app/formulaire/definition/form-compute-fixedvar.ts
index 65fffaca8..6b9dd4d48 100644
--- a/src/app/formulaire/definition/form-compute-fixedvar.ts
+++ b/src/app/formulaire/definition/form-compute-fixedvar.ts
@@ -52,10 +52,7 @@ export abstract class FormComputeFixedVar extends FormCompute {
                 break;
         }
 
-        if (prec == undefined)
-            return nub.Calc(this.getParameterRefid(p), init);
-
-        return nub.Calc(this.getParameterRefid(p), init, prec);
+        return nub.CalcSerie(prec, init);
     }
 
     /**
@@ -83,53 +80,41 @@ export abstract class FormComputeFixedVar extends FormCompute {
         this.formResult.addFixedParameters();
 
         let varParam: NgParameter = this.getVariatedParameter();
+        this.initParametersValueMode(nub, computedParam, varParam, varParam && varParam.valueMode);
+
+
         if (varParam == undefined) {
             // pas de paramètre à varier
 
-            let res: Result = this.runNubCalc(nub, computedParam, computePrec);
+            const res: Result = this.runNubCalc(nub, computedParam, computePrec);
             this.formResult.fixedResults.result = res;
             this.formResult.fixedResults.calculatedParameter = computedParam;
         }
         else {
             // il y a un paramètre à varier
 
-            this.formResult.varResults.variatedParameter = varParam;
-            this.formResult.varResults.calculatedParameter = computedParam;
-
-            const result = new Result();
-
+            const nubVarParam = nub.getParameter(varParam.symbol);
             switch (varParam.valueMode) {
-                case ParamValueMode.MINMAX:
-                    this.formResult.graphType = GraphType.Scatter;
-
-                    let min: number = +varParam.minValue;
-                    let max: number = +varParam.maxValue;
-                    let step: number = +varParam.stepValue;
-
-                    for (let val = min; val <= max; val += step) {
-                        this.setParameterValue(nub, varParam, val);
-
-                        let res: Result = this.runNubCalc(nub, computedParam, computePrec);
-                        result.resultElements.push(res.resultElement);
-                        result.addLog(res.log);
-                    }
+                case ParamValueMode.LISTE:
+                    nubVarParam.paramValues.setValues(varParam.paramDefinition.paramValues.valueList);
                     break;
 
-                case ParamValueMode.LISTE:
-                    this.formResult.graphType = GraphType.Histogram;
+                case ParamValueMode.MINMAX:
+                    const min = varParam.paramDefinition.paramValues.min;
+                    const max = varParam.paramDefinition.paramValues.max;
+                    const step = varParam.paramDefinition.paramValues.step;
+                    nubVarParam.paramValues.setValues(min, max, step);
+                    break;
+            }
 
-                    for (let val of varParam.valueList) {
-                        this.setParameterValue(nub, varParam, val);
+            const res: Result = this.runNubCalc(nub, computedParam, computePrec);
 
-                        let res: Result = this.runNubCalc(nub, computedParam, computePrec);
-                        result.resultElements.push(res.resultElement);
-                        result.addLog(res.log);
-                    }
 
-                    break;
-            }
+            this.formResult.varResults.variatedParameter = varParam;
+            this.formResult.varResults.calculatedParameter = computedParam;
 
-            this.formResult.varResults.result = result;
+      
+            this.formResult.varResults.result = res;
             this.formResult.graphTitle = computedParam.symbol + " = f( " + varParam.symbol + " )";
             this.formResult.varResults.update(false);
         }
diff --git a/src/app/formulaire/definition/form-compute.ts b/src/app/formulaire/definition/form-compute.ts
index ae5ca83e5..ea59f851b 100644
--- a/src/app/formulaire/definition/form-compute.ts
+++ b/src/app/formulaire/definition/form-compute.ts
@@ -1,6 +1,7 @@
 import { FormResult } from "./form-result";
-import { ParamsEquation, ComputeNode } from "jalhyd";
+import { ParamsEquation, ComputeNode, ParamValueMode, Nub } from "jalhyd";
 import { FormulaireDefinition } from "./form-definition";
+import { NgParameter } from "../ngparam";
 
 export abstract class FormCompute {
     constructor(protected _formBase: FormulaireDefinition, protected _formResult: FormResult) {
@@ -14,6 +15,17 @@ export abstract class FormCompute {
         return this._formResult;
     }
 
+    /**
+     * 
+     * @param nub initialise le mode de génération de valeurs des paramètres d'un Nub
+     * @param computedParam paramètre à calculer
+     * @param variatedParam paramètre à varier
+     * @param variatedMode mode de génération du paramètre à varier
+     */
+    protected initParametersValueMode(nub: Nub, computedParam: NgParameter, variatedParam?: NgParameter, variatedMode?: ParamValueMode) {
+        nub.initParametersValueMode(computedParam.paramDefinition, variatedParam && variatedParam.paramDefinition, variatedMode);
+    }
+
     public doCompute() {
         this._formResult.resetResults();
 
diff --git a/src/app/formulaire/ngparam.ts b/src/app/formulaire/ngparam.ts
index 887133a57..be2c74895 100644
--- a/src/app/formulaire/ngparam.ts
+++ b/src/app/formulaire/ngparam.ts
@@ -84,6 +84,10 @@ export class NgParameter extends InputField {
         return this._paramDef.paramValues;
     }
 
+    public get paramDefinition() {
+        return this._paramDef;
+    }
+
     /**
      * notification envoyée après la modification de la valeur du paramètre
      */
@@ -202,16 +206,11 @@ export class NgParameter extends InputField {
         return this._paramDef.valueMode;
     }
 
-    public setValueMode(m: ParamValueMode, sender?: any) {
+    public set valueMode(m: ParamValueMode) {
         // undefined si on clique en dehors du select après l'avoir ouvert (cad sans avoir fait de sélection)
         // et au même niveau, cad à côté du bouton et non à côté du menu déroulant
-        if (m != undefined) {
-            const changed: boolean = this._paramValues.valueMode !== m;
-            if (changed) {
-                this._paramValues.valueMode = m;
-                this.notifyObservers({ "valuemode": m }, sender = undefined ? this : sender);
-            }
-        }
+        if (m != undefined)
+            this._paramValues.valueMode = m;
     }
 
     /**
diff --git a/src/app/results/var-results.ts b/src/app/results/var-results.ts
index 3aba5fbf0..5f6484fb5 100644
--- a/src/app/results/var-results.ts
+++ b/src/app/results/var-results.ts
@@ -55,11 +55,6 @@ export class VarResults extends CalculatedParamResults {
      */
     public graphType: GraphType = GraphType.Scatter;
 
-    /**
-     * tableau des abscisses du graphe des résultats variés
-     */
-    private _xValues: number[] = [];
-
     /**
      * tableau des ordonnées du graphe des résultats variés
      */
@@ -75,7 +70,6 @@ export class VarResults extends CalculatedParamResults {
         this._variableParamHeader = undefined;
         this._variableResultHeader = undefined;
         this._extraResultHeaders = [];
-        this._xValues = [];
         this._yValues = [];
         this._graphTitle = undefined;
     }
@@ -96,10 +90,6 @@ export class VarResults extends CalculatedParamResults {
         return this._variableResultHeader;
     }
 
-    public get xValues() {
-        return this._xValues;
-    }
-
     public get yValues() {
         return this._yValues;
     }
@@ -127,10 +117,6 @@ export class VarResults extends CalculatedParamResults {
         if (this._calculatedParam)
             this._variableResultHeader = CalculatorResults.paramLabel(this._calculatedParam, true);
 
-        // valeurs du paramètre à varier
-        for (const x of this.variatedParameter.valuesIterator)
-            this._xValues.push(x);
-
         // valeurs du paramètre à calculer
         for (const r of this._result.resultElements)
             this._yValues.push(r.vCalc);
-- 
GitLab