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