this repo has no description
1import { Accessor, Setter } from "solid-js";
2import { NodeManager } from "./Mangers/NodeManager";
3import { Node } from "./structs/node";
4import { readText, writeText } from "@tauri-apps/plugin-clipboard-manager";
5import { decodeNodeList, encodeNodeList } from "./utils/clipboard";
6
7let isKeyDown: any = {};
8
9export let load = ( canvas: HTMLCanvasElement, mousePos: Accessor<[ number, number ]>, selectedNode: Accessor<Node[]>, setSelectedNode: Setter<Node[]> ) => {
10 // TODO: Add undo / redo -ing
11
12 canvas.onkeydown = async ( e ) => {
13 switch(e.key){
14 case 'Delete':
15 let nodes = selectedNode();
16 for(let node of nodes){
17 node.inputs.map(input => {
18 input.connections.map(partner => {
19 partner.connections = partner.connections.filter(x => x != input);
20 })
21 })
22
23 node.outputs.map(output => {
24 output.connections.map(partner => {
25 partner.connections = partner.connections.filter(x => x != output);
26 })
27 })
28
29 NodeManager.Instance.RemoveNode(node);
30 }
31
32 setSelectedNode([]);
33 break;
34 }
35 }
36
37 window.onkeydown = async ( e ) => {
38 isKeyDown[e.key] = true;
39
40 switch(e.key){
41 case 's':
42 if(e.ctrlKey){
43 let currentTab = NodeManager.Instance.CurrentTab();
44 if(!currentTab)return;
45
46 // Save
47 NodeManager.Instance.SaveTab(currentTab);
48 }
49 break;
50 case 'S':
51 if(e.ctrlKey){
52 let currentTab = NodeManager.Instance.CurrentTab();
53 if(!currentTab)return;
54
55 // Save
56 NodeManager.Instance.SaveTab(currentTab, true);
57 }
58 break;
59 case 'c':
60 if(e.ctrlKey){
61 let nodes = selectedNode();
62 await writeText(encodeNodeList(nodes, mousePos()));
63 }
64 break;
65 case 'v':
66 if(e.ctrlKey){
67 let text = await readText();
68
69 let nodes = await decodeNodeList(text, mousePos());
70 if(!nodes)return;
71
72 for(let node of nodes)
73 NodeManager.Instance.AddNode(node);
74
75 setSelectedNode(nodes);
76 }
77 break;
78 case 'z':
79 if(e.ctrlKey){
80 console.log('undo');
81 }
82 break;
83 case 'y':
84 if(e.ctrlKey){
85 console.log('redo');
86 }
87 break;
88 }
89 }
90
91 window.onkeyup = ( e ) => {
92 isKeyDown[e.key] = false;
93 }
94}