Skip to content

Commit 1ccde9c

Browse files
authored
Merge pull request espruino#3703 from devsnd/promenu-0.11
promenu 0.11: Add options for natural scroll and disabling wrap-around
2 parents 1cef4fe + c9c9003 commit 1ccde9c

File tree

6 files changed

+96
-7
lines changed

6 files changed

+96
-7
lines changed

apps/promenu/ChangeLog

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,4 @@
1212
0.08: Fix bug with modifying menu - allows hadash to save scroll positions
1313
0.09: Don't show "..." if a string isn't truncated (i.e. scrolled)
1414
0.10: Trigger `remove` callbacks when ending the menu
15+
0.11: Add options for natural scroll and disabling wrap-around

apps/promenu/bootb2.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
var _a, _b;
2+
var settings = (require("Storage").readJSON("promenu.settings.json", true) || {});
3+
(_a = settings.naturalScroll) !== null && _a !== void 0 ? _a : (settings.naturalScroll = false);
4+
(_b = settings.wrapAround) !== null && _b !== void 0 ? _b : (settings.wrapAround = true);
15
E.showMenu = function (items) {
26
var RectRnd = function (x1, y1, x2, y2, r) {
37
var pp = [];
@@ -164,7 +168,12 @@ E.showMenu = function (items) {
164168
}
165169
else {
166170
var lastSelected = selected;
167-
selected = (selected + dir + menuItems.length) % menuItems.length;
171+
if (settings.wrapAround) {
172+
selected = (selected + dir + menuItems.length) % menuItems.length;
173+
}
174+
else {
175+
selected = E.clip(selected + dir, 0, menuItems.length - 1);
176+
}
168177
scroller.scroll = selected;
169178
l.draw(Math.min(lastSelected, selected), Math.max(lastSelected, selected));
170179
}
@@ -201,7 +210,7 @@ E.showMenu = function (items) {
201210
},
202211
}, function (dir) {
203212
if (dir)
204-
l.move(dir);
213+
l.move(settings.naturalScroll ? -dir : dir);
205214
else
206215
l.select();
207216
});

apps/promenu/bootb2.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,19 @@
11
type ActualMenuItem = Exclude<Menu["..."], MenuOptions | undefined>;
22

3+
type PromenuSettings = {
4+
naturalScroll: boolean,
5+
wrapAround: boolean,
6+
};
7+
38
const enum Consts {
49
NAME_SCROLL_PAD = 5,
510
}
611

12+
const settings = (require("Storage").readJSON("promenu.settings.json", true) || {}) as PromenuSettings;
13+
settings.naturalScroll ??= false;
14+
settings.wrapAround ??= true;
15+
16+
717
E.showMenu = (items?: Menu): MenuInstance => {
818
const RectRnd = (x1: number, y1: number, x2: number, y2: number, r: number) => {
919
const pp = [];
@@ -207,7 +217,11 @@ E.showMenu = (items?: Menu): MenuInstance => {
207217

208218
} else {
209219
const lastSelected = selected;
210-
selected = (selected + dir + /*keep +ve*/menuItems.length) % menuItems.length;
220+
if (settings.wrapAround) {
221+
selected = (selected + dir + /*keep +ve*/menuItems.length) % menuItems.length;
222+
} else {
223+
selected = E.clip(selected + dir, 0, menuItems.length - 1);
224+
}
211225
scroller.scroll = selected;
212226
l.draw(Math.min(lastSelected, selected), Math.max(lastSelected, selected));
213227
}
@@ -244,7 +258,7 @@ E.showMenu = (items?: Menu): MenuInstance => {
244258
},
245259
} as SetUIArg<"updown">,
246260
dir => {
247-
if (dir) l.move(dir);
261+
if (dir) l.move(settings.naturalScroll ? -dir : dir);
248262
else l.select();
249263
});
250264

apps/promenu/metadata.json

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"id": "promenu",
33
"name": "Pro Menu",
4-
"version": "0.10",
4+
"version": "0.11",
55
"description": "Replace the built in menu function. Supports Bangle.js 1 and Bangle.js 2.",
66
"icon": "icon.png",
77
"type": "bootloader",
@@ -12,6 +12,8 @@
1212
"storage": [
1313
{"name":"promenu.boot.js","url":"boot.js","supports": ["BANGLEJS"]},
1414
{"name":"promenu.boot.js","url":"bootb2.js","supports": ["BANGLEJS2"]},
15-
{"name":"promenu.img","url":"promenuIcon.js","evaluate":true}
16-
]
15+
{"name":"promenu.img","url":"promenuIcon.js","evaluate":true},
16+
{"name":"promenu.settings.js","url":"settings.js"}
17+
],
18+
"data": [{"name":"promenu.settings.json"}]
1719
}

apps/promenu/settings.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
(function (back) {
2+
var _a, _b;
3+
var SETTINGS_FILE = "promenu.settings.json";
4+
var storage = require("Storage");
5+
var settings = (storage.readJSON(SETTINGS_FILE, true) || {});
6+
(_a = settings.naturalScroll) !== null && _a !== void 0 ? _a : (settings.naturalScroll = false);
7+
(_b = settings.wrapAround) !== null && _b !== void 0 ? _b : (settings.wrapAround = true);
8+
var save = function () {
9+
storage.writeJSON(SETTINGS_FILE, settings);
10+
};
11+
var menu = {
12+
"": { "title": "Promenu" },
13+
"< Back": back,
14+
"Natural Scroll": {
15+
value: !!settings.naturalScroll,
16+
onchange: function (v) {
17+
settings.naturalScroll = v;
18+
save();
19+
}
20+
},
21+
"Wrap Around": {
22+
value: !!settings.wrapAround,
23+
onchange: function (v) {
24+
settings.wrapAround = v;
25+
save();
26+
}
27+
}
28+
};
29+
E.showMenu(menu);
30+
})

apps/promenu/settings.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
(back => {
2+
const SETTINGS_FILE = "promenu.settings.json";
3+
4+
const storage = require("Storage")
5+
const settings = (storage.readJSON(SETTINGS_FILE, true) || {}) as PromenuSettings;
6+
settings.naturalScroll ??= false;
7+
settings.wrapAround ??= true;
8+
9+
const save = () => {
10+
storage.writeJSON(SETTINGS_FILE, settings);
11+
};
12+
13+
const menu: Menu = {
14+
"": { "title": "Promenu" },
15+
"< Back": back,
16+
/*LANG*/"Natural Scroll": {
17+
value: !!settings.naturalScroll,
18+
onchange: (v: boolean) => {
19+
settings.naturalScroll = v;
20+
save();
21+
}
22+
},
23+
/*LANG*/"Wrap Around": {
24+
value: !!settings.wrapAround,
25+
onchange: (v: boolean) => {
26+
settings.wrapAround = v;
27+
save();
28+
}
29+
}
30+
};
31+
32+
E.showMenu(menu);
33+
}) satisfies SettingsFunc

0 commit comments

Comments
 (0)