125 lines
3.1 KiB
Plaintext
125 lines
3.1 KiB
Plaintext
/**
|
|
* Keys only get caught for changing a nodes title.
|
|
* Previous title is remembered in savedTitle and restored when hitting Escape
|
|
*/
|
|
String savedTitle;
|
|
void keyPressed() {
|
|
if (key == ESC) {
|
|
key = 0;
|
|
}
|
|
if (i_selectedNode != -1) {
|
|
if (keyCode == BACKSPACE) {
|
|
if (nodes[i_selectedNode].title.length() > 0) {
|
|
nodes[i_selectedNode].title = nodes[i_selectedNode].title.substring(0, nodes[i_selectedNode].title.length()-1);
|
|
nodes[i_selectedNode].refreshSize();
|
|
}
|
|
} else if (keyCode == DELETE) {
|
|
deleteSelectedNode();
|
|
} else if (keyCode == ESC) {
|
|
nodes[i_selectedNode].title = savedTitle;
|
|
nodes[i_selectedNode].refreshSize();
|
|
deselect();
|
|
} else if (keyCode == RETURN || keyCode == ENTER) {
|
|
deselect();
|
|
} else if (keyCode != SHIFT && keyCode != RETURN && keyCode != ENTER && keyCode != CONTROL) {
|
|
nodes[i_selectedNode].title = nodes[i_selectedNode].title + key;
|
|
nodes[i_selectedNode].refreshSize();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void mousePressed() {
|
|
if (mouseButton == LEFT) {
|
|
/**
|
|
* Either press a button...
|
|
*/
|
|
boolean buttonClicked = false;
|
|
for (int i = 0; i < buttons.length; i++) {
|
|
if (buttons[i].hover()) {
|
|
buttons[i].click();
|
|
//Not able to break out of here without using a flag
|
|
buttonClicked = true;
|
|
}
|
|
}
|
|
|
|
if (!buttonClicked) {
|
|
for (int i = 0; i < nodeCount; i++) {
|
|
/**
|
|
* ...or select / drag a node...
|
|
*/
|
|
if (nodes[i].hover()) {
|
|
i_selectedNode = i;
|
|
savedTitle = nodes[i].title;
|
|
nodes[i].drag = true;
|
|
nodes[i].dragMouseStartPoint.x = mouseX;
|
|
nodes[i].dragMouseStartPoint.y = mouseY;
|
|
break;
|
|
}
|
|
/**
|
|
* ...or pull a new link out of an inlet or outlet.
|
|
*/
|
|
else if (nodes[i].hoverInlet()) {
|
|
dragLink = true;
|
|
dragOriginLet = -1;
|
|
dragOriginId = i;
|
|
} else if (nodes[i].hoverOutlet()) {
|
|
dragLink = true;
|
|
dragOriginLet = 1;
|
|
dragOriginId = i;
|
|
}
|
|
|
|
//deselecting the shit out of this for reasons I don't remember, no care to improve right now
|
|
deselect();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Create links
|
|
*/
|
|
void mouseReleased() {
|
|
for (int i = 0; i < nodeCount; i++) {
|
|
nodes[i].drag = false;
|
|
if (dragLink && dragOriginId != i) {
|
|
if (nodes[i].hoverInlet() && dragOriginLet == 1) {
|
|
|
|
Link(dragOriginId, i);
|
|
}
|
|
if (nodes[i].hoverOutlet() && dragOriginLet == -1) {
|
|
|
|
Link(i, dragOriginId);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Reset drag&drop states
|
|
*/
|
|
dragLink = false;
|
|
dragOriginLet = 0;
|
|
dragOriginId = -1;
|
|
}
|
|
|
|
|
|
/**
|
|
* Scaling is tied to textSize. Having the UI on a seperate PGraphics would be better, but it's good enough for now
|
|
*/
|
|
int zoomDelta = 3;
|
|
void mouseWheel(MouseEvent event) {
|
|
float zoom = event.getAmount();
|
|
if (zoom < 0) {
|
|
textSize += zoomDelta;
|
|
} else if (zoom > 0) {
|
|
if (textSize - zoomDelta > 0) {
|
|
textSize -= zoomDelta;
|
|
}
|
|
}
|
|
padding = textSize/3*2;
|
|
for (int i = 0; i < nodeCount; i++) {
|
|
nodes[i].refreshSize();
|
|
nodes[i].setVectors();
|
|
}
|
|
}
|