From a18d973ca07e77449a321912a4eb81183070e50b Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Fri, 12 Dec 2025 22:22:10 -0500 Subject: [PATCH 1/9] Add separators, adjust some padding for even layout Adjusted the rendering of menu items and updated scroll properties. --- libs/js/banglejs/E_showMenu_Q3.js | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/libs/js/banglejs/E_showMenu_Q3.js b/libs/js/banglejs/E_showMenu_Q3.js index 24b6f41d3..eddf9907d 100644 --- a/libs/js/banglejs/E_showMenu_Q3.js +++ b/libs/js/banglejs/E_showMenu_Q3.js @@ -18,6 +18,7 @@ }); // Submenu for editing menu options... function showSubMenu(item, title) { + print("item rendered: "+item) /*if ("number"!=typeof item.value) return console.log("Unhandled item type");*/ var step = item.step||1; @@ -60,6 +61,7 @@ menuIcon+" "+title, R.x+R.w/2,R.y+12); function draw() { + var mx = R.x+R.w/2, my = 12+R.y+R.h/2, txt = item.format?item.format(v,2):v, s = 30; g.reset().setColor(g.theme.bg2).fillRect({x:R.x+24, y:R.y+36, w:R.w-48, h:R.h-48, r:5}); g.setColor(g.theme.fg2).setFontVector(Math.min(30,(R.w-52)*100/g.setFontVector(100).stringWidth(txt))).setFontAlign(0,0).drawString(txt, mx, my); @@ -111,15 +113,21 @@ }; var scr = { h : H, c : keys.length/*title*/, - scrollMin : -24, scroll : options.scroll??-24, // title is 24px, rendered at -1 + scrollMin : -32, scroll : options.scroll??-32, // title is 32px high, rendered at -1 back : back, remove : options.remove, draw : (idx, r) => { g.setFontAlign(-1,0); if (idx<0) // TITLE - return g.drawString(g.findFont(menuIcon+" "+options.title, {w:r.w,h:24,max:24}).text, r.x+12, r.y+H-10); - g.setColor(g.theme.bg2).fillRect({x:r.x+4, y:r.y+2, w:r.w-8, h:r.h-4, r:5}).setColor(g.theme.fg2); + return g.drawString(g.findFont(menuIcon+" "+options.title, {w:r.w,h:24,max:24}).text, r.x+12, (r.y+r.h/2)+4); var item = menu[keys[idx]], pad = 16; + var isSpacer= "string" == typeof item&&(item=="separator"||item=="Separator") + if(isSpacer){ + g.setColor(g.theme.fg).drawLine(r.x, r.y+r.h-3, r.w, r.y+r.h-3) + }else{ + g.setColor(g.theme.bg2).fillRect({x:r.x+4, y:r.y+2, w:r.w-8, h:r.h-4, r:5}).setColor(g.theme.fg2); + } + print("item rendered: "+item) if ("object" == typeof item) { var v = item.value; if (item.format) v=item.format(v); @@ -132,7 +140,11 @@ g.drawImage(/* 9x18 */atob("CRKBAGA4Hg8DwPB4HgcDg8PB4eHg8HAwAA=="), r.x+r.w-21, r.y+H/2-9); pad += 16; } - g.setFontAlign(-1,0).drawString(g.findFont((item&&item.title)??keys[idx], {w:r.w-pad,h:r.h,wrap:1,trim:1}).text, r.x+8, 2+r.y+H/2); + if(isSpacer){ + g.setFontAlign(0).drawString(g.findFont((item&&item.title)??keys[idx], {w:r.w-pad,h:r.h-15,wrap:1,trim:1}).text,r.x+r.w/2, 2+r.y+H/2); + }else{ + g.setFontAlign(-1,0).drawString(g.findFont((item&&item.title)??keys[idx], {w:r.w-pad,h:r.h,wrap:1,trim:1}).text,r.x+8, 2+r.y+H/2); + } }, select : function(idx, touch) { if (idx<0) return back&&back(); // title @@ -157,4 +169,4 @@ } show(); return l; -}) \ No newline at end of file +}) From de577bcc94f59a289197a7b647cefb65a6d2c113 Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Fri, 12 Dec 2025 22:30:41 -0500 Subject: [PATCH 2/9] Make sure we don't buzz when selecting the spacer --- libs/js/banglejs/E_showMenu_Q3.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libs/js/banglejs/E_showMenu_Q3.js b/libs/js/banglejs/E_showMenu_Q3.js index eddf9907d..c62a8b169 100644 --- a/libs/js/banglejs/E_showMenu_Q3.js +++ b/libs/js/banglejs/E_showMenu_Q3.js @@ -1,4 +1,4 @@ -(function(menu) { +E.showMenu=(function(menu) { const H = 40; if (menu===undefined) { g.clearRect(Bangle.appRect); @@ -135,6 +135,7 @@ var val = g.findFont(v, {w:r.w/2,h:r.h,wrap:1,trim:1}); g.setFontAlign(1,0).drawString(val.text,r.x+r.w-8,2+r.y+H/2); pad += g.stringWidth(val.text); + pad+=5;//add more padding so text is not right against the box } } else if ("function" == typeof item) { g.drawImage(/* 9x18 */atob("CRKBAGA4Hg8DwPB4HgcDg8PB4eHg8HAwAA=="), r.x+r.w-21, r.y+H/2-9); @@ -149,7 +150,8 @@ select : function(idx, touch) { if (idx<0) return back&&back(); // title var item = menu[keys[idx]]; - Bangle.buzz(20); + var isSpacer= "string" == typeof item&&(item=="separator"||item=="Separator") + if(!isSpacer)Bangle.buzz(20); if ("function" == typeof item) item(touch); else if ("object" == typeof item) { if ("number" == typeof item.value) { From 80c504ac597bda06ce6e8f784d4642d77cc5ddf7 Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Fri, 12 Dec 2025 22:32:05 -0500 Subject: [PATCH 3/9] Update libs/js/banglejs/E_showMenu_Q3.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- libs/js/banglejs/E_showMenu_Q3.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/js/banglejs/E_showMenu_Q3.js b/libs/js/banglejs/E_showMenu_Q3.js index c62a8b169..f3def268b 100644 --- a/libs/js/banglejs/E_showMenu_Q3.js +++ b/libs/js/banglejs/E_showMenu_Q3.js @@ -121,7 +121,7 @@ E.showMenu=(function(menu) { if (idx<0) // TITLE return g.drawString(g.findFont(menuIcon+" "+options.title, {w:r.w,h:24,max:24}).text, r.x+12, (r.y+r.h/2)+4); var item = menu[keys[idx]], pad = 16; - var isSpacer= "string" == typeof item&&(item=="separator"||item=="Separator") + var isSpacer = "string" == typeof item && (item == "separator" || item == "Separator") if(isSpacer){ g.setColor(g.theme.fg).drawLine(r.x, r.y+r.h-3, r.w, r.y+r.h-3) }else{ From c78d8a05e22184abde4b8884ecc67eb2784ac9ce Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Fri, 12 Dec 2025 22:32:31 -0500 Subject: [PATCH 4/9] Update libs/js/banglejs/E_showMenu_Q3.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- libs/js/banglejs/E_showMenu_Q3.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/js/banglejs/E_showMenu_Q3.js b/libs/js/banglejs/E_showMenu_Q3.js index f3def268b..211a36823 100644 --- a/libs/js/banglejs/E_showMenu_Q3.js +++ b/libs/js/banglejs/E_showMenu_Q3.js @@ -123,7 +123,7 @@ E.showMenu=(function(menu) { var item = menu[keys[idx]], pad = 16; var isSpacer = "string" == typeof item && (item == "separator" || item == "Separator") if(isSpacer){ - g.setColor(g.theme.fg).drawLine(r.x, r.y+r.h-3, r.w, r.y+r.h-3) + g.setColor(g.theme.fg).drawLine(r.x, r.y+r.h-3, r.w, r.y+r.h-3); }else{ g.setColor(g.theme.bg2).fillRect({x:r.x+4, y:r.y+2, w:r.w-8, h:r.h-4, r:5}).setColor(g.theme.fg2); } From 32884b61d92af436ffb067350449819cc5d72e65 Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Fri, 12 Dec 2025 22:32:38 -0500 Subject: [PATCH 5/9] Update libs/js/banglejs/E_showMenu_Q3.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- libs/js/banglejs/E_showMenu_Q3.js | 1 - 1 file changed, 1 deletion(-) diff --git a/libs/js/banglejs/E_showMenu_Q3.js b/libs/js/banglejs/E_showMenu_Q3.js index 211a36823..512e9cb2e 100644 --- a/libs/js/banglejs/E_showMenu_Q3.js +++ b/libs/js/banglejs/E_showMenu_Q3.js @@ -127,7 +127,6 @@ E.showMenu=(function(menu) { }else{ g.setColor(g.theme.bg2).fillRect({x:r.x+4, y:r.y+2, w:r.w-8, h:r.h-4, r:5}).setColor(g.theme.fg2); } - print("item rendered: "+item) if ("object" == typeof item) { var v = item.value; if (item.format) v=item.format(v); From 7fa505afd429706452792818334c960c0714e4a8 Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Fri, 12 Dec 2025 22:32:54 -0500 Subject: [PATCH 6/9] Update libs/js/banglejs/E_showMenu_Q3.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- libs/js/banglejs/E_showMenu_Q3.js | 1 - 1 file changed, 1 deletion(-) diff --git a/libs/js/banglejs/E_showMenu_Q3.js b/libs/js/banglejs/E_showMenu_Q3.js index 512e9cb2e..34beccc57 100644 --- a/libs/js/banglejs/E_showMenu_Q3.js +++ b/libs/js/banglejs/E_showMenu_Q3.js @@ -61,7 +61,6 @@ E.showMenu=(function(menu) { menuIcon+" "+title, R.x+R.w/2,R.y+12); function draw() { - var mx = R.x+R.w/2, my = 12+R.y+R.h/2, txt = item.format?item.format(v,2):v, s = 30; g.reset().setColor(g.theme.bg2).fillRect({x:R.x+24, y:R.y+36, w:R.w-48, h:R.h-48, r:5}); g.setColor(g.theme.fg2).setFontVector(Math.min(30,(R.w-52)*100/g.setFontVector(100).stringWidth(txt))).setFontAlign(0,0).drawString(txt, mx, my); From d2959894e064c7c84d1d6cc9fb906b15f5d69e7f Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Fri, 12 Dec 2025 22:33:28 -0500 Subject: [PATCH 7/9] Rename isSpacer to isSeparator for clarity --- libs/js/banglejs/E_showMenu_Q3.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/libs/js/banglejs/E_showMenu_Q3.js b/libs/js/banglejs/E_showMenu_Q3.js index 34beccc57..1d5b81abd 100644 --- a/libs/js/banglejs/E_showMenu_Q3.js +++ b/libs/js/banglejs/E_showMenu_Q3.js @@ -18,7 +18,6 @@ E.showMenu=(function(menu) { }); // Submenu for editing menu options... function showSubMenu(item, title) { - print("item rendered: "+item) /*if ("number"!=typeof item.value) return console.log("Unhandled item type");*/ var step = item.step||1; @@ -120,8 +119,8 @@ E.showMenu=(function(menu) { if (idx<0) // TITLE return g.drawString(g.findFont(menuIcon+" "+options.title, {w:r.w,h:24,max:24}).text, r.x+12, (r.y+r.h/2)+4); var item = menu[keys[idx]], pad = 16; - var isSpacer = "string" == typeof item && (item == "separator" || item == "Separator") - if(isSpacer){ + var isSeparator = "string" == typeof item && (item == "separator" || item == "Separator") + if(isSeparator){ g.setColor(g.theme.fg).drawLine(r.x, r.y+r.h-3, r.w, r.y+r.h-3); }else{ g.setColor(g.theme.bg2).fillRect({x:r.x+4, y:r.y+2, w:r.w-8, h:r.h-4, r:5}).setColor(g.theme.fg2); @@ -139,7 +138,7 @@ E.showMenu=(function(menu) { g.drawImage(/* 9x18 */atob("CRKBAGA4Hg8DwPB4HgcDg8PB4eHg8HAwAA=="), r.x+r.w-21, r.y+H/2-9); pad += 16; } - if(isSpacer){ + if(isSeparator){ g.setFontAlign(0).drawString(g.findFont((item&&item.title)??keys[idx], {w:r.w-pad,h:r.h-15,wrap:1,trim:1}).text,r.x+r.w/2, 2+r.y+H/2); }else{ g.setFontAlign(-1,0).drawString(g.findFont((item&&item.title)??keys[idx], {w:r.w-pad,h:r.h,wrap:1,trim:1}).text,r.x+8, 2+r.y+H/2); @@ -148,8 +147,8 @@ E.showMenu=(function(menu) { select : function(idx, touch) { if (idx<0) return back&&back(); // title var item = menu[keys[idx]]; - var isSpacer= "string" == typeof item&&(item=="separator"||item=="Separator") - if(!isSpacer)Bangle.buzz(20); + var isSeparator= "string" == typeof item&&(item=="separator"||item=="Separator") + if(!isSeparator)Bangle.buzz(20); if ("function" == typeof item) item(touch); else if ("object" == typeof item) { if ("number" == typeof item.value) { From 11b624878b2e596a4d318101de1d3d0dfa41fc77 Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Sun, 14 Dec 2025 10:51:52 -0500 Subject: [PATCH 8/9] Update docs --- libs/banglejs/jswrap_bangle.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libs/banglejs/jswrap_bangle.c b/libs/banglejs/jswrap_bangle.c index 010cbcce7..bdd781258 100644 --- a/libs/banglejs/jswrap_bangle.c +++ b/libs/banglejs/jswrap_bangle.c @@ -6001,7 +6001,8 @@ var mainmenu = { "" : { title : "-- Main Menu --" }, // options "LED On" : function() { LED1.set(); }, "LED Off" : function() { LED1.reset(); }, - "Submenu" : function() { E.showMenu(submenu); }, + "Submenu" : function() { E.showMenu(submenu); }, // can call any function here + "A Separator":"separator", // displays a separator with the title "A Separator". "A Boolean" : { value : boolean, format : v => v?"On":"Off", From 8f5fa9e06e1c75b812868f8d96511af7a2810bf9 Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Sun, 14 Dec 2025 10:53:43 -0500 Subject: [PATCH 9/9] Remove old boot call --- libs/js/banglejs/E_showMenu_Q3.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/js/banglejs/E_showMenu_Q3.js b/libs/js/banglejs/E_showMenu_Q3.js index 1d5b81abd..b742f7726 100644 --- a/libs/js/banglejs/E_showMenu_Q3.js +++ b/libs/js/banglejs/E_showMenu_Q3.js @@ -1,4 +1,4 @@ -E.showMenu=(function(menu) { +(function(menu) { const H = 40; if (menu===undefined) { g.clearRect(Bangle.appRect);