From 3462b36f9c8e7b0a24871839ab5abadb1d88014b Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Thu, 27 Oct 2022 21:27:02 +0200 Subject: [PATCH 1/5] wid_edit - Wrap loadWidgets instead of replacing it --- apps/wid_edit/boot.js | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/apps/wid_edit/boot.js b/apps/wid_edit/boot.js index 872965c97..8dc120fd6 100644 --- a/apps/wid_edit/boot.js +++ b/apps/wid_edit/boot.js @@ -1,18 +1,14 @@ -Bangle.loadWidgets = function() { - global.WIDGETS={}; - require("Storage").list(/\.wid\.js$/) - .forEach(w=>{ - try { eval(require("Storage").read(w)); } - catch (e) { print(w, e); } - }); - const s = require("Storage").readJSON("wid_edit.json", 1) || {}, - c = s.custom || {}; +Bangle.loadWidgets = (o => ()=>{ + o(); + const s = require("Storage").readJSON("wid_edit.json", 1) || {}; + const c = s.custom || {}; for (const w in c){ if (!(w in WIDGETS)) continue; // widget no longer exists // store defaults of customized values in _WIDGETS - global._WIDGETS=global._WIDGETS||{}; - _WIDGETS[w] = {}; + if (!global._WIDGETS) global._WIDGETS = {}; + if (!global._WIDGETS[w]) global._WIDGETS[w] = {}; Object.keys(c[w]).forEach(k => _WIDGETS[w][k] = WIDGETS[w][k]); + //overide values in widget with configured ones Object.assign(WIDGETS[w], c[w]); } const W = WIDGETS; @@ -21,4 +17,4 @@ Bangle.loadWidgets = function() { .sort() .sort((a, b) => (0|W[b].sortorder)-(0|W[a].sortorder)) .forEach(k => WIDGETS[k] = W[k]); -} \ No newline at end of file +})(Bangle.loadWidgets); From 9f17ea5c98c3854fac64429b589e8209035d541d Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sun, 6 Nov 2022 13:36:14 +0100 Subject: [PATCH 2/5] wid_edit - Access global variables explicitly --- apps/wid_edit/boot.js | 10 +++++----- apps/wid_edit/settings.js | 32 ++++++++++++++++---------------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/apps/wid_edit/boot.js b/apps/wid_edit/boot.js index 8dc120fd6..3cb545a34 100644 --- a/apps/wid_edit/boot.js +++ b/apps/wid_edit/boot.js @@ -7,14 +7,14 @@ Bangle.loadWidgets = (o => ()=>{ // store defaults of customized values in _WIDGETS if (!global._WIDGETS) global._WIDGETS = {}; if (!global._WIDGETS[w]) global._WIDGETS[w] = {}; - Object.keys(c[w]).forEach(k => _WIDGETS[w][k] = WIDGETS[w][k]); + Object.keys(c[w]).forEach(k => global._WIDGETS[w][k] = global.WIDGETS[w][k]); //overide values in widget with configured ones - Object.assign(WIDGETS[w], c[w]); + Object.assign(global.WIDGETS[w], c[w]); } - const W = WIDGETS; - WIDGETS = {}; + const W = global.WIDGETS; + global.WIDGETS = {}; Object.keys(W) .sort() .sort((a, b) => (0|W[b].sortorder)-(0|W[a].sortorder)) - .forEach(k => WIDGETS[k] = W[k]); + .forEach(k => global.WIDGETS[k] = W[k]); })(Bangle.loadWidgets); diff --git a/apps/wid_edit/settings.js b/apps/wid_edit/settings.js index 0969ed533..5f82cd211 100644 --- a/apps/wid_edit/settings.js +++ b/apps/wid_edit/settings.js @@ -9,7 +9,7 @@ let cleanup = false; for (const id in settings.custom) { - if (!(id in WIDGETS)) { + if (!(id in global.WIDGETS)) { // widget which no longer exists cleanup = true; delete settings.custom[id]; @@ -24,12 +24,12 @@ * Sort & redraw all widgets */ function redrawWidgets() { - let W = WIDGETS; + let W = global.WIDGETS; global.WIDGETS = {}; Object.keys(W) .sort() .sort((a, b) => (0|W[b].sortorder)-(0|W[a].sortorder)) - .forEach(k => {WIDGETS[k] = W[k]}); + .forEach(k => {global.WIDGETS[k] = W[k];}); Bangle.drawWidgets(); } @@ -52,9 +52,9 @@ } function edit(id) { - let WIDGET = WIDGETS[id], + let WIDGET = global.WIDGETS[id], def = {area: WIDGET.area, sortorder: WIDGET.sortorder|0}; // default values - Object.assign(def, _WIDGETS[id]||{}); // defaults were saved in _WIDGETS + Object.assign(def, global._WIDGETS[id]||{}); // defaults were saved in _WIDGETS settings.custom = settings.custom||{}; let saved = settings.custom[id] || {}, @@ -102,7 +102,7 @@ settings.custom = settings.custom || {}; settings.custom[id] = saved; } else if (settings.custom) { - delete settings.custom[id] + delete settings.custom[id]; } if (!Object.keys(settings.custom).length) delete settings.custom; require("Storage").writeJSON("wid_edit.json", settings); @@ -112,8 +112,8 @@ let _W = {}; if (saved.area) _W.area = def.area; if ('sortorder' in saved) _W.sortorder = def.sortorder; - if (Object.keys(_W).length) _WIDGETS[id] = _W; - else delete _WIDGETS[id]; + if (Object.keys(_W).length) global._WIDGETS[id] = _W; + else delete global._WIDGETS[id]; // drawWidgets won't clear e.g. bottom bar if we just disabled the last bottom widget redrawWidgets(); @@ -149,7 +149,7 @@ save(); mainMenu(); // changing multiple values made the rest of the menu wrong, so take the easy out } - } + }; let m = E.showMenu(menu); } @@ -163,25 +163,25 @@ if (!Object.keys(_WIDGETS).length) delete _WIDGETS; // no defaults to remember back(); }; - Object.keys(WIDGETS).forEach(id=>{ + Object.keys(global.WIDGETS).forEach(id=>{ // mark customized widgets with asterisk - menu[name(id)+((id in _WIDGETS) ? " *" : "")] = () => edit(id); + menu[name(id)+((id in global._WIDGETS) ? " *" : "")] = () => edit(id); }); - if (Object.keys(_WIDGETS).length) { // only show reset if there is anything to reset + if (Object.keys(global._WIDGETS).length) { // only show reset if there is anything to reset menu[/*LANG*/"Reset All"] = () => { E.showPrompt(/*LANG*/"Reset all widgets?").then(confirm => { if (confirm) { delete settings.custom; require("Storage").writeJSON("wid_edit.json", settings); - for(let id in _WIDGETS) { - Object.assign(WIDGETS[id], _WIDGETS[id]) // restore defaults + for(let id in global._WIDGETS) { + Object.assign(global.WIDGETS[id], global._WIDGETS[id]); // restore defaults } global._WIDGETS = {}; redrawWidgets(); } mainMenu(); // reload with reset widgets - }) - } + }); + }; } E.showMenu(menu); From 53661fd11ce6163e9ddf46a209c340d5659b5b91 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sun, 6 Nov 2022 13:37:10 +0100 Subject: [PATCH 3/5] wid_edit - Adds back functions as option --- apps/wid_edit/settings.js | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/apps/wid_edit/settings.js b/apps/wid_edit/settings.js index 5f82cd211..6ca9b35c9 100644 --- a/apps/wid_edit/settings.js +++ b/apps/wid_edit/settings.js @@ -123,11 +123,11 @@ } const menu = { - "": {"title": name(id)}, - /*LANG*/"< Back": () => { - redrawWidgets(); - mainMenu(); - }, + "": {"title": name(id), + back: () => { + redrawWidgets(); + mainMenu(); + } }, /*LANG*/"Side": { value: (area === 'tl'), format: tl => tl ? /*LANG*/"Left" : /*LANG*/"Right", @@ -157,11 +157,12 @@ function mainMenu() { let menu = { - "": {"title": /*LANG*/"Widgets"}, - }; - menu[/*LANG*/"< Back"] = ()=>{ - if (!Object.keys(_WIDGETS).length) delete _WIDGETS; // no defaults to remember - back(); + "": { + "title": /*LANG*/"Widgets", + back: ()=>{ + if (!Object.keys(global._WIDGETS).length) delete global._WIDGETS; // no defaults to remember + back(); + }}, }; Object.keys(global.WIDGETS).forEach(id=>{ // mark customized widgets with asterisk From fa35629f451fbd2246b90f09c99e5dbf2221c44c Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sun, 6 Nov 2022 19:37:25 +0100 Subject: [PATCH 4/5] wid_edit - Allow setting all areas --- apps/wid_edit/settings.js | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/apps/wid_edit/settings.js b/apps/wid_edit/settings.js index 6ca9b35c9..1d34ae0ca 100644 --- a/apps/wid_edit/settings.js +++ b/apps/wid_edit/settings.js @@ -122,17 +122,23 @@ m.draw(); } + const AREA_NAMES = [ "Top left", "Top right", "Bottom left", "Bottom right" ]; + const AREAS = [ "tl", "tr", "bl", "br" ]; + const menu = { "": {"title": name(id), back: () => { redrawWidgets(); mainMenu(); } }, - /*LANG*/"Side": { - value: (area === 'tl'), - format: tl => tl ? /*LANG*/"Left" : /*LANG*/"Right", - onchange: tl => { - area = tl ? "tl" : "tr"; + /*LANG*/"Position": { + value: AREAS.indexOf(area), + format: v => AREA_NAMES[v], + min: 0, + max: AREAS.length - 1, + onchange: v => { + print("v", v); + area = AREAS[v]; save(); } }, From 0c7513335012ae5ac24c29ec6528d24e65bce15b Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sun, 6 Nov 2022 13:41:33 +0100 Subject: [PATCH 5/5] wid_edit - Bump version --- apps/wid_edit/ChangeLog | 5 ++++- apps/wid_edit/metadata.json | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/wid_edit/ChangeLog b/apps/wid_edit/ChangeLog index 2fa857bd8..d8e165029 100644 --- a/apps/wid_edit/ChangeLog +++ b/apps/wid_edit/ChangeLog @@ -1 +1,4 @@ -0.01: new Widget Editor! \ No newline at end of file +0.01: new Widget Editor! +0.02: Wrap loadWidgets instead of replacing to keep original functionality intact + Change back entry to menu option + Allow changing widgets into all areas, including bottom widget bar diff --git a/apps/wid_edit/metadata.json b/apps/wid_edit/metadata.json index 66d0192f6..d963a53d0 100644 --- a/apps/wid_edit/metadata.json +++ b/apps/wid_edit/metadata.json @@ -1,6 +1,6 @@ { "id": "wid_edit", - "version": "0.01", + "version": "0.02", "name": "Widget Editor", "icon": "icon.png", "description": "Customize widget locations",