Espruino/libs/js/banglejs/E_showMenu_Q3.min.js

5 lines
2.3 KiB
JavaScript

(function(m){g.clear(1);Bangle.setLCDPower(1);Bangle.drawWidgets();if(m){var t=g.getWidth(),u=g.getHeight(),h=Object.keys(m),a=m[""];a&&h.splice(h.indexOf(""),1);a instanceof Object||(a={});a.fontHeight=21;a.x=0;a.x2=t-1;a.y=24;a.y2=u-12;void 0===a.selected&&(a.selected=0);var q=0|a.x,n=a.x2||g.getWidth()-1,l=0|a.y,v=a.y2||g.getHeight()-1;a.title&&(l+=22);var r=require("locale"),d={lastIdx:0,draw:function(b,c){var p=0|Math.min((v-l)/a.fontHeight,h.length),f=E.clip(a.selected-
(p>>1),0,h.length-p);f!=d.lastIdx&&(b=void 0);d.lastIdx=f;var e=l;g.reset().setFontAlign(0,-1,0).setFont("12x20");void 0===b&&a.title&&g.drawString(a.title,(q+n)/2,l-21).drawLine(q,l-2,n,l-2).setColor(g.theme.fg).setBgColor(g.theme.bg);e+=12;g.setColor(0<f?g.theme.fg:g.theme.bg).fillPoly([72,e,104,e,88,e-12]);void 0!==b&&(f<b&&(e+=a.fontHeight*(b-f),f=b),f+p>c&&(p=1+c-b));for(;p--;){c=h[f];b=m[c];var k=f==a.selected&&!d.selectEdit;g.setColor(k?g.theme.bgH:g.theme.bg);g.fillRect(q,e,n,e+a.fontHeight-
1);g.setColor(k?g.theme.fgH:g.theme.fg);g.setFontAlign(-1,-1);g.drawString(r.translate(c),q+1,e+1);"object"==typeof b&&(c=n,k=b.value,b.format&&(k=b.format(k)),k=r.translate(""+k),d.selectEdit&&f==a.selected&&(c-=25,g.setColor(g.theme.bgH).fillRect(c-(g.stringWidth(k)+4),e,n,e+a.fontHeight-1),g.setColor(g.theme.fgH).drawImage("\f\u0005\u0081\x00 \u0007\x00\u00f9\u00f0\u000e\x00@",c,e+(a.fontHeight-10)/2,{scale:2})),g.setFontAlign(1,-1),g.drawString(k,c-2,e+1));g.setColor(g.theme.fg);e+=a.fontHeight;
f++}g.setFontAlign(-1,-1);g.setColor(f<h.length?g.theme.fg:g.theme.bg).fillPoly([72,166,104,166,88,174]);g.flip()},select:function(b){b=m[h[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){var c=d.selectEdit;if(c){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);d.draw(a.selected,a.selected)}else c=a.selected,a.selected=(b+a.selected)%h.length,0>a.selected&&(a.selected+=h.length),d.draw(Math.min(c,a.selected),Math.max(c,a.selected))}};d.draw();Bangle.setUI("updown",b=>{b?d.move(b):d.select()});return d}Bangle.setUI()})