175 lines
4.4 KiB
JavaScript
175 lines
4.4 KiB
JavaScript
var s = Object.assign({
|
|
display2:true,
|
|
counter0:10,
|
|
counter1:20,
|
|
max0:15,
|
|
max1:25,
|
|
fullscreen:true,
|
|
buzz: true,
|
|
colortext: true,
|
|
keepunlocked: false,
|
|
}, require('Storage').readJSON("counter2.json", true) || {});
|
|
|
|
var sGlob = Object.assign({
|
|
timeout: 10,
|
|
}, require('Storage').readJSON("setting.json", true) || {});
|
|
|
|
const lockTimeout = s.keepunlocked ? 0 : 1000;
|
|
if (s.keepunlocked) {
|
|
Bangle.setOptions({lockTimeout});
|
|
Bangle.setLocked(false);
|
|
}
|
|
|
|
const f1 = (s.colortext) ? "#f00" : "#fff";
|
|
const f2 = (s.colortext) ? "#00f" : "#fff";
|
|
const b1 = (s.colortext) ? g.theme.bg : "#f00";
|
|
const b2 = (s.colortext) ? g.theme.bg : "#00f";
|
|
|
|
var drag;
|
|
var dragCurr = {x:0 ,y:0 ,dx:0 ,dy:0 ,b:false};
|
|
|
|
const screenwidth = g.getWidth();
|
|
const screenheight = g.getHeight();
|
|
const halfwidth = screenwidth / 2;
|
|
const halfheight = screenheight / 2;
|
|
|
|
const counter = [];
|
|
counter[0] = s.counter0;
|
|
counter[1] = s.counter1;
|
|
const defaults = [];
|
|
defaults[0] = s.max0;
|
|
defaults[1] = s.max1;
|
|
|
|
function saveSettings() {
|
|
s.counter0 = counter[0];
|
|
s.counter1 = counter[1];
|
|
s.max0 = defaults[0];
|
|
s.max1 = defaults[1];
|
|
require('Storage').writeJSON("counter2.json", s);
|
|
}
|
|
|
|
let ignoreonce = false;
|
|
let fastupdateoccurring = false;
|
|
var dragtimeout;
|
|
|
|
function updateScreen() {
|
|
if (s.display2) {
|
|
g.setBgColor(b1);
|
|
g.clearRect(0, 0, halfwidth, screenheight);
|
|
g.setBgColor(b2);
|
|
g.clearRect(halfwidth, 0, screenwidth, screenheight);
|
|
g.setFont("Vector", 60).setFontAlign(0, 0);
|
|
g.setColor(f1);
|
|
g.drawString(Math.floor(counter[0]), halfwidth * 0.5, halfheight);
|
|
g.setColor(f2);
|
|
g.drawString(Math.floor(counter[1]), halfwidth * 1.5, halfheight);
|
|
}
|
|
else {
|
|
g.setBgColor(b2); // Using right counter's colors b/c blue looks nicer than red
|
|
g.clearRect(0, 0, screenwidth, screenheight);
|
|
g.setFont("Vector", 90).setFontAlign(0, 0);
|
|
g.setColor(f2);
|
|
g.drawString(Math.floor(counter[0]), halfwidth, halfheight);
|
|
}
|
|
saveSettings();
|
|
if (s.buzz) Bangle.buzz(50,.5);
|
|
|
|
Bangle.loadWidgets();
|
|
if (s.fullscreen) {
|
|
require("widget_utils").hide();
|
|
}
|
|
else {
|
|
Bangle.drawWidgets();
|
|
}
|
|
}
|
|
|
|
// Clearing the timer on lock is likely uneeded, but just in case
|
|
Bangle.on('lock', e => {
|
|
drag = undefined;
|
|
var timeOutTimer = sGlob.timeout * 1000;
|
|
Bangle.setOptions({backlightTimeout: timeOutTimer, lockTimeout});
|
|
if (dragtimeout) clearTimeout(dragtimeout);
|
|
fastupdateoccurring = false;
|
|
});
|
|
|
|
Bangle.on("drag", e => {
|
|
const c = (e.x >= halfwidth && s.display2) ? 1 : 0;
|
|
dragCurr = e;
|
|
if (!drag) {
|
|
if (ignoreonce) {
|
|
ignoreonce = false;
|
|
return;
|
|
}
|
|
drag = { x: e.x, y: e.y };
|
|
dragtimeout = setTimeout(function () { fastupdatecounter(c); }, 600); //if dragging for 500ms, reset counter
|
|
}
|
|
else if (drag && !e.b) { // released
|
|
if (!fastupdateoccurring)
|
|
updatecounter(c);
|
|
drag = undefined;
|
|
if (dragtimeout) {
|
|
let timeOutTimer = 1000;
|
|
Bangle.setOptions({backlightTimeout: timeOutTimer, lockTimeout});
|
|
clearTimeout(dragtimeout);
|
|
}
|
|
fastupdateoccurring = false;
|
|
}
|
|
});
|
|
|
|
function updatecounter(which) {
|
|
let adjust = 0;
|
|
const dx = dragCurr.x - drag.x, dy = dragCurr.y - drag.y;
|
|
if (Math.abs(dy) > Math.abs(dx) + 30) {
|
|
adjust = (dy > 0) ? -1 : 1;
|
|
} else {
|
|
adjust = (dragCurr.y > halfheight) ? -1 : 1;
|
|
}
|
|
counter[which] += adjust;
|
|
updateScreen();
|
|
}
|
|
|
|
function fastupdatecounter(which) {
|
|
fastupdateoccurring = true;
|
|
updatecounter(which);
|
|
Bangle.setOptions({backlightTimeout: 0, lockTimeout: 0});
|
|
dragtimeout = setTimeout(function () { fastupdatecounter(which); }, 10);
|
|
}
|
|
|
|
|
|
function resetcounter(which) {
|
|
// If which is null, reset all
|
|
fastupdateoccurring = false;
|
|
if (dragtimeout) {
|
|
let timeOutTimer = 1000;
|
|
Bangle.setOptions({backlightTimeout: timeOutTimer, lockTimeout});
|
|
clearTimeout(dragtimeout);
|
|
}
|
|
if (which == null) {
|
|
for (let iter = 0; iter < defaults.length; iter++) {
|
|
counter[iter] = defaults[iter];
|
|
}
|
|
console.log("resetting all counters");
|
|
}
|
|
else {
|
|
counter[which] = defaults[which];
|
|
console.log("resetting counter ", which);
|
|
}
|
|
updateScreen();
|
|
drag = undefined;
|
|
ignoreonce = true;
|
|
}
|
|
|
|
updateScreen();
|
|
|
|
setWatch(function() {
|
|
for (let which = 0; which < defaults.length; which++) {
|
|
if(counter[which] != defaults[which]) {
|
|
resetcounter(null);
|
|
return;
|
|
}
|
|
}
|
|
var timeOutTimer = sGlob.timeout * 1000;
|
|
Bangle.setOptions({backlightTimeout: timeOutTimer, lockTimeout});
|
|
load();
|
|
}, BTN1, {repeat:true, edge:"falling"});
|