BangleApps/apps/qcenter/app.js

130 lines
2.9 KiB
JavaScript
Raw Normal View History

{
2022-11-22 12:52:21 +00:00
require("Font8x12").add(Graphics);
// load pinned apps from config
let settings = require("Storage").readJSON("qcenter.json", 1) || {};
let pinnedApps = settings.pinnedApps || [];
let exitGesture = settings.exitGesture || "swipeup";
2022-11-22 12:52:21 +00:00
// if empty load a default set of apps as an example
if (pinnedApps.length == 0) {
pinnedApps = [
{ src: "setting.app.js", icon: "setting.img" },
{ src: "about.app.js", icon: "about.img" },
];
}
// button drawing from Layout.js, edited to have completely custom button size with icon
let drawButton = function(l) {
let x = l.x + (0 | l.pad),
2022-11-22 12:52:21 +00:00
y = l.y + (0 | l.pad),
w = l.w - (l.pad << 1),
h = l.h - (l.pad << 1);
let poly = [
2022-11-22 12:52:21 +00:00
x,
y + 4,
x + 4,
y,
x + w - 5,
y,
x + w - 1,
y + 4,
x + w - 1,
y + h - 5,
x + w - 5,
y + h - 1,
x + 4,
y + h - 1,
x,
y + h - 5,
x,
y + 4,
],
bg = l.selected ? g.theme.bgH : g.theme.bg2;
g.setColor(bg)
.fillPoly(poly)
.setColor(l.selected ? g.theme.fgH : g.theme.fg2)
.drawPoly(poly);
if (l.src)
g.setBgColor(bg).drawImage(
"function" == typeof l.src ? l.src() : l.src,
l.x + l.w / 2,
l.y + l.h / 2,
{ scale: l.scale || undefined, rotate: Math.PI * 0.5 * (l.r || 0) }
);
}
// function to split array into group of 3, for button placement
let groupBy3 = function(data) {
let result = [];
for (let i = 0; i < data.length; i += 3) result.push(data.slice(i, i + 3));
2022-11-22 12:52:21 +00:00
return result;
}
// generate object with buttons for apps by group of 3
let appButtons = groupBy3(pinnedApps).map((appGroup, i) => {
2022-11-22 12:52:21 +00:00
return appGroup.map((app, j) => {
return {
type: "custom",
render: drawButton,
width: 50,
height: 50,
pad: 5,
src: require("Storage").read(app.icon),
scale: 0.75,
cb: (l) => load(app.src),
2022-11-22 12:52:21 +00:00
};
});
});
2022-11-25 13:42:10 +00:00
// create basic layout content with status info and sensor status on top
let layoutContent = [
2022-11-22 12:52:21 +00:00
{
type: "h",
pad: 5,
2022-11-25 20:37:54 +00:00
fillx: 1,
2022-11-22 12:52:21 +00:00
c: [
2022-11-25 20:37:54 +00:00
{ type: "txt", font: "8x12", pad: 3, scale: 2, label: E.getBattery() + "%" },
{ type: "txt", font: "8x12", pad: 3, scale: 2, label: "GPS: " + (Bangle.isGPSOn() ? "ON" : "OFF") },
2022-11-22 12:52:21 +00:00
],
},
];
// create rows for buttons and add them to layoutContent
appButtons.forEach((appGroup) => {
layoutContent.push({
type: "h",
pad: 2,
c: appGroup,
});
});
2022-11-24 17:30:29 +00:00
// create layout with content
Bangle.loadWidgets();
let Layout = require("Layout");
let layout = new Layout({
2022-11-22 12:52:21 +00:00
type: "v",
c: layoutContent
}, {
remove: ()=>{
Bangle.removeListener("swipe", onSwipe);
delete Graphics.prototype.setFont8x12;
}
2022-11-22 12:52:21 +00:00
});
g.clear();
layout.render();
2022-11-24 17:30:29 +00:00
Bangle.drawWidgets();
2022-11-22 12:52:21 +00:00
2022-11-24 17:30:29 +00:00
// swipe event listener for exit gesture
let onSwipe = function (lr, ud) {
2022-11-22 12:52:21 +00:00
if(exitGesture == "swipeup" && ud == -1) Bangle.showClock();
if(exitGesture == "swipedown" && ud == 1) Bangle.showClock();
if(exitGesture == "swipeleft" && lr == -1) Bangle.showClock();
if(exitGesture == "swiperight" && lr == 1) Bangle.showClock();
}
Bangle.on("swipe", onSwipe);
}