diff --git a/ChangeLog b/ChangeLog index b1cf1b2be..824104649 100644 --- a/ChangeLog +++ b/ChangeLog @@ -24,7 +24,7 @@ Jolt.js: Increase Storage area from 40kb to 400kb nRF5x: Don't add BLE UART write events into the input buffer ESP32: Timers are now turned off when requested - digitalPulse/soft pwm/writeAtTime more accurate - Bangle.js: Remove debug log messages from E.showScroller + Bangle.js2: Remove debug log messages from E.showScroller STM32F4: Update stm32f4xx_ll_usb to fix over-buffered USB CDC tx after being woken from deep sleep Waveform: Add 'npin' option to allow +/- output on two pins Waveform: Add ability to play directly from Storage @@ -41,6 +41,7 @@ Bangle.js: E.showMenu no longer sends the internal `l` menu object as argument when running the callback function. Bangle.js2: GPS request RMC packet automatically (so GPS speed/time work even without AGPS) (fix #2354) Bangle.js2: GPS now detects binary CASIC packets and splits them into their own GPS-raw event + Bangle.js2: Pass the modified touch event on through both E.showScroller and E.showMenu (to enable more complex interaction with menus). 2v24 : Bangle.js2: Add 'Bangle.touchRd()', 'Bangle.touchWr()' Bangle.js2: After Bangle.showTestScreen, put Bangle.js into a hard off state (not soft off) diff --git a/libs/banglejs/jswrap_bangle.c b/libs/banglejs/jswrap_bangle.c index 18f2744d7..5ee17fa0e 100644 --- a/libs/banglejs/jswrap_bangle.c +++ b/libs/banglejs/jswrap_bangle.c @@ -5932,6 +5932,10 @@ On Bangle.js there are a few additions over the standard `graphical_menu`: menu is removed * (Bangle.js 2) `scroll : int` - an integer specifying how much the initial menu should be scrolled by +* (Bangle.js 2) The mapped functions can consider the touch event that interacted with the entry: + `"Entry" : function(touch) { ... }` + * This is also true of `onchange` mapped functions in entry objects: + `onchange : (value, touch) => { ... }` * The object returned by `E.showMenu` contains: * (Bangle.js 2) `scroller` - the object returned by `E.showScroller` - `scroller.scroll` returns the amount the menu is currently scrolled by @@ -6074,6 +6078,7 @@ Supply an object containing: draw : function(idx, rect) { ... } // a function to call when the item is selected, touch parameter is only relevant // for Bangle.js 2 and contains the coordinates touched inside the selected item + // as well as the type of the touch - see `Bangle.touch`. select : function(idx, touch) { ... } // optional function to be called when 'back' is tapped back : function() { ...} diff --git a/libs/js/banglejs/E_showMenu_Q3.js b/libs/js/banglejs/E_showMenu_Q3.js index 6bda1fb29..63c30d391 100644 --- a/libs/js/banglejs/E_showMenu_Q3.js +++ b/libs/js/banglejs/E_showMenu_Q3.js @@ -133,19 +133,19 @@ l = g.setFont("6x15").wrapString(title,r.w-pad); g.setFontAlign(-1,0).drawString(l.join("\n"), r.x+12, r.y+H/2); }, - select : function(idx) { + select : function(idx, touch) { if (idx<0) return back&&back(); // title var item = menu[keys[idx]]; Bangle.buzz(20); - if ("function" == typeof item) item(); + if ("function" == typeof item) item(touch); else if ("object" == typeof item) { - // if a bool, just toggle it if ("number" == typeof item.value) { showSubMenu(item, keys[idx]); } else { + // if a bool, just toggle it if ("boolean"==typeof item.value) item.value=!item.value; - if (item.onchange) item.onchange(item.value); + if (item.onchange) item.onchange(item.value, touch); if (l.scroller.isActive()) l.scroller.drawItem(idx); } } diff --git a/libs/js/banglejs/E_showScroller_Q3.js b/libs/js/banglejs/E_showScroller_Q3.js index f2d0c207a..4a7897c57 100644 --- a/libs/js/banglejs/E_showScroller_Q3.js +++ b/libs/js/banglejs/E_showScroller_Q3.js @@ -82,7 +82,7 @@ Bangle.setUI({ } if ((menuScrollMin<0 || i>=0) && i