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