1
0
Fork 0
BangleApps/apps/widtmr/app.js

115 lines
2.6 KiB
JavaScript
Raw Normal View History

2022-02-25 16:14:19 +00:00
/*
* TIMER WIDGET
*
2022-02-25 16:14:19 +00:00
* This is a fork of the Chrono Widget, but implements a
* simpler UI which to be able to set a timer faster with
* less interaction. Additionally, it exposes some functions
* that can be used by other apps or clocks to easily
* implement a timer. It is used e.g. by lcars or notanalog.
*
* Creator: David Peer
* Date: 02/2022
*/
2022-02-23 20:47:22 +00:00
Bangle.loadWidgets();
const storage = require('Storage');
2022-02-25 16:14:19 +00:00
let settings;
2022-02-23 19:10:09 +00:00
const screenWidth = g.getWidth();
const screenHeight = g.getHeight();
2022-02-23 20:53:27 +00:00
const cx = parseInt(screenWidth/2);
const cy = parseInt(screenHeight/2)-12;
2022-02-23 19:10:09 +00:00
function updateSettings() {
var now = new Date();
const goal = new Date(now.getFullYear(), now.getMonth(), now.getDate(),
2022-02-25 16:14:19 +00:00
now.getHours(), now.getMinutes() + settings.minutes, now.getSeconds());
settings.goal = goal.getTime();
storage.writeJSON('widtmr.json', settings);
if (WIDGETS["widtmr"]) WIDGETS["widtmr"].reload();
}
2022-02-23 20:47:22 +00:00
function resetSettings() {
2022-02-25 16:14:19 +00:00
settings = {
hours : 0,
minutes : 0,
seconds : 0,
started : false,
counter : 0,
goal : 0,
};
updateSettings();
}
2022-02-23 20:47:22 +00:00
2022-02-25 16:14:19 +00:00
settings = storage.readJSON('widtmr.json',1);
if (!settings) resetSettings();
2022-02-23 20:47:22 +00:00
setWatch(_=>load(), BTN1);
2022-02-23 19:10:09 +00:00
function draw(){
g.clear(1);
Bangle.drawWidgets();
g.setFontAlign(0, 0, 0);
g.setFont("Vector", 32).setFontAlign(0,-1);
2022-03-04 16:35:34 +00:00
print(require("alarm").createTimer());
2022-02-25 16:14:19 +00:00
var text = settings.minutes + " min.";
var rectWidth = parseInt(g.stringWidth(text) / 2);
2022-02-23 19:10:09 +00:00
2022-02-25 16:14:19 +00:00
if(settings.started){
2022-02-23 19:10:09 +00:00
g.setColor("#ff0000");
} else {
g.setColor(g.theme.fg);
2022-02-23 19:10:09 +00:00
}
g.fillRect(cx-rectWidth-5, cy-5, cx+rectWidth, cy+30);
g.setColor(g.theme.bg);
g.drawString(text, cx, cy);
}
2022-02-23 20:47:22 +00:00
2022-02-23 19:10:09 +00:00
Bangle.on('touch', function(btn, e){
var left = parseInt(g.getWidth() * 0.25);
2022-02-23 19:10:09 +00:00
var right = g.getWidth() - left;
var upper = parseInt(g.getHeight() * 0.25);
2022-02-23 19:10:09 +00:00
var lower = g.getHeight() - upper;
var isLeft = e.x < left;
var isRight = e.x > right;
var isUpper = e.y < upper;
var isLower = e.y > lower;
if(isRight){
2022-02-25 16:14:19 +00:00
settings.minutes += 1;
Bangle.buzz(40, 0.3);
2022-02-23 19:10:09 +00:00
} else if(isLeft){
2022-02-25 16:14:19 +00:00
settings.minutes -= 1;
Bangle.buzz(40, 0.3);
2022-02-23 19:10:09 +00:00
} else if(isUpper){
2022-02-25 16:14:19 +00:00
settings.minutes += 5;
Bangle.buzz(40, 0.3);
2022-02-23 19:10:09 +00:00
} else if(isLower){
2022-02-25 16:14:19 +00:00
settings.minutes -= 5;
Bangle.buzz(40, 0.3);
2022-02-23 19:10:09 +00:00
} else {
2022-02-25 16:14:19 +00:00
settings.started = !settings.started;
Bangle.buzz(120, 0.6);
2022-02-23 19:10:09 +00:00
}
2022-02-25 16:14:19 +00:00
if(settings.minutes <= 0){
settings.minutes = 0;
settings.started = false;
2022-02-23 20:53:27 +00:00
}
2022-02-23 19:10:09 +00:00
updateSettings();
draw();
});
g.reset();
draw();