120 lines
4.0 KiB
TypeScript
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;
|
|
} |