mirror of https://github.com/espruino/BangleApps
promenu: generate js
parent
4061b419c6
commit
aa6e46898f
|
@ -31,8 +31,45 @@ E.showMenu = function (items) {
|
||||||
var scroller = {
|
var scroller = {
|
||||||
scroll: selected,
|
scroll: selected,
|
||||||
};
|
};
|
||||||
|
var nameScroller = null;
|
||||||
|
var drawLine = function (name, v, item, idx, x, y, nameScroll) {
|
||||||
|
if (nameScroll === void 0) { nameScroll = 0; }
|
||||||
|
var hl = (idx === selected && !selectEdit);
|
||||||
|
if (g.theme.dark) {
|
||||||
|
fillRectRnd(x, y, x2, y + fontHeight - 3, 7, hl ? g.theme.bgH : g.theme.bg + 40);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
fillRectRnd(x, y, x2, y + fontHeight - 3, 7, hl ? g.theme.bgH : g.theme.bg - 20);
|
||||||
|
}
|
||||||
|
g.setFont12x20()
|
||||||
|
.setColor(hl ? g.theme.fgH : g.theme.fg)
|
||||||
|
.setFontAlign(-1, -1);
|
||||||
|
var vplain = v.indexOf("\0") < 0;
|
||||||
|
var truncated = true;
|
||||||
|
if (vplain && name.length >= 17 - v.length && typeof item === "object") {
|
||||||
|
g.drawString(name.substring(nameScroll, nameScroll + 12 - v.length) + "...", x + 3.7, y + 2.7);
|
||||||
|
}
|
||||||
|
else if (vplain && name.length >= 15) {
|
||||||
|
g.drawString(name.substring(nameScroll, nameScroll + 15) + "...", x + 3.7, y + 2.7);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
g.drawString(name, x + 3.7, y + 2.7);
|
||||||
|
truncated = false;
|
||||||
|
}
|
||||||
|
var xo = x2;
|
||||||
|
if (selectEdit && idx === selected) {
|
||||||
|
xo -= 24 + 1;
|
||||||
|
g.setColor(g.theme.fgH)
|
||||||
|
.drawImage("\x0c\x05\x81\x00 \x07\x00\xF9\xF0\x0E\x00@", xo, y + (fontHeight - 10) / 2, { scale: 2 });
|
||||||
|
}
|
||||||
|
g.setFontAlign(1, -1);
|
||||||
|
g.drawString(v, xo - 2, y + 1);
|
||||||
|
return truncated;
|
||||||
|
};
|
||||||
var l = {
|
var l = {
|
||||||
draw: function (rowmin, rowmax) {
|
draw: function (rowmin, rowmax) {
|
||||||
|
if (nameScroller)
|
||||||
|
clearInterval(nameScroller), nameScroller = null;
|
||||||
var rows = 0 | Math.min((y2 - y) / fontHeight, menuItems.length);
|
var rows = 0 | Math.min((y2 - y) / fontHeight, menuItems.length);
|
||||||
var idx = E.clip(selected - (rows >> 1), 0, menuItems.length - rows);
|
var idx = E.clip(selected - (rows >> 1), 0, menuItems.length - rows);
|
||||||
if (idx != lastIdx)
|
if (idx != lastIdx)
|
||||||
|
@ -55,18 +92,9 @@ E.showMenu = function (items) {
|
||||||
rows = 1 + rowmax - rowmin;
|
rows = 1 + rowmax - rowmin;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (rows--) {
|
var _loop_1 = function () {
|
||||||
var name = menuItems[idx];
|
var name = menuItems[idx];
|
||||||
var item = items[name];
|
var item = items[name];
|
||||||
var hl = (idx === selected && !selectEdit);
|
|
||||||
if (g.theme.dark) {
|
|
||||||
fillRectRnd(x, iy, x2, iy + fontHeight - 3, 7, hl ? g.theme.bgH : g.theme.bg + 40);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
fillRectRnd(x, iy, x2, iy + fontHeight - 3, 7, hl ? g.theme.bgH : g.theme.bg - 20);
|
|
||||||
}
|
|
||||||
g.setColor(hl ? g.theme.fgH : g.theme.fg);
|
|
||||||
g.setFontAlign(-1, -1);
|
|
||||||
var v = void 0;
|
var v = void 0;
|
||||||
if (typeof item === "object") {
|
if (typeof item === "object") {
|
||||||
v = "format" in item
|
v = "format" in item
|
||||||
|
@ -78,29 +106,22 @@ E.showMenu = function (items) {
|
||||||
else {
|
else {
|
||||||
v = "";
|
v = "";
|
||||||
}
|
}
|
||||||
{
|
var truncated = drawLine(name, v, item, idx, x, iy, 0);
|
||||||
var vplain = v.indexOf("\0") < 0;
|
if (truncated && idx === selected) {
|
||||||
if (vplain && name.length >= 17 - v.length && typeof item === "object") {
|
var nameScroll_1 = 0;
|
||||||
g.drawString(name.substring(0, 12 - v.length) + "...", x + 3.7, iy + 2.7);
|
nameScroller = setInterval(function (name, v, item, idx, x, iy) {
|
||||||
}
|
drawLine(name, v, item, idx, x, iy, nameScroll_1);
|
||||||
else if (vplain && name.length >= 15) {
|
nameScroll_1 += 1;
|
||||||
g.drawString(name.substring(0, 15) + "...", x + 3.7, iy + 2.7);
|
if (nameScroll_1 >= name.length - 5)
|
||||||
}
|
nameScroll_1 = 0;
|
||||||
else {
|
}, 300, name, v, item, idx, x, iy);
|
||||||
g.drawString(name, x + 3.7, iy + 2.7);
|
|
||||||
}
|
|
||||||
var xo = x2;
|
|
||||||
if (selectEdit && idx === selected) {
|
|
||||||
xo -= 24 + 1;
|
|
||||||
g.setColor(g.theme.fgH)
|
|
||||||
.drawImage("\x0c\x05\x81\x00 \x07\x00\xF9\xF0\x0E\x00@", xo, iy + (fontHeight - 10) / 2, { scale: 2 });
|
|
||||||
}
|
|
||||||
g.setFontAlign(1, -1);
|
|
||||||
g.drawString(v, xo - 2, iy + 1);
|
|
||||||
}
|
}
|
||||||
g.setColor(g.theme.fg);
|
g.setColor(g.theme.fg);
|
||||||
iy += fontHeight;
|
iy += fontHeight;
|
||||||
idx++;
|
idx++;
|
||||||
|
};
|
||||||
|
while (rows--) {
|
||||||
|
_loop_1();
|
||||||
}
|
}
|
||||||
g.setFontAlign(-1, -1);
|
g.setFontAlign(-1, -1);
|
||||||
g.setColor((idx < menuItems.length) ? g.theme.fg : g.theme.bg).fillPoly([72, 166, 104, 166, 88, 174]);
|
g.setColor((idx < menuItems.length) ? g.theme.fg : g.theme.bg).fillPoly([72, 166, 104, 166, 88, 174]);
|
||||||
|
@ -170,6 +191,8 @@ E.showMenu = function (items) {
|
||||||
mode: "updown",
|
mode: "updown",
|
||||||
back: back,
|
back: back,
|
||||||
remove: function () {
|
remove: function () {
|
||||||
|
if (nameScroller)
|
||||||
|
clearInterval(nameScroller);
|
||||||
Bangle.removeListener("swipe", onSwipe);
|
Bangle.removeListener("swipe", onSwipe);
|
||||||
},
|
},
|
||||||
}, function (dir) {
|
}, function (dir) {
|
||||||
|
|
Loading…
Reference in New Issue