52 lines
No EOL
1.7 KiB
TypeScript
52 lines
No EOL
1.7 KiB
TypeScript
import {createModal} from "tc-shared/ui/elements/Modal";
|
|
import {EventType, key_description, KeyEvent} from "tc-shared/PPTListener";
|
|
import * as ppt from "tc-backend/ppt";
|
|
|
|
export function spawnKeySelect(callback: (key?: KeyEvent) => void) {
|
|
let modal = createModal({
|
|
header: tr("Select a key"),
|
|
body: () => $("#tmpl_key_select").renderTag().children(),
|
|
footer: null,
|
|
|
|
width: "",
|
|
closeable: false
|
|
});
|
|
|
|
const container_key = modal.htmlTag.find(".container-key a");
|
|
const button_save = modal.htmlTag.find(".button-save");
|
|
const button_cancel = modal.htmlTag.find(".button-cancel");
|
|
|
|
let current_key_age: number;
|
|
let last_key: KeyEvent;
|
|
let current_key: KeyEvent;
|
|
const listener = (event: KeyEvent) => {
|
|
if(event.type === EventType.KEY_PRESS) {
|
|
//console.log(tr("Key select got key press for %o"), event);
|
|
last_key = current_key;
|
|
current_key = event;
|
|
current_key_age = Date.now();
|
|
|
|
container_key.text(key_description(event));
|
|
button_save.prop("disabled", false);
|
|
}
|
|
};
|
|
|
|
|
|
button_save.on('click', () => {
|
|
if(__build.version !== "web") {
|
|
/* Because pressing the close button is also a mouse action */
|
|
if(current_key_age + 1000 > Date.now() && current_key.key_code == "MOUSE1")
|
|
current_key = last_key;
|
|
}
|
|
|
|
callback(current_key);
|
|
modal.close();
|
|
}).prop("disabled", true);
|
|
button_cancel.on('click', () => modal.close());
|
|
|
|
ppt.register_key_listener(listener);
|
|
modal.close_listener.push(() => ppt.unregister_key_listener(listener));
|
|
|
|
modal.htmlTag.find(".modal-body").addClass("modal-keyselect modal-green");
|
|
modal.open();
|
|
} |