1
0
Fork 0
master
David Peer 2022-02-25 17:14:19 +01:00
parent 6a085c11d7
commit a03fdec826
10 changed files with 108 additions and 73 deletions

View File

@ -1,10 +0,0 @@
# Simple Chronometer Widget
A fork of the awesome Chronometer Widget, but with a simple UI to set
a timer faster using only a tab events. Also very useful if combined
with the Pattern Launcher.
# Contributors
Originally from [Purple-Tentacle](https://github.com/Purple-Tentacle)
Forked and adapted by [David Peer](https://github.com/peerdavid)

View File

@ -1,17 +0,0 @@
{
"id": "chronosimplewid",
"name": "Simple Chrono",
"shortName": "Simple Chrono",
"version": "0.01",
"description": "Chrono Widget Fork. Implements a simpler UI.",
"icon": "app.png",
"tags": "tool,widget",
"supports": ["BANGLEJS","BANGLEJS2"],
"screenshots": [{"url":"screenshot.png"}],
"readme": "README.md",
"storage": [
{"name":"chronosimplewid.wid.js","url":"widget.js"},
{"name":"chronosimplewid.app.js","url":"app.js"},
{"name":"chronosimplewid.img","url":"app-icon.js","evaluate":true}
]
}

12
apps/widtmr/README.md Normal file
View File

@ -0,0 +1,12 @@
# Simple Chronometer Widget
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.
# Contributors
Originally from [Purple-Tentacle](https://github.com/Purple-Tentacle)
Forked and adapted by [David Peer](https://github.com/peerdavid)

View File

@ -1,8 +1,19 @@
/*
* 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
*/
Bangle.loadWidgets(); Bangle.loadWidgets();
const storage = require('Storage'); const storage = require('Storage');
let settingsChronowid; let settings;
const screenWidth = g.getWidth(); const screenWidth = g.getWidth();
const screenHeight = g.getHeight(); const screenHeight = g.getHeight();
@ -13,15 +24,15 @@ const cy = parseInt(screenHeight/2);
function updateSettings() { function updateSettings() {
var now = new Date(); var now = new Date();
const goal = new Date(now.getFullYear(), now.getMonth(), now.getDate(), const goal = new Date(now.getFullYear(), now.getMonth(), now.getDate(),
now.getHours(), now.getMinutes() + settingsChronowid.minutes, now.getSeconds()); now.getHours(), now.getMinutes() + settings.minutes, now.getSeconds());
settingsChronowid.goal = goal.getTime(); settings.goal = goal.getTime();
storage.writeJSON('chronosimplewid.json', settingsChronowid); storage.writeJSON('widtmr.json', settings);
if (WIDGETS["chronowid"]) WIDGETS["chronowid"].reload(); if (WIDGETS["widtmr"]) WIDGETS["widtmr"].reload();
} }
function resetSettings() { function resetSettings() {
settingsChronowid = { settings = {
hours : 0, hours : 0,
minutes : 0, minutes : 0,
seconds : 0, seconds : 0,
@ -33,8 +44,8 @@ function resetSettings() {
} }
settingsChronowid = storage.readJSON('chronosimplewid.json',1); settings = storage.readJSON('widtmr.json',1);
if (!settingsChronowid) resetSettings(); if (!settings) resetSettings();
setWatch(_=>load(), BTN1); setWatch(_=>load(), BTN1);
@ -44,10 +55,10 @@ function draw(){
g.setFontAlign(0, 0, 0); g.setFontAlign(0, 0, 0);
g.setFont("Vector", 32).setFontAlign(0,-1); g.setFont("Vector", 32).setFontAlign(0,-1);
var text = settingsChronowid.minutes + " min."; var text = settings.minutes + " min.";
var rectWidth = parseInt(g.stringWidth(text) / 2); var rectWidth = parseInt(g.stringWidth(text) / 2);
if(settingsChronowid.started){ if(settings.started){
g.setColor("#ff0000"); g.setColor("#ff0000");
} else { } else {
g.setColor(g.theme.fg); g.setColor(g.theme.fg);
@ -70,25 +81,25 @@ Bangle.on('touch', function(btn, e){
var isLower = e.y > lower; var isLower = e.y > lower;
if(isRight){ if(isRight){
settingsChronowid.minutes += 1; settings.minutes += 1;
Bangle.buzz(40, 0.3); Bangle.buzz(40, 0.3);
} else if(isLeft){ } else if(isLeft){
settingsChronowid.minutes -= 1; settings.minutes -= 1;
Bangle.buzz(40, 0.3); Bangle.buzz(40, 0.3);
} else if(isUpper){ } else if(isUpper){
settingsChronowid.minutes += 5; settings.minutes += 5;
Bangle.buzz(40, 0.3); Bangle.buzz(40, 0.3);
} else if(isLower){ } else if(isLower){
settingsChronowid.minutes -= 5; settings.minutes -= 5;
Bangle.buzz(40, 0.3); Bangle.buzz(40, 0.3);
} else { } else {
settingsChronowid.started = !settingsChronowid.started; settings.started = !settings.started;
Bangle.buzz(120, 0.6); Bangle.buzz(120, 0.6);
} }
if(settingsChronowid.minutes <= 0){ if(settings.minutes <= 0){
settingsChronowid.minutes = 0; settings.minutes = 0;
settingsChronowid.started = false; settings.started = false;
} }
updateSettings(); updateSettings();

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

17
apps/widtmr/metadata.json Normal file
View File

@ -0,0 +1,17 @@
{
"id": "widtmr",
"name": "Timer Widget",
"shortName": "Timer Widget",
"version": "0.01",
"description": "Fork from Chrono Widget with a simpler UI and a lib for other apps.",
"icon": "app.png",
"tags": "tool,widget",
"supports": ["BANGLEJS","BANGLEJS2"],
"screenshots": [{"url":"screenshot.png"}],
"readme": "README.md",
"storage": [
{"name":"widtmr.wid.js","url":"widget.js"},
{"name":"widtmr.app.js","url":"app.js"},
{"name":"widtmr.img","url":"app-icon.js","evaluate":true}
]
}

View File

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@ -1,8 +1,11 @@
(() => { (() => {
var settingsChronowid; let storage = require('Storage');
var settings;
var interval = 0; //used for the 1 second interval timer var interval = 0; //used for the 1 second interval timer
var diff; var diff;
//Convert ms to time //Convert ms to time
function getTime(t) { function getTime(t) {
var milliseconds = parseInt((t % 1000) / 100), var milliseconds = parseInt((t % 1000) / 100),
@ -12,37 +15,35 @@
return hours.toString().padStart(2,0) + ":" + minutes.toString().padStart(2,0) + ":" + seconds.toString().padStart(2,0); return hours.toString().padStart(2,0) + ":" + minutes.toString().padStart(2,0) + ":" + seconds.toString().padStart(2,0);
} }
/*function printDebug() {
print ("Goaltime: " + getTime(settingsChronowid.goal));
print ("Goal: " + settingsChronowid.goal);
print("Difftime: " + getTime(diff));
print("Diff: " + diff);
print ("Started: " + settingsChronowid.started);
print ("----");
}*/
//counts down, calculates and displays //counts down, calculates and displays
function countDown() { function countDown() {
var now = new Date(); var now = new Date();
diff = settingsChronowid.goal - now; //calculate difference diff = settings.goal - now; //calculate difference
// time is up // time is up
if (settingsChronowid.started && diff < 1000) { if (settings.started && diff < 1000) {
Bangle.buzz(1500); Bangle.buzz(1500);
//write timer off to file //write timer off to file
settingsChronowid.started = false; settings.started = false;
require('Storage').writeJSON('chronosimplewid.json', settingsChronowid); storage.writeJSON('widtmr.json', settings);
clearInterval(interval); //stop interval clearInterval(interval); //stop interval
interval = undefined; interval = undefined;
} }
// calculates width and redraws accordingly // calculates width and redraws accordingly
WIDGETS["chronowid"].redraw(); WIDGETS["widtmr"].redraw();
}
/*
* Add the widgets and functions for other apps
*/
WIDGETS["widtmr"]={area:"tl",width:0,draw:function() {
if (!this.width) {
return;
} }
// add the widget
WIDGETS["chronowid"]={area:"tl",width:0,draw:function() {
if (!this.width) return;
g.reset().setFontAlign(0,0).clearRect(this.x,this.y,this.x+this.width,this.y+23); g.reset().setFontAlign(0,0).clearRect(this.x,this.y,this.x+this.width,this.y+23);
//g.drawRect(this.x,this.y,this.x+this.width-1, this.y+23);
var scale; var scale;
var timeStr; var timeStr;
if (diff < 3600000) { //less than 1 hour left if (diff < 3600000) { //less than 1 hour left
@ -54,26 +55,47 @@
scale = 1; scale = 1;
timeStr = getTime(diff); //display hour 00:00:00 but small timeStr = getTime(diff); //display hour 00:00:00 but small
} }
// Font5x9Numeric7Seg - just build this in as it's tiny // Font5x9Numeric7Seg - just build this in as it's tiny
g.setFontCustom(atob("AAAAAAAAAAIAAAQCAQAAAd0BgMBdwAAAAAAAdwAB0RiMRcAAAERiMRdwAcAQCAQdwAcERiMRBwAd0RiMRBwAAEAgEAdwAd0RiMRdwAcERiMRdwAFAAd0QiEQdwAdwRCIRBwAd0BgMBAAABwRCIRdwAd0RiMRAAAd0QiEQAAAAAAAAAA="), 32, atob("BgAAAAAAAAAAAAAAAAYCAAYGBgYGBgYGBgYCAAAAAAAABgYGBgYG"), 9 + (scale<<8)); g.setFontCustom(atob("AAAAAAAAAAIAAAQCAQAAAd0BgMBdwAAAAAAAdwAB0RiMRcAAAERiMRdwAcAQCAQdwAcERiMRBwAd0RiMRBwAAEAgEAdwAd0RiMRdwAcERiMRdwAFAAd0QiEQdwAdwRCIRBwAd0BgMBAAABwRCIRdwAd0RiMRAAAd0QiEQAAAAAAAAAA="), 32, atob("BgAAAAAAAAAAAAAAAAYCAAYGBgYGBgYGBgYCAAAAAAAABgYGBgYG"), 9 + (scale<<8));
g.drawString(timeStr, this.x+this.width/2, this.y+12); g.drawString(timeStr, this.x+this.width/2, this.y+12);
}, redraw:function() { }, redraw:function() {
var last = this.width; var last = this.width;
if (!settingsChronowid.started) this.width = 0; if (!settings.started) {
else this.width = (diff < 3600000) ? 58 : 48; this.width = 0;
if (last != this.width) Bangle.drawWidgets(); } else {
else this.draw(); this.width = (diff < 3600000) ? 58 : 48;
}
if (last != this.width) {
Bangle.drawWidgets();
} else {
this.draw();
}
}, reload:function() { }, reload:function() {
settingsChronowid = require('Storage').readJSON("chronosimplewid.json",1)||{}; settings = storage.readJSON("widtmr.json",1)||{};
if (interval) clearInterval(interval); if (interval) {
clearInterval(interval);
}
interval = undefined; interval = undefined;
// start countdown each second // start countdown each second
if (settingsChronowid.started) interval = setInterval(countDown, 1000); if (settings.started) {
interval = setInterval(countDown, 1000);
}
// reset everything // reset everything
countDown(); countDown();
}};
//printDebug(); }, isStarted: function(){
settings = storage.readJSON("widtmr.json",1)||{started: false};
return settings.started;
}
};
// set width correctly, start countdown each second // set width correctly, start countdown each second
WIDGETS["chronowid"].reload(); WIDGETS["widtmr"].reload();
})(); })();