diff --git a/src/param/param-base.ts b/src/param/param-base.ts index 7abc917265dbae610368220155db952acdeffe1b..3db958449545d2bad7d2be72fbdd4713948c60b5 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); + } }