UNPKG

@launchmenu/core

Version:

An environment for visual keyboard controlled applets

65 lines 5.78 kB
"use strict"; 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==