/* Desktop launcher * */ var settings = Object.assign({ showClocks: true, showLaunchers: true, direct: false, oneClickExit:false, swipeExit: false }, require('Storage').readJSON("dtlaunch.json", true) || {}); if( settings.oneClickExit) setWatch(_=> load(), BTN1); var s = require("Storage"); var apps = s.list(/\.info$/).map(app=>{ var 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)=>{ var n=(0|a.sortorder)-(0|b.sortorder); if (n) return n; // do sortorder first if (a.nameb.name) return 1; return 0; }); apps.forEach(app=>{ if (app.icon) app.icon = s.read(app.icon); // should just be a link to a memory area }); var Napps = apps.length; var Npages = Math.ceil(Napps/4); var maxPage = Npages-1; var selected = -1; var oldselected = -1; var page = 0; const XOFF = 24; const YOFF = 30; function draw_icon(p,n,selected) { var x = (n%2)*72+XOFF; var y = n>1?72+YOFF:YOFF; (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); g.setColor(g.theme.fg); try{g.drawImage(apps[p*4+n].icon,x+12,y+4);} catch(e){} g.setFontAlign(0,-1,0).setFont("6x8",1); var txt = apps[p*4+n].name.replace(/([a-z])([A-Z])/g, "$1 $2").split(" "); var lineY = 0; var line = ""; while (txt.length > 0){ var 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; } } g.drawString(line.trim(),x+36,y+54+lineY*8); } function drawPage(p){ g.reset(); g.clearRect(0,24,175,175); var O = 88+YOFF/2-12*(Npages/2); for (var j=0;j{ selected = 0; oldselected=-1; if(settings.swipeExit && dirLeftRight==1) load(); if (dirUpDown==-1||dirLeftRight==-1){ ++page; if (page>maxPage) page=0; drawPage(page); } else if (dirUpDown==1||(dirLeftRight==1 && !settings.swipeExit)){ --page; if (page<0) page=maxPage; drawPage(page); } }); function isTouched(p,n){ if (n<0 || n>3) return false; var x1 = (n%2)*72+XOFF; var y1 = n>1?72+YOFF:YOFF; var x2 = x1+71; var y2 = y1+81; return (p.x>x1 && p.y>y1 && p.x{ var i; for (i=0;i<4;i++){ if((page*4+i)=0 || settings.direct) { if (selected!=i && !settings.direct){ draw_icon(page,selected,false); } else { load(apps[page*4+i].src); } } selected=i; break; } } } if ((i==4 || (page*4+i)>Napps) && selected>=0) { draw_icon(page,selected,false); selected=-1; } }); Bangle.loadWidgets(); g.clear(); Bangle.drawWidgets(); drawPage(0);