Skip to content
Snippets Groups Projects
Commit 70e78605 authored by francois.grand's avatar francois.grand
Browse files

#48 NgParameter : modifs pour que les changements de valeur saisis par...

 #48 NgParameter : modifs pour que les changements de valeur saisis par l'utilisateur sur un paramètre lié soient affichés dans le paramètre liant
parent 006c6123
No related branches found
No related tags found
1 merge request!22Resolve "Lier des paramètres ou des résultats entre les calculettes"
import { ParamDefinition, Pair, ParamDomain, ParamValues, ParamValueMode, ParamValueIterator, Nub } from "jalhyd";
import { ParamDefinition, Pair, ParamDomain, ParamValueMode, ParamValueIterator, Nub, Observer, asObservable } from "jalhyd";
import { InputField } from "./input-field";
import { Dependency } from "./dependency/dependency";
import { DependencyConditionType } from "./dependency/dependency-condition";
import { ValueDependencyCondition } from "./dependency/value-dependency-condition";
import { FormulaireDefinition } from "./definition/form-definition";
import { ServiceFactory } from "../services/service-factory";
import { ApplicationSetupService } from "../services/app-setup/app-setup.service";
import { StringMap } from "../stringmap";
......@@ -35,7 +34,7 @@ export enum ParamRadioConfig {
/**
* classe englobante de ParamDefinition (champs supplémentaires pour l'affichage, radio boutons, ...)
*/
export class NgParameter extends InputField {
export class NgParameter extends InputField implements Observer {
public unit: string;
public radioConfig: ParamRadioConfig;
......@@ -112,18 +111,39 @@ export class NgParameter extends InputField {
* @param val
*/
public setValue(sender: any, val: number) {
this._paramDef.v = val;
this._paramDef.setValue(val, sender);
this.notifyValueModified(sender);
}
/**
* supprime un lien avec un paramètre
*/
private unlinkParameter() {
let o = asObservable(this._paramDef.referencedObject);
if (this.valueMode === ParamValueMode.LINK) {
this._paramDef.undefineReference();
if (o !== undefined)
o.removeObserver(this);
}
}
/**
* crée le lien avec un paramètre
*/
public linkToParameter(n: Nub, p: ParamDefinition) {
const changed: boolean = this.paramDefinition.referencedNub !== n || this.paramDefinition.referenceDefinition !== p.symbol;
const changed: boolean = this._paramDef.valueMode !== ParamValueMode.LINK || this._paramDef.referencedNub !== n || this._paramDef.referenceDefinition !== p.symbol;
if (changed) {
let o = asObservable(this._paramDef.referencedObject);
if (o !== undefined)
o.removeObserver(this);
this.valueMode = ParamValueMode.LINK;
this._paramDef.defineReference(n, p.symbol);
o = asObservable(this._paramDef.referencedObject);
if (o !== undefined)
o.addObserver(this); // pour être prévenu des changements de valeur de l'object référencé
this.notifyObservers({
"action": "valueLinkChange",
"value": this._paramDef.getValue()
......@@ -152,6 +172,7 @@ export class NgParameter extends InputField {
// 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._paramDef.valueMode !== m) {
this.unlinkParameter();
this._paramDef.valueMode = m;
this.notifyObservers({
"action": "valueModeChange",
......@@ -352,4 +373,14 @@ export class NgParameter extends InputField {
}
}
}
// interface Observer
public update(sender: any, data: any) {
switch (data["action"]) {
case "baseparamAfterValue": // changement de valeur envoyé par l'objet référencé
this.notifyValueModified(sender);
break;
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment