Commit 5a02a9bc authored by Grand Francois's avatar Grand Francois
Browse files

Merge branch '47-ajouter-la-suppression-d-un-ouvrage-dans-les-ouvrages-paralleles' into 'master'

Resolve "ajouter la suppression d'un ouvrage dans les ouvrages parallèles"

Closes #47

See merge request cassiopee/jalhyd!12
Showing with 145 additions and 2 deletions
+145 -2
...@@ -86,6 +86,24 @@ export class NubFactory { ...@@ -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 * remplace un SessionNub par un nouveau
* @param sn SessionNub à remplacer * @param sn SessionNub à remplacer
...@@ -107,6 +125,72 @@ export class NubFactory { ...@@ -107,6 +125,72 @@ export class NubFactory {
return undefined; 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 * créé un Nub
* @param calcType type de Nub * @param calcType type de Nub
...@@ -205,6 +289,19 @@ export class NubFactory { ...@@ -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 { private createSection(nt: ComputeNodeType): acSection {
switch (nt) { switch (nt) {
case ComputeNodeType.None: // pour les paramètres communs, n'importe quelle section convient case ComputeNodeType.None: // pour les paramètres communs, n'importe quelle section convient
......
...@@ -58,9 +58,13 @@ export class ParallelStructure extends Nub { ...@@ -58,9 +58,13 @@ export class ParallelStructure extends Nub {
/** /**
* Ajout d'une structure en parallèle * Ajout d'une structure en parallèle
* @param structure La structure à rajouter * @param structure La structure à rajouter
* @param after position après laquelle insérer la structure, à la fin sinon
*/ */
public addStructure(structure: Structure) { public addStructure(structure: Structure, after?: number) {
this.structures.push(structure); if (after !== undefined)
this.structures.splice(after + 1, 0, structure);
else
this.structures.push(structure);
} }
/** /**
...@@ -76,6 +80,48 @@ export class ParallelStructure extends Nub { ...@@ -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 * Supprime une structure hydraulique
* @param index numéro de la structure dans le tableau * @param index numéro de la structure dans le tableau
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment