diff --git a/src/nub_factory.ts b/src/nub_factory.ts index 4905003c78009f4fbb695be557ac88b2d8902827..e41e50dfe529c598eb9dce61c4cdeca7c3d2cf3f 100644 --- a/src/nub_factory.ts +++ b/src/nub_factory.ts @@ -126,22 +126,27 @@ export class NubFactory { } /** - * déplace un SessionNub associé à un nub Structure vers le début de la liste de structures - * @param sn SessionNub à remplacer - * @param params propriété du nouveau SessionNub + * recherche du nub ouvrages parallèles possédant l'ouvrage donné */ - public moveStructureNubUp(sn: SessionNub) { - // recherche du nub ouvrages parallèles possédant l'ouvrage - let psn; + private findParallelStructureWithNub(n: Nub) { for (const s of this._session) if (s.nub instanceof ParallelStructure) { - psn = s.nub as ParallelStructure; - if (psn.hasStructure(sn.nub)) - break; - else - psn = undefined; + 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; @@ -160,6 +165,32 @@ export class NubFactory { 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 diff --git a/src/structure/parallel_structure.ts b/src/structure/parallel_structure.ts index aecfda53ce272e328ccf14dd9b5639906c0961d0..42327a247dd37de76297e7d543afa1a41121256d 100644 --- a/src/structure/parallel_structure.ts +++ b/src/structure/parallel_structure.ts @@ -106,6 +106,22 @@ export class ParallelStructure extends Nub { } } + /** + * 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