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