Espruino/libs/js/banglejs/E_showMenu_Q3.min.js
2021-12-08 14:39:27 +00:00

5 lines
2.2 KiB
JavaScript

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