From 07883379a9e86c14ac4d8acceebb0f9f5f44156c Mon Sep 17 00:00:00 2001 From: "francois.grand" <francois.grand@irstea.fr> Date: Thu, 21 Jun 2018 16:06:54 +0200 Subject: [PATCH] =?UTF-8?q?=20#45=20BaseParam=20impl=C3=A9mente=20IObserva?= =?UTF-8?q?ble=20et=20envoie=20une=20notification=20lors=20de=20changement?= =?UTF-8?q?s=20de=20valeur?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/param/param-base.ts | 47 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/src/param/param-base.ts b/src/param/param-base.ts index 7abc9172..3db95844 100644 --- a/src/param/param-base.ts +++ b/src/param/param-base.ts @@ -8,12 +8,13 @@ import { ParamValueMode } from "./param-value-mode"; import { IReferencedNub, INubReference } from "../value_ref/object_ref"; import { Result } from "../util/result"; import { NamedIterableValues } from "./param-value-iterator"; +import { IObservable, Observable, Observer } from "../util/observer"; /** * paramètre avec symbole et domaine de définition */ // tslint:disable-next-line:max-classes-per-file -export class BaseParam extends JalhydObject implements INubReference, NamedIterableValues { +export class BaseParam extends JalhydObject implements INubReference, NamedIterableValues, IObservable { /** * symbole */ @@ -29,10 +30,17 @@ export class BaseParam extends JalhydObject implements INubReference, NamedItera */ private _paramValues: ParamValues; + /** + * implémentation par délégation de IObservable + */ + private _observable: Observable; + constructor(symb: string, d: ParamDomain | ParamDomainValue, val?: number) { super(); this._symbol = symb; + this._observable = new Observable() + this._paramValues = new ParamValues(); this._paramValues.setSingleValue(val); @@ -81,9 +89,21 @@ export class BaseParam extends JalhydObject implements INubReference, NamedItera return this._paramValues.currentValue; } - public setValue(val: number) { + /** + * notification envoyée après la modification de la valeur du paramètre + */ + private notifyValueModified(sender: any) { + this.notifyObservers( + { + "action": "baseparamAfterValue", + }, sender + ); + } + + public setValue(val: number, sender?: any) { this.checkValue(val); this._paramValues.currentValue = val; + this.notifyValueModified(sender); } public get uncheckedValue(): number { @@ -333,4 +353,27 @@ export class BaseParam extends JalhydObject implements INubReference, NamedItera public get name(): string { return this._symbol; } + + // interface IObservable + + /** + * ajoute un observateur à la liste + */ + public addObserver(o: Observer) { + this._observable.addObserver(o); + } + + /** + * supprime un observateur de la liste + */ + public removeObserver(o: Observer) { + this._observable.removeObserver(o); + } + + /** + * notifie un événement aux observateurs + */ + notifyObservers(data: any, sender?: any) { + this._observable.notifyObservers(data, sender); + } } -- GitLab