diff --git a/A320-main.xml b/A320-main.xml index 1d253efc..b8158454 100644 --- a/A320-main.xml +++ b/A320-main.xml @@ -458,7 +458,7 @@ </binding> </item> <item> - <label>MCDU (web)</label> + <label>Remote MCDU</label> <binding> <command>nasal</command> <script> diff --git a/Nasal/FMGC/FMGC.nas b/Nasal/FMGC/FMGC.nas index a65f6fe6..3000db0f 100644 --- a/Nasal/FMGC/FMGC.nas +++ b/Nasal/FMGC/FMGC.nas @@ -16,7 +16,7 @@ var dep = ""; var arr = ""; var n1_left = 0; var n1_right = 0; -var modelat = 0; +var modelat = ""; var mode = 0; var gs = 0; var cruiseft = 0; diff --git a/README.md b/README.md index 10c51281..05487ecf 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,8 @@ It is highly reccomended to purchase a NAVIGRAPH subscription and download their To install navdata, create a folder FMSDATA, and add it to your additional scenery folders, at the top of the list. Inside that folder, place all the XXXX.procedures.xml files, in the format FMSDATA/X/X/X/XXXX.procedures.xml. For instance, FMSDATA/Airports/E/G/K/EGKK.procedures.xml. ## Remote MCDU -If you want to run the MCDU on a phone or tablet for better realism and easier input, put mcdu.html into the FGDATA/Phi folder, run FlightGear with enabled HTTP server (i.e. command line --httpd=<Port; e.g. 8080>) and open http://<FlightGear Computer IP/Hostname; e.g. 127.0.0.1/localhost>:<Port; e.g. 8080>/mcdu.html in the browser on your phone or tablet. +If you want to run the MCDU on a your smarthphone or tablet for better realism and easier input, run FlightGear with enabled HTTP server (i.e. command line --httpd=<Port; e.g. 8080>) then go to main menu -> Instruments -> Remote MCDU. +You can generate a QR-code to lauch directly on your smartphone/tablet, first insert your local ip. Your device must run on the same local network of your computer. ## Installation If you have issues installing, please check INSTALL.MD! diff --git a/WebPanel/mcdu.html b/WebPanel/mcdu.html index 55c0ed67..d28da2fb 100644 --- a/WebPanel/mcdu.html +++ b/WebPanel/mcdu.html @@ -2,13 +2,12 @@ <html lang="en" translate="no"> <head> - <title>MCDU</title> + <title>A320 MCDU</title> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <link rel="manifest" href="mcdu_manifest.json" /> <meta name="apple-mobile-web-app-status-bar" content="#db4938" /> <meta name="theme-color" content="#db4938" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <script> let screen; let screen_src; @@ -46,31 +45,50 @@ refresh_screen(); }, true); } + + var preventzoomaction = function(e) { //https://exceptionshub.com/disable-double-tap-zoom-option-in-browser-on-touch-devices.html + var t2 = e.timeStamp; + var t1 = e.currentTarget.dataset.lastTouch || t2; + var dt = t2 - t1; + var fingers = e.touches.length; + e.currentTarget.dataset.lastTouch = t2; + + if (!dt || dt > 500 || fingers > 1) return; // not double-tap + + e.preventDefault(); + e.target.click(); + }; + window.addEventListener('load', function () { + let tds = document.querySelectorAll('.input td'); for (const td of tds) { td.addEventListener('click', function () { if (td.className == "disabled") return; press_button("button", td.textContent); }, true); + td.addEventListener('touchstart', preventzoomaction, true); } tds = document.querySelectorAll('.enter td'); for (const td of tds) { td.addEventListener('click', function () { press_button(td.getAttribute("button-side") == "l" ? "lskbutton" : "rskbutton", td.getAttribute("button-id")); }, true); + td.addEventListener('touchstart', preventzoomaction, true); } tds = document.querySelectorAll('.menu td'); for (const td of tds) { - td.addEventListener('click', function () { + td.addEventListener('click', function () { press_button("pagebutton", td.className); }, true); + td.addEventListener('touchstart', preventzoomaction, true); } tds = document.querySelectorAll('.arrows td'); for (const td of tds) { td.addEventListener('click', function () { press_button(td.className == 'airport' ? "pagebutton" : "arrowbutton", td.className); }, true); + td.addEventListener('touchstart', preventzoomaction, true); } screen = document.querySelector('img'); screen.addEventListener('load', function () { @@ -98,7 +116,6 @@ table { margin: 0; padding: 0; - touch-action: none; word-wrap: normal; overflow-wrap: normal; } @@ -113,7 +130,7 @@ padding: 0; text-align: center; outline: 1px solid gray; - touch-action: manipulation; + -ms-user-select: none; -moz-user-select: none; -webkit-user-select: none; diff --git a/gui/dialogs/mcduweb.xml b/gui/dialogs/mcduweb.xml index f4cd077b..0ce36846 100644 --- a/gui/dialogs/mcduweb.xml +++ b/gui/dialogs/mcduweb.xml @@ -10,11 +10,17 @@ <layout>vbox</layout> <pref-width>480</pref-width> + <nasal> + <open> + props.globals.initNode("/sim/http/mcduweb/local-ip", "", "STRING"); + </open> + </nasal> + <group> <layout>hbox</layout> <text> <halign>left</halign> - <label>MCDU web on browser/tablet/smartphone</label> + <label>Remote MCDU for browser/tablet/smartphone</label> </text> <button> @@ -56,7 +62,7 @@ </text> </group> - + <group> <layout>vbox</layout> @@ -95,7 +101,38 @@ </text> </group> - + + <group> + <layout>hbox</layout> + <input> + <width>220</width> + <height>25</height> + <padding>5</padding> + <label>Local IP</label> + <property>/sim/http/mcduweb/local-ip</property> + <binding> + <command>dialog-apply</command> + </binding> + <live type="bool">true</live> + </input> + <button> + <legend>get qrcode</legend> + <pref-height>25</pref-height> + <pref-width>180</pref-width> + <padding>5</padding> + <binding> + <command>nasal</command> + <script> + var _url = ""; + if (size(getprop("/sim/http/mcduweb/local-ip"))>6) { + if ( getprop("sim/http/running",0) == 1 ) _url = "http://" ~ getprop("/sim/http/mcduweb/local-ip") ~ ":" ~ getprop("/sim/http/options/listening-port") ~ "/aircraft-dir/WebPanel/mcdu.html"; + root.createChild("image").set("src", "https://qr.eletto.dev/" ~ _url).setSize(300,300).setTranslation(10,10); + } + </script> + </binding> + </button> + </group> + <canvas> <name>mcduwebqr</name> <valign>center</valign> @@ -110,9 +147,6 @@ var mcdu_canvas_dlg = canvas.get(cmdarg()); var root = mcdu_canvas_dlg.createGroup(); mcdu_canvas_dlg.setColorBackground(1, 1, 1, 1); - var _url = ""; - if( getprop("sim/http/running",0) == 1 ) _url = "http://localhost:" ~ getprop("/sim/http/options/listening-port") ~ "/aircraft-dir/WebPanel/mcdu.html"; - root.createChild("image").set("src", "https://qr.eletto.dev/" ~ _url).setSize(300,300).setTranslation(10,10); ]]> </load> <unload>