From f0782fef619a3e05594dcbde0bed96017e0d9091 Mon Sep 17 00:00:00 2001 From: jeffmer Date: Sat, 20 Nov 2021 18:29:31 +0000 Subject: [PATCH] Bangle2 version of dtlaunch --- apps.json | 12 ++-- apps/dtlaunch/ChangeLog | 1 + apps/dtlaunch/README.md | 10 ++- apps/dtlaunch/{app.js => app-b1.js} | 0 apps/dtlaunch/app-b2.js | 105 ++++++++++++++++++++++++++++ apps/dtlaunch/shot1.png | Bin 0 -> 3819 bytes apps/dtlaunch/shot2.png | Bin 0 -> 4793 bytes apps/dtlaunch/shot3.png | Bin 0 -> 3918 bytes 8 files changed, 122 insertions(+), 6 deletions(-) rename apps/dtlaunch/{app.js => app-b1.js} (100%) create mode 100644 apps/dtlaunch/app-b2.js create mode 100644 apps/dtlaunch/shot1.png create mode 100644 apps/dtlaunch/shot2.png create mode 100644 apps/dtlaunch/shot3.png diff --git a/apps.json b/apps.json index b081af741..b496f9e5a 100644 --- a/apps.json +++ b/apps.json @@ -2733,7 +2733,7 @@ "id": "multiclock", "name": "Multi Clock", "version": "0.09", - "description": "Clock with multiple faces. Switch between faces with BTN1 & BTN3 or swipe left-right. For best display set theme Background 2 to cyan or some other bright colour in settings.", + "description": "Clock with multiple faces. Switch between faces with BTN1 & BTN3 (Bangle 2 touch top-right, bottom right). For best display set theme Background 2 to cyan or some other bright colour in settings.", "screenshots": [{"url":"screen-ana.png"},{"url":"screen-big.png"},{"url":"screen-td.png"},{"url":"screen-nifty.png"},{"url":"screen-word.png"},{"url":"screen-sec.png"}], "icon": "multiclock.png", "type": "clock", @@ -3130,15 +3130,17 @@ { "id": "dtlaunch", "name": "Desktop Launcher", - "version": "0.04", - "description": "Desktop style App Launcher with six apps per page - fast access if you have lots of apps installed.", + "version": "0.05", + "description": "Desktop style App Launcher with six (four for Bangle 2) apps per page - fast access if you have lots of apps installed.", + "screenshots": [{"url":"shot1.png"},{"url":"shot2.png"},{"url":"shot3.png"}], "icon": "icon.png", "type": "launch", "tags": "tool,system,launcher", - "supports": ["BANGLEJS"], + "supports": ["BANGLEJS","BANGLEJS2"], "readme": "README.md", "storage": [ - {"name":"dtlaunch.app.js","url":"app.js"}, + {"name":"dtlaunch.app.js","url":"app-b1.js", "supports": ["BANGLEJS"]}, + {"name":"dtlaunch.app.js","url":"app-b2.js", "supports": ["BANGLEJS2"]}, {"name":"dtlaunch.img","url":"app-icon.js","evaluate":true} ] }, diff --git a/apps/dtlaunch/ChangeLog b/apps/dtlaunch/ChangeLog index 985321e91..c3102b4b9 100644 --- a/apps/dtlaunch/ChangeLog +++ b/apps/dtlaunch/ChangeLog @@ -2,3 +2,4 @@ 0.02: Multiple pages 0.03: cycle thru pages 0.04: reset to clock after 2 mins of inactivity +0.05: add Bangle 2 version diff --git a/apps/dtlaunch/README.md b/apps/dtlaunch/README.md index 70f7ff931..ba2301d91 100644 --- a/apps/dtlaunch/README.md +++ b/apps/dtlaunch/README.md @@ -3,7 +3,7 @@ ![](screenshot.jpg) In the picture above, the Settings app is selected. -## Controls +## Controls- Bangle **BTN1** - move backward through app icons on a page @@ -13,4 +13,12 @@ In the picture above, the Settings app is selected. **Swipe Left** - move to next page of app icons +**Swipe Right** - move to previous page of app icons + +## Controls- Bangle 2 + +**Touch** - icon to select, scond touch launches app + +**Swipe Left** - move to next page of app icons + **Swipe Right** - move to previous page of app icons \ No newline at end of file diff --git a/apps/dtlaunch/app.js b/apps/dtlaunch/app-b1.js similarity index 100% rename from apps/dtlaunch/app.js rename to apps/dtlaunch/app-b1.js diff --git a/apps/dtlaunch/app-b2.js b/apps/dtlaunch/app-b2.js new file mode 100644 index 000000000..674fe3677 --- /dev/null +++ b/apps/dtlaunch/app-b2.js @@ -0,0 +1,105 @@ +/* Desktop launcher +* +*/ + +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" || !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+10,y+2,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.split(" "); + for (var i = 0; i < txt.length; i++) { + txt[i] = txt[i].trim(); + g.drawString(txt[i],x+36,y+54+i*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 (dir<0){ + ++page; if (page>maxPage) page=0; + drawPage(page); + } else { + --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) { + if (selected!=i){ + 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(); +Bangle.drawWidgets(); +drawPage(0); diff --git a/apps/dtlaunch/shot1.png b/apps/dtlaunch/shot1.png new file mode 100644 index 0000000000000000000000000000000000000000..e6a9bcd3ac8cfc98ba8c8b6f475101dc6a5bf1ce GIT binary patch literal 3819 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 literal 0 HcmV?d00001 diff --git a/apps/dtlaunch/shot3.png b/apps/dtlaunch/shot3.png new file mode 100644 index 0000000000000000000000000000000000000000..1ffdf80904c4ef858384892b330e2dc7b0527bac GIT binary patch literal 3918 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 literal 0 HcmV?d00001