From d5ada9e3afa114587f3242e4944093660feb2cdb Mon Sep 17 00:00:00 2001 From: "francois.grand" <francois.grand@irstea.fr> Date: Fri, 27 Apr 2018 10:50:05 +0200 Subject: [PATCH] =?UTF-8?q?=20#47=20ouvrages=20parall=C3=A8les=20:=20d?= =?UTF-8?q?=C3=A9placement=20d'un=20ouvrage=20d'un=20cran=20vers=20la=20fi?= =?UTF-8?q?n=20de=20la=20liste?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/nub_factory.ts | 53 +++++++++++++++++++++++------ src/structure/parallel_structure.ts | 16 +++++++++ 2 files changed, 58 insertions(+), 11 deletions(-) diff --git a/src/nub_factory.ts b/src/nub_factory.ts index 4905003c..e41e50df 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 aecfda53..42327a24 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 -- GitLab