2024-01-30 23:57:34 +00:00
|
|
|
// Example application code
|
|
|
|
// Taken from https://github.com/espruino/BangleApps/blob/master/apps/sclock/clock-simple.js
|
|
|
|
(function() {
|
|
|
|
|
2024-01-31 14:10:45 +00:00
|
|
|
const timeFontSize = 1;
|
|
|
|
const dateFontSize = 2;
|
|
|
|
const font = "12x20";
|
2024-01-30 23:57:34 +00:00
|
|
|
|
2024-04-18 13:00:12 +00:00
|
|
|
const Panel = {
|
|
|
|
STEPS: 0,
|
|
|
|
DATE: 1
|
|
|
|
};
|
|
|
|
|
|
|
|
let panel = Panel.STEPS;
|
|
|
|
|
|
|
|
const timeTextMagin = 15;
|
|
|
|
const xyCenter = timeTextMagin;
|
|
|
|
const yposTime = 45;
|
2024-03-08 21:38:50 +00:00
|
|
|
const leshores = ["Les dotze","La una","Les dues","Les tres","Les quatre","Les cinc","Les sis","Les set","Les vuit","Les nou","Les deu","Les onze","Les dotze","La una","Les dues","Les tres","Les quatre","Les cinc","Les sis","Les set","Les vuit","Les nou","Les deu","Les onze","Les dotze"];
|
2024-04-01 12:36:51 +00:00
|
|
|
const leshores2 = ["d'una","de dues","de tres","de quatre","de cinc","de sis","de set","de vuit","de nou","de deu","d'onze","de dotze"];
|
2024-04-18 13:00:12 +00:00
|
|
|
const RED = '#f00';
|
|
|
|
const BLACK = "#000"
|
2024-04-01 12:36:51 +00:00
|
|
|
|
|
|
|
function getHora(hour) {
|
|
|
|
if (hour >= 12) {
|
|
|
|
hour -= 12;
|
|
|
|
}
|
|
|
|
return leshores2[hour];
|
|
|
|
}
|
|
|
|
|
2024-04-18 13:00:12 +00:00
|
|
|
function addLineFeeds(inputString, g, posX) {
|
|
|
|
const margin = timeTextMagin;
|
2024-04-01 12:36:51 +00:00
|
|
|
const words = inputString.split(' ');
|
|
|
|
let lines = "";
|
|
|
|
let line = "";
|
2024-04-18 13:00:12 +00:00
|
|
|
const totalWidth = g.getWidth();
|
|
|
|
|
|
|
|
for (const word of words) {
|
|
|
|
const nextLine = line + word;
|
|
|
|
const width = posX + g.stringWidth(nextLine) + margin;
|
2024-04-01 12:36:51 +00:00
|
|
|
|
2024-04-18 13:00:12 +00:00
|
|
|
if (width > totalWidth) {
|
2024-04-01 12:36:51 +00:00
|
|
|
lines += line.trim() + "\r\n";
|
|
|
|
line = "";
|
|
|
|
}
|
|
|
|
line += word + " ";
|
|
|
|
}
|
|
|
|
lines += line.trim();
|
|
|
|
return lines;
|
|
|
|
}
|
2024-01-30 23:57:34 +00:00
|
|
|
|
2024-04-18 13:00:12 +00:00
|
|
|
// Define the center coordinates of the watch face
|
|
|
|
const margin = 10;
|
|
|
|
const centerX = 40 + margin;
|
|
|
|
const centerY = g.getHeight() - 40 - margin;
|
|
|
|
|
|
|
|
// Function to draw the watch face
|
|
|
|
function drawWatchFace() {
|
|
|
|
|
|
|
|
const diameter = 40;
|
|
|
|
g.setColor(BLACK);
|
|
|
|
g.drawCircle(centerX, centerY, diameter);
|
|
|
|
|
|
|
|
// Draw hour markers
|
|
|
|
for (let i = 0; i < 12; i++) {
|
|
|
|
const angle = (i / 12) * Math.PI * 2;
|
|
|
|
const x1 = centerX + Math.sin(angle) * 70 / 2;
|
|
|
|
const y1 = centerY - Math.cos(angle) * 70 / 2;
|
|
|
|
const x2 = centerX + Math.sin(angle) * 60 / 2;
|
|
|
|
const y2 = centerY - Math.cos(angle) * 60 / 2;
|
|
|
|
g.drawLine(x1, y1, x2, y2);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function drawHand(centerX, centerY, hourAngle, handLength) {
|
|
|
|
const hourHandX = centerX + Math.sin(hourAngle) * handLength;
|
|
|
|
const hourHandY = centerY - Math.cos(hourAngle) * handLength;
|
|
|
|
g.drawLine(centerX, centerY, hourHandX, hourHandY);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Function to update the watch display
|
|
|
|
function updateWatch() {
|
|
|
|
const now = new Date();
|
|
|
|
const hours = now.getHours() % 12;
|
|
|
|
const minutes = now.getMinutes();
|
|
|
|
|
|
|
|
// Calculate angles for hour, minute, and second hands
|
|
|
|
const hourAngle = ((hours + minutes / 60) / 12) * Math.PI * 2;
|
|
|
|
const minuteAngle = (minutes / 60) * Math.PI * 2;
|
|
|
|
g.setColor(BLACK);
|
|
|
|
|
|
|
|
drawHand(centerX, centerY, hourAngle, 10);
|
|
|
|
drawHand(centerX, centerY, minuteAngle, 15);
|
|
|
|
}
|
|
|
|
|
|
|
|
function getSteps() {
|
|
|
|
var steps = Bangle.getHealthStatus("day").steps;
|
|
|
|
steps = Math.round(steps/1000);
|
|
|
|
return steps + "k";
|
|
|
|
}
|
|
|
|
|
|
|
|
function drawDate() {
|
|
|
|
g.setFont(font, dateFontSize);
|
|
|
|
|
|
|
|
const date = new Date();
|
|
|
|
const dow = require("locale").dow(date, 2).toUpperCase(); //dj.
|
|
|
|
g.drawString(dow, g.getWidth() - 60, g.getHeight() - 60, true);
|
|
|
|
|
|
|
|
const mon = date.getDate() + " " + require("locale").month(date, 1);
|
|
|
|
g.setFont(font, "4x6");
|
|
|
|
g.drawString(mon, g.getWidth() - 70, g.getHeight() - 25, true);
|
|
|
|
}
|
|
|
|
|
|
|
|
function drawSteps() {
|
|
|
|
|
|
|
|
g.setFont(font, dateFontSize);
|
|
|
|
const steps = getSteps()
|
|
|
|
g.drawString(steps, g.getWidth() - 60, g.getHeight() - 60, true);
|
|
|
|
|
|
|
|
g.setFont(font, "4x6");
|
|
|
|
const text = "Passos"
|
|
|
|
g.drawString(text, g.getWidth() - 70, g.getHeight() - 25, true);
|
|
|
|
}
|
|
|
|
|
2024-01-30 23:57:34 +00:00
|
|
|
function drawSimpleClock() {
|
2024-04-18 13:00:12 +00:00
|
|
|
|
2024-01-30 23:57:34 +00:00
|
|
|
// get date
|
|
|
|
var d = new Date();
|
|
|
|
var m = d.getMinutes();
|
|
|
|
|
2024-03-13 10:51:40 +00:00
|
|
|
let t;
|
2024-04-22 13:17:44 +00:00
|
|
|
if (m = 0) {
|
2024-04-01 12:36:51 +00:00
|
|
|
t = leshores[d.getHours()] + " en punt";
|
2024-04-22 13:17:44 +00:00
|
|
|
} else if (m >= 1 && m < 4) {
|
2024-04-01 12:36:51 +00:00
|
|
|
t = leshores[d.getHours()] + " tocades";
|
2024-04-22 13:17:44 +00:00
|
|
|
} else if (m >= 4 && m < 7) {
|
2024-04-01 12:36:51 +00:00
|
|
|
t = leshores[d.getHours()] + " ben tocades";
|
2024-04-22 13:17:44 +00:00
|
|
|
} else if (m = 7) {
|
2024-04-01 12:36:51 +00:00
|
|
|
t = "Mig quart " + getHora(d.getHours());
|
2024-04-22 13:17:44 +00:00
|
|
|
} else if (m >= 8 && m < 12) {
|
2024-04-01 12:36:51 +00:00
|
|
|
t = "Mig quart tocat " + getHora(d.getHours());
|
2024-01-30 23:57:34 +00:00
|
|
|
} else if (m >= 12 && m < 15) {
|
2024-04-01 12:36:51 +00:00
|
|
|
t = "Mig quart ben tocat " + getHora(d.getHours());
|
2024-04-22 13:17:44 +00:00
|
|
|
} else if (m = 15) {
|
2024-04-01 12:36:51 +00:00
|
|
|
t = "Un quart " + getHora(d.getHours());
|
2024-04-22 13:17:44 +00:00
|
|
|
} else if (m >= 16 && m < 19) {
|
2024-04-01 12:36:51 +00:00
|
|
|
t = "Un quart tocat " + getHora(d.getHours());
|
2024-04-22 13:17:44 +00:00
|
|
|
} else if (m >= 19 && m < 22) {
|
2024-04-01 12:36:51 +00:00
|
|
|
t = "Un quart ben tocat " + getHora(d.getHours());
|
2024-04-22 13:17:44 +00:00
|
|
|
} else if (m = 22) {
|
2024-04-01 12:36:51 +00:00
|
|
|
t = "Un quart i mig " + getHora(d.getHours());
|
2024-04-22 13:17:44 +00:00
|
|
|
} else if (m >= 23 && m < 26) {
|
2024-04-01 12:36:51 +00:00
|
|
|
t = "Un quart i mig tocat " + getHora(d.getHours());
|
2024-04-22 13:17:44 +00:00
|
|
|
} else if (m >= 26 && m < 30) {
|
2024-04-01 12:36:51 +00:00
|
|
|
t = "Un quart i mig ben tocat " + getHora(d.getHours());
|
2024-04-22 13:17:44 +00:00
|
|
|
} else if (m = 30) {
|
2024-04-01 12:36:51 +00:00
|
|
|
t = "Dos quarts " + getHora(d.getHours());
|
2024-04-22 13:17:44 +00:00
|
|
|
} else if (m >= 31 && m < 34) {
|
2024-04-01 12:36:51 +00:00
|
|
|
t = "Dos quarts tocats " + getHora(d.getHours());
|
2024-04-22 13:17:44 +00:00
|
|
|
} else if (m >= 34 && m < 37) {
|
2024-04-01 12:36:51 +00:00
|
|
|
t = "Dos quarts ben tocats " + getHora(d.getHours());
|
2024-04-22 13:17:44 +00:00
|
|
|
} else if (m >= 37) {
|
2024-04-01 12:36:51 +00:00
|
|
|
t = "Dos quarts i mig " + getHora(d.getHours());
|
2024-04-22 13:17:44 +00:00
|
|
|
} else if (m >= 38 && m < 42) {
|
2024-04-01 12:36:51 +00:00
|
|
|
t = "Dos quarts i mig tocats " + getHora(d.getHours());
|
2024-01-30 23:57:34 +00:00
|
|
|
} else if (m >= 42 && m < 45) {
|
2024-04-01 12:36:51 +00:00
|
|
|
t = "Dos quarts i mig ben tocats " + getHora(d.getHours());
|
2024-04-22 13:17:44 +00:00
|
|
|
} else if (m >= 45) {
|
2024-04-01 12:36:51 +00:00
|
|
|
t = "Tres quarts " + getHora(d.getHours());
|
2024-04-22 13:17:44 +00:00
|
|
|
} else if (m >= 46 && m < 49) {
|
2024-04-01 12:36:51 +00:00
|
|
|
t = "Tres quarts tocats " + getHora(d.getHours());
|
2024-04-22 13:17:44 +00:00
|
|
|
} else if (m >= 49 && m < 52) {
|
2024-04-01 12:36:51 +00:00
|
|
|
t = "Tres quarts ben tocats " + getHora(d.getHours());
|
2024-04-22 13:17:44 +00:00
|
|
|
} else if (m = 52) {
|
2024-04-01 12:36:51 +00:00
|
|
|
t = "Tres quarts i mig " + getHora(d.getHours());
|
2024-04-22 13:17:44 +00:00
|
|
|
} else if (m >= 53 && m < 56) {
|
2024-04-01 12:36:51 +00:00
|
|
|
t = "Tres quarts i mig tocats " + getHora(d.getHours());
|
2024-01-30 23:57:34 +00:00
|
|
|
} else if (m >= 57) {
|
2024-04-01 12:36:51 +00:00
|
|
|
t = "Tres quarts i mig ben tocats " + getHora(d.getHours());
|
2024-01-30 23:57:34 +00:00
|
|
|
}
|
2024-04-18 13:00:12 +00:00
|
|
|
g.clearRect(Bangle.appRect);
|
|
|
|
// drawString centered
|
|
|
|
g.setFontAlign(-1, 0);
|
|
|
|
|
2024-01-30 23:57:34 +00:00
|
|
|
g.setFont(font, timeFontSize);
|
2024-04-18 13:00:12 +00:00
|
|
|
t = addLineFeeds(t, g, xyCenter);
|
2024-01-30 23:57:34 +00:00
|
|
|
|
2024-04-18 13:00:12 +00:00
|
|
|
let color;
|
|
|
|
if (E.getBattery() < 15) {
|
|
|
|
color = RED;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
color = BLACK;
|
|
|
|
}
|
2024-01-30 23:57:34 +00:00
|
|
|
|
2024-04-18 13:00:12 +00:00
|
|
|
g.setColor(color);
|
|
|
|
g.drawString(t, xyCenter, yposTime, true);
|
|
|
|
g.setColor(BLACK);
|
|
|
|
if (panel == Panel.STEPS) {
|
|
|
|
drawSteps();
|
|
|
|
panel = Panel.DATE;
|
|
|
|
} else {
|
|
|
|
drawDate();
|
|
|
|
panel = Panel.STEPS;
|
|
|
|
}
|
|
|
|
|
|
|
|
drawWatchFace();
|
|
|
|
updateWatch();
|
2024-01-30 23:57:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// handle switch display on by pressing BTN1
|
2024-02-02 11:30:50 +00:00
|
|
|
function onLcd(on) {
|
2024-01-30 23:57:34 +00:00
|
|
|
if (on) {
|
2024-01-31 14:40:45 +00:00
|
|
|
Bangle.drawWidgets();
|
2024-01-31 14:24:38 +00:00
|
|
|
//drawSimpleClock();
|
2024-02-02 11:30:50 +00:00
|
|
|
Bangle.removeListener('lcdPower', onLcd);
|
2024-01-30 23:57:34 +00:00
|
|
|
}
|
2024-02-02 11:30:50 +00:00
|
|
|
}
|
2024-04-18 13:00:12 +00:00
|
|
|
Bangle.on('lcdPower', onLcd);
|
|
|
|
Bangle.setUI({
|
|
|
|
mode: "clockupdown"
|
|
|
|
},
|
|
|
|
btn => {
|
|
|
|
// up & down even which forces panel switch
|
|
|
|
drawSimpleClock();
|
|
|
|
});
|
|
|
|
|
2024-03-09 16:52:05 +00:00
|
|
|
Bangle.loadWidgets();
|
2024-03-09 19:07:03 +00:00
|
|
|
require("widget_utils").swipeOn();
|
2024-01-30 23:57:34 +00:00
|
|
|
|
|
|
|
// clean app screen
|
2024-02-02 11:30:50 +00:00
|
|
|
g.clear();
|
2024-01-30 23:57:34 +00:00
|
|
|
|
2024-01-31 12:57:52 +00:00
|
|
|
// refesh every 60 sec
|
|
|
|
setInterval(drawSimpleClock, 60E3);
|
2024-01-30 23:57:34 +00:00
|
|
|
|
|
|
|
// draw now
|
|
|
|
drawSimpleClock();
|
|
|
|
|
|
|
|
})();
|