timeout to clock copied from Icon Launcher
parent
84837228f9
commit
a46c76a2ff
|
|
@ -1,180 +1,189 @@
|
||||||
{ // must be inside our own scope here so that when we are unloaded everything disappears
|
{ // must be inside our own scope here so that when we are unloaded everything disappears
|
||||||
|
|
||||||
/* Desktop launcher
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
let settings = Object.assign({
|
|
||||||
showClocks: true,
|
|
||||||
showLaunchers: true,
|
|
||||||
direct: false,
|
|
||||||
oneClickExit:false,
|
|
||||||
swipeExit: false,
|
|
||||||
}, require('Storage').readJSON("dtlaunch.json", true) || {});
|
|
||||||
|
|
||||||
if (settings.oneClickExit) {
|
|
||||||
var buttonWatch = setWatch(_=> returnToClock, BTN1);
|
|
||||||
}
|
|
||||||
|
|
||||||
let s = require("Storage");
|
|
||||||
var apps = s.list(/\.info$/).map(app=>{
|
|
||||||
let a=s.readJSON(app,1);
|
|
||||||
return a && {
|
|
||||||
name:a.name, type:a.type, icon:a.icon, sortorder:a.sortorder, src:a.src
|
|
||||||
};}).filter(
|
|
||||||
app=>app && (app.type=="app" || (app.type=="clock" && settings.showClocks) || (app.type=="launch" && settings.showLaunchers) || !app.type));
|
|
||||||
|
|
||||||
apps.sort((a,b)=>{
|
/* Desktop launcher
|
||||||
let n=(0|a.sortorder)-(0|b.sortorder);
|
*
|
||||||
if (n) return n; // do sortorder first
|
*/
|
||||||
if (a.name<b.name) return -1;
|
|
||||||
if (a.name>b.name) return 1;
|
let settings = Object.assign({
|
||||||
return 0;
|
showClocks: true,
|
||||||
});
|
showLaunchers: true,
|
||||||
apps.forEach(app=>{
|
direct: false,
|
||||||
if (app.icon)
|
oneClickExit: false,
|
||||||
app.icon = s.read(app.icon); // should just be a link to a memory area
|
swipeExit: false,
|
||||||
|
timeOut: "Off"
|
||||||
|
}, require('Storage').readJSON("dtlaunch.json", true) || {});
|
||||||
|
|
||||||
|
if (settings.oneClickExit) {
|
||||||
|
var buttonWatch = setWatch(_=> returnToClock, BTN1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// taken from Icon Launcher with minor alterations
|
||||||
|
if (settings.timeOut!="Off"){
|
||||||
|
let time=parseInt(settings.timeOut); //the "s" will be trimmed by the parseInt
|
||||||
|
var timeoutToClock = setTimeout(returnToClock,time*1000);
|
||||||
|
}
|
||||||
|
let s = require("Storage");
|
||||||
|
var apps = s.list(/\.info$/).map(app=>{
|
||||||
|
let a=s.readJSON(app,1);
|
||||||
|
return a && {
|
||||||
|
name:a.name, type:a.type, icon:a.icon, sortorder:a.sortorder, src:a.src
|
||||||
|
};}).filter(
|
||||||
|
app=>app && (app.type=="app" || (app.type=="clock" && settings.showClocks) || (app.type=="launch" && settings.showLaunchers) || !app.type));
|
||||||
|
|
||||||
|
apps.sort((a,b)=>{
|
||||||
|
let n=(0|a.sortorder)-(0|b.sortorder);
|
||||||
|
if (n) return n; // do sortorder first
|
||||||
|
if (a.name<b.name) return -1;
|
||||||
|
if (a.name>b.name) return 1;
|
||||||
|
return 0;
|
||||||
});
|
});
|
||||||
|
apps.forEach(app=>{
|
||||||
let Napps = apps.length;
|
if (app.icon)
|
||||||
let Npages = Math.ceil(Napps/4);
|
app.icon = s.read(app.icon); // should just be a link to a memory area
|
||||||
let maxPage = Npages-1;
|
});
|
||||||
let selected = -1;
|
|
||||||
let oldselected = -1;
|
let Napps = apps.length;
|
||||||
let page = 0;
|
let Npages = Math.ceil(Napps/4);
|
||||||
const XOFF = 24;
|
let maxPage = Npages-1;
|
||||||
const YOFF = 30;
|
let selected = -1;
|
||||||
|
let oldselected = -1;
|
||||||
let drawIcon= function(p,n,selected) {
|
let page = 0;
|
||||||
let x = (n%2)*72+XOFF;
|
const XOFF = 24;
|
||||||
let y = n>1?72+YOFF:YOFF;
|
const YOFF = 30;
|
||||||
(selected?g.setColor(g.theme.fgH):g.setColor(g.theme.bg)).fillRect(x+11,y+3,x+60,y+52);
|
|
||||||
g.clearRect(x+12,y+4,x+59,y+51);
|
let drawIcon= function(p,n,selected) {
|
||||||
g.setColor(g.theme.fg);
|
let x = (n%2)*72+XOFF;
|
||||||
try{g.drawImage(apps[p*4+n].icon,x+12,y+4);} catch(e){}
|
let y = n>1?72+YOFF:YOFF;
|
||||||
g.setFontAlign(0,-1,0).setFont("6x8",1);
|
(selected?g.setColor(g.theme.fgH):g.setColor(g.theme.bg)).fillRect(x+11,y+3,x+60,y+52);
|
||||||
let txt = apps[p*4+n].name.replace(/([a-z])([A-Z])/g, "$1 $2").split(" ");
|
g.clearRect(x+12,y+4,x+59,y+51);
|
||||||
let lineY = 0;
|
g.setColor(g.theme.fg);
|
||||||
let line = "";
|
try{g.drawImage(apps[p*4+n].icon,x+12,y+4);} catch(e){}
|
||||||
while (txt.length > 0){
|
g.setFontAlign(0,-1,0).setFont("6x8",1);
|
||||||
let c = txt.shift();
|
let txt = apps[p*4+n].name.replace(/([a-z])([A-Z])/g, "$1 $2").split(" ");
|
||||||
if (c.length + 1 + line.length > 13){
|
let lineY = 0;
|
||||||
if (line.length > 0){
|
let line = "";
|
||||||
g.drawString(line.trim(),x+36,y+54+lineY*8);
|
while (txt.length > 0){
|
||||||
lineY++;
|
let c = txt.shift();
|
||||||
|
if (c.length + 1 + line.length > 13){
|
||||||
|
if (line.length > 0){
|
||||||
|
g.drawString(line.trim(),x+36,y+54+lineY*8);
|
||||||
|
lineY++;
|
||||||
|
}
|
||||||
|
line = c;
|
||||||
|
} else {
|
||||||
|
line += " " + c;
|
||||||
}
|
}
|
||||||
line = c;
|
|
||||||
} else {
|
|
||||||
line += " " + c;
|
|
||||||
}
|
}
|
||||||
}
|
g.drawString(line.trim(),x+36,y+54+lineY*8);
|
||||||
g.drawString(line.trim(),x+36,y+54+lineY*8);
|
};
|
||||||
};
|
|
||||||
|
|
||||||
let drawPage = function(p){
|
|
||||||
g.reset();
|
|
||||||
g.clearRect(0,24,175,175);
|
|
||||||
let O = 88+YOFF/2-12*(Npages/2);
|
|
||||||
for (let j=0;j<Npages;j++){
|
|
||||||
let y = O+j*12;
|
|
||||||
g.setColor(g.theme.fg);
|
|
||||||
if (j==page) g.fillCircle(XOFF/2,y,4);
|
|
||||||
else g.drawCircle(XOFF/2,y,4);
|
|
||||||
}
|
|
||||||
for (let i=0;i<4;i++) {
|
|
||||||
if (!apps[p*4+i]) return i;
|
|
||||||
drawIcon(p,i,selected==i && !settings.direct);
|
|
||||||
}
|
|
||||||
g.flip();
|
|
||||||
};
|
|
||||||
|
|
||||||
Bangle.loadWidgets();
|
let drawPage = function(p){
|
||||||
//g.clear();
|
g.reset();
|
||||||
Bangle.drawWidgets();
|
g.clearRect(0,24,175,175);
|
||||||
drawPage(0);
|
let O = 88+YOFF/2-12*(Npages/2);
|
||||||
|
for (let j=0;j<Npages;j++){
|
||||||
let swipeListenerDt = function(dirLeftRight, dirUpDown){
|
let y = O+j*12;
|
||||||
selected = 0;
|
g.setColor(g.theme.fg);
|
||||||
oldselected=-1;
|
if (j==page) g.fillCircle(XOFF/2,y,4);
|
||||||
if(settings.swipeExit && dirLeftRight==1) returnToClock();
|
else g.drawCircle(XOFF/2,y,4);
|
||||||
if (dirUpDown==-1||dirLeftRight==-1){
|
}
|
||||||
++page; if (page>maxPage) page=0;
|
for (let i=0;i<4;i++) {
|
||||||
drawPage(page);
|
if (!apps[p*4+i]) return i;
|
||||||
} else if (dirUpDown==1||(dirLeftRight==1 && !settings.swipeExit)){
|
drawIcon(p,i,selected==i && !settings.direct);
|
||||||
--page; if (page<0) page=maxPage;
|
}
|
||||||
drawPage(page);
|
g.flip();
|
||||||
}
|
};
|
||||||
};
|
|
||||||
Bangle.on("swipe",swipeListenerDt);
|
Bangle.loadWidgets();
|
||||||
|
//g.clear();
|
||||||
let isTouched = function(p,n){
|
Bangle.drawWidgets();
|
||||||
if (n<0 || n>3) return false;
|
drawPage(0);
|
||||||
let x1 = (n%2)*72+XOFF; let y1 = n>1?72+YOFF:YOFF;
|
|
||||||
let x2 = x1+71; let y2 = y1+81;
|
let swipeListenerDt = function(dirLeftRight, dirUpDown){
|
||||||
return (p.x>x1 && p.y>y1 && p.x<x2 && p.y<y2);
|
selected = 0;
|
||||||
};
|
oldselected=-1;
|
||||||
|
if(settings.swipeExit && dirLeftRight==1) returnToClock();
|
||||||
let touchListenerDt = function(_,p){
|
if (dirUpDown==-1||dirLeftRight==-1){
|
||||||
let i;
|
++page; if (page>maxPage) page=0;
|
||||||
for (i=0;i<4;i++){
|
drawPage(page);
|
||||||
if((page*4+i)<Napps){
|
} else if (dirUpDown==1||(dirLeftRight==1 && !settings.swipeExit)){
|
||||||
if (isTouched(p,i)) {
|
--page; if (page<0) page=maxPage;
|
||||||
drawIcon(page,i,true && !settings.direct);
|
drawPage(page);
|
||||||
if (selected>=0 || settings.direct) {
|
}
|
||||||
if (selected!=i && !settings.direct){
|
};
|
||||||
drawIcon(page,selected,false);
|
Bangle.on("swipe",swipeListenerDt);
|
||||||
} else {
|
|
||||||
load(apps[page*4+i].src);
|
let isTouched = function(p,n){
|
||||||
}
|
if (n<0 || n>3) return false;
|
||||||
}
|
let x1 = (n%2)*72+XOFF; let y1 = n>1?72+YOFF:YOFF;
|
||||||
selected=i;
|
let x2 = x1+71; let y2 = y1+81;
|
||||||
break;
|
return (p.x>x1 && p.y>y1 && p.x<x2 && p.y<y2);
|
||||||
}
|
};
|
||||||
}
|
|
||||||
}
|
let touchListenerDt = function(_,p){
|
||||||
if ((i==4 || (page*4+i)>Napps) && selected>=0) {
|
let i;
|
||||||
drawIcon(page,selected,false);
|
for (i=0;i<4;i++){
|
||||||
selected=-1;
|
if((page*4+i)<Napps){
|
||||||
}
|
if (isTouched(p,i)) {
|
||||||
};
|
drawIcon(page,i,true && !settings.direct);
|
||||||
Bangle.on("touch",touchListenerDt);
|
if (selected>=0 || settings.direct) {
|
||||||
|
if (selected!=i && !settings.direct){
|
||||||
|
drawIcon(page,selected,false);
|
||||||
|
} else {
|
||||||
|
load(apps[page*4+i].src);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
selected=i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ((i==4 || (page*4+i)>Napps) && selected>=0) {
|
||||||
|
drawIcon(page,selected,false);
|
||||||
|
selected=-1;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Bangle.on("touch",touchListenerDt);
|
||||||
|
|
||||||
|
const returnToClock = function() {
|
||||||
|
Bangle.setUI();
|
||||||
|
clearWatch(buttonWatch);
|
||||||
|
delete buttonWatch;
|
||||||
|
clearTimeout(timeoutToClock);
|
||||||
|
delete timeoutToClock;
|
||||||
|
delete s;
|
||||||
|
delete a;
|
||||||
|
delete n;
|
||||||
|
delete Napps;
|
||||||
|
delete Npages;
|
||||||
|
delete maxPage;
|
||||||
|
delete selected;
|
||||||
|
delete oldselected;
|
||||||
|
delete page;
|
||||||
|
delete XOFF;
|
||||||
|
delete YOFF;
|
||||||
|
delete x;
|
||||||
|
delete y;
|
||||||
|
delete txt;
|
||||||
|
delete lineY;
|
||||||
|
delete line;
|
||||||
|
delete c;
|
||||||
|
delete O;
|
||||||
|
delete x1;
|
||||||
|
delete x2;
|
||||||
|
delete i;
|
||||||
|
delete drawIcon;
|
||||||
|
delete drawPage;
|
||||||
|
delete isTouched;
|
||||||
|
Bangle.removeListener("swipe", swipeListenerDt);
|
||||||
|
delete swipeListenerDt;
|
||||||
|
Bangle.removeListener("touch", touchListenerDt);
|
||||||
|
delete touchListenerDt;
|
||||||
|
var apps = [];
|
||||||
|
delete apps;
|
||||||
|
delete returnToClock;
|
||||||
|
delete settings;
|
||||||
|
setTimeout(eval, 0, s.read(".bootcde"));
|
||||||
|
};
|
||||||
|
|
||||||
const returnToClock = function() {
|
|
||||||
Bangle.setUI();
|
|
||||||
clearWatch(buttonWatch);
|
|
||||||
delete s;
|
|
||||||
delete a;
|
|
||||||
delete n;
|
|
||||||
delete Napps;
|
|
||||||
delete Npages;
|
|
||||||
delete maxPage;
|
|
||||||
delete selected;
|
|
||||||
delete oldselected;
|
|
||||||
delete page;
|
|
||||||
delete XOFF;
|
|
||||||
delete YOFF;
|
|
||||||
delete x;
|
|
||||||
delete y;
|
|
||||||
delete txt;
|
|
||||||
delete lineY;
|
|
||||||
delete line;
|
|
||||||
delete c;
|
|
||||||
delete O;
|
|
||||||
delete x1;
|
|
||||||
delete x2;
|
|
||||||
delete i;
|
|
||||||
delete drawIcon;
|
|
||||||
delete drawPage;
|
|
||||||
delete isTouched;
|
|
||||||
Bangle.removeListener("swipe", swipeListenerDt);
|
|
||||||
delete swipeListenerDt;
|
|
||||||
Bangle.removeListener("touch", touchListenerDt);
|
|
||||||
delete touchListenerDt;
|
|
||||||
var apps = [];
|
|
||||||
delete apps;
|
|
||||||
delete returnToClock;
|
|
||||||
delete settings;
|
|
||||||
setTimeout(eval, 0, s.read(".bootcde"));
|
|
||||||
};
|
|
||||||
|
|
||||||
} // end of app scope
|
} // end of app scope
|
||||||
|
|
|
||||||
|
|
@ -6,50 +6,63 @@
|
||||||
showLaunchers: true,
|
showLaunchers: true,
|
||||||
direct: false,
|
direct: false,
|
||||||
oneClickExit:false,
|
oneClickExit:false,
|
||||||
swipeExit: false
|
swipeExit: false,
|
||||||
|
timeOut: "Off"
|
||||||
}, require('Storage').readJSON(FILE, true) || {});
|
}, require('Storage').readJSON(FILE, true) || {});
|
||||||
|
|
||||||
function writeSettings() {
|
function writeSettings() {
|
||||||
require('Storage').writeJSON(FILE, settings);
|
require('Storage').writeJSON(FILE, settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const timeOutChoices = [/*LANG*/"Off", "10s", "15s", "20s", "30s"];
|
||||||
|
|
||||||
E.showMenu({
|
E.showMenu({
|
||||||
"" : { "title" : "Desktop launcher" },
|
"" : { "title" : "Desktop launcher" },
|
||||||
"< Back" : () => back(),
|
/*LANG*/"< Back" : () => back(),
|
||||||
'Show clocks': {
|
/*LANG*/'Show clocks': {
|
||||||
value: settings.showClocks,
|
value: settings.showClocks,
|
||||||
onchange: v => {
|
onchange: v => {
|
||||||
settings.showClocks = v;
|
settings.showClocks = v;
|
||||||
writeSettings();
|
writeSettings();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'Show launchers': {
|
/*LANG*/'Show launchers': {
|
||||||
value: settings.showLaunchers,
|
value: settings.showLaunchers,
|
||||||
onchange: v => {
|
onchange: v => {
|
||||||
settings.showLaunchers = v;
|
settings.showLaunchers = v;
|
||||||
writeSettings();
|
writeSettings();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'Direct launch': {
|
/*LANG*/'Direct launch': {
|
||||||
value: settings.direct,
|
value: settings.direct,
|
||||||
onchange: v => {
|
onchange: v => {
|
||||||
settings.direct = v;
|
settings.direct = v;
|
||||||
writeSettings();
|
writeSettings();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'Swipe Exit': {
|
/*LANG*/'Swipe Exit': {
|
||||||
value: settings.swipeExit,
|
value: settings.swipeExit,
|
||||||
onchange: v => {
|
onchange: v => {
|
||||||
settings.swipeExit = v;
|
settings.swipeExit = v;
|
||||||
writeSettings();
|
writeSettings();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'One click exit': {
|
/*LANG*/'One click exit': {
|
||||||
value: settings.oneClickExit,
|
value: settings.oneClickExit,
|
||||||
onchange: v => {
|
onchange: v => {
|
||||||
settings.oneClickExit = v;
|
settings.oneClickExit = v;
|
||||||
writeSettings();
|
writeSettings();
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
/*LANG*/'Time Out': {
|
||||||
|
value: timeOutChoices.indexOf(settings.timeOut),
|
||||||
|
min: 0,
|
||||||
|
max: timeOutChoices.length-1,
|
||||||
|
format: v => timeOutChoices[v],
|
||||||
|
onchange: m => {
|
||||||
|
settings.timeOut = m;
|
||||||
|
writeSettings();
|
||||||
|
}
|
||||||
|
},
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue