gpstrek - Create settings

pull/2952/head
Martin Boonk 2023-08-06 15:53:20 +02:00
parent 2e261b3a56
commit f8e0baa7e1
4 changed files with 193 additions and 32 deletions

View File

@ -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)

20
apps/gpstrek/default.json Normal file
View File

@ -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
}

View File

@ -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"}
]
}

156
apps/gpstrek/settings.js Normal file
View File

@ -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();
})