diff --git a/A320-main.xml b/A320-main.xml index 1cf444e8..92af8949 100644 --- a/A320-main.xml +++ b/A320-main.xml @@ -209,6 +209,15 @@ <dialog-name>autopilot</dialog-name> </binding> </item> + <item> + <label>Load Flightplans</label> + <binding> + <command>nasal</command> + <script> + acconfig.loadflightplan_dlg.open(); + </script> + </binding> + </item> </menu> <menu n="103"> <label>DU</label> diff --git a/AircraftConfig/acconfig.nas b/AircraftConfig/acconfig.nas index 1b517f53..0ca07969 100644 --- a/AircraftConfig/acconfig.nas +++ b/AircraftConfig/acconfig.nas @@ -119,6 +119,7 @@ var updated_dlg = gui.Dialog.new("/sim/gui/dialogs/acconfig/updated/dialog", "Ai var error_mismatch = gui.Dialog.new("/sim/gui/dialogs/acconfig/error/mismatch/dialog", "Aircraft/A320-family/AircraftConfig/error-mismatch.xml"); var fuel_dlg = gui.Dialog.new("/sim/gui/dialogs/acconfig/fuel/dialog", "Aircraft/A320-family/AircraftConfig/fuel.xml"); var groundservices_dlg = gui.Dialog.new("/sim/gui/dialogs/acconfig/groundsrvc/dialog", "Aircraft/A320-family/AircraftConfig/groundservices.xml"); +var loadflightplan_dlg = gui.Dialog.new("/sim/gui/dialogs/acconfig/loadfpln/dialog","Aircraft/A320-family/AircraftConfig/load-flightplan.xml"); var du_quality = gui.Dialog.new("/sim/gui/dialogs/acconfig/du-quality/dialog", "Aircraft/A320-family/AircraftConfig/du-quality.xml"); var rendering_dlg = gui.Dialog.new("/sim/gui/dialogs/rendering/dialog", "Aircraft/A320-family/AircraftConfig/rendering.xml"); spinning.start(); diff --git a/AircraftConfig/load-flightplan.xml b/AircraftConfig/load-flightplan.xml new file mode 100644 index 00000000..29103f04 --- /dev/null +++ b/AircraftConfig/load-flightplan.xml @@ -0,0 +1,98 @@ +<?xml version="1.0" encoding="UTF-8" ?> + +<!-- Copyright (c) 2020 Josh Davidson (Octal450) --> + +<!-- A3XX Load Flightplans --> + +<PropertyList> + + <name>load-flightplans</name> + <layout>vbox</layout> + + <nasal> + <open><![CDATA[ + var loadfpl = func(path) { + fmgc.flightPlanController.loadFlightPlan(path.getValue()); + } + + var defaultDirInFileSelector = getprop("/sim/fg-home") ~ "/Export"; + + var file_selector = gui.FileSelector.new( + callback: loadfpl, title: "Load flightplan", button: "Load", + dir: defaultDirInFileSelector, dotfiles: 1, pattern: ["*.xml","*.gpx","*.fgfp"]); + + ]]></open> + + <close><![CDATA[ + file_selector.del(); + ]]></close> + </nasal> + + <group> + <layout>hbox</layout> + <text> + <halign>left</halign> + <label>Load Flightplans</label> + </text> + <button> + <halign>right</halign> + <pref-width>20</pref-width> + <pref-height>20</pref-height> + <legend>X</legend> + <key>Esc</key> + <binding> + <command>dialog-close</command> + </binding> + </button> + </group> + + <hrule/> + + <group> + <layout>vbox</layout> + <text> + <halign>left</halign> + <label>This dialog allows users to load their own .gpx / .fgfp flightplans.</label> + </text> + <text> + <halign>left</halign> + <label>Follow these guidelines. Not doing so will cause problems!</label> + </text> + <text> + <halign>left</halign> + <label>1. You must have a departure and destination airport set on MCDU INIT A</label> + </text> + <text> + <halign>left</halign> + <label>2. Your file's destination / departure must match exactly the one set in INITA</label> + </text> + <text> + <halign>left</halign> + <label>3. If your file includes SIDS / STARS you CANNOT change them in the MCDU.</label> + </text> + <text> + <halign>left</halign> + <label>If you have a NAVIGRAPH subcription, we reccomend to load them in the MCDU instead of here.</label> + </text> + <group> + <layout>hbox</layout> + <text> + <halign>left</halign> + <label>Load a flightplan</label> + </text> + + <button> + <legend>Load flightplan</legend> + <equal>true</equal> + <enable> + <property>FMGC/internal/tofrom-set</property> + </enable> + <binding> + <command>nasal</command> + <script>file_selector.open()</script> + </binding> + </button> + </group> + </group> + +</PropertyList> diff --git a/Nasal/FMGC/flightplan.nas b/Nasal/FMGC/flightplan.nas index 40a21c63..978bc81c 100644 --- a/Nasal/FMGC/flightplan.nas +++ b/Nasal/FMGC/flightplan.nas @@ -30,7 +30,7 @@ var wpCoursePrev = [[props.globals.initNode("/FMGC/flightplan[0]/wp[0]/course-fr var wpDistancePrev = [[props.globals.initNode("/FMGC/flightplan[0]/wp[0]/distance-from-prev", 0, "DOUBLE")], [props.globals.initNode("/FMGC/flightplan[1]/wp[0]/distance-from-prev", 0, "DOUBLE")], [props.globals.initNode("/FMGC/flightplan[2]/wp[0]/distance-from-prev", 0, "DOUBLE")]]; var flightPlanController = { - flightplans: [createFlightplan(), createFlightplan(), createFlightplan()], + flightplans: [createFlightplan(), createFlightplan(), createFlightplan(), nil], temporaryFlag: [0, 0], # These flags are only for the main flgiht-plan @@ -80,6 +80,17 @@ var flightPlanController = { me.flightPlanChanged(n); }, + loadFlightPlan: func(path) { + call(func {me.flightplans[3] = createFlightplan(path);}, nil, var err = []); + if (size(err) or me.flightplans[3] == nil) { + print(err[0]); + print("Load failed."); + } + me.flightplans[3].departure = airportinfo(getprop("FMGC/internal/dep-arpt")); + me.flightplans[3].destination = airportinfo(getprop("FMGC/internal/arr-arpt")); + me.destroyTemporaryFlightPlan(3, 1); + }, + destroyTemporaryFlightPlan: func(n, a) { # a = 1 activate, a = 0 erase if (a == 1) { flightPlanTimer.stop(); @@ -88,6 +99,7 @@ var flightPlanController = { me.flightPlanChanged(2); flightPlanTimer.start(); } + if (n == 3) { return; } me.resetFlightplan(n); me.temporaryFlag[n] = 0; if (canvas_mcdu.myDirTo[n] != nil) {