From 92623ad9001c81ba472dfd05a57c1f93c109fa86 Mon Sep 17 00:00:00 2001 From: Valerie Date: Sat, 2 Nov 2024 17:14:16 +0000 Subject: [PATCH 01/28] initial for the offset page --- .../src/MFD/pages/FMS/F-PLN/FplnRevisionsMenu.tsx | 4 ++-- .../src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.scss | 0 .../src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx | 10 ++++++++++ 3 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.scss create mode 100644 fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx diff --git a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/FplnRevisionsMenu.tsx b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/FplnRevisionsMenu.tsx index ac4cd8e1ab7..acb912c274d 100644 --- a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/FplnRevisionsMenu.tsx +++ b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/FplnRevisionsMenu.tsx @@ -76,8 +76,8 @@ export function getRevisionsMenu(fpln: MfdFmsFpln, type: FplnRevisionsMenuType): fpln.props.mfd.uiService.navigateTo(`fms/${fpln.props.mfd.uiService.activeUri.get().category}/f-pln-arrival`), }, { - name: '(N/A) OFFSET', - disabled: true, + name: 'OFFSET', + disabled: false, onPressed: () => fpln.props.mfd.uiService.navigateTo(`fms/${fpln.props.mfd.uiService.activeUri.get().category}/f-pln-offset`), }, diff --git a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.scss b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.scss new file mode 100644 index 00000000000..e69de29bb2d diff --git a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx new file mode 100644 index 00000000000..32e39f04171 --- /dev/null +++ b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx @@ -0,0 +1,10 @@ +import { Subject } from '@microsoft/msfs-sdk'; +import { AbstractMfdPageProps } from 'instruments/src/MFD/MFD'; +import { FmsPage } from 'instruments/src/MFD/pages/common/FmsPage'; + +interface MfdFmsFplnOffsetProps extends AbstractMfdPageProps {} + +export class MfdFmsFplnOffset extends FmsPage { + private offsetStartpWpt = Subject.create('WAYPOINT'); + private offsetEndpWpt = Subject.create('WAYPOINT'); +} From 67cd02b122b175ec6aebbb3dc62591579c672966 Mon Sep 17 00:00:00 2001 From: Valerie Date: Sun, 3 Nov 2024 13:17:26 +0000 Subject: [PATCH 02/28] Make page kown about to the actual page directory system --- .../src/systems/instruments/src/MFD/MfdPageDirectory.tsx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/fbw-a380x/src/systems/instruments/src/MFD/MfdPageDirectory.tsx b/fbw-a380x/src/systems/instruments/src/MFD/MfdPageDirectory.tsx index 418b4f52c39..9f504efe9b6 100644 --- a/fbw-a380x/src/systems/instruments/src/MFD/MfdPageDirectory.tsx +++ b/fbw-a380x/src/systems/instruments/src/MFD/MfdPageDirectory.tsx @@ -27,6 +27,7 @@ import { MfdDisplayInterface } from 'instruments/src/MFD/MFD'; import { MfdUiService } from 'instruments/src/MFD/pages/common/MfdUiService'; import { MfdFmsDataDebug } from 'instruments/src/MFD/pages/FMS/DATA/MfdFmsDataDebug'; import { MfdSurvControls } from 'instruments/src/MFD/pages/SURV/MfdSurvControls'; +import { MfdFmsFplnOffset } from 'instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset'; export function pageForUrl( url: string, @@ -82,6 +83,11 @@ export function pageForUrl( case 'fms/sec2/f-pln-hold': case 'fms/sec3/f-pln-hold': return ; + case 'fms/active/f-pln-offset': + case 'fms/sec1/f-pln-offset': + case 'fms/sec2/f-pln-offset': + case 'fms/sec3/f-pln-offset': + return ; case 'fms/position/irs': return ; case 'fms/position/navaids': From 71ef3ea733ee75a204c95e310c0ffb0e25cca103 Mon Sep 17 00:00:00 2001 From: Valerie Date: Sun, 3 Nov 2024 13:25:41 +0000 Subject: [PATCH 03/28] Start of the page look --- .../MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx | 109 +++++++++++++++++- 1 file changed, 106 insertions(+), 3 deletions(-) diff --git a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx index 32e39f04171..7ad3203db4a 100644 --- a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx +++ b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx @@ -1,10 +1,113 @@ -import { Subject } from '@microsoft/msfs-sdk'; +import { ArraySubject, FSComponent, Subject, VNode } from '@microsoft/msfs-sdk'; + +import './MfdFmsFpln.scss'; +import './MfdFmsFplnOffset.scss'; import { AbstractMfdPageProps } from 'instruments/src/MFD/MFD'; import { FmsPage } from 'instruments/src/MFD/pages/common/FmsPage'; +import { DropdownMenu } from 'instruments/src/MFD/pages/common/DropdownMenu'; +import { FlightPlanLeg } from '@fmgc/flightplanning/legs/FlightPlanLeg'; +import { FlightPlanIndex } from '@fmgc/index'; interface MfdFmsFplnOffsetProps extends AbstractMfdPageProps {} export class MfdFmsFplnOffset extends FmsPage { - private offsetStartpWpt = Subject.create('WAYPOINT'); - private offsetEndpWpt = Subject.create('WAYPOINT'); + private dropdownMenuRef = FSComponent.createRef(); + + private availableWaypoints = ArraySubject.create([]); + + private availableWaypointsToLegIndex: number[] = []; + + private selectedWaypointIndex = Subject.create(null); + + private manualWptIdent: string | null = ''; + + private utcEta = Subject.create('--:--'); + + private distToWpt = Subject.create('---'); + + private offsetStartpWpt = Subject.create(''); + + private offsetEndpWpt = Subject.create(''); + + protected onNewData(): void { + // Use active FPLN for building the list (page only works for active anyways) + const activeFpln = this.props.fmcService.master?.flightPlanService.active; + if (activeFpln) { + this.availableWaypointsToLegIndex = []; + const wpt = activeFpln.allLegs + .slice(activeFpln.activeLegIndex, activeFpln.firstMissedApproachLegIndex) + .map((el, idx) => { + if (el instanceof FlightPlanLeg && el.isXF()) { + this.availableWaypointsToLegIndex.push(idx + activeFpln.activeLegIndex); + return el.ident; + } + return null; + }) + .filter((el) => el !== null) as readonly string[]; + if (wpt) { + this.availableWaypoints.set(wpt); + } + } + + // Existance of TMPY fpln tells us that an offset is pending + if (this.loadedFlightPlanIndex.get() === FlightPlanIndex.Temporary) { + // If waypoint was revised select revised wpt + const revWpt = this.props.fmcService.master?.revisedWaypoint(); + if (revWpt) { + const selectedLegIndex = this.availableWaypoints.getArray().findIndex((it) => it === revWpt.ident); + if (selectedLegIndex !== -1) { + this.selectedWaypointIndex.set(selectedLegIndex); + } + } + + // Manual waypoint was entered. In this case, force dropdown field to display wpt ident without selecting it + if (this.manualWptIdent) { + this.selectedWaypointIndex.set(null); + this.dropdownMenuRef.instance.forceLabel(this.manualWptIdent); + } + + //TODO Display ETA; target waypoint is now activeLeg termination in temporary fpln + if (this.loadedFlightPlan?.activeLeg instanceof FlightPlanLeg) { + // No predictions for temporary fpln atm, so only distance is displayed + this.distToWpt.set(this.loadedFlightPlan?.activeLeg?.calculated?.cumulativeDistance?.toFixed(0) ?? '---'); + } + } + } + + render(): VNode { + return ( + <> + {super.render()} + {/* begin page content */} +
+
+ START WPT +
+ +
+ END WPT +
+ +
+
+
+ + ); + } } From 6a5bbe87fc6870ac7854af7858a4b41e8e8e1a2c Mon Sep 17 00:00:00 2001 From: Valerie Date: Sun, 3 Nov 2024 14:02:12 +0000 Subject: [PATCH 04/28] Initial CSS --- .../src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.scss | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.scss b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.scss index e69de29bb2d..faee8c2324d 100644 --- a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.scss +++ b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.scss @@ -0,0 +1,8 @@ +@import "../../../../MsfsAvionicsCommon/definitions"; + +.mfd-fms-fpln-offset-waypoint-text-grid { + display: grid; + grid-template-columns: auto auto 15px auto auto; + margin-top: 10px; + padding-bottom: 15px; +} From 7ce2917c7b5e95a247928ed81f52a4f16531a2bf Mon Sep 17 00:00:00 2001 From: Valerie Date: Sun, 3 Nov 2024 14:02:30 +0000 Subject: [PATCH 05/28] Yeah don't try and set the two dropdowns to the same waypoint index --- .../MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx | 42 ++++++++++++------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx index 7ad3203db4a..efc92e8fdf8 100644 --- a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx +++ b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx @@ -17,7 +17,9 @@ export class MfdFmsFplnOffset extends FmsPage { private availableWaypointsToLegIndex: number[] = []; - private selectedWaypointIndex = Subject.create(null); + private selectedStartWaypointIndex = Subject.create(null); + + private selectedEndWaypointIndex = Subject.create(null); private manualWptIdent: string | null = ''; @@ -25,10 +27,6 @@ export class MfdFmsFplnOffset extends FmsPage { private distToWpt = Subject.create('---'); - private offsetStartpWpt = Subject.create(''); - - private offsetEndpWpt = Subject.create(''); - protected onNewData(): void { // Use active FPLN for building the list (page only works for active anyways) const activeFpln = this.props.fmcService.master?.flightPlanService.active; @@ -56,13 +54,13 @@ export class MfdFmsFplnOffset extends FmsPage { if (revWpt) { const selectedLegIndex = this.availableWaypoints.getArray().findIndex((it) => it === revWpt.ident); if (selectedLegIndex !== -1) { - this.selectedWaypointIndex.set(selectedLegIndex); + this.selectedStartWaypointIndex.set(selectedLegIndex); } } // Manual waypoint was entered. In this case, force dropdown field to display wpt ident without selecting it if (this.manualWptIdent) { - this.selectedWaypointIndex.set(null); + this.selectedStartWaypointIndex.set(null); this.dropdownMenuRef.instance.forceLabel(this.manualWptIdent); } @@ -80,27 +78,43 @@ export class MfdFmsFplnOffset extends FmsPage { {super.render()} {/* begin page content */}
-
- START WPT -
+
+
+ START WPT +
+
+ END WPT +
+
+
+ INTERCEPT ANGLE +
+
- END WPT -
+
From 71b3908111d31a676ddaba17afc75e26db3b8b8e Mon Sep 17 00:00:00 2001 From: Valerie Date: Sun, 3 Nov 2024 17:05:32 +0000 Subject: [PATCH 06/28] Added custom data entry formats for offset parameters --- .../src/MFD/pages/common/DataEntryFormats.tsx | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/fbw-a380x/src/systems/instruments/src/MFD/pages/common/DataEntryFormats.tsx b/fbw-a380x/src/systems/instruments/src/MFD/pages/common/DataEntryFormats.tsx index 9186ef2654e..63024a5e0e1 100644 --- a/fbw-a380x/src/systems/instruments/src/MFD/pages/common/DataEntryFormats.tsx +++ b/fbw-a380x/src/systems/instruments/src/MFD/pages/common/DataEntryFormats.tsx @@ -1427,3 +1427,71 @@ export class SquawkFormat implements DataEntryFormat { } } } + +// OFFSET intercept angle offset intercept angle behaves differently to the other types of angles in the jets. Grumble Grumble +export class OffsetAngleFormat implements DataEntryFormat { + public placeholder = '--'; + + public maxDigits = 2; + + private minValue = 10; + + private maxValue = 50; + + public format(value: number) { + if (value === null || value === undefined) { + return [this.placeholder, null, '°'] as FieldFormatTuple; + } + return [value.toFixed(0), null, '°'] as FieldFormatTuple; + } + + public async parse(input: string) { + if (input === '') { + return null; + } + + const nbr = Number(input); + if (Number.isFinite(nbr) && nbr <= this.maxValue && nbr >= this.minValue) { + return nbr; + } + if (nbr > this.maxValue || nbr < this.minValue) { + throw new FmsError(FmsErrorType.EntryOutOfRange); + } else { + throw new FmsError(FmsErrorType.FormatError); + } + } +} + +// This can also contain a letter indicating L or R offset. Airbus stop making my job harder +export class OffsetDistFormat implements DataEntryFormat { + public placeholder = '--'; + + public maxDigits = 3; + + private minValue = 0; + + private maxValue = 50; + + public format(value: number) { + if (value === null || value === undefined) { + return [this.placeholder, null, 'NM'] as FieldFormatTuple; + } + return [value.toFixed(0), null, 'NM'] as FieldFormatTuple; + } + + public async parse(input: string) { + if (input === '') { + return null; + } + + const nbr = Number(input); + if (Number.isFinite(nbr) && nbr <= this.maxValue && nbr >= this.minValue) { + return nbr; + } + if (nbr > this.maxValue || nbr < this.minValue) { + throw new FmsError(FmsErrorType.EntryOutOfRange); + } else { + throw new FmsError(FmsErrorType.FormatError); + } + } +} From 732bba188131a19438f9507bda0da6dbced46ebb Mon Sep 17 00:00:00 2001 From: Valerie Date: Sun, 3 Nov 2024 17:05:43 +0000 Subject: [PATCH 07/28] page layouting --- .../src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.scss | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.scss b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.scss index faee8c2324d..fc6d7d1dc70 100644 --- a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.scss +++ b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.scss @@ -2,7 +2,12 @@ .mfd-fms-fpln-offset-waypoint-text-grid { display: grid; - grid-template-columns: auto auto 15px auto auto; + grid-template-columns: 280px 280px 15px 280px; margin-top: 10px; padding-bottom: 15px; } + +.mfd-offset-dist-angle-input-grid { + display: grid; + grid-template-columns: auto; +} From ed37045eb0145aa4c429292e92b09d35653a8a9b Mon Sep 17 00:00:00 2001 From: Valerie Date: Sun, 3 Nov 2024 17:06:45 +0000 Subject: [PATCH 08/28] More layouting and offset parameter addition --- .../MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx | 117 ++++++++++++------ 1 file changed, 77 insertions(+), 40 deletions(-) diff --git a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx index efc92e8fdf8..6e42751545d 100644 --- a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx +++ b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx @@ -7,6 +7,8 @@ import { FmsPage } from 'instruments/src/MFD/pages/common/FmsPage'; import { DropdownMenu } from 'instruments/src/MFD/pages/common/DropdownMenu'; import { FlightPlanLeg } from '@fmgc/flightplanning/legs/FlightPlanLeg'; import { FlightPlanIndex } from '@fmgc/index'; +import { InputField } from 'instruments/src/MFD/pages/common/InputField'; +import { OffsetAngleFormat, OffsetDistFormat } from 'instruments/src/MFD/pages/common/DataEntryFormats'; interface MfdFmsFplnOffsetProps extends AbstractMfdPageProps {} @@ -27,7 +29,13 @@ export class MfdFmsFplnOffset extends FmsPage { private distToWpt = Subject.create('---'); + private offsetInterceptAngle = Subject.create(null); + + private offsetDist = Subject.create(null); + protected onNewData(): void { + this.offsetInterceptAngle.set(30); + this.offsetDist.set(5); // Use active FPLN for building the list (page only works for active anyways) const activeFpln = this.props.fmcService.master?.flightPlanService.active; if (activeFpln) { @@ -78,46 +86,75 @@ export class MfdFmsFplnOffset extends FmsPage { {super.render()} {/* begin page content */}
-
-
- START WPT -
-
- END WPT -
-
-
- INTERCEPT ANGLE -
-
- -
-
- +
+
+
+
+ START WPT +
+
+ +
+
+
+
+ END WPT +
+
+ +
+
+
+
+
+ INTERCEPT ANGLE +
+
+ + dataEntryFormat={new OffsetAngleFormat()} + value={this.offsetInterceptAngle} + errorHandler={(e) => this.props.fmcService.master?.showFmsErrorMessage(e)} + hEventConsumer={this.props.mfd.hEventConsumer} + interactionMode={this.props.mfd.interactionMode} + /> +
+
+ OFFSET DIST +
+
+ + dataEntryFormat={new OffsetDistFormat()} + value={this.offsetDist} + errorHandler={(e) => this.props.fmcService.master?.showFmsErrorMessage(e)} + hEventConsumer={this.props.mfd.hEventConsumer} + interactionMode={this.props.mfd.interactionMode} + /> +
+
From f78672c122ed367b953e6a06c538491b3b9e7dc4 Mon Sep 17 00:00:00 2001 From: Valerie Date: Mon, 4 Nov 2024 10:14:27 +0000 Subject: [PATCH 09/28] Edit parameters for where the offset page can be selected --- .../instruments/src/MFD/pages/FMS/F-PLN/FplnRevisionsMenu.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/FplnRevisionsMenu.tsx b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/FplnRevisionsMenu.tsx index acb912c274d..2c18b80bc5d 100644 --- a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/FplnRevisionsMenu.tsx +++ b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/FplnRevisionsMenu.tsx @@ -77,7 +77,7 @@ export function getRevisionsMenu(fpln: MfdFmsFpln, type: FplnRevisionsMenuType): }, { name: 'OFFSET', - disabled: false, + disabled: !fpln.loadedFlightPlan?.legElementAt(legIndex).isXF, onPressed: () => fpln.props.mfd.uiService.navigateTo(`fms/${fpln.props.mfd.uiService.activeUri.get().category}/f-pln-offset`), }, From c02a764687e3dba3c192b003088a5b25acde6925 Mon Sep 17 00:00:00 2001 From: Valerie Date: Mon, 4 Nov 2024 10:14:46 +0000 Subject: [PATCH 10/28] Some more style stuff. added radio buttons --- .../MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.scss | 12 +++++-- .../MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx | 33 ++++++++++++++----- 2 files changed, 34 insertions(+), 11 deletions(-) diff --git a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.scss b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.scss index fc6d7d1dc70..f16dd8f8e63 100644 --- a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.scss +++ b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.scss @@ -1,13 +1,21 @@ @import "../../../../MsfsAvionicsCommon/definitions"; .mfd-fms-fpln-offset-waypoint-text-grid { + padding-top: 20px; display: grid; - grid-template-columns: 280px 280px 15px 280px; + grid-template-columns: 200px 200px 30px 200px; + padding-left: 25px; margin-top: 10px; padding-bottom: 15px; } .mfd-offset-dist-angle-input-grid { display: grid; - grid-template-columns: auto; + grid-template-columns: 400px; + padding-top: 20px; +} + +mfd-offset-dist-input-grid { + display: grid; + grid-template-columns: 200px 200px; } diff --git a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx index 6e42751545d..3cfc476662f 100644 --- a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx +++ b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx @@ -9,6 +9,7 @@ import { FlightPlanLeg } from '@fmgc/flightplanning/legs/FlightPlanLeg'; import { FlightPlanIndex } from '@fmgc/index'; import { InputField } from 'instruments/src/MFD/pages/common/InputField'; import { OffsetAngleFormat, OffsetDistFormat } from 'instruments/src/MFD/pages/common/DataEntryFormats'; +import { RadioButtonGroup } from 'instruments/src/MFD/pages/common/RadioButtonGroup'; interface MfdFmsFplnOffsetProps extends AbstractMfdPageProps {} @@ -33,9 +34,12 @@ export class MfdFmsFplnOffset extends FmsPage { private offsetDist = Subject.create(null); + private OffsetLRIndex = Subject.create(1); + protected onNewData(): void { this.offsetInterceptAngle.set(30); this.offsetDist.set(5); + this.OffsetLRIndex.set(1); // Use active FPLN for building the list (page only works for active anyways) const activeFpln = this.props.fmcService.master?.flightPlanService.active; if (activeFpln) { @@ -133,7 +137,7 @@ export class MfdFmsFplnOffset extends FmsPage {
INTERCEPT ANGLE
-
+
dataEntryFormat={new OffsetAngleFormat()} value={this.offsetInterceptAngle} @@ -145,14 +149,25 @@ export class MfdFmsFplnOffset extends FmsPage {
OFFSET DIST
-
- - dataEntryFormat={new OffsetDistFormat()} - value={this.offsetDist} - errorHandler={(e) => this.props.fmcService.master?.showFmsErrorMessage(e)} - hEventConsumer={this.props.mfd.hEventConsumer} - interactionMode={this.props.mfd.interactionMode} - /> +
+
+ + dataEntryFormat={new OffsetDistFormat()} + value={this.offsetDist} + errorHandler={(e) => this.props.fmcService.master?.showFmsErrorMessage(e)} + hEventConsumer={this.props.mfd.hEventConsumer} + interactionMode={this.props.mfd.interactionMode} + /> +
+
+ +
From 74a2ff9b1f96ea8e25eab165ee0eadf71b86f2ab Mon Sep 17 00:00:00 2001 From: Valerie Date: Mon, 4 Nov 2024 10:37:02 +0000 Subject: [PATCH 11/28] Added offset Data to the flightplan data --- .../fmgc/src/flightplanning/data/flightplan.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/fbw-a32nx/src/systems/fmgc/src/flightplanning/data/flightplan.ts b/fbw-a32nx/src/systems/fmgc/src/flightplanning/data/flightplan.ts index 88480f20746..e0d84e7621c 100644 --- a/fbw-a32nx/src/systems/fmgc/src/flightplanning/data/flightplan.ts +++ b/fbw-a32nx/src/systems/fmgc/src/flightplanning/data/flightplan.ts @@ -74,3 +74,19 @@ export interface StepData { ident: string; } + +export interface OffsetData { + interceptAngle?: number; + + offsetDistance?: NauticalMiles; + + offsetDirection?: TurnDirection; + + offsetMetadata: offsetMetadata; +} + +export enum offsetMetadata { + Start = 0, + Intermediate = 1, + End = 2, +} From 72921a20386d5cf2b0eab75bfb5927f68ddac6a7 Mon Sep 17 00:00:00 2001 From: Valerie Date: Mon, 4 Nov 2024 10:45:52 +0000 Subject: [PATCH 12/28] Better naming --- .../src/systems/fmgc/src/flightplanning/data/flightplan.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fbw-a32nx/src/systems/fmgc/src/flightplanning/data/flightplan.ts b/fbw-a32nx/src/systems/fmgc/src/flightplanning/data/flightplan.ts index e0d84e7621c..fb09acffa21 100644 --- a/fbw-a32nx/src/systems/fmgc/src/flightplanning/data/flightplan.ts +++ b/fbw-a32nx/src/systems/fmgc/src/flightplanning/data/flightplan.ts @@ -82,10 +82,10 @@ export interface OffsetData { offsetDirection?: TurnDirection; - offsetMetadata: offsetMetadata; + offsetFlags: offsetFlags; } -export enum offsetMetadata { +export enum offsetFlags { Start = 0, Intermediate = 1, End = 2, From 6fa65c98d820bdc1ceb2f9b404a9266f6c5caa7c Mon Sep 17 00:00:00 2001 From: Valerie Date: Mon, 4 Nov 2024 10:46:21 +0000 Subject: [PATCH 13/28] Adding offset to the flight planning --- .../systems/fmgc/src/flightplanning/legs/FlightPlanLeg.ts | 7 ++++++- .../fmgc/src/flightplanning/legs/ReadonlyFlightPlanLeg.ts | 4 +++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/fbw-a32nx/src/systems/fmgc/src/flightplanning/legs/FlightPlanLeg.ts b/fbw-a32nx/src/systems/fmgc/src/flightplanning/legs/FlightPlanLeg.ts index 79cd16f122e..7211831c382 100644 --- a/fbw-a32nx/src/systems/fmgc/src/flightplanning/legs/FlightPlanLeg.ts +++ b/fbw-a32nx/src/systems/fmgc/src/flightplanning/legs/FlightPlanLeg.ts @@ -19,7 +19,7 @@ import { procedureLegIdentAndAnnotation } from '@fmgc/flightplanning/legs/Flight import { WaypointFactory } from '@fmgc/flightplanning/waypoints/WaypointFactory'; import { FlightPlanSegment } from '@fmgc/flightplanning/segments/FlightPlanSegment'; import { EnrouteSegment } from '@fmgc/flightplanning/segments/EnrouteSegment'; -import { HoldData } from '@fmgc/flightplanning/data/flightplan'; +import { HoldData, OffsetData } from '@fmgc/flightplanning/data/flightplan'; import { CruiseStepEntry } from '@fmgc/flightplanning/CruiseStep'; import { WaypointConstraintType, AltitudeConstraint, SpeedConstraint } from '@fmgc/flightplanning/data/constraint'; import { MagVar } from '@microsoft/msfs-sdk'; @@ -43,6 +43,7 @@ export interface SerializedFlightPlanLeg { cruiseStep: CruiseStepEntry | undefined; pilotEnteredAltitudeConstraint: AltitudeConstraint | undefined; pilotEnteredSpeedConstraint: SpeedConstraint | undefined; + lateralOffset: OffsetData | undefined; } export enum FlightPlanLegFlags { @@ -105,6 +106,8 @@ export class FlightPlanLeg implements ReadonlyFlightPlanLeg { calculated: LegCalculations | undefined; + lateralOffset: OffsetData | undefined = undefined; + serialize(): SerializedFlightPlanLeg { return { ident: this.ident, @@ -123,6 +126,7 @@ export class FlightPlanLeg implements ReadonlyFlightPlanLeg { pilotEnteredSpeedConstraint: this.pilotEnteredSpeedConstraint ? JSON.parse(JSON.stringify(this.pilotEnteredSpeedConstraint)) : undefined, + lateralOffset: this.lateralOffset ? JSON.parse(JSON.stringify(this.lateralOffset)) : undefined, }; } @@ -143,6 +147,7 @@ export class FlightPlanLeg implements ReadonlyFlightPlanLeg { leg.cruiseStep = serialized.cruiseStep; leg.pilotEnteredAltitudeConstraint = serialized.pilotEnteredAltitudeConstraint; leg.pilotEnteredSpeedConstraint = serialized.pilotEnteredSpeedConstraint; + leg.lateralOffset = serialized.lateralOffset; return leg; } diff --git a/fbw-a32nx/src/systems/fmgc/src/flightplanning/legs/ReadonlyFlightPlanLeg.ts b/fbw-a32nx/src/systems/fmgc/src/flightplanning/legs/ReadonlyFlightPlanLeg.ts index 9611b8c7687..c28458cd3dd 100644 --- a/fbw-a32nx/src/systems/fmgc/src/flightplanning/legs/ReadonlyFlightPlanLeg.ts +++ b/fbw-a32nx/src/systems/fmgc/src/flightplanning/legs/ReadonlyFlightPlanLeg.ts @@ -5,7 +5,7 @@ import { LegType } from '@flybywiresim/fbw-sdk'; import { FlightPlanSegment } from '@fmgc/flightplanning/segments/FlightPlanSegment'; import { FlightPlanLegDefinition } from '@fmgc/flightplanning/legs/FlightPlanLegDefinition'; -import { HoldData } from '@fmgc/flightplanning/data/flightplan'; +import { HoldData, OffsetData } from '@fmgc/flightplanning/data/flightplan'; import { WaypointConstraintType, AltitudeConstraint, SpeedConstraint } from '@fmgc/flightplanning/data/constraint'; import { CruiseStepEntry } from '@fmgc/flightplanning/CruiseStep'; @@ -39,6 +39,8 @@ export interface ReadonlyFlightPlanLeg { readonly pilotEnteredAltitudeConstraint: AltitudeConstraint | undefined; readonly pilotEnteredSpeedConstraint: SpeedConstraint | undefined; + + readonly lateralOffset: OffsetData | undefined; } export interface ReadonlyDiscontinuity { From f9c1629e58dde78b19531b49d3bc69c8698892a0 Mon Sep 17 00:00:00 2001 From: Valerie Date: Mon, 4 Nov 2024 11:45:56 +0000 Subject: [PATCH 14/28] Add lateraloffset to withPilotEnteredDataFrom. Not sure if needed? but given the surrounding data I think it's right --- .../src/systems/fmgc/src/flightplanning/legs/FlightPlanLeg.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/fbw-a32nx/src/systems/fmgc/src/flightplanning/legs/FlightPlanLeg.ts b/fbw-a32nx/src/systems/fmgc/src/flightplanning/legs/FlightPlanLeg.ts index 7211831c382..b4fdfa2fa60 100644 --- a/fbw-a32nx/src/systems/fmgc/src/flightplanning/legs/FlightPlanLeg.ts +++ b/fbw-a32nx/src/systems/fmgc/src/flightplanning/legs/FlightPlanLeg.ts @@ -293,6 +293,7 @@ export class FlightPlanLeg implements ReadonlyFlightPlanLeg { this.pilotEnteredSpeedConstraint = from.pilotEnteredSpeedConstraint; this.constraintType = from.constraintType; this.cruiseStep = from.cruiseStep; + this.lateralOffset = from.lateralOffset; /** * Don't copy holds. When we string the arrival to the upstream plan, the upstream plan may have a hold * and the downstream leg doesn't, but the upstream leg is the one that's kept. In this case, we don't want to remove the hold From edf7fad71c7046f4e45031bbff5ba7cb96b49704 Mon Sep 17 00:00:00 2001 From: Valerie Date: Mon, 4 Nov 2024 14:16:35 +0000 Subject: [PATCH 15/28] Fixed the offset dist selection layouting. I am a buffoon who is blind --- .../src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.scss | 7 +++---- .../src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx | 8 ++++---- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.scss b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.scss index f16dd8f8e63..1494cbb0f23 100644 --- a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.scss +++ b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.scss @@ -11,11 +11,10 @@ .mfd-offset-dist-angle-input-grid { display: grid; - grid-template-columns: 400px; - padding-top: 20px; + grid-template-columns: auto; } -mfd-offset-dist-input-grid { +.mfd-offset-dist-input-grid { display: grid; - grid-template-columns: 200px 200px; + grid-template-columns: 75px 75px; } diff --git a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx index 3cfc476662f..bd30cd3b85a 100644 --- a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx +++ b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx @@ -134,10 +134,10 @@ export class MfdFmsFplnOffset extends FmsPage {
-
+
INTERCEPT ANGLE
-
+
dataEntryFormat={new OffsetAngleFormat()} value={this.offsetInterceptAngle} @@ -146,11 +146,11 @@ export class MfdFmsFplnOffset extends FmsPage { interactionMode={this.props.mfd.interactionMode} />
-
+
OFFSET DIST
-
+
dataEntryFormat={new OffsetDistFormat()} value={this.offsetDist} From 3ce556a291ca03ed47e189a07088529d89402fc3 Mon Sep 17 00:00:00 2001 From: Valerie Date: Mon, 4 Nov 2024 14:17:08 +0000 Subject: [PATCH 16/28] Make elements not squished --- .../instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.scss b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.scss index 1494cbb0f23..3dd0e87110c 100644 --- a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.scss +++ b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.scss @@ -16,5 +16,5 @@ .mfd-offset-dist-input-grid { display: grid; - grid-template-columns: 75px 75px; + grid-template-columns: 150px 150px; } From e8f2d047d2b3ff4ae8745d2ea0c03fb3c4b13b4d Mon Sep 17 00:00:00 2001 From: Valerie Date: Mon, 4 Nov 2024 14:31:17 +0000 Subject: [PATCH 17/28] Margins futzed with --- .../src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx index bd30cd3b85a..5ad54884c32 100644 --- a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx +++ b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx @@ -132,7 +132,7 @@ export class MfdFmsFplnOffset extends FmsPage { />
-
+
INTERCEPT ANGLE @@ -146,11 +146,11 @@ export class MfdFmsFplnOffset extends FmsPage { interactionMode={this.props.mfd.interactionMode} />
-
+
OFFSET DIST
-
+
dataEntryFormat={new OffsetDistFormat()} value={this.offsetDist} @@ -164,7 +164,7 @@ export class MfdFmsFplnOffset extends FmsPage { values={['LEFT', 'RIGHT']} selectedIndex={this.OffsetLRIndex} idPrefix={`${this.props.mfd.uiService.captOrFo}_MFD_offsetDirectLeftRight`} - additionalVerticalSpacing={10} + additionalVerticalSpacing={15} color={Subject.create('green')} />
From 85aa8daf2a1f383f4741b943ea03b91642e48e68 Mon Sep 17 00:00:00 2001 From: Valerie Date: Tue, 5 Nov 2024 12:15:43 +0000 Subject: [PATCH 18/28] Set offset start waypoint to selected waypoint --- .../instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx index 5ad54884c32..2455c1bd66d 100644 --- a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx +++ b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx @@ -39,8 +39,11 @@ export class MfdFmsFplnOffset extends FmsPage { protected onNewData(): void { this.offsetInterceptAngle.set(30); this.offsetDist.set(5); - this.OffsetLRIndex.set(1); + this.OffsetLRIndex.set(0); // Use active FPLN for building the list (page only works for active anyways) + const revWptIdx = this.props.fmcService.master?.revisedWaypointIndex.get(); + this.selectedStartWaypointIndex.set(revWptIdx!); + const activeFpln = this.props.fmcService.master?.flightPlanService.active; if (activeFpln) { this.availableWaypointsToLegIndex = []; From 8f1c7880e17674a2a14017be727e1fd9da68637d Mon Sep 17 00:00:00 2001 From: Valerie Date: Wed, 6 Nov 2024 12:03:17 +0000 Subject: [PATCH 19/28] I don't want this to be the fix but --- .../instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx index 2455c1bd66d..f5de5309572 100644 --- a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx +++ b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx @@ -42,7 +42,7 @@ export class MfdFmsFplnOffset extends FmsPage { this.OffsetLRIndex.set(0); // Use active FPLN for building the list (page only works for active anyways) const revWptIdx = this.props.fmcService.master?.revisedWaypointIndex.get(); - this.selectedStartWaypointIndex.set(revWptIdx!); + this.selectedStartWaypointIndex.set(revWptIdx! - 2); const activeFpln = this.props.fmcService.master?.flightPlanService.active; if (activeFpln) { From a625c4cefb3be5b2471d23b992d6b36529f846dc Mon Sep 17 00:00:00 2001 From: Valerie Date: Wed, 6 Nov 2024 17:22:32 +0000 Subject: [PATCH 20/28] Properly picks the right start waypoint when no offset is programmed --- .../MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx index f5de5309572..0fb641d2206 100644 --- a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx +++ b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx @@ -40,10 +40,30 @@ export class MfdFmsFplnOffset extends FmsPage { this.offsetInterceptAngle.set(30); this.offsetDist.set(5); this.OffsetLRIndex.set(0); - // Use active FPLN for building the list (page only works for active anyways) - const revWptIdx = this.props.fmcService.master?.revisedWaypointIndex.get(); - this.selectedStartWaypointIndex.set(revWptIdx! - 2); + const activeLegIndex = this.props.fmcService.master?.flightPlanService.get( + this.loadedFlightPlanIndex.get(), + ).activeLegIndex; + if (activeLegIndex) { + const wpt = this.loadedFlightPlan?.allLegs + .slice(activeLegIndex + 1) + .map((el) => { + if (el.isDiscontinuity === false) { + return el.ident; + } + return null; + }) + .filter((el) => el !== null) as string[] | undefined; + if (wpt) { + this.availableWaypoints.set(wpt); + } + + const revWptIdx = this.props.fmcService.master?.revisedWaypointIndex.get(); + if (revWptIdx && this.props.fmcService.master?.revisedWaypointIndex.get() !== undefined) { + this.selectedStartWaypointIndex.set(revWptIdx - activeLegIndex - 1); + } + } + // Use active FPLN for building the list (page only works for active anyways) const activeFpln = this.props.fmcService.master?.flightPlanService.active; if (activeFpln) { this.availableWaypointsToLegIndex = []; From ead1781d6f65936f5e5037067e22f89f99645f78 Mon Sep 17 00:00:00 2001 From: Valerie Date: Thu, 7 Nov 2024 02:23:47 +0000 Subject: [PATCH 21/28] Add bottom section of the page navigation --- .../MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.scss | 9 ++- .../MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx | 70 +++++++++++++++++-- 2 files changed, 74 insertions(+), 5 deletions(-) diff --git a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.scss b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.scss index 3dd0e87110c..1e165695632 100644 --- a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.scss +++ b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.scss @@ -4,7 +4,7 @@ padding-top: 20px; display: grid; grid-template-columns: 200px 200px 30px 200px; - padding-left: 25px; + padding-left: 5px; margin-top: 10px; padding-bottom: 15px; } @@ -18,3 +18,10 @@ display: grid; grid-template-columns: 150px 150px; } + +.mfd-offset-ret-canc-tmpy-grid { + padding-top: 440px; + grid-column: span 4; + display: grid; + grid-template-columns: 251px 256px 248px; +} diff --git a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx index 0fb641d2206..39b8b724a77 100644 --- a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx +++ b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/F-PLN/MfdFmsFplnOffset.tsx @@ -10,12 +10,20 @@ import { FlightPlanIndex } from '@fmgc/index'; import { InputField } from 'instruments/src/MFD/pages/common/InputField'; import { OffsetAngleFormat, OffsetDistFormat } from 'instruments/src/MFD/pages/common/DataEntryFormats'; import { RadioButtonGroup } from 'instruments/src/MFD/pages/common/RadioButtonGroup'; +import { Footer } from 'instruments/src/MFD/pages/common/Footer'; +import { Button } from 'instruments/src/MFD/pages/common/Button'; interface MfdFmsFplnOffsetProps extends AbstractMfdPageProps {} export class MfdFmsFplnOffset extends FmsPage { private dropdownMenuRef = FSComponent.createRef(); + private returnButtonDiv = FSComponent.createRef(); + + private cancelButtonDiv = FSComponent.createRef(); + + private tmpyInsertButtonDiv = FSComponent.createRef(); + private availableWaypoints = ArraySubject.create([]); private availableWaypointsToLegIndex: number[] = []; @@ -107,6 +115,19 @@ export class MfdFmsFplnOffset extends FmsPage { } } + public onAfterRender(node: VNode): void { + super.onAfterRender(node); + + this.subs.push( + this.tmpyActive.sub((v) => { + if (this.returnButtonDiv.getOrDefault() && this.tmpyInsertButtonDiv.getOrDefault()) { + this.returnButtonDiv.instance.style.visibility = v ? 'hidden' : 'visible'; + this.tmpyInsertButtonDiv.instance.style.visibility = v ? 'hidden' : 'visible'; + } + }, true), + ); + } + render(): VNode { return ( <> @@ -115,7 +136,7 @@ export class MfdFmsFplnOffset extends FmsPage {
-
+
START WPT
@@ -135,7 +156,7 @@ export class MfdFmsFplnOffset extends FmsPage { />
-
+
END WPT
@@ -155,8 +176,8 @@ export class MfdFmsFplnOffset extends FmsPage { />
-
-
+
+
INTERCEPT ANGLE
@@ -193,9 +214,50 @@ export class MfdFmsFplnOffset extends FmsPage {
+
+
+
+
+
, + )} + onClick={() => { + this.props.mfd.uiService.navigateTo('back'); + }} + /> +
+
+
+
+ {/* end page content */} +