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