From 36dc7f5de6edf1696a8d4f339ebbf92511a2b6b7 Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Fri, 12 Apr 2019 17:52:08 +0200 Subject: [PATCH 1/6] =?UTF-8?q?Fix=20#187=20:=20Section=20param=C3=A9tr?= =?UTF-8?q?=C3=A9e:=20varier=20un=20param=C3=A8tre=20fait=20=C3=A9chouer?= =?UTF-8?q?=20le=20calcul?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../section-param/section-param.config.json | 122 ----------------- .../fixedvar-results/var-results.component.ts | 9 +- .../results-graph/results-graph.component.ts | 2 +- .../definition/concrete/form-courbe-remous.ts | 3 + .../concrete/form-lechapt-calmon.ts | 10 +- .../concrete/form-parallel-structures.ts | 3 + .../concrete/form-regime-uniforme.ts | 4 - .../concrete/form-section-parametree.ts | 18 ++- .../definition/form-compute-fixedvar.ts | 6 +- .../form-compute-section-parametree.ts | 129 +++--------------- src/app/formulaire/definition/form-compute.ts | 1 - .../definition/form-result-section.ts | 9 +- src/app/results/var-results.ts | 47 ++++--- 13 files changed, 75 insertions(+), 288 deletions(-) diff --git a/src/app/calculators/section-param/section-param.config.json b/src/app/calculators/section-param/section-param.config.json index 9268cc7e3..23d9f8f39 100644 --- a/src/app/calculators/section-param/section-param.config.json +++ b/src/app/calculators/section-param/section-param.config.json @@ -150,128 +150,6 @@ } ] }, - { - "id": "fs_computed_var", - "type": "fieldset", - "dep_exist": [ - { - "refid": "LargeurFond", - "cond": "isvar" - }, - { - "refid": "Fruit", - "cond": "isvar" - }, - { - "refid": "D", - "cond": "isvar" - }, - { - "refid": "k", - "cond": "isvar" - }, - { - "refid": "LargeurBerge", - "cond": "isvar" - }, - { - "refid": "Ks", - "cond": "isvar" - }, - { - "refid": "If", - "cond": "isvar" - }, - { - "refid": "YB", - "cond": "isvar" - }, - { - "refid": "Q", - "cond": "isvar" - }, - { - "refid": "Y", - "cond": "isvar" - } - ], - "fields": [ - { - "id": "select_target", - "type": "select", - "select": [ - { - "id": "select_target_Hs", - "value": "Hs" - }, - { - "id": "select_target_Hsc", - "value": "Hsc" - }, - { - "id": "select_target_B", - "value": "B" - }, - { - "id": "select_target_P", - "value": "P" - }, - { - "id": "select_target_S", - "value": "S" - }, - { - "id": "select_target_R", - "value": "R" - }, - { - "id": "select_target_V", - "value": "V" - }, - { - "id": "select_target_Fr", - "value": "Fr" - }, - { - "id": "select_target_Yc", - "value": "Yc" - }, - { - "id": "select_target_Yn", - "value": "Yn" - }, - { - "id": "select_target_Yf", - "value": "Yf" - }, - { - "id": "select_target_Yt", - "value": "Yt" - }, - { - "id": "select_target_Yco", - "value": "Yco" - }, - { - "id": "select_target_J", - "value": "J" - }, - { - "id": "select_target_I-J", - "value": "I-J" - }, - { - "id": "select_target_Imp", - "value": "Imp" - }, - { - "id": "select_target_Tau0", - "value": "Tau0" - } - ] - } - ] - }, { "type": "options", "defaultNodeType": "SectionRectangle", diff --git a/src/app/components/fixedvar-results/var-results.component.ts b/src/app/components/fixedvar-results/var-results.component.ts index 824c6a76c..926e5b2a7 100644 --- a/src/app/components/fixedvar-results/var-results.component.ts +++ b/src/app/components/fixedvar-results/var-results.component.ts @@ -51,7 +51,10 @@ export class VarResultsComponent { } this._headers.push(this._varResults.variableParamHeader); - this._headers.push(this._varResults.calculatedParameterHeader); + if (this._varResults.calculatedParameterHeader) { + this._headers.push(this._varResults.calculatedParameterHeader); + } + this._headers = this._headers.concat(this._varResults.extraResultHeaders); } } @@ -82,7 +85,9 @@ export class VarResultsComponent { const list = [ r.param ]; // 2. result - list.push(re.vCalc.toFixed(nDigits)); + if (re.vCalc) { // sometimes does no exist (ex: Section Parametree) + list.push(re.vCalc.toFixed(nDigits)); + } // 3. extra results for (const erk of this._varResults.extraResultKeys) { diff --git a/src/app/components/results-graph/results-graph.component.ts b/src/app/components/results-graph/results-graph.component.ts index ec43b3499..13757e3bd 100644 --- a/src/app/components/results-graph/results-graph.component.ts +++ b/src/app/components/results-graph/results-graph.component.ts @@ -99,7 +99,7 @@ export class ResultsGraphComponent implements AfterContentInit, Observer { */ public getChartAxisLabel(symbol: string) { // 1. calculated param ? - if (this._results.calculatedParameter.symbol === symbol) { + if (this._results.calculatedParameter && this._results.calculatedParameter.symbol === symbol) { return this._results.calculatedParameterHeader; } else // 2. variated param ? diff --git a/src/app/formulaire/definition/concrete/form-courbe-remous.ts b/src/app/formulaire/definition/concrete/form-courbe-remous.ts index 99be68efb..6306ccb1e 100644 --- a/src/app/formulaire/definition/concrete/form-courbe-remous.ts +++ b/src/app/formulaire/definition/concrete/form-courbe-remous.ts @@ -19,6 +19,9 @@ export class FormulaireCourbeRemous extends FormulaireBase { super(); this._formSection = new FormDefSection(this); this._formResult = new FormResultRemous(this); + + // remove obsolete observer set by super() + this.removeObserver(this._formCompute); this._formCompute = new FormComputeCourbeRemous(this, this._formSection, (this._formResult as FormResultRemous)); // default properties this._props["methodeResolution"] = MethodeResolution.Trapezes; diff --git a/src/app/formulaire/definition/concrete/form-lechapt-calmon.ts b/src/app/formulaire/definition/concrete/form-lechapt-calmon.ts index db2991206..524994ec4 100644 --- a/src/app/formulaire/definition/concrete/form-lechapt-calmon.ts +++ b/src/app/formulaire/definition/concrete/form-lechapt-calmon.ts @@ -2,22 +2,14 @@ import { Observer } from "jalhyd"; import { SelectField } from "../../select-field"; import { FormulaireBase } from "./form-base"; import { NgParamInputComponent } from "../../../components/ngparam-input/ngparam-input.component"; -import { FormResultFixedVar } from "../form-result-fixedvar"; -import { FormComputeFixedVar } from "../form-compute-fixedvar"; export class FormulaireLechaptCalmon extends FormulaireBase implements Observer { - constructor() { - super(); - this._formResult = new FormResultFixedVar(this, false); - this._formCompute = new FormComputeFixedVar(this, (this._formResult as FormResultFixedVar)); - } - protected completeParse(json: {}) { super.completeParse(json); // abonnement au changement de valeur du select de matériau this.getFormulaireNodeById("select_material").addObserver(this); - // abonnement au changement de valeur de l'un dex trois champs affectés par le changement de matériau + // abonnement au changement de valeur de l'un des trois champs affectés par le changement de matériau this.getParamFromSymbol("L").addObserver(this); this.getParamFromSymbol("M").addObserver(this); this.getParamFromSymbol("N").addObserver(this); diff --git a/src/app/formulaire/definition/concrete/form-parallel-structures.ts b/src/app/formulaire/definition/concrete/form-parallel-structures.ts index ec840a970..09e007bb6 100644 --- a/src/app/formulaire/definition/concrete/form-parallel-structures.ts +++ b/src/app/formulaire/definition/concrete/form-parallel-structures.ts @@ -24,6 +24,9 @@ export class FormulaireParallelStructure extends FormulaireBase { super(); this._formResult = new FormResultFixedVar(this, false); this._formParallelStruct = new FormDefParallelStructures(); + + // remove obsolete observer set by super() + this.removeObserver(this._formCompute); this._formCompute = new FormComputeParallelStructures(this, this._formParallelStruct, (this._formResult as FormResultFixedVar)); } diff --git a/src/app/formulaire/definition/concrete/form-regime-uniforme.ts b/src/app/formulaire/definition/concrete/form-regime-uniforme.ts index 3d846e31d..68ca39d99 100644 --- a/src/app/formulaire/definition/concrete/form-regime-uniforme.ts +++ b/src/app/formulaire/definition/concrete/form-regime-uniforme.ts @@ -1,8 +1,6 @@ import { IObservable, Observer } from "jalhyd"; -import { FormResultFixedVar } from "../form-result-fixedvar"; import { FormDefSection } from "../form-def-section"; import { FieldSet } from "../../fieldset"; -import { FormComputeFixedVar } from "../form-compute-fixedvar"; import { FormulaireBase } from "./form-base"; export class FormulaireRegimeUniforme extends FormulaireBase implements Observer { @@ -12,8 +10,6 @@ export class FormulaireRegimeUniforme extends FormulaireBase implements Observer constructor() { super(); this._formSection = new FormDefSection(this); - this._formResult = new FormResultFixedVar(this, true); - this._formCompute = new FormComputeFixedVar(this, (this._formResult as FormResultFixedVar)); } protected parseOptions(json: {}) { diff --git a/src/app/formulaire/definition/concrete/form-section-parametree.ts b/src/app/formulaire/definition/concrete/form-section-parametree.ts index 1a3ef62b1..48300e727 100644 --- a/src/app/formulaire/definition/concrete/form-section-parametree.ts +++ b/src/app/formulaire/definition/concrete/form-section-parametree.ts @@ -1,4 +1,4 @@ -import { IObservable } from "jalhyd"; +import { IObservable, Nub } from "jalhyd"; import { FormResultSection } from "../form-result-section"; import { FormDefSection } from "../form-def-section"; @@ -13,8 +13,12 @@ export class FormulaireSectionParametree extends FormulaireBase { constructor() { super(); this._formSection = new FormDefSection(this); - this._formResult = new FormResultSection(this, this._formSection); + this._formResult = new FormResultSection(this); + + // remove obsolete observer set by super() + this.removeObserver(this._formCompute); this._formCompute = new FormComputeSectionParametree(this, this._formSection, (this._formResult as FormResultSection)); + // default properties this._props["varCalc"] = "Hs"; } @@ -32,7 +36,15 @@ export class FormulaireSectionParametree extends FormulaireBase { update(sender: IObservable, data: any) { - super.update(sender, data); + // super.update(sender, data); + if (sender instanceof Nub) { + switch (data.action) { + case "resultUpdated": + // forward Nub results update notification to FormCompute objects + this.notifyNubResultUpdated(sender); + break; + } + } // changement de propriété du FieldSet contenant le select de choix du type de section if (sender instanceof FieldSet && data.action === "propertyChange") { diff --git a/src/app/formulaire/definition/form-compute-fixedvar.ts b/src/app/formulaire/definition/form-compute-fixedvar.ts index 205e9e9dc..69995f72b 100644 --- a/src/app/formulaire/definition/form-compute-fixedvar.ts +++ b/src/app/formulaire/definition/form-compute-fixedvar.ts @@ -43,11 +43,7 @@ export class FormComputeFixedVar extends FormCompute { } protected compute() { - const nub: Nub = this._formBase.currentNub; - const computedParam: NgParameter = this.getComputedParameter(); - - const res: Result = this.runNubCalc(nub); - + this.runNubCalc(this._formBase.currentNub); this.reaffectResultComponents(); } diff --git a/src/app/formulaire/definition/form-compute-section-parametree.ts b/src/app/formulaire/definition/form-compute-section-parametree.ts index 4c78233a0..d30352a57 100644 --- a/src/app/formulaire/definition/form-compute-section-parametree.ts +++ b/src/app/formulaire/definition/form-compute-section-parametree.ts @@ -1,20 +1,15 @@ -import { SectionParametree, acSection, Result, ParamDomain, ParamDefinition, ParamDomainValue } from "jalhyd"; +import { SectionParametree, acSection, Result, ParamDefinition, Nub } from "jalhyd"; import { FormCompute } from "./form-compute"; -import { NgParameter } from "../ngparam"; -import { FormResult } from "./form-result"; import { FormDefSection } from "./form-def-section"; import { FormResultSection } from "./form-result-section"; import { VarResults } from "../../results/var-results"; import { SectionResults } from "../../results/section-results"; import { FormulaireDefinition } from "./form-definition"; -import { FormulaireNode } from "../formulaire-node"; export class FormComputeSectionParametree extends FormCompute { - private tmpResult: Result; - - constructor(formBase: FormulaireDefinition, private _formSection: FormDefSection, formResult: FormResult) { + constructor(formBase: FormulaireDefinition, private _formSection: FormDefSection, formResult: FormResultSection) { super(formBase, formResult); } @@ -30,119 +25,33 @@ export class FormComputeSectionParametree extends FormCompute { return this._formSectionResult.sectionResults; } - /** - * calcul de la section paramétrée dans le cas d'un paramètre à varier - * @param varParam paramètre à varier - */ - private doComputeSectionVar(varParam: NgParameter) { - - this._formSectionResult.addSectionFixedParameters(false); - - // paramètre à calculer en fonction du paramètre à varier - const computedParamInfo = this._formSection.getSectionComputedParam(); - - const sectNub: SectionParametree = this._formBase.currentNub as SectionParametree; - const sect: acSection = sectNub.section; - - this._sectionResults.section = sect; - - this._varResults.variatedParameter = varParam; - - const computedParam: NgParameter = this.createParameter(computedParamInfo.symbol, this._formBase); - this._varResults.calculatedParameter = computedParam; - - this._varResults.result = this.runNubCalc(sectNub); - this._varResults.update(false); - } - protected compute() { - const varParam = this._formSection.getSectionVariatedParameter(); - if (varParam !== undefined) { - this.doComputeSectionVar(varParam); - return; - } - - const sectNub: SectionParametree = this._formBase.currentNub as SectionParametree; - - this.tmpResult = sectNub.CalcSerie( - undefined, // valeur initiale, non utilisée dans ce cas - undefined // variable à calculer, non utilisée - ); - + this.runNubCalc(this._formBase.currentNub); this.reaffectResultComponents(); } + protected runNubCalc(nub: Nub, computedParam?: ParamDefinition): Result { + return nub.CalcSerie(); + } + protected reaffectResultComponents() { const sectNub: SectionParametree = this._formBase.currentNub as SectionParametree; const sect: acSection = sectNub.section; this._sectionResults.section = sect; - // résultats de section (avec le graphique de section) - this._sectionResults.result = this.tmpResult; - - // résultats complémentaires des paramètres fixés - this._formSectionResult.addSectionFixedParameters(false); - this._formSectionResult.fixedResults.result = this.tmpResult; - } - - /** - * - * @param calcType crée un NgParameter n'appartenant pas à un ComputeNode - * @param symbol symbole du paramètre à créer - */ - private createParameter(symbol: string, parent: FormulaireNode): NgParameter { - let p: NgParameter; - const dom = new ParamDomain(ParamDomainValue.POS_NULL); - p = new NgParameter(new ParamDefinition(null, symbol, dom), parent); - p.confId = symbol; - - switch (symbol) { - case "Hs": - case "Hsc": - case "B": - case "P": - case "R": - case "Yc": - case "Yn": - case "Yf": - case "Yt": - case "Yco": - case "J": - p.unit = "m"; - break; - - case "S": - p.unit = "m2"; - break; - - case "V": - p.unit = "m/s"; - break; - - case "I-J": - p.unit = "m/m"; - break; - - case "Fr": - p.unit = ""; - break; - - case "Imp": - p.unit = "N"; - break; - - case "Tau0": - p.unit = "Pa"; - break; - - case "Pr": - break; - - default: - throw new Error(`ParamService.createParameter() : symbole ${symbol} non pris en charge`); + const varParam = this._formSection.getSectionVariatedParameter(); + if (varParam) { + // résultats variés avec tous les résultats complémentaires + this._varResults.variatedParameter = varParam; + this._varResults.result = sectNub.result; + this._varResults.update(false); + } else { + // résultats de section (avec le graphique de section) + this._sectionResults.result = sectNub.result; + // résultats complémentaires des paramètres fixés + this._formSectionResult.addSectionFixedParameters(false); + this._formSectionResult.fixedResults.result = sectNub.result; } - p.updateLocalisation(this._formBase.specificLocalisation); - return p; } } diff --git a/src/app/formulaire/definition/form-compute.ts b/src/app/formulaire/definition/form-compute.ts index 5f077f0c2..64dd70555 100644 --- a/src/app/formulaire/definition/form-compute.ts +++ b/src/app/formulaire/definition/form-compute.ts @@ -2,7 +2,6 @@ import { Nub, Result, ParamDomainValue, Observer, ParamDefinition } from "jalhyd import { FormResult } from "./form-result"; import { FormulaireDefinition } from "./form-definition"; -import { NgParameter } from "../ngparam"; export abstract class FormCompute implements Observer { diff --git a/src/app/formulaire/definition/form-result-section.ts b/src/app/formulaire/definition/form-result-section.ts index 868b1de8e..836a95edf 100644 --- a/src/app/formulaire/definition/form-result-section.ts +++ b/src/app/formulaire/definition/form-result-section.ts @@ -1,7 +1,5 @@ import { SectionResults } from "../../results/section-results"; -import { ResultElement } from "jalhyd"; -import { ParamRadioConfig, NgParameter } from "../ngparam"; -import { FormDefSection } from "./form-def-section"; +import { ParamRadioConfig } from "../ngparam"; import { FixedResults } from "../../results/fixed-results"; import { VarResults } from "../../results/var-results"; import { FormResult } from "./form-result"; @@ -11,8 +9,6 @@ import { CalculatorResults } from "../../results/calculator-results"; export class FormResultSection extends FormResult { private _formBase: FormulaireDefinition; - private _formSection: FormDefSection; - /** * résultats fixes/variables */ @@ -24,13 +20,12 @@ export class FormResultSection extends FormResult { */ private _sectionResults: SectionResults; - constructor(base: FormulaireDefinition, formSection: FormDefSection) { + constructor(base: FormulaireDefinition) { super(); this._formBase = base; this._fixedResults = new FixedResults(); this._varResults = new VarResults(); this._sectionResults = new SectionResults(); - this._formSection = formSection; } public get fixedResults() { diff --git a/src/app/results/var-results.ts b/src/app/results/var-results.ts index 51208365d..da0be9d5f 100644 --- a/src/app/results/var-results.ts +++ b/src/app/results/var-results.ts @@ -39,7 +39,7 @@ export class VarResults extends CalculatedParamResults { /** * clés des résultats complémentaires */ - private _extraResultKeys: string[]; + public extraResultKeys: string[]; /** * entête des colonnes des résultats supplémentaires @@ -74,7 +74,7 @@ export class VarResults extends CalculatedParamResults { super.reset(); this._variableParamHeader = undefined; this._extraResultHeaders = []; - this._extraResultKeys = []; + this.extraResultKeys = []; this._yValues = []; } @@ -103,14 +103,6 @@ export class VarResults extends CalculatedParamResults { return this._extraResultHeaders; } - public get extraResultKeys() { - return this._extraResultKeys; - } - - public set extraResultKeys(k: string[]) { - this._extraResultKeys = k; - } - /** * Returns the series of values for the required variated parameter / result element * @param symbol parameter / result symbol (ex: "Q") @@ -118,7 +110,7 @@ export class VarResults extends CalculatedParamResults { public getValuesSeries(symbol: string) { const series = []; // 1. calculated param ? - if (this._calculatedParam.symbol === symbol) { + if (this._calculatedParam && this._calculatedParam.symbol === symbol) { if (this.result) { for (const r of this.result.resultElements) { series.push(r.vCalc); @@ -149,9 +141,11 @@ export class VarResults extends CalculatedParamResults { * as X or Y chart axis * @param except exclude this symbol from the list */ - public getAvailableChartAxis() { - const res = []; - res.push(this.calculatedParameter.symbol); + public getAvailableChartAxis(): string[] { + const res: string[] = []; + if (this.calculatedParameter) { + res.push(this.calculatedParameter.symbol); + } res.push(this.variatedParameter.symbol); for (const erk of this.extraResultKeys) { res.push(erk); @@ -164,31 +158,36 @@ export class VarResults extends CalculatedParamResults { this._variableParamHeader = CalculatorResults.paramLabel(this.variatedParameter, displaySymbol); } - // set axis selectors values the first time - this.chartX = this.chartX || this.variatedParameter.symbol; - this.chartY = this.chartY || this.calculatedParameter.symbol; - // valeurs du paramètre à calculer for (const r of this.result.resultElements) { this._yValues.push(r.vCalc); } // clés des résultats supplémentaires - - if (this._extraResultKeys.length === 0) { + if (this.extraResultKeys.length === 0) { for (const re of this.result.resultElements) { // re:ResultElement for (const erk in re.extraResults) { - if (!this._extraResultKeys.includes(erk)) { - this._extraResultKeys.push(erk); + if (!this.extraResultKeys.includes(erk)) { + this.extraResultKeys.push(erk); } } } } - // entêtes des résultats supplémentaires + // set axis selectors values the first time + let defaultY = this.chartY; + if (this.calculatedParameter) { + defaultY = this.calculatedParameter.symbol; + } else if (this.extraResultKeys.length > 0) { + defaultY = this.extraResultKeys[0]; + } + this.chartX = this.chartX || this.variatedParameter.symbol; + this.chartY = defaultY; + // entêtes des résultats supplémentaires const intlService = ServiceFactory.instance.i18nService; - for (const k of this._extraResultKeys) { + this._extraResultHeaders = []; + for (const k of this.extraResultKeys) { this._extraResultHeaders.push(intlService.getExtraResLabel(k)); } -- GitLab From acbb18c9d5ee02552c1bcbc0db6639f6185f3196 Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Fri, 12 Apr 2019 17:53:36 +0200 Subject: [PATCH 2/6] =?UTF-8?q?M=C3=A0J=20jalhyd=5Fbranch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jalhyd_branch | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/jalhyd_branch b/jalhyd_branch index e9797aa3c..1d743538b 100644 --- a/jalhyd_branch +++ b/jalhyd_branch @@ -1 +1,2 @@ -26-ajout-de-la-calculette-passe-a-bassins-calcul-du-nombre-de-bassins +75-section-parametree-calculer-systematiquement-toutes-les-variables-meme-avec-un-parametre-qui-varie + -- GitLab From 147d6103a213b2883b44267f06c82dd8067e58fd Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Mon, 15 Apr 2019 11:21:36 +0200 Subject: [PATCH 3/6] =?UTF-8?q?Traduction=20de=20"language"=20dans=20le=20?= =?UTF-8?q?formulaire=20de=20param=C3=A8tres?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/components/app-setup/app-setup.component.html | 2 +- src/app/components/app-setup/app-setup.component.ts | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/app/components/app-setup/app-setup.component.html b/src/app/components/app-setup/app-setup.component.html index 448b38977..4bc1959f9 100644 --- a/src/app/components/app-setup/app-setup.component.html +++ b/src/app/components/app-setup/app-setup.component.html @@ -77,7 +77,7 @@ <!-- langue --> <mat-form-field> - <mat-select placeholder="Language" [(value)]="currentLanguageCode" data-testid="language-select"> + <mat-select [placeholder]="uitextLanguage" [(value)]="currentLanguageCode" data-testid="language-select"> <mat-option *ngFor="let l of availableLanguages | keyvalue" [value]="l.key"> {{ l.value }} </mat-option> diff --git a/src/app/components/app-setup/app-setup.component.ts b/src/app/components/app-setup/app-setup.component.ts index 87b96145b..42acbc4eb 100644 --- a/src/app/components/app-setup/app-setup.component.ts +++ b/src/app/components/app-setup/app-setup.component.ts @@ -56,6 +56,10 @@ export class ApplicationSetupComponent extends BaseComponent implements Observer return this.intlService.localizeText("INFO_SETUP_TITLE"); } + public get uitextLanguage(): string { + return this.intlService.localizeText("INFO_SETUP_LANGUAGE"); + } + public get uitextDisplayAccuracy(): string { return this.intlService.localizeText("INFO_SETUP_PRECISION_AFFICHAGE"); } -- GitLab From 6950d74d5324aa5d25b65f7ab8a3aac3c52ab277 Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Mon, 15 Apr 2019 11:22:00 +0200 Subject: [PATCH 4/6] Fix #161 --- .../calculator-list.component.html | 23 ++++++++++++++++++ .../calculator-list.component.scss | 9 ++++++- .../calculator-list.component.ts | 18 +++++++++++++- src/assets/images/logo_afb_m.jpg | Bin 0 -> 17558 bytes src/assets/images/logo_irstea_m.jpg | Bin 0 -> 41478 bytes src/locale/messages.en.json | 3 +++ src/locale/messages.fr.json | 3 +++ 7 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 src/assets/images/logo_afb_m.jpg create mode 100644 src/assets/images/logo_irstea_m.jpg diff --git a/src/app/components/calculator-list/calculator-list.component.html b/src/app/components/calculator-list/calculator-list.component.html index 25c88f025..2f9231bab 100644 --- a/src/app/components/calculator-list/calculator-list.component.html +++ b/src/app/components/calculator-list/calculator-list.component.html @@ -1,5 +1,28 @@ <div class="container" fxLayout="row wrap" fxLayoutAlign="space-evenly stretch"> + <mat-card class="welcome-card" *ngIf="nbOpenCalculators === 0"> + + <mat-card-header> + <!-- <img mat-card-avatar src="https://s3.amazonaws.com/pix.iemoji.com/images/emoji/apple/ios-12/256/water-wave.png"> --> + <mat-card-title>{{ uitextWelcomeTitle }}</mat-card-title> + <mat-card-subtitle>{{ uitextWelcomeSubtitle }}</mat-card-subtitle> + </mat-card-header> + + <mat-card-content [innerHTML]="uitextWelcomeContent"> + </mat-card-content> + + <img mat-card-image src="../../assets/images/logo_irstea_m.jpg"> + + <img mat-card-image src="../../assets/images/logo_afb_m.jpg"> + + <mat-card-actions> + <div class="container" fxLayout="column" fxLayoutAlign="left" fxLayoutGap="10px"> + <button mat-raised-button color="accent" class="theme-calculator"></button> + </div> + </mat-card-actions> + + </mat-card> + <mat-card *ngFor="let theme of items" class="compute-nodes-theme"> <mat-card-header> diff --git a/src/app/components/calculator-list/calculator-list.component.scss b/src/app/components/calculator-list/calculator-list.component.scss index 460061c0f..c0edcccd7 100644 --- a/src/app/components/calculator-list/calculator-list.component.scss +++ b/src/app/components/calculator-list/calculator-list.component.scss @@ -1,4 +1,4 @@ -mat-card.compute-nodes-theme { +mat-card.compute-nodes-theme, mat-card.welcome-card { width: 300px; margin: 1em; @@ -47,3 +47,10 @@ mat-card.compute-nodes-theme { } } } + +mat-card.welcome-card { + + .mat-card-content { + line-height: 1.4em; + } +} diff --git a/src/app/components/calculator-list/calculator-list.component.ts b/src/app/components/calculator-list/calculator-list.component.ts index b2c4cdb66..1e13c7ec4 100644 --- a/src/app/components/calculator-list/calculator-list.component.ts +++ b/src/app/components/calculator-list/calculator-list.component.ts @@ -1,7 +1,7 @@ import { Component, OnInit } from "@angular/core"; import { Router } from "@angular/router"; -import { CalculatorType, EnumEx } from "jalhyd"; +import { CalculatorType, EnumEx, Session } from "jalhyd"; import { FormulaireDefinition } from "../../formulaire/definition/form-definition"; import { ServiceFactory } from "../../services/service-factory"; @@ -108,10 +108,26 @@ export class CalculatorListComponent implements OnInit { }); } + public get nbOpenCalculators() { + return Session.getInstance().getNumberOfNubs(); + } + public get items() { return this._items; } + public get uitextWelcomeTitle() { + return "Cassiopée"; + } + + public get uitextWelcomeSubtitle() { + return ServiceFactory.instance.i18nService.localizeText("INFO_WELCOME_SUBTITLE"); + } + + public get uitextWelcomeContent() { + return ServiceFactory.instance.i18nService.localizeText("INFO_WELCOME_CONTENT"); + } + // interface Observer update(sender: any, data: any): void { diff --git a/src/assets/images/logo_afb_m.jpg b/src/assets/images/logo_afb_m.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9c85a0b09163911cf49b2943941d0ba0a637fa90 GIT binary patch literal 17558 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/logo_irstea_m.jpg b/src/assets/images/logo_irstea_m.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dafe45d15da77d93d3cb3c6f317c9cc5de6440f7 GIT binary patch literal 41478 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%0DOR(!cwC(PC{~?#e$KtDa}`&Kt$%a cSWgJ3a;atIy|^irMw6z(5O)6n2LAy6*)TqXxc~qF literal 0 HcmV?d00001 diff --git a/src/locale/messages.en.json b/src/locale/messages.en.json index 76628a095..c1d177f0d 100644 --- a/src/locale/messages.en.json +++ b/src/locale/messages.en.json @@ -212,6 +212,7 @@ "INFO_REQUIRES": "requires", "INFO_SECTIONPARAMETREE_TITRE": "Parametric section", "INFO_SECTIONPARAMETREE_TITRE_COURT": "Param. section", + "INFO_SETUP_LANGUAGE": "Language", "INFO_SETUP_NEWTON_MAX_ITER": "Newton iteration limit", "INFO_SETUP_PRECISION_AFFICHAGE": "Display accuracy", "INFO_SETUP_PRECISION_CALCUL": "Computation accuracy", @@ -233,6 +234,8 @@ "INFO_THEME_HYDRAULIQUE_EN_CHARGE_DESCRIPTION": "Modules for calculating head losses in pressure pipes", "INFO_THEME_LOIS_D_OUVRAGES_TITRE": "Hydraulic structures", "INFO_THEME_LOIS_D_OUVRAGES_DESCRIPTION": "Flow calculation for hydraulic devices (gates, weir, orifices)", + "INFO_WELCOME_SUBTITLE": "Hydraulic calculators", + "INFO_WELCOME_CONTENT": "<p>The Cassiopée software was developed by <a href=\"https://www.afbiodiversite.fr\">AFB</a> (French Agency for Biodiversity) and <a href=\"https://www.irstea.fr/en\">Irstea</a> (National Institute for Environmental and Agricultural Science and Research).</p><p>It includes tools for designing fish passes, and hydraulic calculation tools useful for environmental and agricultural engineering.</p><p>For more information, consult <a href=\"assets/docs-fr/mentions_legales\">legal notice</a> and <a href=\"assets/docs-fr\">documentation</a>.</p>", "WARNING_REMOUS_ARRET_CRITIQUE": "Calculation stopped: critical elevation reached at abscissa %x%", "WARNING_STRUCTUREKIVI_HP_TROP_ELEVE": "h/p must not be greater than 2.5. h/p is forced to 2.5", "WARNING_STRUCTUREKIVI_PELLE_TROP_FAIBLE": "Threshold height should be greater than 0.1 m. Beta coefficient is forced to 0" diff --git a/src/locale/messages.fr.json b/src/locale/messages.fr.json index 4a03ee164..6a1b4efdb 100644 --- a/src/locale/messages.fr.json +++ b/src/locale/messages.fr.json @@ -212,6 +212,7 @@ "INFO_REQUIRES": "dépend de", "INFO_SECTIONPARAMETREE_TITRE": "Section paramétrée", "INFO_SECTIONPARAMETREE_TITRE_COURT": "Sec. param.", + "INFO_SETUP_LANGUAGE": "Langue", "INFO_SETUP_NEWTON_MAX_ITER": "Newton : nombre d'itérations maximum", "INFO_SETUP_PRECISION_AFFICHAGE": "Précision d'affichage", "INFO_SETUP_PRECISION_CALCUL": "Précision de calcul", @@ -233,6 +234,8 @@ "INFO_THEME_HYDRAULIQUE_EN_CHARGE_DESCRIPTION": "Modules de calcul de perte de charge dans les conduites sous pression", "INFO_THEME_LOIS_D_OUVRAGES_TITRE": "Lois d'ouvrages", "INFO_THEME_LOIS_D_OUVRAGES_DESCRIPTION": "Calculs basés sur les lois de débits d'ouvrages hydrauliques (Vannes, seuils, orifices)", + "INFO_WELCOME_SUBTITLE": "Modules de calcul hydrauliques", + "INFO_WELCOME_CONTENT": "<p>Le logiciel Cassiopée a été développé par l'<a href=\"https://www.afbiodiversite.fr\">AFB</a> (Agence Française pour la Biodiversité) et <a href=\"https://www.irstea.fr\">Irstea</a> (Institut national de Recherche en Sciences et Technologies pour l’Environnement et l’Agriculture).</p><p>Il regroupe des outils d'aide à la conception de passes à poissons et des outils de calcul hydraulique utiles pour l'ingénierie en environnement et agriculture.</p><p>Pour plus d'informations, consulter les <a href=\"assets/docs-fr/mentions_legales\">mentions légales</a> et la <a href=\"assets/docs-fr\">documentation</a>.</p>", "WARNING_REMOUS_ARRET_CRITIQUE": "Arrêt du calcul : hauteur critique atteinte à l'abscisse %x%", "WARNING_STRUCTUREKIVI_HP_TROP_ELEVE": "h/p ne doit pas être supérieur à 2,5. h/p est forcé à 2,5", "WARNING_STRUCTUREKIVI_PELLE_TROP_FAIBLE": "La pelle du seuil doit mesurer au moins 0,1 m. Le coefficient béta est forcé à 0" -- GitLab From 3134d3e3f4b07cd585264b497e8f452a8467c640 Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Mon, 15 Apr 2019 14:01:31 +0200 Subject: [PATCH 5/6] Fix #175 --- .../param-link/param-link.component.html | 14 ++++++- .../param-link/param-link.component.scss | 18 ++++++-- .../param-link/param-link.component.ts | 42 +++++++++++++++++++ src/locale/messages.en.json | 3 ++ src/locale/messages.fr.json | 3 ++ 5 files changed, 76 insertions(+), 4 deletions(-) diff --git a/src/app/components/param-link/param-link.component.html b/src/app/components/param-link/param-link.component.html index 9f8fce8bf..d24d7c0ed 100644 --- a/src/app/components/param-link/param-link.component.html +++ b/src/app/components/param-link/param-link.component.html @@ -7,7 +7,19 @@ </mat-select> </mat-form-field> -<mat-icon #tooltip="matTooltip" [matTooltip]="tooltipText" matTooltipClass="linked-param-tooltip" +<div class="status-icons-container"> + <mat-icon [title]="uitextVariated" class="status-info" *ngIf="isVariable"> + show_chart + </mat-icon> + <mat-icon [title]="uitextCalculated" class="status-info" *ngIf="isCalculated && ! isAwaitingCalculation"> + check_circle + </mat-icon> + <mat-icon [title]="uitextAwaitingCalculation" class="status-info" *ngIf="isAwaitingCalculation"> + timelapse + </mat-icon> +</div> + +<mat-icon id="info-tooltip" #tooltip="matTooltip" [matTooltip]="tooltipText" matTooltipClass="linked-param-tooltip" (click)="tooltip.toggle()" (mouseenter)="$event.stopImmediatePropagation()" (mouseleave)="$event.stopImmediatePropagation()"> info_outline diff --git a/src/app/components/param-link/param-link.component.scss b/src/app/components/param-link/param-link.component.scss index 13d6d32f0..fc6224f86 100644 --- a/src/app/components/param-link/param-link.component.scss +++ b/src/app/components/param-link/param-link.component.scss @@ -32,11 +32,23 @@ } } - mat-icon { + .status-icons-container { position: absolute; - top: 7px; + top: -8px; + right: 8px; + + > mat-icon { + transform: scale(0.7); + color: grey; + cursor: default; + } + } + + mat-icon#info-tooltip { + position: absolute; + top: 12px; right: 8px; - transform: scale(0.9); cursor: pointer; + transform: scale(0.9); } } diff --git a/src/app/components/param-link/param-link.component.ts b/src/app/components/param-link/param-link.component.ts index 7c3e8887e..53e88589e 100644 --- a/src/app/components/param-link/param-link.component.ts +++ b/src/app/components/param-link/param-link.component.ts @@ -46,6 +46,36 @@ export class ParamLinkComponent implements OnChanges, Observer, OnDestroy { return "linked_" + this.param.symbol; } + public get isVariable(): boolean { + return this.param.paramDefinition.hasMultipleValues; + } + + /** + * Returns true if current target needs to be calculated, + * whether the result is already available or not + */ + public get isCalculated(): boolean { + const refValue = this.param.paramDefinition.referencedValue; + return (refValue.isResult() || refValue.isExtraResult()); + } + + /** + * Returns true if current target needs to be calculated, + * but result is not yet available + */ + public get isAwaitingCalculation(): boolean { + if (this.isCalculated) { + const refValue = this.param.paramDefinition.referencedValue; + try { + refValue.getParamValues(); + return false; + } catch (e) { + return true; + } + } + return false; + } + constructor( private intlService: I18nService ) { @@ -100,6 +130,18 @@ export class ParamLinkComponent implements OnChanges, Observer, OnDestroy { return this._currentIndex !== -1 && this.param.isValid; } + public get uitextVariated() { + return this.intlService.localizeText("INFO_PARAMFIELD_VARIATED"); + } + + public get uitextCalculated() { + return this.intlService.localizeText("INFO_PARAMFIELD_CALCULATED"); + } + + public get uitextAwaitingCalculation() { + return this.intlService.localizeText("INFO_PARAMFIELD_AWAITING_CALCULATION"); + } + /** * Label d'une entrée du select des paramètres liés */ diff --git a/src/locale/messages.en.json b/src/locale/messages.en.json index 76628a095..d8d592240 100644 --- a/src/locale/messages.en.json +++ b/src/locale/messages.en.json @@ -166,6 +166,8 @@ "INFO_PABPUISSANCE_TITRE_COURT": "FL: diss. power", "INFO_PARALLELSTRUCTURE_TITRE": "Parallel structures", "INFO_PARALLELSTRUCTURE_TITRE_COURT": "// structures", + "INFO_PARAMFIELD_AWAITING_CALCULATION": "Awaiting calculation", + "INFO_PARAMFIELD_CALCULATED": "Calculated", "INFO_PARAMFIELD_GRAPH_TYPE": "Graph type", "INFO_PARAMFIELD_GRAPH_TYPE_HISTOGRAM": "Histogram", "INFO_PARAMFIELD_GRAPH_SELECT_X_AXIS": "Variable for X axis", @@ -191,6 +193,7 @@ "INFO_PARAMFIELD_PARAMVARIER_VALUES_FORMAT_ERROR": "Incorrect format; accepted separator: %s", "INFO_PARAMFIELD_VALEURMAXI": "To maximum value", "INFO_PARAMFIELD_VALEURMINI": "From minimum value", + "INFO_PARAMFIELD_VARIATED": "Variated", "INFO_PARAMMODE_MINMAX": "Min/max", "INFO_PARAMMODE_LIST": "Values list", "INFO_REGIMEUNIFORME_TITRE": "Uniform flow calculation", diff --git a/src/locale/messages.fr.json b/src/locale/messages.fr.json index 4a03ee164..d269ba5f0 100644 --- a/src/locale/messages.fr.json +++ b/src/locale/messages.fr.json @@ -166,6 +166,8 @@ "INFO_PABPUISSANCE_TITRE_COURT": "PAB : puissance", "INFO_PARALLELSTRUCTURE_TITRE": "Lois d'ouvrages", "INFO_PARALLELSTRUCTURE_TITRE_COURT": "Ouvrages", + "INFO_PARAMFIELD_AWAITING_CALCULATION": "En attente de calcul", + "INFO_PARAMFIELD_CALCULATED": "Calculé", "INFO_PARAMFIELD_GRAPH_TYPE": "Type de graphe", "INFO_PARAMFIELD_GRAPH_TYPE_HISTOGRAM": "Histogramme", "INFO_PARAMFIELD_GRAPH_SELECT_X_AXIS": "Variable en abscisse", @@ -191,6 +193,7 @@ "INFO_PARAMFIELD_PARAMVARIER_VALUES_FORMAT_ERROR": "Format incorrect; séparateurs acceptés: %s", "INFO_PARAMFIELD_VALEURMAXI": "À la valeur maximum", "INFO_PARAMFIELD_VALEURMINI": "De la valeur minimum", + "INFO_PARAMFIELD_VARIATED": "Varié", "INFO_PARAMMODE_MINMAX": "Min/max", "INFO_PARAMMODE_LIST": "Liste de valeurs", "INFO_REGIMEUNIFORME_TITRE": "Régime uniforme", -- GitLab From 9a4d88e23e0efac79b53bbe33e56ea91f2b5d8aa Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Tue, 16 Apr 2019 09:41:10 +0200 Subject: [PATCH 6/6] Traduction --- src/locale/messages.fr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/locale/messages.fr.json b/src/locale/messages.fr.json index 6a1b4efdb..07c428681 100644 --- a/src/locale/messages.fr.json +++ b/src/locale/messages.fr.json @@ -234,7 +234,7 @@ "INFO_THEME_HYDRAULIQUE_EN_CHARGE_DESCRIPTION": "Modules de calcul de perte de charge dans les conduites sous pression", "INFO_THEME_LOIS_D_OUVRAGES_TITRE": "Lois d'ouvrages", "INFO_THEME_LOIS_D_OUVRAGES_DESCRIPTION": "Calculs basés sur les lois de débits d'ouvrages hydrauliques (Vannes, seuils, orifices)", - "INFO_WELCOME_SUBTITLE": "Modules de calcul hydrauliques", + "INFO_WELCOME_SUBTITLE": "Modules de calcul d'hydraulique", "INFO_WELCOME_CONTENT": "<p>Le logiciel Cassiopée a été développé par l'<a href=\"https://www.afbiodiversite.fr\">AFB</a> (Agence Française pour la Biodiversité) et <a href=\"https://www.irstea.fr\">Irstea</a> (Institut national de Recherche en Sciences et Technologies pour l’Environnement et l’Agriculture).</p><p>Il regroupe des outils d'aide à la conception de passes à poissons et des outils de calcul hydraulique utiles pour l'ingénierie en environnement et agriculture.</p><p>Pour plus d'informations, consulter les <a href=\"assets/docs-fr/mentions_legales\">mentions légales</a> et la <a href=\"assets/docs-fr\">documentation</a>.</p>", "WARNING_REMOUS_ARRET_CRITIQUE": "Arrêt du calcul : hauteur critique atteinte à l'abscisse %x%", "WARNING_STRUCTUREKIVI_HP_TROP_ELEVE": "h/p ne doit pas être supérieur à 2,5. h/p est forcé à 2,5", -- GitLab