mirror of https://github.com/espruino/BangleApps
gpstrek - Create settings
parent
2e261b3a56
commit
f8e0baa7e1
|
@ -7,25 +7,12 @@ const MODE_SLICES = 2;
|
|||
|
||||
const STORAGE = require("Storage");
|
||||
const BAT_FULL = require("Storage").readJSON("setting.json").batFullVoltage || 0.3144;
|
||||
const SETTINGS = {
|
||||
mapCompass: true,
|
||||
mapScale:0.2, //initial value
|
||||
mapRefresh:1000, //minimum time in ms between refreshs of the map
|
||||
mapChunkSize: 5, //render this many waypoints at a time
|
||||
overviewScroll: 30, //scroll this amount on swipe in pixels
|
||||
overviewScale: 0.02, //initial value
|
||||
refresh:500, //general refresh interval in ms
|
||||
refreshLocked:3000, //general refresh interval when Bangle is locked
|
||||
cacheMinFreeMem:2000,
|
||||
cacheMaxEntries:0,
|
||||
minCourseChange: 5, //course change needed in degrees before redrawing the map
|
||||
minPosChange: 5, //position change needed in pixels before redrawing the map
|
||||
waypointChangeDist: 50, //distance in m to next waypoint before advancing automatically
|
||||
queueWaitingTime: 5, // waiting time during processing of task queue items when running with timeouts
|
||||
autosearch: true,
|
||||
maxDistForAutosearch: 300,
|
||||
autosearchLimit: 3
|
||||
};
|
||||
|
||||
|
||||
const SETTINGS = Object.assign(
|
||||
require('Storage').readJSON("gpstrek.default.json", true) || {},
|
||||
require('Storage').readJSON("gpstrek.json", true) || {}
|
||||
);
|
||||
|
||||
let init = function(){
|
||||
global.screen = 1;
|
||||
|
@ -38,7 +25,6 @@ let init = function(){
|
|||
|
||||
Bangle.loadWidgets();
|
||||
WIDGETS.gpstrek.start(false);
|
||||
if (!WIDGETS.gpstrek.getState().numberOfSlices) WIDGETS.gpstrek.getState().numberOfSlices = 2;
|
||||
if (!WIDGETS.gpstrek.getState().mode) WIDGETS.gpstrek.getState().mode = MODE_MENU;
|
||||
};
|
||||
|
||||
|
@ -459,7 +445,7 @@ let getMapSlice = function(){
|
|||
if (!isMapOverview){
|
||||
drawCurrentPos();
|
||||
}
|
||||
if (!isMapOverview && renderInTimeouts){
|
||||
if (SETTINGS.mapCompass && !isMapOverview && renderInTimeouts){
|
||||
drawMapCompass();
|
||||
}
|
||||
if (renderInTimeouts) drawInterface();
|
||||
|
@ -1254,11 +1240,6 @@ let showMenu = function(){
|
|||
"Background" : showBackgroundMenu,
|
||||
"Calibration": showCalibrationMenu,
|
||||
"Reset" : ()=>{ E.showPrompt("Do Reset?").then((v)=>{ if (v) {WIDGETS.gpstrek.resetState(); removeMenu();} else {E.showMenu(mainmenu);}}).catch(()=>{E.showMenu(mainmenu);});},
|
||||
"Info rows" : {
|
||||
value : WIDGETS.gpstrek.getState().numberOfSlices,
|
||||
min:1,max:6,step:1,
|
||||
onchange : v => { WIDGETS.gpstrek.getState().numberOfSlices = v; }
|
||||
},
|
||||
};
|
||||
|
||||
E.showMenu(mainmenu);
|
||||
|
@ -1374,7 +1355,7 @@ const finishData = {
|
|||
};
|
||||
|
||||
let getSliceHeight = function(number){
|
||||
return Math.floor(Bangle.appRect.h/WIDGETS.gpstrek.getState().numberOfSlices);
|
||||
return Math.floor(Bangle.appRect.h/SETTINGS.numberOfSlices);
|
||||
};
|
||||
|
||||
let compassSlice = getCompassSlice();
|
||||
|
@ -1455,7 +1436,6 @@ let updateRouting = function() {
|
|||
lastSearch = Date.now();
|
||||
autosearchCounter++;
|
||||
}
|
||||
let counter = 0;
|
||||
while (hasNext(s.route) && distance(s.currentPos,get(s.route)) < SETTINGS.waypointChangeDist) {
|
||||
next(s.route);
|
||||
minimumDistance = Number.MAX_VALUE;
|
||||
|
@ -1479,7 +1459,7 @@ let updateSlices = function(){
|
|||
slices.push(healthSlice);
|
||||
slices.push(systemSlice);
|
||||
slices.push(system2Slice);
|
||||
maxSlicePages = Math.ceil(slices.length/s.numberOfSlices);
|
||||
maxSlicePages = Math.ceil(slices.length/SETTINGS.numberOfSlices);
|
||||
};
|
||||
|
||||
let page_slices = 0;
|
||||
|
@ -1515,9 +1495,9 @@ let drawSlices = function(){
|
|||
if (force){
|
||||
clear();
|
||||
}
|
||||
let firstSlice = page_slices*s.numberOfSlices;
|
||||
let firstSlice = page_slices*SETTINGS.numberOfSlices;
|
||||
let sliceHeight = getSliceHeight();
|
||||
let slicesToDraw = slices.slice(firstSlice,firstSlice + s.numberOfSlices);
|
||||
let slicesToDraw = slices.slice(firstSlice,firstSlice + SETTINGS.numberOfSlices);
|
||||
for (let slice of slicesToDraw) {
|
||||
g.reset();
|
||||
if (!slice.refresh || slice.refresh() || force)
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
{
|
||||
"mapCompass": true,
|
||||
"mapScale":0.5,
|
||||
"mapRefresh":1000,
|
||||
"mapChunkSize": 15,
|
||||
"overviewScroll": 30,
|
||||
"overviewScale": 0.02,
|
||||
"refresh":500,
|
||||
"refreshLocked":3000,
|
||||
"cacheMinFreeMem":2000,
|
||||
"cacheMaxEntries":0,
|
||||
"minCourseChange": 5,
|
||||
"minPosChange": 5,
|
||||
"waypointChangeDist": 50,
|
||||
"queueWaitingTime": 5,
|
||||
"autosearch": true,
|
||||
"maxDistForAutosearch": 300,
|
||||
"autosearchLimit": 3,
|
||||
"numberOfSlices": 3
|
||||
}
|
|
@ -12,8 +12,13 @@
|
|||
"interface" : "interface.html",
|
||||
"storage": [
|
||||
{"name":"gpstrek.app.js","url":"app.js"},
|
||||
{"name":"gpstrek.settings.js","url":"settings.js"},
|
||||
{"name":"gpstrek.default.json","url":"default.json"},
|
||||
{"name":"gpstrek.wid.js","url":"widget.js"},
|
||||
{"name":"gpstrek.img","url":"app-icon.js","evaluate":true}
|
||||
],
|
||||
"data": [{"name":"gpstrek.state.json"}]
|
||||
"data": [
|
||||
{"name":"gpstrek.state.json"},
|
||||
{"name":"gpstrek.json"}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -0,0 +1,156 @@
|
|||
(function(back) {
|
||||
const FILE="gpstrek.json";
|
||||
let settings;
|
||||
|
||||
function writeSettings(key, value) {
|
||||
var s = require('Storage').readJSON(FILE, true) || {};
|
||||
s[key] = value;
|
||||
require('Storage').writeJSON(FILE, s);
|
||||
readSettings();
|
||||
}
|
||||
|
||||
function readSettings(){
|
||||
settings = Object.assign(
|
||||
require('Storage').readJSON("gpstrek.default.json", true) || {},
|
||||
require('Storage').readJSON(FILE, true) || {}
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
function showMapMenu(){
|
||||
var menu = {
|
||||
'': { 'title': 'Map', back: showMainMenu },
|
||||
'Show compass on map': {
|
||||
value: !!settings.mapCompass,
|
||||
onchange: v => {
|
||||
writeSettings("mapCompass",v);
|
||||
},
|
||||
},
|
||||
'Initial map scale': {
|
||||
value: settings.mapScale,
|
||||
min: 0.01,max: 2, step:0.01,
|
||||
onchange: v => {
|
||||
writeSettings("mapScale",v);
|
||||
},
|
||||
},
|
||||
'Rendered waypoints': {
|
||||
value: settings.mapChunkSize,
|
||||
min: 5,max: 60, step:5,
|
||||
onchange: v => {
|
||||
writeSettings("mapChunkSize",v);
|
||||
}
|
||||
},
|
||||
'Overview scroll': {
|
||||
value: settings.overviewScroll,
|
||||
min: 10,max: 100, step:10,
|
||||
format: v => v + "px",
|
||||
onchange: v => {
|
||||
writeSettings("overviewScroll",v);
|
||||
}
|
||||
},
|
||||
'Initial overview scale': {
|
||||
value: settings.overviewScale,
|
||||
min: 0.005,max: 0.1, step:0.005,
|
||||
onchange: v => {
|
||||
writeSettings("overviewScale",v);
|
||||
}
|
||||
}
|
||||
};
|
||||
E.showMenu(menu);
|
||||
}
|
||||
|
||||
function showRoutingMenu(){
|
||||
var menu = {
|
||||
'': { 'title': 'Routing', back: showMainMenu },
|
||||
'Auto search closest waypoint': {
|
||||
value: !!settings.autosearch,
|
||||
onchange: v => {
|
||||
writeSettings("autosearch",v);
|
||||
},
|
||||
},
|
||||
'Auto search limit': {
|
||||
value: settings.autosearchLimit,
|
||||
onchange: v => {
|
||||
writeSettings("autosearchLimit",v);
|
||||
},
|
||||
},
|
||||
'Waypoint change distance': {
|
||||
value: settings.waypointChangeDist,
|
||||
format: v => v + "m",
|
||||
min: 5,max: 200, step:5,
|
||||
onchange: v => {
|
||||
writeSettings("waypointChangeDist",v);
|
||||
},
|
||||
}
|
||||
};
|
||||
E.showMenu(menu);
|
||||
}
|
||||
|
||||
function showRefreshMenu(){
|
||||
var menu = {
|
||||
'': { 'title': 'Refresh', back: showMainMenu },
|
||||
'Unlocked refresh': {
|
||||
value: settings.refresh,
|
||||
format: v => v + "ms",
|
||||
min: 250,max: 5000, step:250,
|
||||
onchange: v => {
|
||||
writeSettings("refresh",v);
|
||||
}
|
||||
},
|
||||
'Locked refresh': {
|
||||
value: settings.refreshLocked,
|
||||
min: 1000,max: 60000, step:1000,
|
||||
format: v => v + "ms",
|
||||
onchange: v => {
|
||||
writeSettings("refreshLocked",v);
|
||||
}
|
||||
},
|
||||
'Minimum refresh': {
|
||||
value: settings.mapRefresh,
|
||||
format: v => v + "ms",
|
||||
min: 250,max: 5000, step:250,
|
||||
onchange: v => {
|
||||
writeSettings("mapRefresh",v);
|
||||
}
|
||||
},
|
||||
'Minimum course change': {
|
||||
value: settings.minCourseChange,
|
||||
min: 0,max: 180, step:1,
|
||||
format: v => v + "°",
|
||||
onchange: v => {
|
||||
writeSettings("minCourseChange",v);
|
||||
}
|
||||
},
|
||||
'Minimum position change': {
|
||||
value: settings.minPosChange,
|
||||
min: 0,max: 50, step:1,
|
||||
format: v => v + "px",
|
||||
onchange: v => {
|
||||
writeSettings("minPosChange",v);
|
||||
}
|
||||
}
|
||||
};
|
||||
E.showMenu(menu);
|
||||
}
|
||||
|
||||
|
||||
function showMainMenu(){
|
||||
var mainmenu = {
|
||||
'': { 'title': 'GPS Trekking', back: back },
|
||||
'Map': showMapMenu,
|
||||
'Routing': showRoutingMenu,
|
||||
'Refresh': showRefreshMenu,
|
||||
"Info rows" : {
|
||||
value : settings.numberOfSlices,
|
||||
min:1,max:6,step:1,
|
||||
onchange : v => {
|
||||
writeSettings("numberOfSlices",v);
|
||||
}
|
||||
},
|
||||
};
|
||||
E.showMenu(mainmenu);
|
||||
}
|
||||
|
||||
readSettings();
|
||||
showMainMenu();
|
||||
})
|
Loading…
Reference in New Issue