mirror of https://github.com/espruino/BangleApps
qmsched - Allow to use two theme files for switching themes
parent
f4740b149b
commit
8e4eb3f5fa
|
@ -4,7 +4,8 @@ Bangle.drawWidgets();
|
||||||
const modeNames = [/*LANG*/"Off", /*LANG*/"Alarms", /*LANG*/"Silent"];
|
const modeNames = [/*LANG*/"Off", /*LANG*/"Alarms", /*LANG*/"Silent"];
|
||||||
const B2 = process.env.HWVERSION===2;
|
const B2 = process.env.HWVERSION===2;
|
||||||
// load global settings
|
// load global settings
|
||||||
let bSettings = require('Storage').readJSON('setting.json',true)||{};
|
const STORAGE = require('Storage');
|
||||||
|
let bSettings = STORAGE.readJSON('setting.json',true)||{};
|
||||||
let current = 0|bSettings.quiet;
|
let current = 0|bSettings.quiet;
|
||||||
delete bSettings; // we don't need any other global settings
|
delete bSettings; // we don't need any other global settings
|
||||||
|
|
||||||
|
@ -17,8 +18,8 @@ delete bSettings; // we don't need any other global settings
|
||||||
* Save settings to qmsched.json
|
* Save settings to qmsched.json
|
||||||
*/
|
*/
|
||||||
function save() {
|
function save() {
|
||||||
require('Storage').writeJSON('qmsched.json', settings);
|
STORAGE.writeJSON('qmsched.json', settings);
|
||||||
eval(require('Storage').read('qmsched.boot.js')); // apply new schedules right away
|
eval(STORAGE.read('qmsched.boot.js')); // apply new schedules right away
|
||||||
}
|
}
|
||||||
function get(key, def) {
|
function get(key, def) {
|
||||||
return (key in settings) ? settings[key] : def;
|
return (key in settings) ? settings[key] : def;
|
||||||
|
@ -37,12 +38,12 @@ let settings,
|
||||||
* Load settings file, check if we need to migrate old setting formats to new
|
* Load settings file, check if we need to migrate old setting formats to new
|
||||||
*/
|
*/
|
||||||
function loadSettings() {
|
function loadSettings() {
|
||||||
settings = require('Storage').readJSON("qmsched.json", true) || {};
|
settings = STORAGE.readJSON("qmsched.json", true) || {};
|
||||||
|
|
||||||
if (Array.isArray(settings)) {
|
if (Array.isArray(settings)) {
|
||||||
// migrate old file (plain array of schedules, qmOptions stored in global settings file)
|
// migrate old file (plain array of schedules, qmOptions stored in global settings file)
|
||||||
require("Storage").erase("qmsched.json"); // need to erase old file, or Things Break, somehow...
|
STORAGE.erase("qmsched.json"); // need to erase old file, or Things Break, somehow...
|
||||||
let bOptions = require('Storage').readJSON('setting.json',true)||{};
|
let bOptions = STORAGE.readJSON('setting.json',true)||{};
|
||||||
settings = {
|
settings = {
|
||||||
options: bOptions.qmOptions || {},
|
options: bOptions.qmOptions || {},
|
||||||
scheds: settings,
|
scheds: settings,
|
||||||
|
@ -51,7 +52,7 @@ function loadSettings() {
|
||||||
save();
|
save();
|
||||||
// and clean up qmOptions from global settings file
|
// and clean up qmOptions from global settings file
|
||||||
delete bOptions.qmOptions;
|
delete bOptions.qmOptions;
|
||||||
require('Storage').writeJSON('setting.json',bOptions);
|
STORAGE.writeJSON('setting.json',bOptions);
|
||||||
}
|
}
|
||||||
// apply defaults
|
// apply defaults
|
||||||
settings = Object.assign({
|
settings = Object.assign({
|
||||||
|
@ -82,7 +83,7 @@ function formatTime(t) {
|
||||||
* Apply theme
|
* Apply theme
|
||||||
*/
|
*/
|
||||||
function applyTheme() {
|
function applyTheme() {
|
||||||
const theme = (require("Storage").readJSON("setting.json", 1) || {}).theme;
|
const theme = (STORAGE.readJSON("setting.json", 1) || {}).theme;
|
||||||
if (theme && theme.dark===g.theme.dark) return; // already correct
|
if (theme && theme.dark===g.theme.dark) return; // already correct
|
||||||
g.theme = theme;
|
g.theme = theme;
|
||||||
delete g.reset;
|
delete g.reset;
|
||||||
|
@ -95,6 +96,55 @@ function applyTheme() {
|
||||||
m.draw();
|
m.draw();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This creates menu entries for setting themes. This code is lifted from the setting app.
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
function showThemeMenu(back, quiet){
|
||||||
|
const option = quiet ? "quietTheme" : "normalTheme";
|
||||||
|
function cl(x) { return g.setColor(x).getColor(); }
|
||||||
|
var themesMenu = {
|
||||||
|
'':{title:/*LANG*/'Theme', back: back},
|
||||||
|
/*LANG*/'Dark BW': ()=>{
|
||||||
|
set(option, {
|
||||||
|
fg:cl("#fff"), bg:cl("#000"),
|
||||||
|
fg2:cl("#fff"), bg2:cl("#004"),
|
||||||
|
fgH:cl("#fff"), bgH:cl("#00f"),
|
||||||
|
dark:true,
|
||||||
|
quiet: true
|
||||||
|
});
|
||||||
|
back();
|
||||||
|
},
|
||||||
|
/*LANG*/'Light BW': ()=>{
|
||||||
|
set(option, {
|
||||||
|
fg:cl("#000"), bg:cl("#fff"),
|
||||||
|
fg2:cl("#000"), bg2:cl("#cff"),
|
||||||
|
fgH:cl("#000"), bgH:cl("#0ff"),
|
||||||
|
dark:false,
|
||||||
|
quiet: true
|
||||||
|
});
|
||||||
|
back();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
STORAGE.list(/^.*\.theme$/).forEach(
|
||||||
|
n => {
|
||||||
|
let newTheme = STORAGE.readJSON(n);
|
||||||
|
themesMenu[newTheme.name ? newTheme.name : n] = () => {
|
||||||
|
set(option, {
|
||||||
|
fg:cl(newTheme.fg), bg:cl(newTheme.bg),
|
||||||
|
fg2:cl(newTheme.fg2), bg2:cl(newTheme.bg2),
|
||||||
|
fgH:cl(newTheme.fgH), bgH:cl(newTheme.bgH),
|
||||||
|
dark:newTheme.dark,
|
||||||
|
quiet: quiet
|
||||||
|
});
|
||||||
|
back();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
E.showMenu(themesMenu);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Library uses this to make the app update itself
|
* Library uses this to make the app update itself
|
||||||
* @param {int} mode New Quite Mode
|
* @param {int} mode New Quite Mode
|
||||||
|
@ -127,7 +177,7 @@ function showMainMenu() {
|
||||||
value: !!get("switchTheme"),
|
value: !!get("switchTheme"),
|
||||||
onchange: v => v ? set("switchTheme", v) : unset("switchTheme"),
|
onchange: v => v ? set("switchTheme", v) : unset("switchTheme"),
|
||||||
};
|
};
|
||||||
menu[/*LANG*/"LCD Settings"] = () => showOptionsMenu();
|
menu[/*LANG*/"Options"] = () => showOptionsMenu();
|
||||||
m = E.showMenu(menu);
|
m = E.showMenu(menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -251,6 +301,10 @@ function showOptionsMenu() {
|
||||||
onchange: () => {toggle("wakeOnTwist");},
|
onchange: () => {toggle("wakeOnTwist");},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
oMenu[/*LANG*/"Normal Theme"] = () => showThemeMenu(showOptionsMenu, false);
|
||||||
|
oMenu[/*LANG*/"Quiet Theme"] = () => showThemeMenu(showOptionsMenu, true);
|
||||||
|
|
||||||
m = E.showMenu(oMenu);
|
m = E.showMenu(oMenu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,23 +3,36 @@
|
||||||
* @param {int} mode Quiet Mode
|
* @param {int} mode Quiet Mode
|
||||||
*/
|
*/
|
||||||
function switchTheme(mode) {
|
function switchTheme(mode) {
|
||||||
if (!!mode === g.theme.dark) return; // nothing to do
|
|
||||||
let s = require("Storage").readJSON("setting.json", 1) || {};
|
let s = require("Storage").readJSON("setting.json", 1) || {};
|
||||||
|
print("Theme is ", s.theme);
|
||||||
|
if (!!mode === s.theme.quiet) return; // nothing to do
|
||||||
// default themes, copied from settings.js:showThemeMenu()
|
// default themes, copied from settings.js:showThemeMenu()
|
||||||
function cl(x) { return g.setColor(x).getColor(); }
|
function cl(x) { return g.setColor(x).getColor(); }
|
||||||
s.theme = mode ? {
|
|
||||||
|
let q = require("Storage").readJSON("qmsched.json", 1) || {};
|
||||||
|
let quietTheme = {
|
||||||
// 'Dark BW'
|
// 'Dark BW'
|
||||||
fg: cl("#fff"), bg: cl("#000"),
|
fg: cl("#fff"), bg: cl("#000"),
|
||||||
fg2: cl("#0ff"), bg2: cl("#000"),
|
fg2: cl("#0ff"), bg2: cl("#000"),
|
||||||
fgH: cl("#fff"), bgH: cl("#00f"),
|
fgH: cl("#fff"), bgH: cl("#00f"),
|
||||||
dark: true
|
dark: true,
|
||||||
} : {
|
quiet: true
|
||||||
|
};
|
||||||
|
let normalTheme = {
|
||||||
// 'Light BW'
|
// 'Light BW'
|
||||||
fg: cl("#000"), bg: cl("#fff"),
|
fg: cl("#000"), bg: cl("#fff"),
|
||||||
fg2: cl("#000"), bg2: cl("#cff"),
|
fg2: cl("#000"), bg2: cl("#cff"),
|
||||||
fgH: cl("#000"), bgH: cl("#0ff"),
|
fgH: cl("#000"), bgH: cl("#0ff"),
|
||||||
dark: false
|
dark: false,
|
||||||
|
quiet: false
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (q.normalTheme) normalTheme = q.normalTheme;
|
||||||
|
if (q.quietTheme) quietTheme = q.quietTheme;
|
||||||
|
|
||||||
|
s.theme = mode ? quietTheme : normalTheme;
|
||||||
|
print("New theme is ", s.theme);
|
||||||
|
|
||||||
require("Storage").writeJSON("setting.json", s);
|
require("Storage").writeJSON("setting.json", s);
|
||||||
// reload clocks with new theme, otherwise just wait for user to switch apps
|
// reload clocks with new theme, otherwise just wait for user to switch apps
|
||||||
if (Bangle.CLOCK) load(global.__FILE__);
|
if (Bangle.CLOCK) load(global.__FILE__);
|
||||||
|
|
Loading…
Reference in New Issue