mirror of
https://github.com/Ttanasart-pt/Pixel-Composer.git
synced 2024-12-30 17:06:27 +01:00
120 lines
No EOL
3.9 KiB
Text
120 lines
No EOL
3.9 KiB
Text
function Panel_Nodes() : PanelContent() constructor {
|
|
title = __txt("Nodes");
|
|
padding = ui(8);
|
|
w = ui(320);
|
|
h = ui(480);
|
|
|
|
search_string = "";
|
|
|
|
tb_search = new textBox(TEXTBOX_INPUT.text, function(str) /*=>*/ { search_string = string(str); });
|
|
tb_search.align = fa_left;
|
|
tb_search.auto_update = true;
|
|
tb_search.boxColor = COLORS._main_icon_light;
|
|
|
|
node_collapse = ds_map_create();
|
|
|
|
function onResize() { sc_nodes.resize(w - ui(padding + padding), h - ui(padding + padding + 40)); }
|
|
|
|
function drawNodeList(_arr, _x0, _x1, _y, _m) {
|
|
var _hh = sc_nodes.surface_h;
|
|
var hg = ui(28);
|
|
|
|
var _h = 0;
|
|
|
|
for( var i = 0; i < array_length(_arr); i++ ) {
|
|
var node = _arr[i];
|
|
var name = node.renamed? node.display_name : node.name;
|
|
|
|
if(string_lower(search_string) != "" && string_pos(string_lower(search_string), string_lower(name)) == 0)
|
|
continue;
|
|
|
|
var isGroup = struct_has(node, "nodes");
|
|
if(isGroup && !ds_map_exists(node_collapse, node.node_id))
|
|
node_collapse[? node.node_id] = false;
|
|
|
|
var _cull = _y + hg < 0 || _y > _hh;
|
|
if(_cull) {
|
|
_y += hg + ui(2);
|
|
_h += hg + ui(2);
|
|
|
|
if(isGroup && !node_collapse[? node.node_id]) {
|
|
var hh = drawNodeList(node.nodes, _x0 + ui(16), _x1, _y, _m);
|
|
_y += hh + ui(2);
|
|
_h += hh + ui(2);
|
|
}
|
|
|
|
continue;
|
|
}
|
|
|
|
if(pHOVER && point_in_rectangle(_m[0], _m[1], _x0, _y, _x1 - _x0 - ui(32), _y + hg)) {
|
|
sc_nodes.hover_content = true;
|
|
|
|
var cc = merge_color(COLORS._main_icon_light, COLORS._main_icon, 0.75);
|
|
draw_sprite_stretched_ext(THEME.ui_panel_bg, 0, _x0, _y, _x1 - _x0, hg, cc, 1);
|
|
|
|
if(sc_nodes.active) {
|
|
if(DOUBLE_CLICK)
|
|
PANEL_PREVIEW.setNodePreview(node);
|
|
else if(mouse_press(mb_left)) {
|
|
if(isGroup)
|
|
node_collapse[? node.node_id] = !node_collapse[? node.node_id];
|
|
PANEL_INSPECTOR.setInspecting(node);
|
|
PANEL_GRAPH.nodes_selecting = [ node ];
|
|
}
|
|
}
|
|
} else
|
|
draw_sprite_stretched_ext(THEME.ui_panel_bg, 0, _x0, _y, _x1 - _x0, hg, COLORS._main_icon, 1);
|
|
draw_sprite_stretched_add(THEME.ui_panel, 1, _x0, _y, _x1 - _x0, hg, COLORS._main_icon, .2);
|
|
|
|
var bw = ui(24);
|
|
var bh = ui(24);
|
|
var bx = _x1 - ui(4) - bw;
|
|
var by = _y + (hg - bh) / 2;
|
|
|
|
if(buttonInstant(THEME.button_hide, bx, by, bw, bh, _m, sc_nodes.hover, sc_nodes.active, __txtx("panel_node_goto", "Go to node"), THEME.node_goto,, COLORS._main_icon, 0.75, 0.75) == 2)
|
|
graphFocusNode(node);
|
|
bx -= ui(32);
|
|
|
|
var _n = ALL_NODES[? instanceof(node)];
|
|
var spr = _n.spr;
|
|
draw_sprite_ui(spr, 1, _x0 + ui(4 + 16), _y + hg / 2, 0.25, 0.25, 0, c_white, 1);
|
|
|
|
draw_set_text(f_p2, fa_left, fa_center, COLORS._main_text);
|
|
draw_text_add(_x0 + hg + ui(8) + (isGroup * ui(20)), _y + hg / 2, name);
|
|
if(isGroup) draw_sprite_ui(THEME.arrow, (!node_collapse[? node.node_id]) * 3, _x0 + hg + ui(16), _y + hg / 2,,,,, 0.75);
|
|
|
|
_y += hg + ui(2);
|
|
_h += hg + ui(2);
|
|
|
|
if(isGroup && !node_collapse[? node.node_id]) {
|
|
var hh = drawNodeList(node.nodes, _x0 + ui(16), _x1, _y, _m);
|
|
_y += hh + ui(2);
|
|
_h += hh + ui(2);
|
|
}
|
|
}
|
|
|
|
return _h;
|
|
}
|
|
|
|
sc_nodes = new scrollPane(w - ui(padding + padding), h - ui(padding + padding + 40), function(_y, _m) {
|
|
draw_clear_alpha(COLORS.panel_bg_clear_inner, 1);
|
|
var _h = drawNodeList(PROJECT.nodes, 0, sc_nodes.surface_w, _y, _m);
|
|
return _h;
|
|
});
|
|
|
|
function drawContent(panel) {
|
|
draw_clear_alpha(COLORS.panel_bg_clear, 0);
|
|
|
|
var px = ui(padding);
|
|
var py = ui(padding);
|
|
var pw = w - ui(padding + padding);
|
|
var ph = h - ui(padding + padding);
|
|
|
|
draw_sprite_stretched(THEME.ui_panel_bg, 1, px - ui(8), py - ui(8), pw + ui(16), ph + ui(16));
|
|
tb_search.setFocusHover(pFOCUS, pHOVER);
|
|
tb_search.draw(px, py, pw, ui(32), search_string, [mx, my]);
|
|
|
|
sc_nodes.setFocusHover(pFOCUS, pHOVER);
|
|
sc_nodes.draw(px, py + ui(40), mx - px, my - (py + ui(40)));
|
|
}
|
|
} |