diff --git a/apps/openseachart/app.js b/apps/openseachart/app.js index 0d2165355..22ebaaf9a 100644 --- a/apps/openseachart/app.js +++ b/apps/openseachart/app.js @@ -5,18 +5,15 @@ var fix = {}; var last_course = -1; var cur_course = -1; var course_marker_len = g.getWidth()/4; - + +var settings = require("Storage").readJSON('openseacsettings.json', 1) || {}; + function redraw() { g.setClipRect(0,y1,g.getWidth()-1,y2); m.draw(); drawMarker(); - if (WIDGETS["gpsrec"] && WIDGETS["gpsrec"].plotTrack) { - g.flip(); // force immediate draw on double-buffered screens - track will update later - g.setColor(0.75,0.2,0); - WIDGETS["gpsrec"].plotTrack(m); - } g.setClipRect(0,0,g.getWidth()-1,g.getHeight()-1); - if (cur_course!=-1) drawCourseMarker(cur_course); + if (settings.drawcourse && cur_course!=-1) drawCourseMarker(cur_course); } function drawMarker() { @@ -43,16 +40,16 @@ Bangle.on('GPS',function(f) { txt += " - NO FIX"; else { if (fix.satellites>3 && fix.speed>2) { // only uses fixes w/ more than 3 sats and speed > 2kph - if (cur_course!=-1) cur_course = 0.8*cur_course + 0.2*fix.course; - else cur_course = fix.course; + cur_course = fix.course; if (Math.abs(cur_course-last_course)>10 && Math.abs(cur_course-last_course)<350) { - last_course = cur_course; - redraw(); + last_course = cur_course; + redraw(); } } } g.drawString(txt,g.getWidth()/2,y1 + 4); drawMarker(); + if (settings.autocenter) recenter(); }); Bangle.setGPSPower(1, "app"); diff --git a/apps/openseachart/settings.js b/apps/openseachart/settings.js new file mode 100644 index 000000000..3df03f101 --- /dev/null +++ b/apps/openseachart/settings.js @@ -0,0 +1,41 @@ +// This file should contain exactly one function, which shows the app's settings +/** + * @param {function} back Use back() to return to settings menu + */ +(function(back) { + const SETTINGS_FILE = 'openseacsettings.json' + // initialize with default settings... + let s = { + 'drawcourse': true, + 'autocenter': false, + } + // ...and overwrite them with any saved values + // This way saved values are preserved if a new version adds more settings + const storage = require('Storage') + const saved = storage.readJSON(SETTINGS_FILE, 1) || {} + for (const key in saved) { + s[key] = saved[key]; + } + // creates a function to safe a specific setting, e.g. save('color')(1) + function save(key) { + return function (value) { + s[key] = value; + storage.write(SETTINGS_FILE, s); + } + } + const menu = { + '': { 'title': 'OpenSeaChart' }, + '< Back': back, + 'Draw course': { + value: s.drawcourse, + format: boolFormat, + onchange: save('drawcourse'), + }, + 'Auto center': { + value: s.autocenter, + format: boolFormat, + onchange: save('autoconnect'), + } + } + E.showMenu(menu); +})