forked from FOSS/BangleApps
Renaming
parent
6a085c11d7
commit
a03fdec826
|
@ -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)
|
|
|
@ -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}
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -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)
|
|
@ -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();
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.0 KiB |
|
@ -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}
|
||||||
|
]
|
||||||
|
}
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
|
@ -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();
|
||||||
})();
|
})();
|
Loading…
Reference in New Issue