nope/resources/ui/graph/defaults/default.hotkeys.ts
2020-10-25 21:14:51 +01:00

120 lines
4.0 KiB
TypeScript

/**
* @author Martin Karkowski
* @email m.karkowski@zema.de
* @create date 2020-03-31 18:06:27
* @modify date 2020-04-09 08:50:52
* @desc [description]
*/
import { ICallbackData } from '../interfaces/IGraphTool';
import { IBaseNodeOptions } from '../interfaces/IBaseNodeOptions';
import { IBaseEdgeOptions } from '../interfaces/IBaseEdgeOptions';
import { IHotKeyAction } from '../../gui-components-basic-layout/types/interfaces';
export function defaultHotkeys<N extends IBaseNodeOptions, E extends IBaseEdgeOptions>() {
function selectElements(data: ICallbackData<N, E>) {
let selected: string[] = data.network.network.getSelectedNodes();
if (selected.length === 0) {
const node = data.network.network.getNodeAt(data.component.layout.currentMousePosition);
selected = node ? [node] : [];
}
if (selected.length === 0) {
const node = data.network.network.getEdgeAt(data.component.layout.currentMousePosition);
selected = node ? [node] : [];
}
return selected;
}
const hotkeys: IHotKeyAction<ICallbackData<N, E>>[] = [
{
key: 'ShiftLeft',
onPress(data) {
if (data.selectedTemplate.type === 'elements' && data.selectedTemplate.nodes.length === 0 && data.selectedTemplate.edges.length === 1) {
const addEdgeMode = () => {
// _self.network.network.disableEditMode();
data.network.network.addEdgeMode();
data.network.once('addEdge', () => {
if (data.component.layout.pressedKey === data.event.code) {
setTimeout(addEdgeMode, 0);
}
});
};
addEdgeMode();
}
},
onRelease(data){
// Disable Edit Mode
data.network.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();
}
},
{
key: '',
onPress(data){
// if (this.copyTemplate) {
// const clipboardData: {
// nodes: N[],
// edges: E[]
// } = parse(this.copyTemplate, this.parseFunctions);
// this.paste(clipboardData, _self.network.network.DOMtoCanvas(_self.mousePos), false);
// } else {
// this.zemaService.showToast('warning', 'Copy & Paste', 'Failed Pasting');
// }
// break;
}
}
]
return hotkeys;
}