@launchmenu/core
Version:
An environment for visual keyboard controlled applets
65 lines • 5.78 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.setupMoveInputHandler = void 0;
const moveCursor_1 = require("../moveCursor");
const toggleItemSelection_1 = require("../toggleItemSelection");
const isMenuControlsSettingsFolder_1 = require("./isMenuControlsSettingsFolder");
const baseSettings_1 = require("../../../../application/settings/baseSettings/baseSettings");
const model_react_1 = require("model-react");
/**
* Sets up a key event handler that listens for cursor movement and selection change events
* @param menu The menu for which to add cursor controls
* @returns An object with an event emit function and a destroy function
*/
function setupMoveInputHandler(menu, patterns = menu.getContext().settings.get(baseSettings_1.baseSettings).controls.menu) {
const patternsSource = new model_react_1.DataCacher(h => isMenuControlsSettingsFolder_1.isMenuControlsSettingsFolder(patterns)
? {
up: patterns.up.get(h),
down: patterns.down.get(h),
selectItem: patterns.selectItem.get(h),
}
: patterns);
// // Whether we should toggle the cursor selection when letting go of shift
let toggleCursorSelection = false;
let newStateSelected = undefined;
return (event) => {
const pPatterns = patternsSource.get();
// TODO: create system for custom rate repeat
const isUpKey = pPatterns.up.matches(event);
const isDownKey = pPatterns.down.matches(event);
if (isDownKey || isUpKey) {
const oldCursor = menu.getCursor();
const toggleSelection = event.shift;
if (oldCursor && toggleSelection) {
if (newStateSelected === undefined)
newStateSelected = !menu.getSelected().includes(oldCursor);
menu.setSelected(oldCursor, newStateSelected);
}
// Move the cursor
const newCursor = moveCursor_1.moveCursor(menu, isUpKey);
// If shift was pressed, change selection
if (newCursor && toggleSelection)
menu.setSelected(newCursor, newStateSelected);
return true;
}
// Handle cursor selection toggling
else if (pPatterns.selectItem.matches(event, true)) {
if (event.type == "down")
toggleCursorSelection = true;
if (event.type == "up") {
if (newStateSelected === undefined && toggleCursorSelection) {
const cursor = menu.getCursor();
if (cursor)
toggleItemSelection_1.toggleItemSelection(menu, cursor);
}
newStateSelected = undefined;
return true;
}
}
// If any key other than shift or up or down is pressed, disable toggle
else if (event.type == "down")
toggleCursorSelection = false;
};
}
exports.setupMoveInputHandler = setupMoveInputHandler;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXBNb3ZlSW5wdXRIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL21lbnVzL21lbnUvaW50ZXJhY3Rpb24va2V5SGFuZGxlci9zZXR1cE1vdmVJbnB1dEhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsOENBQXlDO0FBQ3pDLGdFQUEyRDtBQU0zRCxpRkFBNEU7QUFDNUUsNkZBQXdGO0FBQ3hGLDZDQUF1QztBQUV2Qzs7OztHQUlHO0FBQ0gsU0FBZ0IscUJBQXFCLENBQ2pDLElBQVcsRUFDWCxXQVFVLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLDJCQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSTtJQUVwRSxNQUFNLGNBQWMsR0FBRyxJQUFJLHdCQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDdEMsMkRBQTRCLENBQUMsUUFBUSxDQUFDO1FBQ2xDLENBQUMsQ0FBQztZQUNJLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdEIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMxQixVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3pDO1FBQ0gsQ0FBQyxDQUFDLFFBQVEsQ0FDakIsQ0FBQztJQUVGLDRFQUE0RTtJQUM1RSxJQUFJLHFCQUFxQixHQUFHLEtBQUssQ0FBQztJQUNsQyxJQUFJLGdCQUFnQixHQUFHLFNBQWdDLENBQUM7SUFFeEQsT0FBTyxDQUFDLEtBQWUsRUFBRSxFQUFFO1FBQ3ZCLE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUV2Qyw2Q0FBNkM7UUFDN0MsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsSUFBSSxTQUFTLElBQUksT0FBTyxFQUFFO1lBQ3RCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQyxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ3BDLElBQUksU0FBUyxJQUFJLGVBQWUsRUFBRTtnQkFDOUIsSUFBSSxnQkFBZ0IsS0FBSyxTQUFTO29CQUM5QixnQkFBZ0IsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQy9ELElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLGdCQUFnQixDQUFDLENBQUM7YUFDakQ7WUFFRCxrQkFBa0I7WUFDbEIsTUFBTSxTQUFTLEdBQUcsdUJBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFFNUMseUNBQXlDO1lBQ3pDLElBQUksU0FBUyxJQUFJLGVBQWU7Z0JBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFDbEQsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELG1DQUFtQzthQUM5QixJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNoRCxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksTUFBTTtnQkFBRSxxQkFBcUIsR0FBRyxJQUFJLENBQUM7WUFDdkQsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRTtnQkFDcEIsSUFBSSxnQkFBZ0IsS0FBSyxTQUFTLElBQUkscUJBQXFCLEVBQUU7b0JBQ3pELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDaEMsSUFBSSxNQUFNO3dCQUFFLHlDQUFtQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztpQkFDakQ7Z0JBQ0QsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO2dCQUM3QixPQUFPLElBQUksQ0FBQzthQUNmO1NBQ0o7UUFDRCx1RUFBdUU7YUFDbEUsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLE1BQU07WUFBRSxxQkFBcUIsR0FBRyxLQUFLLENBQUM7SUFDakUsQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQWhFRCxzREFnRUMifQ==
;