nope/resources/ui/graph/defaults/default.hotkeys.ts
2020-11-04 22:36:52 +01:00

108 lines
3.0 KiB
TypeScript

/**
* @author Martin Karkowski
* @email m.karkowski@zema.de
* @create date 2020-03-31 18:06:27
* @modify date 2020-10-29 17:38:16
* @desc [description]
*/
import { IHotKeyAction } from '../../layout/interfaces/IHotkeyAction';
export function defaultHotkeys<D>() {
function selectElements(data) {
let selected: string[] = data.network.network.getSelectedNodes();
if (selected.length === 0) {
const node = data.network.network.getNodeAt(data.layout.currentMousePosition);
selected = node ? [node] : [];
}
if (selected.length === 0) {
const node = data.network.network.getEdgeAt(data.layout.currentMousePosition);
selected = node ? [node] : [];
}
return selected;
}
const hotkeys: IHotKeyAction<any>[] = [
{
key: 'ShiftLeft',
async onPress(data) {
try {
while (data.layout.pressedKey === 'ShiftLeft') {
await data.network.userAddEdge();
}
} catch (error) {
data.network.disableEditMode();
}
},
async onRelease(data){
data.network.disableEditMode();
}
},
{
key: 'ControlLeft',
async onPress(data) {
try {
while (data.layout.pressedKey === 'ControlLeft') {
await data.network.userAddNode();
}
} catch (error) {
data.network.disableEditMode();
}
},
async onRelease(data){
data.network.disableEditMode();
}
},
{
key: 'Delete',
onPress(data) {
let selected: string[] = selectElements(data);
data.network.network.deleteSelected(selected);
}
},
{
key: 'space',
onPress(data) {
let selected: string[] = selectElements(data);
for (const id of selected) {
if (typeof data.network.network.clusters[id] === 'function') {
data.network.network.clusters[id]();
} else {
// clusterNode(id);
data.network.network.unselectAll();
}
}
}
},
{
key: 'Esc',
onPress(data){
data.network.network.disableEditMode();
}
},
{
key: 'KeyR',
onPress(data){
data.network.network.redraw();
}
},
{
key: 'KeyE',
onPress(data){
data.network.network.enableEditMode();
}
},
{
key: 'KeyF',
onPress(data){
data.network.fit();
}
}
]
return hotkeys;
}