1
0
Fork 0

Merge branch 'master' into no-undef

master
Gordon Williams 2024-03-14 09:49:12 +00:00 committed by GitHub
commit 80354248fa
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
12 changed files with 56 additions and 34 deletions

View File

@ -20,9 +20,9 @@ Bangle.js 1
- SELECT: BTN2 - SELECT: BTN2
Bangle.js 2 Bangle.js 2
- Swipes to change visible buttons - Swipe up or down to go back to the number input
- Click physical button to exit - Swipe to the left for operators, swipe to the right for the special functions
- Press upper left corner of screen to exit (where the red back button would be) - Exit by pressing the physical button or the upper left corner of screen to exit (where the red back button would be)
## Creator ## Creator
<https://twitter.com/fredericrous> <https://twitter.com/fredericrous>

View File

@ -6,3 +6,4 @@
0.05: Reported image for battery is now transparent (2v18+) 0.05: Reported image for battery is now transparent (2v18+)
0.06: When >1 clockinfo, swiping one back tries to ensure they don't display the same thing 0.06: When >1 clockinfo, swiping one back tries to ensure they don't display the same thing
0.07: Developer tweak: clkinfo load errors are emitted 0.07: Developer tweak: clkinfo load errors are emitted
0.08: Pass options to show(), hide() and run(), and add focus() and blur() item methods

View File

@ -70,10 +70,12 @@ Note that each item is an object with:
} }
``` ```
* `item.show` : called when item should be shown. Enables updates. Call BEFORE 'get' * `item.show` : called when item should be shown. Enables updates. Call BEFORE 'get'. Passed the clockinfo options (same as what's returned from `addInteractive`).
* `item.hide` : called when item should be hidden. Disables updates. * `item.hide` : called when item should be hidden. Disables updates. Passed the clockinfo options.
* `.on('redraw', ...)` : event that is called when 'get' should be called again (only after 'item.show') * `.on('redraw', ...)` : event that is called when 'get' should be called again (only after 'item.show')
* `item.run` : (optional) called if the info screen is tapped - can perform some action. Return true if the caller should feedback the user. * `item.run` : (optional) called if the info screen is tapped - can perform some action. Return true if the caller should feedback the user.
* `item.focus` : called when the item is focussed (the user has tapped on it). Passed the clockinfo options.
* `item.blur` : called when the item is unfocussed (the user has tapped elsewhere, the screen has locked, etc). Passed the clockinfo options.
See the bottom of `lib.js` for example usage... See the bottom of `lib.js` for example usage...

View File

@ -234,7 +234,7 @@ exports.addInteractive = function(menu, options) {
options.redrawHandler = ()=>drawItem(itm); options.redrawHandler = ()=>drawItem(itm);
itm.on('redraw', options.redrawHandler); itm.on('redraw', options.redrawHandler);
itm.uses = (0|itm.uses)+1; itm.uses = (0|itm.uses)+1;
if (itm.uses==1) itm.show(); if (itm.uses==1) itm.show(options);
itm.emit("redraw"); itm.emit("redraw");
} }
function menuHideItem(itm) { function menuHideItem(itm) {
@ -242,7 +242,7 @@ exports.addInteractive = function(menu, options) {
delete options.redrawHandler; delete options.redrawHandler;
itm.uses--; itm.uses--;
if (!itm.uses) if (!itm.uses)
itm.hide(); itm.hide(options);
} }
// handling for swipe between menu items // handling for swipe between menu items
function swipeHandler(lr,ud){ function swipeHandler(lr,ud){
@ -284,38 +284,47 @@ exports.addInteractive = function(menu, options) {
E.stopEventPropagation&&E.stopEventPropagation(); E.stopEventPropagation&&E.stopEventPropagation();
} }
Bangle.on("swipe",swipeHandler); Bangle.on("swipe",swipeHandler);
const blur = () => {
options.focus=false;
delete Bangle.CLKINFO_FOCUS;
const itm = menu[options.menuA].items[options.menuB];
let redraw = true;
if (itm.blur && itm.blur(options) === false)
redraw = false;
if (redraw) options.redraw();
};
const focus = () => {
let redraw = true;
Bangle.CLKINFO_FOCUS=true;
if (!options.focus) {
options.focus=true;
const itm = menu[options.menuA].items[options.menuB];
if (itm.focus && itm.focus(options) === false)
redraw = false;
}
if (redraw) options.redraw();
};
let touchHandler, lockHandler; let touchHandler, lockHandler;
if (options.x!==undefined && options.y!==undefined && options.w && options.h) { if (options.x!==undefined && options.y!==undefined && options.w && options.h) {
touchHandler = function(_,e) { touchHandler = function(_,e) {
if (e.x<options.x || e.y<options.y || if (e.x<options.x || e.y<options.y ||
e.x>(options.x+options.w) || e.y>(options.y+options.h)) { e.x>(options.x+options.w) || e.y>(options.y+options.h)) {
if (options.focus) { if (options.focus)
options.focus=false; blur();
delete Bangle.CLKINFO_FOCUS;
options.redraw();
}
return; // outside area return; // outside area
} }
if (!options.focus) { if (!options.focus) {
options.focus=true; // if not focussed, set focus focus();
Bangle.CLKINFO_FOCUS=true;
options.redraw();
} else if (menu[options.menuA].items[options.menuB].run) { } else if (menu[options.menuA].items[options.menuB].run) {
Bangle.buzz(100, 0.7); Bangle.buzz(100, 0.7);
menu[options.menuA].items[options.menuB].run(); // allow tap on an item to run it (eg home assistant) menu[options.menuA].items[options.menuB].run(options); // allow tap on an item to run it (eg home assistant)
} else {
options.focus=true;
Bangle.CLKINFO_FOCUS=true;
} }
}; };
Bangle.on("touch",touchHandler); Bangle.on("touch",touchHandler);
if (settings.defocusOnLock) { if (settings.defocusOnLock) {
lockHandler = function() { lockHandler = function() {
if(options.focus) { if(options.focus)
options.focus=false; blur();
delete Bangle.CLKINFO_FOCUS;
options.redraw();
}
}; };
Bangle.on("lock", lockHandler); Bangle.on("lock", lockHandler);
} }
@ -352,6 +361,7 @@ exports.addInteractive = function(menu, options) {
return true; return true;
}; };
if (options.focus) focus();
delete settings; // don't keep settings in RAM - save space delete settings; // don't keep settings in RAM - save space
return options; return options;
}; };

View File

@ -1,7 +1,7 @@
{ "id": "clock_info", { "id": "clock_info",
"name": "Clock Info Module", "name": "Clock Info Module",
"shortName": "Clock Info", "shortName": "Clock Info",
"version":"0.07", "version":"0.08",
"description": "A library used by clocks to provide extra information on the clock face (Altitude, BPM, etc)", "description": "A library used by clocks to provide extra information on the clock face (Altitude, BPM, etc)",
"icon": "app.png", "icon": "app.png",
"type": "module", "type": "module",

View File

@ -5,4 +5,5 @@
0.05: Updated clkinfo icon. 0.05: Updated clkinfo icon.
0.06: Ensure Timer supplies an image for clkinfo items 0.06: Ensure Timer supplies an image for clkinfo items
0.07: Update clock_info to avoid a redraw 0.07: Update clock_info to avoid a redraw
0.08: Timer ClockInfo now updates once a minute 0.08: Timer ClockInfo now updates once a minute
0.09: Timer ClockInfo resets to timer menu when blurred

View File

@ -71,13 +71,19 @@
] ]
}; };
const restoreMainItem = function(clkinfo) {
clkinfo.menuB = 0;
// clock info redraws after this
};
var offsets = [+5,-5]; var offsets = [+5,-5];
offsets.forEach((o, i) => { offsets.forEach((o, i) => {
smpltmrItems.items = smpltmrItems.items.concat({ smpltmrItems.items = smpltmrItems.items.concat({
name: null, name: null,
get: () => ({ text: (o > 0 ? "+" : "") + o + " min.", img: smpltmrItems.img }), get: () => ({ text: (o > 0 ? "+" : "") + o + " min.", img: smpltmrItems.img }),
show: function() { }, show: function() { },
hide: function () { }, hide: function() { },
blur: restoreMainItem,
run: function() { run: function() {
if(o > 0) increaseAlarm(o); if(o > 0) increaseAlarm(o);
else decreaseAlarm(Math.abs(o)); else decreaseAlarm(Math.abs(o));

View File

@ -2,7 +2,7 @@
"id": "smpltmr", "id": "smpltmr",
"name": "Simple Timer", "name": "Simple Timer",
"shortName": "Simple Timer", "shortName": "Simple Timer",
"version": "0.08", "version": "0.09",
"description": "A very simple app to start a timer.", "description": "A very simple app to start a timer.",
"icon": "app.png", "icon": "app.png",
"tags": "tool,alarm,timer,clkinfo", "tags": "tool,alarm,timer,clkinfo",

View File

@ -1,4 +1,4 @@
0.01: First release 0.01: First release
0.02: Fixed settings changes are actually reflected now and old values are strikethrough 0.02: Fixed settings changes are actually reflected now and old values are strikethrough
0.03: Minor code improvements 0.03: Minor code improvements
0.04: Minor code improvements 0.04: Fix after regression in 0.03

2
core

@ -1 +1 @@
Subproject commit bd301be3324775a8f464328ba9e34f750d503a2b Subproject commit 0222d3c5ac608a1b842ffc1f1f79e19276d648fe

View File

@ -11,10 +11,12 @@ declare module ClockInfo {
type MenuItem = { type MenuItem = {
name: string, name: string,
show(): void, show(options: InteractiveOptions): void,
hide(): void, hide(options: InteractiveOptions): void,
on(what: "redraw", cb: () => void): void, // extending from Object on(what: "redraw", cb: () => void): void, // extending from Object
run?(): void, run?(options: InteractiveOptions): void,
focus?(options: InteractiveOptions): void | false,
blur?(options: InteractiveOptions): void | false,
} & ( } & (
{ {
hasRange: true, hasRange: true,

@ -1 +1 @@
Subproject commit af870d7b8386bfa824b07b268bce414e4daf3fbb Subproject commit 8d671ad0dfb1d5a36f4ee9952390f4d79019e61d