1
0
Fork 0

NCEU Start Sequence

master
James M Snell 2019-11-08 12:10:49 -08:00
parent 21274595f3
commit ad1d27463b
4 changed files with 120 additions and 202 deletions

View File

@ -219,6 +219,23 @@
{"name":"*mouse","url":"animals-mouse.js","evaluate":true}
]
},
{
"id": "start",
"name": "NCEU Startup",
"icon": "start.png",
"description": "NodeConfEU 2019 Startup Sequence",
"tags": "start",
"storage": [
{"name":"+start","url":"start.json"},
{"name":"-start","url":"start.js"},
{"name":"*start","url":"start-icon.js"},
{"name":"*bangle","url":"start-bangle.js"},
{"name":"*nceu","url":"start-nceu.js"},
{"name":"*nfr","url":"start-nfr.js"},
{"name":"*nodew","url":"start-nodew.js"},
{"name":"*tf","url":"start-tf.js"}
]
},
{ "id": "qrcode",
"name": "Custom QR Code",
"icon": "qrcode.png",

View File

@ -1,86 +1,96 @@
E.setTimeZone(1);
E.setFlags({pretokenise:1});
setWatch(function() {
Bangle.setLCDMode("direct");
g.clear();
clearInterval();
clearWatch();
Bangle.removeAllListeners();
var s = require("Storage");
apps = s.list().filter(a=>a[0]=='+').map(app=>{
try { return s.readJSON(app); }
catch (e) { return {name:"DEAD: "+app.substr(1)} }
}).filter(app=>app.type=="app" || app.type=="clock" || !app.type);
var selected = 0;
var menuScroll = 0;
var menuShowing = false;
function drawMenu() {
g.setFont("6x8",2);
g.setFontAlign(-1,0);
var n = 3;
if (selected>=n+menuScroll) menuScroll = 1+selected-n;
if (selected<menuScroll) menuScroll = selected;
if (menuScroll) g.fillPoly([120,0,100,20,140,20]);
else g.clearRect(100,0,140,20);
if (apps.length>n+menuScroll) g.fillPoly([120,239,100,219,140,219]);
else g.clearRect(100,219,140,239);
for (var i=0;i<n;i++) {
var app = apps[i+menuScroll];
if (!app) break;
var y = 24+i*64;
if (i+menuScroll==selected) {
g.setColor(0.3,0.3,0.3);
g.fillRect(0,y,239,y+63);
g.setColor(1,1,1);
g.drawRect(0,y,239,y+63);
} else
g.clearRect(0,y,239,y+63);
g.drawString(app.name,64,y+32);
var icon=undefined;
if (app.icon) icon = s.read(app.icon);
if (icon) try {g.drawImage(icon,8,y+8);} catch(e){}
}
}
drawMenu();
var startapp;
try {
startapp = s.readJSON('+start');
} catch (e) {}
if (startapp) {
eval(require("Storage").read(startapp.src));
} else {
setWatch(function() {
if (selected>0) {
selected--;
drawMenu();
}
}, BTN1, {repeat:true});
setWatch(function() {
if (selected+1<apps.length) {
selected++;
drawMenu();
}
}, BTN3, {repeat:true});
setWatch(function() { // run
if (!apps[selected].src) return;
clearWatch();
Bangle.setLCDMode("direct");
g.clear();
g.setFont("6x8",2);
g.setFontAlign(0,0);
g.drawString("Loading...",120,120);
if (apps[selected].name=="Clock") load();
else { // load like this so we ensure we've cleared out our RAM
var cmd = 'eval(require("Storage").read("'+apps[selected].src+'"));';
setTimeout(cmd,20);
clearInterval();
clearWatch();
Bangle.removeAllListeners();
var s = require("Storage");
apps = s.list().filter(a=>a[0]=='+').map(app=>{
try { return s.readJSON(app); }
catch (e) { return {name:"DEAD: "+app.substr(1)} }
}).filter(app=>app.type=="app" || app.type=="clock" || !app.type);
var selected = 0;
var menuScroll = 0;
var menuShowing = false;
function drawMenu() {
g.setFont("6x8",2);
g.setFontAlign(-1,0);
var n = 3;
if (selected>=n+menuScroll) menuScroll = 1+selected-n;
if (selected<menuScroll) menuScroll = selected;
if (menuScroll) g.fillPoly([120,0,100,20,140,20]);
else g.clearRect(100,0,140,20);
if (apps.length>n+menuScroll) g.fillPoly([120,239,100,219,140,219]);
else g.clearRect(100,219,140,239);
for (var i=0;i<n;i++) {
var app = apps[i+menuScroll];
if (!app) break;
var y = 24+i*64;
if (i+menuScroll==selected) {
g.setColor(0.3,0.3,0.3);
g.fillRect(0,y,239,y+63);
g.setColor(1,1,1);
g.drawRect(0,y,239,y+63);
} else
g.clearRect(0,y,239,y+63);
g.drawString(app.name,64,y+32);
var icon=undefined;
if (app.icon) icon = s.read(app.icon);
if (icon) try {g.drawImage(icon,8,y+8);} catch(e){}
}
}
}, BTN2, {repeat:true});
}, BTN2, {repeat:false}); // menu on middle button
var WIDGETPOS={tl:32,tr:g.getWidth()-32,bl:32,br:g.getWidth()-32};
var WIDGETS={};
function drawWidgets() {
Object.keys(WIDGETS).forEach(k=>WIDGETS[k].draw());
drawMenu();
setWatch(function() {
if (selected>0) {
selected--;
drawMenu();
}
}, BTN1, {repeat:true});
setWatch(function() {
if (selected+1<apps.length) {
selected++;
drawMenu();
}
}, BTN3, {repeat:true});
setWatch(function() { // run
if (!apps[selected].src) return;
clearWatch();
g.clear();
g.setFont("6x8",2);
g.setFontAlign(0,0);
g.drawString("Loading...",120,120);
if (apps[selected].name=="Clock") load();
else { // load like this so we ensure we've cleared out our RAM
var cmd = 'eval(require("Storage").read("'+apps[selected].src+'"));';
setTimeout(cmd,20);
}
}, BTN2, {repeat:true});
}, BTN2, {repeat:false}); // menu on middle button
var WIDGETPOS={tl:32,tr:g.getWidth()-32,bl:32,br:g.getWidth()-32};
var WIDGETS={};
function drawWidgets() {
Object.keys(WIDGETS).forEach(k=>WIDGETS[k].draw());
}
var clockApp = require("Storage").list().filter(a=>a[0]=='+').map(app=>{
try { return require("Storage").readJSON(app); }
catch (e) {}
}).find(app=>app.type=="clock");
if (clockApp) eval(require("Storage").read(clockApp.src));
else E.showMessage("No Clock Found");
delete clockApp;
require("Storage").list().filter(a=>a[0]=='=').forEach(widget=>eval(require("Storage").read(widget)));
setTimeout(drawWidgets,100);
}
var clockApp = require("Storage").list().filter(a=>a[0]=='+').map(app=>{
try { return require("Storage").readJSON(app); }
catch (e) {}
}).find(app=>app.type=="clock");
if (clockApp) eval(require("Storage").read(clockApp.src));
else E.showMessage("No Clock Found");
delete clockApp;
require("Storage").list().filter(a=>a[0]=='=').forEach(widget=>eval(require("Storage").read(widget)));
setTimeout(drawWidgets,100);

View File

@ -36,74 +36,6 @@ function welcome() {
});
}
function logos() {
var logos = [
['nfr', 20, 90, ()=>{}],
['nceu', 20, 90, ()=>{
g.setFont("6x8", 2);
g.setColor(0,0,1);
g.drawString('Welcome To', 160, 110);
g.drawString('NodeConfEU', 160, 130);
g.drawString('2019', 200, 150);
}],
['bangle', 70, 90, ()=>{}],
['nodew', 20, 90, ()=>{}],
['tf', 5, 60, ()=>{}],
];
function next() {
var n = logos.shift();
var img = require("Storage").read("*"+n[0]);
g.clear();
g.drawImage(img, n[1], n[2]);
n[3]();
g.drawImage(c([0,8,12,14,255,14,12,8]),d,116);
logos.push(n);
}
return new Promise((res) => {
next();
var i = setInterval(next, 2000);
setWatch(() => {
clearInterval(i);
clearWatch();
res();
}, BTN2, {repeat:false});var g = Graphics.getInstance();
const d = g.getWidth() - 18;
function c(a) {
return {
width: 8,
height: a.length,
bpp: 1,
buffer: (new Uint8Array(a)).buffer
};
}
function welcome() {
var welcomes = [
'Welcome',
'Failte',
'Bienvenue',
'Willkommen',
'Bienvenido'
];
function next() {
var n = welcomes.shift();
E.showMessage(n);
g.drawImage(c([0,8,12,14,255,14,12,8]),d,116);
welcomes.push(n);
}
return new Promise((res) => {
next();
var i = setInterval(next, 2000);
setWatch(() => {
clearInterval(i);
clearWatch();
E.showMessage('Loading...');
res();
}, BTN2, {repeat:false});
});
}
function logos() {
var logos = [
['nfr', 20, 90, ()=>{}],
@ -183,51 +115,18 @@ function info() {
});
}
welcome()
.then(logos)
.then(info)
.then(()=>E.showMessage('done'));
});
}
function info() {
var slides = [
() => {
g.clear();
g.setFont('6x8',2);
g.setColor(1,1,1);
g.drawString('Visit', 120, 80);
g.drawString('nodewatch.dev', 120, 110);
g.drawString('for info', 115, 140);
},
() => {
g.clear();
g.setFont('6x8',2);
g.setColor(1,1,1);
g.drawString('Remember', 120, 80);
g.drawString('to charge', 120, 110);
g.drawString('your watch!', 125, 140);
},
() => {
}
];
function next() {
var n = slides.shift();
n();
g.drawImage(c([0,8,12,14,255,14,12,8]),d,116);
slides.push(n);
}
return new Promise((res) => {
next();
var i = setInterval(next, 2000);
setWatch(()=>{
clearInterval(i);
clearWatch();
res();
}, BTN2, {repeat:false});
});
function cleanup() {
E.showMessage('Loading...');
var s = require('Storage');
s.erase('*nfr');
s.erase('*nceu');
s.erase('*bangle');
s.erase('*nodew');
s.erase('*tf');
s.erase('+start');
s.erase('-start');
s.erase('*start');
return Promise.resolve();
}
welcome()
@ -235,4 +134,3 @@ welcome()
.then(info)
.then(cleanup)
.then(load);

View File

@ -2,12 +2,5 @@
"name": "Start",
"type": "app",
"icon": "*start",
"src": "-start",
"files": [
"*bangle",
"*nceu",
"*nfr",
"*nodew",
"*tf"
]
"src": "-start"
}