forked from FOSS/BangleApps
0.11: Add options for natural scroll and disabling wrap-around
parent
62869129ca
commit
26114d9767
|
@ -12,3 +12,4 @@
|
||||||
0.08: Fix bug with modifying menu - allows hadash to save scroll positions
|
0.08: Fix bug with modifying menu - allows hadash to save scroll positions
|
||||||
0.09: Don't show "..." if a string isn't truncated (i.e. scrolled)
|
0.09: Don't show "..." if a string isn't truncated (i.e. scrolled)
|
||||||
0.10: Trigger `remove` callbacks when ending the menu
|
0.10: Trigger `remove` callbacks when ending the menu
|
||||||
|
0.11: Add options for natural scroll and disabling wrap-around
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
var _a, _b;
|
||||||
|
var settings = (require("Storage").readJSON("promenu.settings.json", true) || {});
|
||||||
|
(_a = settings.naturalScroll) !== null && _a !== void 0 ? _a : (settings.naturalScroll = false);
|
||||||
|
(_b = settings.wrapAround) !== null && _b !== void 0 ? _b : (settings.wrapAround = true);
|
||||||
E.showMenu = function (items) {
|
E.showMenu = function (items) {
|
||||||
var RectRnd = function (x1, y1, x2, y2, r) {
|
var RectRnd = function (x1, y1, x2, y2, r) {
|
||||||
var pp = [];
|
var pp = [];
|
||||||
|
@ -164,7 +168,12 @@ E.showMenu = function (items) {
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var lastSelected = selected;
|
var lastSelected = selected;
|
||||||
|
if (settings.wrapAround) {
|
||||||
selected = (selected + dir + menuItems.length) % menuItems.length;
|
selected = (selected + dir + menuItems.length) % menuItems.length;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
selected = E.clip(selected + dir, 0, menuItems.length - 1);
|
||||||
|
}
|
||||||
scroller.scroll = selected;
|
scroller.scroll = selected;
|
||||||
l.draw(Math.min(lastSelected, selected), Math.max(lastSelected, selected));
|
l.draw(Math.min(lastSelected, selected), Math.max(lastSelected, selected));
|
||||||
}
|
}
|
||||||
|
@ -201,7 +210,7 @@ E.showMenu = function (items) {
|
||||||
},
|
},
|
||||||
}, function (dir) {
|
}, function (dir) {
|
||||||
if (dir)
|
if (dir)
|
||||||
l.move(dir);
|
l.move(settings.naturalScroll ? -dir : dir);
|
||||||
else
|
else
|
||||||
l.select();
|
l.select();
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,9 +1,19 @@
|
||||||
type ActualMenuItem = Exclude<Menu["..."], MenuOptions | undefined>;
|
type ActualMenuItem = Exclude<Menu["..."], MenuOptions | undefined>;
|
||||||
|
|
||||||
|
type PromenuSettings = {
|
||||||
|
naturalScroll: boolean,
|
||||||
|
wrapAround: boolean,
|
||||||
|
};
|
||||||
|
|
||||||
const enum Consts {
|
const enum Consts {
|
||||||
NAME_SCROLL_PAD = 5,
|
NAME_SCROLL_PAD = 5,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const settings = (require("Storage").readJSON("promenu.settings.json", true) || {}) as PromenuSettings;
|
||||||
|
settings.naturalScroll ??= false;
|
||||||
|
settings.wrapAround ??= true;
|
||||||
|
|
||||||
|
|
||||||
E.showMenu = (items?: Menu): MenuInstance => {
|
E.showMenu = (items?: Menu): MenuInstance => {
|
||||||
const RectRnd = (x1: number, y1: number, x2: number, y2: number, r: number) => {
|
const RectRnd = (x1: number, y1: number, x2: number, y2: number, r: number) => {
|
||||||
const pp = [];
|
const pp = [];
|
||||||
|
@ -207,7 +217,11 @@ E.showMenu = (items?: Menu): MenuInstance => {
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
const lastSelected = selected;
|
const lastSelected = selected;
|
||||||
|
if (settings.wrapAround) {
|
||||||
selected = (selected + dir + /*keep +ve*/menuItems.length) % menuItems.length;
|
selected = (selected + dir + /*keep +ve*/menuItems.length) % menuItems.length;
|
||||||
|
} else {
|
||||||
|
selected = E.clip(selected + dir, 0, menuItems.length - 1);
|
||||||
|
}
|
||||||
scroller.scroll = selected;
|
scroller.scroll = selected;
|
||||||
l.draw(Math.min(lastSelected, selected), Math.max(lastSelected, selected));
|
l.draw(Math.min(lastSelected, selected), Math.max(lastSelected, selected));
|
||||||
}
|
}
|
||||||
|
@ -244,7 +258,7 @@ E.showMenu = (items?: Menu): MenuInstance => {
|
||||||
},
|
},
|
||||||
} as SetUIArg<"updown">,
|
} as SetUIArg<"updown">,
|
||||||
dir => {
|
dir => {
|
||||||
if (dir) l.move(dir);
|
if (dir) l.move(settings.naturalScroll ? -dir : dir);
|
||||||
else l.select();
|
else l.select();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"id": "promenu",
|
"id": "promenu",
|
||||||
"name": "Pro Menu",
|
"name": "Pro Menu",
|
||||||
"version": "0.10",
|
"version": "0.11",
|
||||||
"description": "Replace the built in menu function. Supports Bangle.js 1 and Bangle.js 2.",
|
"description": "Replace the built in menu function. Supports Bangle.js 1 and Bangle.js 2.",
|
||||||
"icon": "icon.png",
|
"icon": "icon.png",
|
||||||
"type": "bootloader",
|
"type": "bootloader",
|
||||||
|
@ -12,6 +12,7 @@
|
||||||
"storage": [
|
"storage": [
|
||||||
{"name":"promenu.boot.js","url":"boot.js","supports": ["BANGLEJS"]},
|
{"name":"promenu.boot.js","url":"boot.js","supports": ["BANGLEJS"]},
|
||||||
{"name":"promenu.boot.js","url":"bootb2.js","supports": ["BANGLEJS2"]},
|
{"name":"promenu.boot.js","url":"bootb2.js","supports": ["BANGLEJS2"]},
|
||||||
{"name":"promenu.img","url":"promenuIcon.js","evaluate":true}
|
{"name":"promenu.img","url":"promenuIcon.js","evaluate":true},
|
||||||
|
{"name":"promenu.settings.js","url":"settings.js"}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
(function (back) {
|
||||||
|
var _a, _b;
|
||||||
|
var SETTINGS_FILE = "promenu.settings.json";
|
||||||
|
var storage = require("Storage");
|
||||||
|
var settings = (storage.readJSON(SETTINGS_FILE, true) || {});
|
||||||
|
(_a = settings.naturalScroll) !== null && _a !== void 0 ? _a : (settings.naturalScroll = false);
|
||||||
|
(_b = settings.wrapAround) !== null && _b !== void 0 ? _b : (settings.wrapAround = true);
|
||||||
|
var save = function () {
|
||||||
|
storage.writeJSON(SETTINGS_FILE, settings);
|
||||||
|
};
|
||||||
|
var menu = {
|
||||||
|
"": { "title": "Promenu" },
|
||||||
|
"< Back": back,
|
||||||
|
"Natural Scroll": {
|
||||||
|
value: !!settings.naturalScroll,
|
||||||
|
onchange: function (v) {
|
||||||
|
settings.naturalScroll = v;
|
||||||
|
save();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Wrap Around": {
|
||||||
|
value: !!settings.wrapAround,
|
||||||
|
onchange: function (v) {
|
||||||
|
settings.wrapAround = v;
|
||||||
|
save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
E.showMenu(menu);
|
||||||
|
});
|
|
@ -0,0 +1,33 @@
|
||||||
|
(back => {
|
||||||
|
const SETTINGS_FILE = "promenu.settings.json";
|
||||||
|
|
||||||
|
const storage = require("Storage")
|
||||||
|
const settings = (storage.readJSON(SETTINGS_FILE, true) || {}) as PromenuSettings;
|
||||||
|
settings.naturalScroll ??= false;
|
||||||
|
settings.wrapAround ??= true;
|
||||||
|
|
||||||
|
const save = () => {
|
||||||
|
storage.writeJSON(SETTINGS_FILE, settings);
|
||||||
|
};
|
||||||
|
|
||||||
|
const menu: Menu = {
|
||||||
|
"": { "title": "Promenu" },
|
||||||
|
"< Back": back,
|
||||||
|
/*LANG*/"Natural Scroll": {
|
||||||
|
value: !!settings.naturalScroll,
|
||||||
|
onchange: (v: boolean) => {
|
||||||
|
settings.naturalScroll = v;
|
||||||
|
save();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
/*LANG*/"Wrap Around": {
|
||||||
|
value: !!settings.wrapAround,
|
||||||
|
onchange: (v: boolean) => {
|
||||||
|
settings.wrapAround = v;
|
||||||
|
save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
E.showMenu(menu);
|
||||||
|
}) satisfies SettingsFunc
|
Loading…
Reference in New Issue