Merge branch 'b1-menu-back-button' into b1-submenu

This commit is contained in:
Richard de Boer 2022-04-27 21:25:47 +02:00
commit 5c187d45c5
No known key found for this signature in database
GPG Key ID: 8721727971871937
2 changed files with 27 additions and 19 deletions

View File

@ -5,7 +5,7 @@
Bangle.setUI();
return;
}
var options = items[""];
var options = items[""];
var menuItems = Object.keys(items);
if (options) {
menuItems.splice(menuItems.indexOf(""),1);
@ -20,7 +20,7 @@
if ("object" != typeof item) return;
if ("boolean" == typeof item.value && !item.format)
item.format = v=>atob(v?"AAwMggC///7//////////8///w///D/y8P/4A//8D/////////+///4=":"AAwMgQD/+AGAGAGAGAGAGAGAGAGAH/8=");
});
});
if (!(options instanceof Object)) options = {};
options.fontHeight = options.fontHeight||16;
if (options.selected === undefined)
@ -40,7 +40,7 @@
var rows = 0|Math.min((y2-y) / options.fontHeight,menuItems.length);
var idx = E.clip(options.selected-(rows>>1),0,menuItems.length-rows);
if (idx!=l.lastIdx) rowmin=undefined; // redraw all if we scrolled
l.lastIdx = idx;
l.lastIdx = idx;
var more = (idx+rows)<menuItems.length;
var iy = y;
g.reset().setFont('6x8',2).setFontAlign(0,-1,0);
@ -125,16 +125,13 @@
var item = items[menuItems[options.selected]];
if (l.main) { // selected a submenu item
var value = item;
options.selected = l.main.selected;
options.title = l.main.title;
items = l.main.items;
menuItems = l.main.menuItems;
delete l.main;
item = items[menuItems[options.selected]];
item = l.main.items[l.main.menuItems[l.main.selected]];
item.value = value;
if (item.onchange) item.onchange(item.value);
g.reset().clearRect(Bangle.appRect);
l.draw();
l.back();
if (item.onchange) {
item.onchange(item.value);
l.draw(options.selected, options.selected);
}
}
else if ("function" == typeof item) item(l);
else if ("object" == typeof item) {
@ -186,10 +183,21 @@
options.selected = (dir+options.selected+menuItems.length)%menuItems.length;
l.draw(Math.min(lastSelected,options.selected), Math.max(lastSelected,options.selected));
}
},
back : function() {
if (l.main) { // exit submenu
options.selected = l.main.selected;
options.title = l.main.title;
items = l.main.items;
menuItems = l.main.menuItems;
delete l.main;
g.reset().clearRect(Bangle.appRect);
l.draw();
} else if (items["< Back"]) items["< Back"]();
}
};
l.draw();
Bangle.setUI("updown",dir => {
Bangle.setUI({mode: "updown", back: items["< Back"]?l.back:undefined}, dir => {
if (dir) l.move(dir);
else l.select();
});

View File

@ -1,7 +1,7 @@
(function(f){g.reset().clearRect(Bangle.appRect);Bangle.setLCDPower(1);if(f){var b=f[""],e=Object.keys(f);b&&(e.splice(e.indexOf(""),1),b.back&&(f["< Back"]=b.back,e.unshift("< Back")));e.forEach(a=>{a=f[a];"object"!=typeof a||"boolean"!=typeof a.value||a.format||(a.format=c=>atob(c?"AAwMggC///7//////////8///w///D/y8P/4A//8D/////////+///4=":"AAwMgQD/+AGAGAGAGAGAGAGAGAGAH/8="))});b instanceof Object||(b={});b.fontHeight=b.fontHeight||16;void 0===b.selected&&(b.selected=0);
b.fontHeight||(b.fontHeight=6);var q=Bangle.appRect,r=q.x,m=q.x2-11,p=q.y,t=q.y2-20;b.title&&(p+=b.fontHeight+2);var d={lastIdx:0,draw:function(a,c){var h=0|Math.min((t-p)/b.fontHeight,e.length),k=E.clip(b.selected-(h>>1),0,e.length-h);k!=d.lastIdx&&(a=void 0);d.lastIdx=k;var u=k+h<e.length,l=p;g.reset().setFont("6x8",2).setFontAlign(0,-1,0);b.predraw&&b.predraw(g);void 0===a&&b.title&&(g.drawString(b.title,(r+m)/2,p-b.fontHeight-2),g.drawLine(r,p-2,m,p-2));void 0!==a&&(k<a&&(l+=b.fontHeight*(a-k),
k=a),k+h>c&&(h=1+c-a));for(;h--;){c=e[k];a=f[c];var n=k==b.selected&&!d.selectEdit;g.setColor(n?g.theme.bgH:g.theme.bg);g.fillRect(r,l,m,l+b.fontHeight-1);g.setColor(n?g.theme.fgH:g.theme.fg);g.setFontAlign(-1,-1);g.drawString(c,r,l);"object"==typeof a?(c=m,n=a.value,a.format&&(n=a.format(n)),d.selectEdit&&k==b.selected&&(c-=25,g.setColor(g.theme.bgH).fillRect(c-(g.stringWidth(n)+4),l,m,l+b.fontHeight-1),g.setColor(g.theme.fgH).drawImage("\f\u0005\u0081\x00 \u0007\x00\u00f9\u00f0\u000e\x00@",c,l+
(function(e){g.reset().clearRect(Bangle.appRect);Bangle.setLCDPower(1);if(e){var b=e[""],f=Object.keys(e);b&&(f.splice(f.indexOf(""),1),b.back&&(e["< Back"]=b.back,f.unshift("< Back")));f.forEach(a=>{a=e[a];"object"!=typeof a||"boolean"!=typeof a.value||a.format||(a.format=c=>atob(c?"AAwMggC///7//////////8///w///D/y8P/4A//8D/////////+///4=":"AAwMgQD/+AGAGAGAGAGAGAGAGAGAH/8="))});b instanceof Object||(b={});b.fontHeight=b.fontHeight||16;void 0===b.selected&&(b.selected=0);
b.fontHeight||(b.fontHeight=6);var q=Bangle.appRect,r=q.x,m=q.x2-11,p=q.y,t=q.y2-20;b.title&&(p+=b.fontHeight+2);var d={lastIdx:0,draw:function(a,c){var h=0|Math.min((t-p)/b.fontHeight,f.length),k=E.clip(b.selected-(h>>1),0,f.length-h);k!=d.lastIdx&&(a=void 0);d.lastIdx=k;var u=k+h<f.length,l=p;g.reset().setFont("6x8",2).setFontAlign(0,-1,0);b.predraw&&b.predraw(g);void 0===a&&b.title&&(g.drawString(b.title,(r+m)/2,p-b.fontHeight-2),g.drawLine(r,p-2,m,p-2));void 0!==a&&(k<a&&(l+=b.fontHeight*(a-k),
k=a),k+h>c&&(h=1+c-a));for(;h--;){c=f[k];a=e[c];var n=k==b.selected&&!d.selectEdit;g.setColor(n?g.theme.bgH:g.theme.bg);g.fillRect(r,l,m,l+b.fontHeight-1);g.setColor(n?g.theme.fgH:g.theme.fg);g.setFontAlign(-1,-1);g.drawString(c,r,l);"object"==typeof a?(c=m,n=a.value,a.format&&(n=a.format(n)),d.selectEdit&&k==b.selected&&(c-=25,g.setColor(g.theme.bgH).fillRect(c-(g.stringWidth(n)+4),l,m,l+b.fontHeight-1),g.setColor(g.theme.fgH).drawImage("\f\u0005\u0081\x00 \u0007\x00\u00f9\u00f0\u000e\x00@",c,l+
(b.fontHeight-10)/2,{scale:2})),g.setFontAlign(1,-1),g.drawString(n,c-2,l)):d.main&&(g.setFontAlign(1,-1),g.drawString(atob(d.main.value==a?"AAoKgQAeH+f7//////3+f4eA":"AAoKgQAeH+YbA8DwPA2Gf4eA"),m,l));g.setColor(g.theme.fg);l+=b.fontHeight;k++}g.setFontAlign(-1,-1);g.drawImage("\b\b\u0001\u00108|\u00fe\u0010\u0010\u0010\u0010",m+2,40);g.drawImage("\b\b\u0001\u0010\u0010\u0010\u0010\u00fe|8\u0010",m+2,194);g.drawImage("\b\b\u0001\x00\b\f\u000e\u00ff\u000e\f\b",m+2,116);g.setColor(u?g.theme.fg:g.theme.bg).fillPoly([104,
220,136,220,120,228]);g.flip()},select:function(){var a=f[e[b.selected]];if(d.main){var c=a;b.selected=d.main.selected;b.title=d.main.title;f=d.main.items;e=d.main.menuItems;delete d.main;a=f[e[b.selected]];a.value=c;if(a.onchange)a.onchange(a.value);g.reset().clearRect(Bangle.appRect);d.draw()}else if("function"==typeof a)a(d);else if("object"==typeof a){if("number"==typeof a.value)if(c=a.step||1,void 0!==a.min&&void 0!==a.max&&20>(a.max-a.min)/c){d.main={items:f,menuItems:e,selected:b.selected,
title:b.title,value:a.value};b.title=e[b.selected];b.selected=0;f=[];for(var h=a.min;h<=a.max;h+=c)f[a.format?a.format(h):h]=h,h==a.value&&(b.selected=Object.keys(f).length-1);e=Object.keys(f);g.reset().clearRect(Bangle.appRect);d.draw()}else d.selectEdit=d.selectEdit?void 0:a;else if("boolean"==typeof a.value&&(a.value=!a.value),a.onchange)a.onchange(a.value);d.draw()}},move:function(a){var c=d.selectEdit;if(c){c=d.selectEdit;c.value-=(a||1)*(c.step||1);void 0!==c.min&&c.value<c.min&&(c.value=c.wrap?
c.max:c.min);void 0!==c.max&&c.value>c.max&&(c.value=c.wrap?c.min:c.max);if(c.onchange)c.onchange(c.value);d.draw(b.selected,b.selected)}else c=b.selected,b.selected=(a+b.selected+e.length)%e.length,d.draw(Math.min(c,b.selected),Math.max(c,b.selected))}};d.draw();Bangle.setUI("updown",a=>{a?d.move(a):d.select()});return d}Bangle.setUI()})
220,136,220,120,228]);g.flip()},select:function(){var a=e[f[b.selected]];if(d.main){var c=a;a=d.main.items[d.main.menuItems[d.main.selected]];a.value=c;d.back();a.onchange&&(a.onchange(a.value),d.draw(b.selected,b.selected))}else if("function"==typeof a)a(d);else if("object"==typeof a){if("number"==typeof a.value)if(c=a.step||1,void 0!==a.min&&void 0!==a.max&&20>(a.max-a.min)/c){d.main={items:e,menuItems:f,selected:b.selected,title:b.title,value:a.value};b.title=f[b.selected];b.selected=0;e=[];for(var h=
a.min;h<=a.max;h+=c)e[a.format?a.format(h):h]=h,h==a.value&&(b.selected=Object.keys(e).length-1);f=Object.keys(e);g.reset().clearRect(Bangle.appRect);d.draw()}else d.selectEdit=d.selectEdit?void 0:a;else if("boolean"==typeof a.value&&(a.value=!a.value),a.onchange)a.onchange(a.value);d.draw()}},move:function(a){var c=d.selectEdit;if(c){c=d.selectEdit;c.value-=(a||1)*(c.step||1);void 0!==c.min&&c.value<c.min&&(c.value=c.wrap?c.max:c.min);void 0!==c.max&&c.value>c.max&&(c.value=c.wrap?c.min:c.max);if(c.onchange)c.onchange(c.value);
d.draw(b.selected,b.selected)}else c=b.selected,b.selected=(a+b.selected+f.length)%f.length,d.draw(Math.min(c,b.selected),Math.max(c,b.selected))},back:function(){if(d.main)b.selected=d.main.selected,b.title=d.main.title,e=d.main.items,f=d.main.menuItems,delete d.main,g.reset().clearRect(Bangle.appRect),d.draw();else if(e["< Back"])e["< Back"]()}};d.draw();Bangle.setUI({mode:"updown",back:e["< Back"]?d.back:void 0},a=>{a?d.move(a):d.select()});return d}Bangle.setUI()})