diff --git a/src/app/components/pb-schema/pb-schema.component.ts b/src/app/components/pb-schema/pb-schema.component.ts index 695243eab4044d186936191efb631198885b7a4f..25cee4728088ac53d3809ab908b8387082d06be8 100644 --- a/src/app/components/pb-schema/pb-schema.component.ts +++ b/src/app/components/pb-schema/pb-schema.component.ts @@ -391,6 +391,17 @@ export class PbSchemaComponent implements AfterViewInit, AfterContentInit, OnIni return desc; } + /** + * Selects and highlights on the schema the given wall or basin + */ + private selectNodeOnSchema(element: PbBassin | PbCloison) { + this.nativeElement.querySelectorAll("g.node").forEach(item => { + if (item.id === element.uid) { + this.selectNode(item); + } + }); + } + private findBasinPosition(basin: PbBassin): number { let i = 0; for (const b of this.model.bassins) { @@ -431,8 +442,9 @@ export class PbSchemaComponent implements AfterViewInit, AfterContentInit, OnIni const wall = this._selectedItem as PbCloison; const wallCopy = new PbCloison(wall.bassinAmont, wall.bassinAval); this.model.addChild(wallCopy); - this.unselect(); // @TODO select new wall ? + this.unselect(); this.refresh(); + this.selectNodeOnSchema(wallCopy); } public get uitextCopy() { @@ -441,9 +453,11 @@ export class PbSchemaComponent implements AfterViewInit, AfterContentInit, OnIni /** Adds a new lone basin */ public onAddBasinClick() { - this.model.addChild(new PbBassin(new PbBassinParams(20, 99))); - this.unselect(); // @TODO select new basin ? + const newBasin = new PbBassin(new PbBassinParams(20, 99)); + this.model.addChild(newBasin); + this.unselect(); this.refresh(); + this.selectNodeOnSchema(newBasin); } public get uitextAddBasin() { @@ -476,6 +490,7 @@ export class PbSchemaComponent implements AfterViewInit, AfterContentInit, OnIni this.model.addChild(wall); this.unselect(); this.refresh(); + this.selectNodeOnSchema(wall); } }); } @@ -496,7 +511,10 @@ export class PbSchemaComponent implements AfterViewInit, AfterContentInit, OnIni if (this._selectedItem instanceof PbBassin) { this.model.moveBasin(this._selectedItem.uid, this.findBasinPosition(this._selectedItem) - 1); } + const basin = this._selectedItem; + this.unselect(); this.refresh(); + this.selectNodeOnSchema(basin); } public get uitextMoveBasinUp() { @@ -515,7 +533,10 @@ export class PbSchemaComponent implements AfterViewInit, AfterContentInit, OnIni if (this._selectedItem instanceof PbBassin) { this.model.moveBasin(this._selectedItem.uid, this.findBasinPosition(this._selectedItem) + 1); } + const basin = this._selectedItem; + this.unselect(); this.refresh(); + this.selectNodeOnSchema(basin); } public get uitextMoveBasinDown() { @@ -568,6 +589,10 @@ export class PbSchemaComponent implements AfterViewInit, AfterContentInit, OnIni if (data.action === "refresh") { this.unselect(); this.refresh(); + // select a node on the schema ? + if (data.value !== undefined) { + this.selectNodeOnSchema(this.model.findChild(data.value)); + } } } } diff --git a/src/app/formulaire/definition/form-pb-cloison.ts b/src/app/formulaire/definition/form-pb-cloison.ts index 5ea0bc82333141c4221b4af2dafc54f1ca00bd80..d448f6a99c6935ef2011221aa607c5ecec0e04eb 100644 --- a/src/app/formulaire/definition/form-pb-cloison.ts +++ b/src/app/formulaire/definition/form-pb-cloison.ts @@ -68,7 +68,10 @@ export class FormulairePbCloison extends FormulaireParallelStructure { } else if (sender.id === this._downstreamBasinSelectId) { nub.bassinAval = newBasin; } - this.notifyObservers({ action: "updateBasin" }, this); + this.notifyObservers({ + action: "updateBasin", + value: nub.uid // node to select on the schema + }, this); } } } diff --git a/src/app/formulaire/definition/form-prebarrage.ts b/src/app/formulaire/definition/form-prebarrage.ts index 95d4ee7037df90713363c07900cce21ab7424f9b..dd175247abe747beb8ea8aa2f399376a6c02c8cc 100644 --- a/src/app/formulaire/definition/form-prebarrage.ts +++ b/src/app/formulaire/definition/form-prebarrage.ts @@ -124,9 +124,9 @@ export class FormulairePrebarrage extends FormulaireFixedVar { } } - private refreshSchema() { + private refreshSchema(nodeUidToSelect: string) { const pbs = this.kids[0] as PbSchema; - pbs.refresh(); + pbs.refresh(nodeUidToSelect); } // interface Observer @@ -136,7 +136,7 @@ export class FormulairePrebarrage extends FormulaireFixedVar { if (sender instanceof FormulairePbCloison) { // console.log("HOH PUTAIN CE BIG QUATTRO HOYOYOYOYOY", this.kids[0].constructor.name); if (data.action === "updateBasin") { - this.refreshSchema(); + this.refreshSchema(data.value); } } } diff --git a/src/app/formulaire/elements/pb-schema.ts b/src/app/formulaire/elements/pb-schema.ts index 94a7d452a4a156aa5a1f1538741637efd41acb49..07e10889018d02c9abf2cb94098b95b53181f469 100644 --- a/src/app/formulaire/elements/pb-schema.ts +++ b/src/app/formulaire/elements/pb-schema.ts @@ -24,7 +24,10 @@ export class PbSchema extends FormulaireElement { } /** Asks PbSchemaComponent to redraw the schema */ - public refresh() { - this.notifyObservers({ action: "refresh" }, this); + public refresh(nodeUidToSelect: string) { + this.notifyObservers({ + action: "refresh", + value: nodeUidToSelect + }, this); } }