mirror of https://github.com/espruino/BangleApps
Merge pull request #1547 from rigrig/qmsched-new-menu
qmsched: support new bangle.js 2 menu, add /*LANG*/ hintspull/1549/head
commit
bfa7ca1891
|
@ -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
|
|
@ -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");},
|
||||||
|
|
|
@ -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"},
|
||||||
|
|
Loading…
Reference in New Issue