Merge pull request #1547 from rigrig/qmsched-new-menu

qmsched: support new bangle.js 2 menu, add /*LANG*/ hints
pull/1549/head
Gordon Williams 2022-03-08 08:24:40 +00:00 committed by GitHub
commit bfa7ca1891
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 41 additions and 50 deletions

View File

@ -5,4 +5,5 @@
0.05: Avoid immediately redrawing widgets on load 0.05: Avoid immediately redrawing widgets on load
0.06: Fix: don't try to redraw widget when widgets not loaded 0.06: Fix: don't try to redraw widget when widgets not loaded
0.07: Option to switch theme 0.07: Option to switch theme
Changed time selection to 5-minute intervals Changed time selection to 5-minute intervals
0.08: Support new Bangle.js 2 menu

View File

@ -1,8 +1,8 @@
Bangle.loadWidgets(); Bangle.loadWidgets();
Bangle.drawWidgets(); Bangle.drawWidgets();
const modeNames = ["Off", "Alarms", "Silent"]; const modeNames = [/*LANG*/"Off", /*LANG*/"Alarms", /*LANG*/"Silent"];
const B2 = process.env.HWVERSION===2;
// load global settings // load global settings
let bSettings = require('Storage').readJSON('setting.json',true)||{}; let bSettings = require('Storage').readJSON('setting.json',true)||{};
let current = 0|bSettings.quiet; let current = 0|bSettings.quiet;
@ -109,34 +109,26 @@ function setAppQuietMode(mode) {
let m; let m;
function showMainMenu() { function showMainMenu() {
let menu = { let menu = {"": {"title": /*LANG*/"Quiet Mode"},};
"": {"title": "Quiet Mode"}, menu[B2 ? /*LANG*/"< Back" : /*LANG*/"< Exit"] = () => {load();};
"< Exit": () => load() menu[/*LANG*/"Current Mode"] = {
};
// "Current Mode""Silent" won't fit on Bangle.js 2
menu["Current"+((process.env.HWVERSION===2) ? "" : " Mode")] = {
value: current, value: current,
min:0, max:2, wrap: true, min:0, max:2, wrap: true,
format: () => modeNames[current], format: v => modeNames[v],
onchange: require("qmsched").setMode, // library calls setAppMode(), which updates `current` onchange: require("qmsched").setMode, // library calls setAppMode(), which updates `current`
}; };
scheds.sort((a, b) => (a.hr-b.hr)); scheds.sort((a, b) => (a.hr-b.hr));
scheds.forEach((sched, idx) => { scheds.forEach((sched, idx) => {
menu[formatTime(sched.hr)] = { menu[formatTime(sched.hr)] = () => { showEditMenu(idx); };
format: () => modeNames[sched.mode], // abuse format to right-align text menu[formatTime(sched.hr)].format = () => modeNames[sched.mode]+' >'; // this does nothing :-(
onchange: () => {
m.draw = ()=> {}; // prevent redraw of main menu over edit menu (needed because we abuse format/onchange)
showEditMenu(idx);
}
};
}); });
menu["Add Schedule"] = () => showEditMenu(-1); menu[/*LANG*/"Add Schedule"] = () => showEditMenu(-1);
menu["Switch Theme"] = { menu[/*LANG*/"Switch Theme"] = {
value: !!get("switchTheme"), value: !!get("switchTheme"),
format: v => v ? /*LANG*/"Yes" : /*LANG*/"No", format: v => v ? /*LANG*/"Yes" : /*LANG*/"No",
onchange: v => v ? set("switchTheme", v) : unset("switchTheme"), onchange: v => v ? set("switchTheme", v) : unset("switchTheme"),
}; };
menu["LCD Settings"] = () => showOptionsMenu(); menu[/*LANG*/"LCD Settings"] = () => showOptionsMenu();
m = E.showMenu(menu); m = E.showMenu(menu);
} }
@ -150,25 +142,23 @@ function showEditMenu(index) {
mins = Math.round((s.hr-hrs)*60); mins = Math.round((s.hr-hrs)*60);
mode = s.mode; mode = s.mode;
} }
const menu = { let menu = {"": {"title": (isNew ? /*LANG*/"Add Schedule" : /*LANG*/"Edit Schedule")}};
"": {"title": (isNew ? "Add" : "Edit")+" Schedule"}, menu[B2 ? /*LANG*/"< Back" : /*LANG*/"< Cancel"] = () => showMainMenu();
"< Cancel": () => showMainMenu(), menu[/*LANG*/"Hours"] = {
"Hours": { value: hrs,
value: hrs, min:0, max:23, wrap:true,
min:0, max:23, wrap:true, onchange: v => {hrs = v;},
onchange: v => {hrs = v;}, };
}, menu[/*LANG*/"Minutes"] = {
"Minutes": { value: mins,
value: mins, min:0, max:55, step:5, wrap:true,
min:0, max:55, step:5, wrap:true, onchange: v => {mins = v;},
onchange: v => {mins = v;}, };
}, menu[/*LANG*/"Switch to"] = {
"Switch to": { value: mode,
value: mode, min:0, max:2, wrap:true,
min:0, max:2, wrap:true, format: v => modeNames[v],
format: v => modeNames[v], onchange: v => {mode = v;},
onchange: v => {mode = v;},
},
}; };
function getSched() { function getSched() {
return { return {
@ -176,7 +166,7 @@ function showEditMenu(index) {
mode: mode, mode: mode,
}; };
} }
menu["> Save"] = function() { menu[B2 ? /*LANG*/"Save" : /*LANG*/"> Save"] = function() {
if (isNew) { if (isNew) {
scheds.push(getSched()); scheds.push(getSched());
} else { } else {
@ -186,7 +176,7 @@ function showEditMenu(index) {
showMainMenu(); showMainMenu();
}; };
if (!isNew) { if (!isNew) {
menu["> Delete"] = function() { menu[B2 ? /*LANG*/"Delete" : /*LANG*/"> Delete"] = function() {
scheds.splice(index, 1); scheds.splice(index, 1);
save(); save();
showMainMenu(); showMainMenu();
@ -196,7 +186,7 @@ function showEditMenu(index) {
} }
function showOptionsMenu() { function showOptionsMenu() {
const disabledFormat = v => v ? "Off" : "-"; const disabledFormat = v => v ? /*LANG*/"Off" : "-";
function toggle(option) { function toggle(option) {
// we disable wakeOn* events by setting them to `false` in options // we disable wakeOn* events by setting them to `false` in options
// not disabled = not present in options at all // not disabled = not present in options at all
@ -209,9 +199,9 @@ function showOptionsMenu() {
} }
let resetTimeout; let resetTimeout;
const oMenu = { const oMenu = {
"": {"title": "LCD Settings"}, "": {"title": /*LANG*/"LCD Settings"},
"< Back": () => showMainMenu(), /*LANG*/"< Back": () => showMainMenu(),
"LCD Brightness": { /*LANG*/"LCD Brightness": {
value: get("brightness", 0), value: get("brightness", 0),
min: 0, // 0 = use default min: 0, // 0 = use default
max: 1, max: 1,
@ -233,7 +223,7 @@ function showOptionsMenu() {
} }
}, },
}, },
"LCD Timeout": { /*LANG*/"LCD Timeout": {
value: get("timeout", 0), value: get("timeout", 0),
min: 0, // 0 = use default (no constant on for quiet mode) min: 0, // 0 = use default (no constant on for quiet mode)
max: 60, max: 60,
@ -246,17 +236,17 @@ function showOptionsMenu() {
}, },
// we disable wakeOn* events by overwriting them as false in options // we disable wakeOn* events by overwriting them as false in options
// not disabled = not present in options at all // not disabled = not present in options at all
"Wake on FaceUp": { /*LANG*/"Wake on FaceUp": {
value: "wakeOnFaceUp" in options, value: "wakeOnFaceUp" in options,
format: disabledFormat, format: disabledFormat,
onchange: () => {toggle("wakeOnFaceUp");}, onchange: () => {toggle("wakeOnFaceUp");},
}, },
"Wake on Touch": { /*LANG*/"Wake on Touch": {
value: "wakeOnTouch" in options, value: "wakeOnTouch" in options,
format: disabledFormat, format: disabledFormat,
onchange: () => {toggle("wakeOnTouch");}, onchange: () => {toggle("wakeOnTouch");},
}, },
"Wake on Twist": { /*LANG*/"Wake on Twist": {
value: "wakeOnTwist" in options, value: "wakeOnTwist" in options,
format: disabledFormat, format: disabledFormat,
onchange: () => {toggle("wakeOnTwist");}, onchange: () => {toggle("wakeOnTwist");},

View File

@ -2,7 +2,7 @@
"id": "qmsched", "id": "qmsched",
"name": "Quiet Mode Schedule and Widget", "name": "Quiet Mode Schedule and Widget",
"shortName": "Quiet Mode", "shortName": "Quiet Mode",
"version": "0.07", "version": "0.08",
"description": "Automatically turn Quiet Mode on or off at set times, change theme and LCD options while Quiet Mode is active.", "description": "Automatically turn Quiet Mode on or off at set times, change theme and LCD options while Quiet Mode is active.",
"icon": "app.png", "icon": "app.png",
"screenshots": [{"url":"screenshot_b1_main.png"},{"url":"screenshot_b1_edit.png"},{"url":"screenshot_b1_lcd.png"}, "screenshots": [{"url":"screenshot_b1_main.png"},{"url":"screenshot_b1_edit.png"},{"url":"screenshot_b1_lcd.png"},