Add settings, display options, back functions
parent
a398522e76
commit
4fb3088d21
|
|
@ -7,14 +7,12 @@ Bangle.loadWidgets();
|
||||||
Bangle.drawWidgets();
|
Bangle.drawWidgets();
|
||||||
|
|
||||||
const localTaskFile = "wrkmem.json";
|
const localTaskFile = "wrkmem.json";
|
||||||
let savedData = require("Storage")
|
const savedData = {
|
||||||
.readJSON(localTaskFile, true);
|
tasks: [], keyboardAlpha: undefined, settings: {textOutlines: true, noWordBreaks: true}
|
||||||
if (!savedData) {
|
};
|
||||||
savedData = {
|
|
||||||
tasks: [], keyboardAlpha: undefined
|
|
||||||
|
|
||||||
}
|
Object.assign(savedData, require("Storage")
|
||||||
}
|
.readJSON(localTaskFile, true) || {});
|
||||||
|
|
||||||
let currentMenu;
|
let currentMenu;
|
||||||
|
|
||||||
|
|
@ -94,6 +92,7 @@ function drawButton(button) {
|
||||||
.wrapString(button.text, textMaxWidth)
|
.wrapString(button.text, textMaxWidth)
|
||||||
.filter(t => !!t)
|
.filter(t => !!t)
|
||||||
.join("\n");
|
.join("\n");
|
||||||
|
if (savedData.settings.textOutlines) {
|
||||||
g.setFontAlign(0, 0)
|
g.setFontAlign(0, 0)
|
||||||
.setColor(textOutlineCol)
|
.setColor(textOutlineCol)
|
||||||
.drawString(wrapText, button.x + button.w / 2 + 1, button.y + button.h / 2 - 1, false);
|
.drawString(wrapText, button.x + button.w / 2 + 1, button.y + button.h / 2 - 1, false);
|
||||||
|
|
@ -106,6 +105,7 @@ function drawButton(button) {
|
||||||
g.setFontAlign(0, 0)
|
g.setFontAlign(0, 0)
|
||||||
.setColor(textOutlineCol)
|
.setColor(textOutlineCol)
|
||||||
.drawString(wrapText, button.x + button.w / 2 + 1, button.y + button.h / 2 + 1, false);
|
.drawString(wrapText, button.x + button.w / 2 + 1, button.y + button.h / 2 + 1, false);
|
||||||
|
}
|
||||||
g.setFontAlign(0, 0)
|
g.setFontAlign(0, 0)
|
||||||
.setColor(textCol)
|
.setColor(textCol)
|
||||||
.drawString(wrapText, button.x + button.w / 2, button.y + button.h / 2, false);
|
.drawString(wrapText, button.x + button.w / 2, button.y + button.h / 2, false);
|
||||||
|
|
@ -122,7 +122,7 @@ function getBestFontForButton(button) {
|
||||||
const vectorRatio = sampleMetric.height / sampleMetric.width;
|
const vectorRatio = sampleMetric.height / sampleMetric.width;
|
||||||
// Effective height helps us handle tall skinny buttons, since text is usually horizontal.
|
// Effective height helps us handle tall skinny buttons, since text is usually horizontal.
|
||||||
let effectiveHeight = Math.min(button.h, button.w);
|
let effectiveHeight = Math.min(button.h, button.w);
|
||||||
if (!button.text.includes(" ")) {
|
if (!button.text.includes(" ") && savedData.settings.noWordBreaks) {
|
||||||
effectiveHeight = effectiveHeight / vectorRatio
|
effectiveHeight = effectiveHeight / vectorRatio
|
||||||
}
|
}
|
||||||
const buttonArea = button.w * effectiveHeight;
|
const buttonArea = button.w * effectiveHeight;
|
||||||
|
|
@ -263,13 +263,15 @@ function createMenu(options) {
|
||||||
|
|
||||||
const touchFunc = (button, xy) => buttons.forEach(b => b.onTouch && b.onTouch(button, xy));
|
const touchFunc = (button, xy) => buttons.forEach(b => b.onTouch && b.onTouch(button, xy));
|
||||||
const swipeFunc = (LR, UD) => swipeControls.forEach(s => s.onSwipe(LR, UD));
|
const swipeFunc = (LR, UD) => swipeControls.forEach(s => s.onSwipe(LR, UD));
|
||||||
|
const btnFunc = options.backFn;
|
||||||
return {
|
return {
|
||||||
buttons, render, setUI: () => Bangle.setUI({mode: "custom", touch: touchFunc, swipe: swipeFunc})
|
buttons, render, setUI: () => Bangle.setUI({mode: "custom", touch: touchFunc, swipe: swipeFunc, btn: btnFunc})
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function setMenu(menu) {
|
function setMenu(menu) {
|
||||||
|
save();
|
||||||
g.clearRect(Bangle.appRect);
|
g.clearRect(Bangle.appRect);
|
||||||
g.reset();
|
g.reset();
|
||||||
currentMenu = menu;
|
currentMenu = menu;
|
||||||
|
|
@ -299,7 +301,11 @@ function startTask(task) {
|
||||||
nudgeManager.queueNudge(task, () => nudge(task));
|
nudgeManager.queueNudge(task, () => nudge(task));
|
||||||
g.clear();
|
g.clear();
|
||||||
Bangle.drawWidgets();
|
Bangle.drawWidgets();
|
||||||
setMenu(getTaskMenu(task));
|
const onPressBack = () => {
|
||||||
|
nudgeManager.interrupt();
|
||||||
|
setMenu(mainMenu)
|
||||||
|
}
|
||||||
|
setMenu(getTaskMenu(task, onPressBack));
|
||||||
}
|
}
|
||||||
|
|
||||||
function nudge(task) {
|
function nudge(task) {
|
||||||
|
|
@ -395,10 +401,11 @@ function createTask(text) {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function getTaskMenu(task) {
|
function getTaskMenu(task, backFn) {
|
||||||
const d = new Date();
|
const d = new Date();
|
||||||
const h = d.getHours(), m = d.getMinutes();
|
const h = d.getHours(), m = d.getMinutes();
|
||||||
const time = h + ":" + m.toString().padStart(2,0);
|
const time = h + ":" + m.toString()
|
||||||
|
.padStart(2, 0);
|
||||||
const taskSwipeControls = [
|
const taskSwipeControls = [
|
||||||
createSwipeControl(SWIPE.LEFT, "Menu", () => {
|
createSwipeControl(SWIPE.LEFT, "Menu", () => {
|
||||||
setMenu(mainMenu);
|
setMenu(mainMenu);
|
||||||
|
|
@ -427,7 +434,7 @@ function getTaskMenu(task) {
|
||||||
taskSwipeControls.push(createSwipeControl(SWIPE.DOWN, "Edit Task", () => editTask(task, () => startTask(task))))
|
taskSwipeControls.push(createSwipeControl(SWIPE.DOWN, "Edit Task", () => editTask(task, () => startTask(task))))
|
||||||
}
|
}
|
||||||
return createMenu({
|
return createMenu({
|
||||||
items, spaceAround: 0, spaceBetween: 0, swipeControls: taskSwipeControls, title: time
|
items, spaceAround: 0, spaceBetween: 0, swipeControls: taskSwipeControls, title: time, backFn
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -454,15 +461,17 @@ function st5(fn) {
|
||||||
function editTask(task, backFn) {
|
function editTask(task, backFn) {
|
||||||
nudgeManager.interrupt();
|
nudgeManager.interrupt();
|
||||||
let editMenu = [];
|
let editMenu = [];
|
||||||
editMenu.push({title: "Rename", onchange: st5(() => renameTask(task, () => editTask(task, backFn)))});
|
|
||||||
if (task.complete) {
|
if (task.complete) {
|
||||||
editMenu.push({title: "Start Task", onchange: st5(() => restartTask(task))})
|
editMenu.push({title: "Start Task", onchange: st5(() => restartTask(task))});
|
||||||
editMenu.push({title: "View Task", onchange: st5(() => startTask(task))})
|
editMenu.push({title: "View Task", onchange: st5(() => startTask(task))});
|
||||||
} else {
|
} else {
|
||||||
editMenu.push({title: "Resume Task", onchange: st5(() => startTask(task))})
|
editMenu.push({title: "Resume Task", onchange: st5(() => startTask(task))});
|
||||||
}
|
}
|
||||||
editMenu.push({ title:"Interval", value: task.interval, min:10, step: 10, onchange: v => task.interval = v })
|
editMenu.push({title: "Rename", onchange: st5(() => renameTask(task, () => editTask(task, backFn)))});
|
||||||
editMenu.push({ title:"Incremental Backoff", value: !!task.useBackoff, onchange: v => task.useBackoff = v })
|
editMenu.push({title: "Interval", value: task.interval, min: 10, step: 10, onchange: v => task.interval = v});
|
||||||
|
editMenu.push({title: "Incremental Backoff", value: !!task.useBackoff, onchange: v => task.useBackoff = v});
|
||||||
|
editMenu.push({title: "Statistics:"})
|
||||||
|
editMenu.push({title: "On Task: " + task.affirmCount})
|
||||||
editMenu[""] = {title: task.text, back: backFn};
|
editMenu[""] = {title: task.text, back: backFn};
|
||||||
E.showMenu(editMenu);
|
E.showMenu(editMenu);
|
||||||
}
|
}
|
||||||
|
|
@ -488,10 +497,23 @@ function showTaskList(list, backFn) {
|
||||||
E.showMenu(taskMenu);
|
E.showMenu(taskMenu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function showSettingsMenu(backFn) {
|
||||||
|
const completeTasks = allTasks.filter(task => task.complete);
|
||||||
|
const incompleteTasks = allTasks.filter(task => !task.complete);
|
||||||
|
const settingsMenu = {
|
||||||
|
"" : {title: "Manage", back: backFn},
|
||||||
|
"Pending Tasks" : () => showTaskList(incompleteTasks, () => showSettingsMenu(backFn)),
|
||||||
|
"Completed Tasks": () => showTaskList(completeTasks, () => showSettingsMenu(backFn)),
|
||||||
|
"Text Outlines" : {value: savedData.settings.textOutlines, onchange: v => savedData.settings.textOutlines = v},
|
||||||
|
"No Word Breaks" : {value: savedData.settings.noWordBreaks, onchange: v => savedData.settings.noWordBreaks = v}
|
||||||
|
}
|
||||||
|
E.showMenu(settingsMenu);
|
||||||
|
}
|
||||||
|
|
||||||
const mainMenu = createMenu({
|
const mainMenu = createMenu({
|
||||||
title : "Working Memory", items: [
|
title : "Working Memory", items: [
|
||||||
{text: "New Task", size: 2, callback: newTask}, {
|
{text: "New Task", size: 2, callback: () => newTask("")}, {
|
||||||
text: "Manage", size: 1, callback: () => showTaskList(allTasks, () => setMenu(mainMenu))
|
text: "Manage", size: 1, callback: () => showSettingsMenu(() => setMenu(mainMenu))
|
||||||
}
|
}
|
||||||
], isHorizontal: false
|
], isHorizontal: false
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue