BangleApps/apps/smclock/settings.js

91 lines
2.5 KiB
JavaScript
Raw Permalink Normal View History

2022-03-02 15:34:35 +00:00
(function (back) {
2024-11-04 09:54:14 +00:00
// settings menu for Monogram Watch Face
// Anton Clock settings were used as template
// helper functions taken from Anton Clock
2022-03-03 22:30:34 +00:00
var FILE = "smclock.json";
2022-03-02 15:34:35 +00:00
// load settings from the file
// assign default values if it doesn't exist
2022-03-03 22:30:34 +00:00
var settings = Object.assign({
2022-03-03 20:46:26 +00:00
dateFormat: "Short",
drawInterval: 10,
pollInterval: 60,
showAnalogFace: false,
showWeekInfo: false,
useVectorFont: false,
2022-03-03 22:30:34 +00:00
}, require("Storage").readJSON(FILE, true) || {});
2022-02-25 20:54:38 +00:00
2022-03-02 15:34:35 +00:00
// write the new settings to the file
2022-03-03 22:30:34 +00:00
function writeSettings() {require("Storage").writeJSON(FILE, settings);}
2022-02-25 20:54:38 +00:00
2022-03-02 15:34:35 +00:00
// helper method which uses int-based menu item for set of string values
2022-02-25 20:54:38 +00:00
function stringItems(startvalue, writer, values) {
return {
2022-03-02 15:34:35 +00:00
value: startvalue === undefined ? 0 : values.indexOf(startvalue),
2022-03-03 22:30:34 +00:00
format: v => values[v],
2022-02-25 20:54:38 +00:00
min: 0,
max: values.length - 1,
wrap: true,
step: 1,
2022-03-03 22:30:34 +00:00
onchange: v => {
2022-02-25 20:54:38 +00:00
writer(values[v]);
writeSettings();
2022-03-02 15:34:35 +00:00
},
2022-02-25 20:54:38 +00:00
};
}
2022-03-02 15:34:35 +00:00
// helper method which breaks string set settings down to local settings object
2022-02-25 20:54:38 +00:00
function stringInSettings(name, values) {
2022-03-02 15:34:35 +00:00
return stringItems(settings[name], (v) => (settings[name] = v), values);
2022-02-25 20:54:38 +00:00
}
2022-03-02 15:34:35 +00:00
// settings menu
2022-02-25 20:54:38 +00:00
var mainmenu = {
2022-03-03 22:30:34 +00:00
"": {title: "Monogram Clock",},
2022-02-25 20:54:38 +00:00
"< Back": () => back(),
2022-03-02 15:34:35 +00:00
"Analog Face": {
value:
settings.showAnalogFace !== undefined ? settings.showAnalogFace : false,
2022-03-03 22:30:34 +00:00
onchange: v => {
settings.showAnalogFace = v;
2022-02-25 20:54:38 +00:00
writeSettings();
2022-03-02 15:34:35 +00:00
},
2022-02-25 20:54:38 +00:00
},
2022-03-15 16:09:14 +00:00
"Background": stringInSettings("backgroundImage", ["3bit", "4bit"]),
2022-03-03 15:38:29 +00:00
Date: stringInSettings("dateFormat", ["Long", "Short"]),
2022-03-03 12:36:56 +00:00
"Draw Interval": {
value: settings.drawInterval,
2022-03-03 22:30:34 +00:00
onchange: v => {
2022-03-03 12:36:56 +00:00
settings.drawInterval = v;
writeSettings();
},
},
"Poll Interval": {
value: settings.pollInterval,
2022-03-03 22:30:34 +00:00
onchange: v => {
2022-03-03 12:36:56 +00:00
settings.pollInterval = v;
writeSettings();
},
},
2022-03-02 15:34:35 +00:00
"Week Info": {
value:
settings.showWeekInfo !== undefined ? settings.showWeekInfo : false,
2022-03-03 22:30:34 +00:00
onchange: v => {
settings.showWeekInfo = v;
2022-02-25 20:54:38 +00:00
writeSettings();
2022-03-02 15:34:35 +00:00
},
2022-02-25 20:54:38 +00:00
},
2022-03-02 15:34:35 +00:00
"Vector Font": {
value:
settings.useVectorFont !== undefined ? settings.useVectorFont : false,
2022-03-03 22:30:34 +00:00
onchange: v => {
settings.useVectorFont = v;
2022-02-25 20:54:38 +00:00
writeSettings();
2022-03-02 15:34:35 +00:00
},
2022-02-25 20:54:38 +00:00
},
};
// Actually display the menu
E.showMenu(mainmenu);
})