diff --git a/src/nub_factory.ts b/src/nub_factory.ts index 56a6a1287fde232880e405d22be2e21d9bf32455..e41e50dfe529c598eb9dce61c4cdeca7c3d2cf3f 100644 --- a/src/nub_factory.ts +++ b/src/nub_factory.ts @@ -86,6 +86,24 @@ export class NubFactory { } } + private deleteStructureNub(n: Nub) { + if (n instanceof Structure) { + for (const sn of this._session) + if (sn.nub instanceof ParallelStructure) { + const psn = sn.nub as ParallelStructure; + let i = 0; + for (const st of psn.structures) { + if (st.uid == n.uid) { + psn.deleteStructure(i); + return; + } + i++; + } + } + throw new Error(`NubFactory.deleteStructureNub() : la structure (uid ${n.uid}) à supprimer n'a pas été trouvée`); + } + } + /** * remplace un SessionNub par un nouveau * @param sn SessionNub à remplacer @@ -107,6 +125,72 @@ export class NubFactory { return undefined; } + /** + * recherche du nub ouvrages parallèles possédant l'ouvrage donné + */ + private findParallelStructureWithNub(n: Nub) { + for (const s of this._session) + if (s.nub instanceof ParallelStructure) { + const res = s.nub as ParallelStructure; + if (res.hasStructure(n)) + return res; + } + + return undefined; + } + + /** + * déplace un SessionNub associé à un nub Structure d'une position vers le début de la liste de structures + * @param sn SessionNub à remplacer + * @param params propriété du nouveau SessionNub + */ + public moveStructureNubUp(sn: SessionNub) { + const psn = this.findParallelStructureWithNub(sn.nub); + + // déplacement + if (psn) { + let i = 0; + for (const n of this._session) { + if (n.uid == sn.uid && i > 0) { + const n = this._session[i - 1]; + this._session[i - 1] = this._session[i]; + this._session[i] = n; + psn.moveStructureUp(sn.nub as Structure); + return; + } + i++; + } + } + + throw new Error(`NubFactory.moveStructureNubUp() : la structure (uid ${sn.uid}) à déplacer n'a pas été trouvée`); + } + + /** + * déplace un SessionNub associé à un nub Structure d'une position vers la fin de la liste de structures + * @param sn SessionNub à remplacer + * @param params propriété du nouveau SessionNub + */ + public moveStructureNubDown(sn: SessionNub) { + const psn = this.findParallelStructureWithNub(sn.nub); + + // déplacement + if (psn) { + let i = 0; + for (const n of this._session) { + if (n.uid == sn.uid && i < this._session.length - 1) { + const n = this._session[i]; + this._session[i] = this._session[i + 1]; + this._session[i + 1] = n; + psn.moveStructureDown(sn.nub as Structure); + return; + } + i++; + } + } + + throw new Error(`NubFactory.moveStructureNubDown() : la structure (uid ${sn.uid}) à déplacer n'a pas été trouvée`); + } + /** * créé un Nub * @param calcType type de Nub @@ -205,6 +289,19 @@ export class NubFactory { } } + public deleteSessionNub(sn: SessionNub) { + let i = 0; + for (const n of this._session) { + if (n.uid == sn.uid) { + this._session.splice(i, 1); + this.deleteStructureNub(sn.nub); + return; + } + i++; + } + throw new Error(`NubFactory.deleteSessionNub() : le SessionNub (uid ${sn.uid}) à supprimer n'a pas été trouvé`); + } + private createSection(nt: ComputeNodeType): acSection { switch (nt) { case ComputeNodeType.None: // pour les paramètres communs, n'importe quelle section convient diff --git a/src/structure/parallel_structure.ts b/src/structure/parallel_structure.ts index d4dc9749f93e70512ae7b5b4500f012226feaa5b..42327a247dd37de76297e7d543afa1a41121256d 100644 --- a/src/structure/parallel_structure.ts +++ b/src/structure/parallel_structure.ts @@ -58,9 +58,13 @@ export class ParallelStructure extends Nub { /** * Ajout d'une structure en parallèle * @param structure La structure à rajouter + * @param after position après laquelle insérer la structure, à la fin sinon */ - public addStructure(structure: Structure) { - this.structures.push(structure); + public addStructure(structure: Structure, after?: number) { + if (after !== undefined) + this.structures.splice(after + 1, 0, structure); + else + this.structures.push(structure); } /** @@ -76,6 +80,48 @@ export class ParallelStructure extends Nub { } } + /** + * @return true si la structure donnée est dans la liste + */ + public hasStructure(structure: Nub): boolean { + for (const s of this.structures) + if (s.uid == structure.uid) + return true; + return false; + } + + /** + * déplace une structure d'une position vers le début de la liste + */ + public moveStructureUp(structure: Structure) { + let i = 0; + for (const s of this.structures) { + if (s.uid == structure.uid && i > 0) { + const t = this.structures[i - 1]; + this.structures[i - 1] = this.structures[i]; + this.structures[i] = t; + return; + } + i++; + } + } + + /** + * déplace une structure d'une position vers la fin de la liste + */ + public moveStructureDown(structure: Structure) { + let i = 0; + for (const s of this.structures) { + if (s.uid == structure.uid && i < this.structures.length - 1) { + const t = this.structures[i]; + this.structures[i] = this.structures[i + 1]; + this.structures[i + 1] = t; + return; + } + i++; + } + } + /** * Supprime une structure hydraulique * @param index numéro de la structure dans le tableau