Node search

This commit is contained in:
luboslenco
2019-05-28 21:34:26 +02:00
parent d49ccfac26
commit 805a3511b1
4 changed files with 64 additions and 1 deletions
+1
View File
@@ -55,6 +55,7 @@ class Config {
C.keymap.toggle_node_editor = "tab";
C.keymap.import_assets = "ctrl+shift+i";
C.keymap.export_textures = "ctrl+shift+e";
C.keymap.node_search = "space";
}
return C;
+61
View File
@@ -52,6 +52,9 @@ class UINodes extends iron.Trait {
var mstartedlast = false;
public var changed = false;
var recompileMat = false; // Mat preview
var nodeSearchSpawn:TNode = null;
var nodeSearchOffset = 0;
var nodeSearchLast = "";
public var grid:kha.Image = null;
public var hwnd = Id.handle();
@@ -228,6 +231,64 @@ class UINodes extends iron.Trait {
if (keyboard.started("up")) for (n in nodes.nodesSelected) n.y -= 1;
else if (keyboard.started("down")) for (n in nodes.nodesSelected) n.y += 1;
}
// Node search popup
if (keyboard.started("space")) {
var searchHandle = Id.handle();
var first = true;
UIMenu.show(function(ui:Zui) {
ui.fill(0, 0, ui._w, ui.t.ELEMENT_H * 8, ui.t.WINDOW_BG_COL);
ui.textInput(searchHandle, "");
ui.changed = false;
if (first) {
first = false;
ui.startTextEdit(searchHandle); // Focus search bar
ui.textSelectedCurrentText = searchHandle.text;
searchHandle.text = "";
nodeSearchLast = "";
}
var search = ui.textSelectedCurrentText.toLowerCase();
if (searchHandle.text != "") search = searchHandle.text;
if (search != nodeSearchLast) {
nodeSearchOffset = 0;
nodeSearchLast = search;
}
if (ui.isKeyDown) { // Move selection
if (ui.key == kha.input.KeyCode.Down && nodeSearchOffset < 6) nodeSearchOffset++;
if (ui.key == kha.input.KeyCode.Up && nodeSearchOffset > 0) nodeSearchOffset--;
}
var enter = keyboard.down("enter");
var count = 0;
var BUTTON_COL = ui.t.BUTTON_COL;
for (list in NodeCreator.list) {
for (n in list) {
if (n.name.toLowerCase().indexOf(search) >= 0) {
ui.t.BUTTON_COL = count == nodeSearchOffset ? ui.t.HIGHLIGHT_COL : ui.t.WINDOW_BG_COL;
if (ui.button(n.name, Left) || (enter && count == nodeSearchOffset)) {
nodeSearchSpawn = makeNode(n, nodes, canvas); // Spawn selected node
canvas.nodes.push(nodeSearchSpawn);
nodes.nodesSelected = [nodeSearchSpawn];
nodes.nodesDrag = true;
hwnd.redraws = 2;
if (enter) {
ui.changed = true;
count = 6; // Trigger break
}
}
if (++count > 6) break;
}
}
if (count > 6) break;
}
ui.t.BUTTON_COL = BUTTON_COL;
});
}
if (nodeSearchSpawn != null) {
ui.inputX = mouse.x + App.x(); // Fix inputDX after popup removal
ui.inputY = mouse.y + App.y();
nodeSearchSpawn = null;
}
}
public function getNodeX():Int {
+1
View File
@@ -1798,6 +1798,7 @@ class UITrait extends iron.Trait {
hwnd2.redraws = 2;
});
}
// var gridSnap = ui.check(Id.handle({selected: false}), "Node Grid Snap");
}
ui.separator();