From 017554d7a125eb19ddc88159cd7cf4e222620455 Mon Sep 17 00:00:00 2001 From: Tanasart <22589759+Ttanasart-pt@users.noreply.github.com> Date: Thu, 28 Sep 2023 20:10:41 +0700 Subject: [PATCH] - Add widget choices to localization list. --- PixelComposer.resource_order | 1 + PixelComposer.yyp | 1 + datafiles/data/locale/en.zip | Bin 26086 -> 34211 bytes datafiles/data/locale/en/UI.json | 10 + datafiles/data/locale/en/nodes.json | 19186 +++++++++------- datafiles/data/locale/en/words.json | 8 + objects/o_crash_handler/Draw_64.gml | 10 +- objects/o_dialog_exit/Draw_64.gml | 4 +- objects/o_main/Draw_75.gml | 2 +- scripts/argumentRenderer/argumentRenderer.gml | 2 +- scripts/controlPointBox/controlPointBox.gml | 12 +- scripts/cornerBox/cornerBox.gml | 2 +- .../draw_text_delimiter.gml | 2 +- scripts/draw_tooltip/draw_tooltip.gml | 6 +- scripts/locale_data/locale_data.gml | 48 +- scripts/matrixGrid/matrixGrid.gml | 7 +- scripts/nodeValue_drawer/nodeValue_drawer.gml | 14 +- .../node_action_object/node_action_object.gml | 4 +- scripts/node_armature/node_armature.gml | 2 +- .../node_armature_bind/node_armature_bind.gml | 4 +- .../node_armature_pose/node_armature_pose.gml | 3 +- scripts/node_data/node_data.gml | 5 +- scripts/node_global/node_global.gml | 4 +- scripts/node_registry/node_registry.gml | 5 +- .../node_string_split/node_string_split.gml | 2 +- scripts/node_value/node_value.gml | 28 +- .../node_websocket_receiver.gml | 2 +- scripts/node_widget_test/node_outline.yy | 12 + scripts/node_widget_test/node_widget_test.gml | 58 + scripts/node_widget_test/node_widget_test.yy | 11 + scripts/panel_inspector/panel_inspector.gml | 4 +- .../panel_node_data_gen.gml | 16 +- scripts/quarternionBox/quarternionBox.gml | 2 +- scripts/rangeBox/rangeBox.gml | 4 +- scripts/rotatorRandom/rotatorRandom.gml | 7 +- scripts/shell_functions/shell_functions.gml | 2 +- scripts/transformBox/transformBox.gml | 4 +- scripts/vectorRangeBox/vectorRangeBox.gml | 4 +- 38 files changed, 10479 insertions(+), 9019 deletions(-) create mode 100644 scripts/node_widget_test/node_outline.yy create mode 100644 scripts/node_widget_test/node_widget_test.gml create mode 100644 scripts/node_widget_test/node_widget_test.yy diff --git a/PixelComposer.resource_order b/PixelComposer.resource_order index 6f85e6330..a5621d583 100644 --- a/PixelComposer.resource_order +++ b/PixelComposer.resource_order @@ -574,6 +574,7 @@ {"name":"draw_text_delimiter","order":14,"path":"scripts/draw_text_delimiter/draw_text_delimiter.yy",}, {"name":"s_node_path_anchor","order":13,"path":"sprites/s_node_path_anchor/s_node_path_anchor.yy",}, {"name":"node_array_get","order":10,"path":"scripts/node_array_get/node_array_get.yy",}, + {"name":"node_widget_test","order":16,"path":"scripts/node_widget_test/node_widget_test.yy",}, {"name":"node_pb_fx_highlight","order":1,"path":"scripts/node_pb_fx_highlight/node_pb_fx_highlight.yy",}, {"name":"Apollo","order":5,"path":"extensions/Apollo/Apollo.yy",}, {"name":"panel_graph_grid_settings","order":7,"path":"scripts/panel_graph_grid_settings/panel_graph_grid_settings.yy",}, diff --git a/PixelComposer.yyp b/PixelComposer.yyp index d2375d1ce..b9ea07491 100644 --- a/PixelComposer.yyp +++ b/PixelComposer.yyp @@ -1158,6 +1158,7 @@ {"id":{"name":"draw_text_delimiter","path":"scripts/draw_text_delimiter/draw_text_delimiter.yy",},}, {"id":{"name":"s_node_path_anchor","path":"sprites/s_node_path_anchor/s_node_path_anchor.yy",},}, {"id":{"name":"node_array_get","path":"scripts/node_array_get/node_array_get.yy",},}, + {"id":{"name":"node_widget_test","path":"scripts/node_widget_test/node_widget_test.yy",},}, {"id":{"name":"node_pb_fx_highlight","path":"scripts/node_pb_fx_highlight/node_pb_fx_highlight.yy",},}, {"id":{"name":"Apollo","path":"extensions/Apollo/Apollo.yy",},}, {"id":{"name":"node_lua_compute","path":"scripts/node_lua_compute/node_lua_compute.yy",},}, diff --git a/datafiles/data/locale/en.zip b/datafiles/data/locale/en.zip index 3bfbd6cf2d1db18e086387f678915d73b18f38bf..ffc2102b216204ee01ee9cbfef9b9d79d94d246d 100644 GIT binary patch literal 34211 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"); draw_set_color(COLORS._main_text_sub); } else draw_set_color(cc); diff --git a/scripts/draw_tooltip/draw_tooltip.gml b/scripts/draw_tooltip/draw_tooltip.gml index 14c39cb2a..e0e288030 100644 --- a/scripts/draw_tooltip/draw_tooltip.gml +++ b/scripts/draw_tooltip/draw_tooltip.gml @@ -156,9 +156,9 @@ function draw_tooltip_atlas(atlas) { draw_rectangle(sx, _y, sx + ui(48), _y + ui(48), 1); draw_set_text(f_p3, fa_left, fa_top, COLORS._main_text_sub); - draw_text_add(sx + ui( 56), _y + ui( 0), "Position"); - draw_text_add(sx + ui( 56), _y + ui(16), "Rotation"); - draw_text_add(sx + ui( 56), _y + ui(32), "Scale"); + draw_text_add(sx + ui( 56), _y + ui( 0), __txt("Position")); + draw_text_add(sx + ui( 56), _y + ui(16), __txt("Rotation")); + draw_text_add(sx + ui( 56), _y + ui(32), __txt("Scale")); draw_set_text(f_p3, fa_right, fa_top, COLORS._main_text); draw_text_add(sx + ui(160), _y + ui( 0), atl.position); diff --git a/scripts/locale_data/locale_data.gml b/scripts/locale_data/locale_data.gml index 3c7de1d1a..74cff1ab8 100644 --- a/scripts/locale_data/locale_data.gml +++ b/scripts/locale_data/locale_data.gml @@ -1,7 +1,7 @@ #region locale globalvar LOCALE, TEST_LOCALE; LOCALE = {} - TEST_LOCALE = true; + TEST_LOCALE = false; function __initLocale() { var lfile = $"data/locale/en.zip"; @@ -37,10 +37,12 @@ gml_pragma("forceinline"); if(TEST_LOCALE) { - if(!struct_has(LOCALE.word, key) && !struct_has(LOCALE.ui, key)) + if(!struct_has(LOCALE.word, key) && !struct_has(LOCALE.ui, key)) { show_debug_message($"LOCALE: \"{key}\": \"{def}\","); + //return def; + } - return def; + return ""; } if(struct_has(LOCALE.word, key)) @@ -60,20 +62,32 @@ return __txtx(prefix + key, txt); } + function __txta(txt) { + var _txt = __txt(txt); + for(var i = 1; i < argument_count; i++) + _txt = string_replace_all(_txt, "{" + string(i) + "}", string(argument[i])); + + return _txt; + } + function __txt_node_name(node, def = "") { gml_pragma("forceinline"); - if(struct_has(LOCALE.node, node)) - return LOCALE.node[$ node].name; + if(!struct_has(LOCALE.node, node)) + return def; + + if(TEST_LOCALE) return ""; return def; } function __txt_node_tooltip(node, def = "") { gml_pragma("forceinline"); - if(struct_has(LOCALE.node, node)) - return LOCALE.node[$ node].tooltip; - return def; + if(!struct_has(LOCALE.node, node)) + return def; + + if(TEST_LOCALE) return ""; + return LOCALE.node[$ node].tooltip; } function __txt_junction_name(node, type, index, def = "") { @@ -86,6 +100,7 @@ var lst = type == JUNCTION_CONNECT.input? nde.inputs : nde.outputs; if(index >= array_length(lst)) return def; + if(TEST_LOCALE) return ""; return lst[index].name; } @@ -99,7 +114,24 @@ var lst = type == JUNCTION_CONNECT.input? nde.inputs : nde.outputs; if(index >= array_length(lst)) return def; + if(TEST_LOCALE) return ""; return lst[index].tooltip; } + function __txt_junction_data(node, type, index, def = []) { + gml_pragma("forceinline"); + + if(!struct_has(LOCALE.node, node)) + return def; + + var nde = LOCALE.node[$ node]; + var lst = type == JUNCTION_CONNECT.input? nde.inputs : nde.outputs; + if(index >= array_length(lst)) return def; + + if(!struct_has(lst[index], "display_data")) + return def; + + if(TEST_LOCALE) return [ "" ]; + return lst[index].display_data; + } #endregion \ No newline at end of file diff --git a/scripts/matrixGrid/matrixGrid.gml b/scripts/matrixGrid/matrixGrid.gml index 00d19aa64..b4b0f0e65 100644 --- a/scripts/matrixGrid/matrixGrid.gml +++ b/scripts/matrixGrid/matrixGrid.gml @@ -84,7 +84,9 @@ function matrixGrid(_type, _size, _onModify, _unit = noone) : widget() construct x = _x; y = _y; w = _w; - h = _h; + + var hh = TEXTBOX_HEIGHT + ui(8); + h = hh * size - ui(8); if(extras && instanceof(extras) == "buttonClass") { extras.setFocusHover(active, hover); @@ -105,7 +107,6 @@ function matrixGrid(_type, _size, _onModify, _unit = noone) : widget() construct b_link.icon_blend = linked? COLORS._main_accent : COLORS._main_icon; b_link.tooltip = linked? __txt("Unlink values") : __txt("Link values"); - var hh = TEXTBOX_HEIGHT + ui(8); var th = hh * size - ui(8); var bx = _x; @@ -131,6 +132,6 @@ function matrixGrid(_type, _size, _onModify, _unit = noone) : widget() construct resetFocus(); - return th; + return h; } } \ No newline at end of file diff --git a/scripts/nodeValue_drawer/nodeValue_drawer.gml b/scripts/nodeValue_drawer/nodeValue_drawer.gml index ba5feec8a..5d4d58072 100644 --- a/scripts/nodeValue_drawer/nodeValue_drawer.gml +++ b/scripts/nodeValue_drawer/nodeValue_drawer.gml @@ -17,6 +17,8 @@ function drawWidget(xx, yy, ww, _m, jun, global_var = true, _hover = false, _foc var breakLine = lineBreak || jun.expUse; if(jun.type == VALUE_TYPE.text) breakLine = true; + var _name = jun.getName(); + var butx = xx; if(jun.connect_type == JUNCTION_CONNECT.input && jun.isAnimable() && !jun.expUse) { #region animation var index = jun.value_from == noone? jun.is_anim : 2; @@ -32,7 +34,7 @@ function drawWidget(xx, yy, ww, _m, jun, global_var = true, _hover = false, _foc if(jun.value_from != noone) jun.removeFrom(); else { - recordAction(ACTION_TYPE.var_modify, jun.animator, [ jun.is_anim, "is_anim", jun.name + " animation" ]); + recordAction(ACTION_TYPE.var_modify, jun.animator, [ jun.is_anim, "is_anim", _name + " animation" ]); jun.setAnim(!jun.is_anim); anim_hold = jun.is_anim; } @@ -74,15 +76,15 @@ function drawWidget(xx, yy, ww, _m, jun, global_var = true, _hover = false, _foc } if(global_var) - if(string_pos(" ", jun.name)) cc = COLORS._main_value_negative; + if(string_pos(" ", _name)) cc = COLORS._main_value_negative; draw_set_text(breakLine? f_p0 : f_p1, fa_left, fa_center, cc); - draw_text_add(xx + ui(40), lb_y - ui(2), jun.name); - var lb_w = string_width(jun.name) + ui(48); + draw_text_add(xx + ui(40), lb_y - ui(2), _name); + var lb_w = string_width(_name) + ui(48); #region tooltip if(jun.tooltip != "") { - var tx = xx + ui(40) + string_width(jun.name) + ui(16); + var tx = xx + ui(40) + string_width(_name) + ui(16); var ty = lb_y - ui(1); if(point_in_circle(_m[0], _m[1], tx, ty, ui(10))) { @@ -187,7 +189,7 @@ function drawWidget(xx, yy, ww, _m, jun, global_var = true, _hover = false, _foc if(buttonInstant(THEME.button_hide, bx - ui(12), by - ui(12), ui(24), ui(24), _m, _focus, _hover, __txtx("panel_inspector_pop_text", "Pop up Editor"), THEME.text_popup, 0, cc) == 2) { if(jun.expUse) jun.popup_dialog = dialogPanelCall(new Panel_Text_Editor(jun.express_edit, function() { return context.expression; }, jun)); else jun.popup_dialog = dialogPanelCall(new Panel_Text_Editor(jun.editWidget, function() { return context.showValue(); }, jun)); - jun.popup_dialog.content.title = $"{jun.node.name} - {jun.name}"; + jun.popup_dialog.content.title = $"{jun.node.name} - {_name}"; } } } diff --git a/scripts/node_action_object/node_action_object.gml b/scripts/node_action_object/node_action_object.gml index 326411477..42495f8ab 100644 --- a/scripts/node_action_object/node_action_object.gml +++ b/scripts/node_action_object/node_action_object.gml @@ -17,8 +17,8 @@ location = noone; - static getName = function() { return name; /*__txt_node_name(node, name); */ } - static getTooltip = function() { return tooltip; /*__txt_node_tooltip(node, tooltip); */ } + static getName = function() { return name; } + static getTooltip = function() { return tooltip; } static build = function(_x = 0, _y = 0, _group = PANEL_GRAPH.getCurrentContext(), _param = {}) { var _n = []; diff --git a/scripts/node_armature/node_armature.gml b/scripts/node_armature/node_armature.gml index ad18534ae..ae981b371 100644 --- a/scripts/node_armature/node_armature.gml +++ b/scripts/node_armature/node_armature.gml @@ -16,7 +16,7 @@ function Node_Armature(_x, _y, _group = noone) : Node(_x, _y, _group) constructo var ty = _y; draw_set_text(f_p0, fa_left, fa_top, COLORS._main_text); - draw_text_add(_x + ui(16), ty + ui(4), "Bones"); + draw_text_add(_x + ui(16), ty + ui(4), __txt("Bones")); ty += ui(32); diff --git a/scripts/node_armature_bind/node_armature_bind.gml b/scripts/node_armature_bind/node_armature_bind.gml index 645bb48d2..4e31f8fde 100644 --- a/scripts/node_armature_bind/node_armature_bind.gml +++ b/scripts/node_armature_bind/node_armature_bind.gml @@ -84,7 +84,7 @@ function Node_Armature_Bind(_x, _y, _group = noone) : Node_Processor(_x, _y, _gr var ty = _y; draw_set_text(f_p0, fa_left, fa_top, COLORS._main_text); - draw_text_add(_x + ui(16), ty + ui(4), "Bones"); + draw_text_add(_x + ui(16), ty + ui(4), __txt("Bones")); ty += ui(32); @@ -192,7 +192,7 @@ function Node_Armature_Bind(_x, _y, _group = noone) : Node_Processor(_x, _y, _gr //draw_line(_x + 16, ty - ui(4), _x + _w - 16, ty - ui(4)); draw_set_text(f_p0, fa_left, fa_top, COLORS._main_text); - draw_text_add(_x + ui(16), ty + ui(4), "Surfaces"); + draw_text_add(_x + ui(16), ty + ui(4), __txt("Surfaces")); ty += ui(32); diff --git a/scripts/node_armature_pose/node_armature_pose.gml b/scripts/node_armature_pose/node_armature_pose.gml index 45f165e81..a917cb125 100644 --- a/scripts/node_armature_pose/node_armature_pose.gml +++ b/scripts/node_armature_pose/node_armature_pose.gml @@ -253,8 +253,7 @@ function Node_Armature_Pose(_x, _y, _group = noone) : Node(_x, _y, _group) const if(ds_map_exists(boneMap, _id)) { var _inp = boneMap[? _id]; - _inp.name = bone.name; - _inp.updateName(); + _inp.updateName(bone.name); var _trn = _inp.getValue(); diff --git a/scripts/node_data/node_data.gml b/scripts/node_data/node_data.gml index f945bb584..f191699e0 100644 --- a/scripts/node_data/node_data.gml +++ b/scripts/node_data/node_data.gml @@ -20,7 +20,8 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x var str = string_replace_all(name, " ", "_"); str = string_replace_all(str, "/", ""); str = string_replace_all(str, "-", ""); - + + ds_map_delete(PROJECT.nodeNameMap, internalName); internalName = str + string(irandom_range(10000, 99999)); PROJECT.nodeNameMap[? internalName] = self; } #endregion @@ -35,7 +36,7 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x run_in(1, function() { if(display_name != "") return; resetInternalName(); - display_name = name; //__txt_node_name(instanceof(self), name); + display_name = __txt_node_name(instanceof(self), name); }); } #endregion diff --git a/scripts/node_global/node_global.gml b/scripts/node_global/node_global.gml index 3c0848956..459b1dfe2 100644 --- a/scripts/node_global/node_global.gml +++ b/scripts/node_global/node_global.gml @@ -160,14 +160,14 @@ function variable_editor(nodeVal) constructor { tb_step.setFocusHover(_focus, _hover); draw_set_text(f_p0, fa_left, fa_center, COLORS._main_text_sub); - draw_text(_x + ui(8), _y + wd_h / 2, "Range"); + draw_text(_x + ui(8), _y + wd_h / 2, __txt("Range")); vb_range.draw(_x + lb_w, _y, _w - lb_w, wd_h, slider_range, noone, _m); _h += wd_h + ui(4); _y += wd_h + ui(4); draw_set_text(f_p0, fa_left, fa_center, COLORS._main_text_sub); - draw_text(_x + ui(8), _y + wd_h / 2, "Step"); + draw_text(_x + ui(8), _y + wd_h / 2, __txt("Step")); tb_step.draw(_x + lb_w, _y, _w - lb_w, wd_h, slider_step , _m); _h += wd_h + ui(8); diff --git a/scripts/node_registry/node_registry.gml b/scripts/node_registry/node_registry.gml index b6941d957..227539fe0 100644 --- a/scripts/node_registry/node_registry.gml +++ b/scripts/node_registry/node_registry.gml @@ -31,8 +31,8 @@ function NodeObject(_name, _spr, _node, _create, tags = []) constructor { #regio return self; } - static getName = function() { return name; /*__txt_node_name(node, name); */ } - static getTooltip = function() { return tooltip; /*__txt_node_tooltip(node, tooltip); */ } + static getName = function() { return __txt_node_name(node, name); } + static getTooltip = function() { return __txt_node_tooltip(node, tooltip); } static build = function(_x = 0, _y = 0, _group = PANEL_GRAPH.getCurrentContext(), _param = {}) { var _node; @@ -680,6 +680,7 @@ function NodeObject(_name, _spr, _node, _create, tags = []) constructor { #regio ds_list_add(node, "Debug"); addNodeObject(node, "Print", s_node_print, "Node_Print", [1, Node_Print], ["debug log"], "Display text to notification.").setVersion(1145); + addNodeObject(node, "Widget Test", s_node_print, "Node_Widget_Test", [1, Node_Widget_Test]); ds_list_add(node, "System"); addNodeObject(node, "Execute Shell", s_node_shell_excecute, "Node_Shell", [1, Node_Shell], ["terminal", "execute", "run"], "Execute shell script.").setVersion(11530); diff --git a/scripts/node_string_split/node_string_split.gml b/scripts/node_string_split/node_string_split.gml index bec47474e..3546f4ae1 100644 --- a/scripts/node_string_split/node_string_split.gml +++ b/scripts/node_string_split/node_string_split.gml @@ -30,7 +30,7 @@ function Node_String_Split(_x, _y, _group = noone) : Node_Processor(_x, _y, _gro if(string_length(str) == 0) { draw_set_text(f_p0b, fa_center, fa_center, COLORS._main_text_sub); - draw_text_cut(cx, cy, "None", w - ui(6), _s); + draw_text_cut(cx, cy, __txt("None"), w - ui(6), _s); return; } diff --git a/scripts/node_value/node_value.gml b/scripts/node_value/node_value.gml index cf90912a2..0ad2eb312 100644 --- a/scripts/node_value/node_value.gml +++ b/scripts/node_value/node_value.gml @@ -454,10 +454,15 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru index = _connect == JUNCTION_CONNECT.input? ds_list_size(node.inputs) : ds_list_size(node.outputs); type = _type; forward = true; - _initName = _name; - name = __txt_junction_name(instanceof(node), type, index, _name); - name = _name; + + static updateName = function(_name) { + name = _name; + internalName = string_lower(string_replace_all(name, " ", "_")); + name_custom = true; + } updateName(_name); + + name_custom = false; switch(type) { case VALUE_TYPE.PCXnode : @@ -465,10 +470,6 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru break; } - static updateName = function() { - internalName = string_lower(string_replace_all(name, " ", "_")); - } updateName(); - if(struct_has(node, "inputMap")) { if(_connect == JUNCTION_CONNECT.input) node.inputMap[? internalName] = self; else if(_connect == JUNCTION_CONNECT.output) node.outputMap[? internalName] = self; @@ -605,6 +606,11 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru return self; } #endregion + static getName = function() { #region + if(name_custom) return name; + return __txt_junction_name(instanceof(node), connect_type, index, name); + } #endregion + static resetValue = function() { setValue(def_val); } static setUnitRef = function(ref, mode = VALUE_UNIT.constant) { #region @@ -883,6 +889,8 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru extract_node = ""; break; #endregion case VALUE_DISPLAY.enum_scroll : #region + display_data = __txt_junction_data(instanceof(node), connect_type, index, display_data); + editWidget = new scrollBox(display_data, function(val) { if(val == -1) return; return setValueDirect(toNumber(val)); @@ -896,6 +904,8 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru extract_node = ""; break; #endregion case VALUE_DISPLAY.enum_button : #region + display_data = __txt_junction_data(instanceof(node), connect_type, index, display_data); + editWidget = new buttonGroup(display_data, function(val) { return setValueDirect(val); } ); @@ -2224,6 +2234,8 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru _map.animators = _anims; _map.data = extra_data; + _map.name_custom = name_custom; + return _map; } #endregion @@ -2251,6 +2263,8 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru draw_line_shift_x = struct_try_get(_map, "shift_x"); draw_line_shift_y = struct_try_get(_map, "shift_y"); + name_custom = struct_try_get(_map, "name_custom", false); + animator.deserialize(struct_try_get(_map, "raw_value"), scale); if(struct_has(_map, "animators")) { diff --git a/scripts/node_websocket_receiver/node_websocket_receiver.gml b/scripts/node_websocket_receiver/node_websocket_receiver.gml index 6180fedf4..f78205393 100644 --- a/scripts/node_websocket_receiver/node_websocket_receiver.gml +++ b/scripts/node_websocket_receiver/node_websocket_receiver.gml @@ -115,7 +115,7 @@ function Node_Websocket_Receiver(_x, _y, _group = noone) : Node(_x, _y, _group) draw_set_alpha(0.75); draw_text_add(bbox.xc, bbox.y0, $"Port {port}", _ts); draw_set_valign(fa_bottom) - draw_text_add(bbox.xc, bbox.y1, $"{connected_device} Connected", _ts); + draw_text_add(bbox.xc, bbox.y1, $"{connected_device} " + __txt("Connected"), _ts); draw_set_alpha(1); draw_sprite_fit(THEME.node_websocket_receive, 0, bbox.xc, (_y0 + _y1) / 2, bbox.w, _y1 - _y0, cc, aa); diff --git a/scripts/node_widget_test/node_outline.yy b/scripts/node_widget_test/node_outline.yy new file mode 100644 index 000000000..86468bc09 --- /dev/null +++ b/scripts/node_widget_test/node_outline.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "process", + "path": "folders/nodes/data/process.yy", + }, + "resourceVersion": "1.0", + "name": "node_outline", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_widget_test/node_widget_test.gml b/scripts/node_widget_test/node_widget_test.gml new file mode 100644 index 000000000..3c007e0e7 --- /dev/null +++ b/scripts/node_widget_test/node_widget_test.gml @@ -0,0 +1,58 @@ +function Node_Widget_Test(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { + name = "Widget Test"; + + w = 96; + min_h = 32 + 24 * 1; + draw_padding = 8; + + inputs[| 0] = nodeValue("textBox", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0) .setDisplay(VALUE_DISPLAY._default) + inputs[| 1] = nodeValue("rangeBox", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [0, 0]) .setDisplay(VALUE_DISPLAY.range) + inputs[| 2] = nodeValue("vectorBox", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [0, 0]) .setDisplay(VALUE_DISPLAY.vector) + inputs[| 3] = nodeValue("vectorRangeBox", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [0, 0, 0, 0]) .setDisplay(VALUE_DISPLAY.vector_range) + inputs[| 4] = nodeValue("rotator", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0) .setDisplay(VALUE_DISPLAY.rotation) + inputs[| 5] = nodeValue("rotatorRange", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [0, 0]) .setDisplay(VALUE_DISPLAY.rotation_range) + inputs[| 6] = nodeValue("rotatorRandom", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [0, 0, 0, 0, 0]) .setDisplay(VALUE_DISPLAY.rotation_random) + inputs[| 7] = nodeValue("slider", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0) .setDisplay(VALUE_DISPLAY.slider, [ 0, 1, 0.01 ]) + inputs[| 8] = nodeValue("sliderRange", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [0, 0]) .setDisplay(VALUE_DISPLAY.slider_range, [ 0, 1, 0.01 ]) + inputs[| 9] = nodeValue("areaBox", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0, 0, 0 ]) .setDisplay(VALUE_DISPLAY.area) + inputs[| 10] = nodeValue("paddingBox", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0, 0 ]) .setDisplay(VALUE_DISPLAY.padding) + inputs[| 11] = nodeValue("cornerBox", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0, 0 ]) .setDisplay(VALUE_DISPLAY.corner) + inputs[| 12] = nodeValue("controlPointBox", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0, 0, 0, 0, 0 ]) .setDisplay(VALUE_DISPLAY.puppet_control) + inputs[| 13] = nodeValue("scrollBox", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0) .setDisplay(VALUE_DISPLAY.enum_scroll, [ "Choice 1", "Choice 2" ]) + inputs[| 14] = nodeValue("buttonGroup", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0) .setDisplay(VALUE_DISPLAY.enum_button, [ "Choice 1", "Choice 2" ]) + inputs[| 15] = nodeValue("matrixGrid", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, array_create(9)) .setDisplay(VALUE_DISPLAY.matrix, 3) + inputs[| 16] = nodeValue("transformBox", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0, 0, 0 ]) .setDisplay(VALUE_DISPLAY.transform) + inputs[| 17] = nodeValue("toggleGroup", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0) .setDisplay(VALUE_DISPLAY.toggle) + inputs[| 18] = nodeValue("quarternionBox", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0, 0 ]) .setDisplay(VALUE_DISPLAY.d3quarternion) + + inputs[| 19] = nodeValue("checkBox", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false) .setDisplay(VALUE_DISPLAY._default) + + inputs[| 20] = nodeValue("buttonColor", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, 0) .setDisplay(VALUE_DISPLAY._default) + inputs[| 21] = nodeValue("buttonPalette", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, DEF_PALETTE) .setDisplay(VALUE_DISPLAY.palette) + inputs[| 22] = nodeValue("buttonGradient", self, JUNCTION_CONNECT.input, VALUE_TYPE.gradient, new gradientObject(c_white)) .setDisplay(VALUE_DISPLAY._default) + + inputs[| 23] = nodeValue("pathArrayBox", self, JUNCTION_CONNECT.input, VALUE_TYPE.path, []) .setDisplay(VALUE_DISPLAY.path_array, [ "*.png" ]) + inputs[| 24] = nodeValue("textBox", self, JUNCTION_CONNECT.input, VALUE_TYPE.path, "") .setDisplay(VALUE_DISPLAY.path_load) + inputs[| 25] = nodeValue("textBox", self, JUNCTION_CONNECT.input, VALUE_TYPE.path, "") .setDisplay(VALUE_DISPLAY.path_save) + inputs[| 26] = nodeValue("fontScrollBox", self, JUNCTION_CONNECT.input, VALUE_TYPE.path, "") .setDisplay(VALUE_DISPLAY.path_font) + + inputs[| 27] = nodeValue("curveBox", self, JUNCTION_CONNECT.input, VALUE_TYPE.curve, CURVE_DEF_11) .setDisplay(VALUE_DISPLAY._default) + + inputs[| 28] = nodeValue("textArea", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "") .setDisplay(VALUE_DISPLAY._default) + inputs[| 29] = nodeValue("textBox", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "") .setDisplay(VALUE_DISPLAY.text_box) + inputs[| 30] = nodeValue("textArea", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "") .setDisplay(VALUE_DISPLAY.codeLUA) + inputs[| 31] = nodeValue("textArea", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "") .setDisplay(VALUE_DISPLAY.codeHLSL) + inputs[| 32] = nodeValue("textArrayBox", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, []) .setDisplay(VALUE_DISPLAY.text_array, [ "Choice 1", "Choice 2" ]) + + inputs[| 33] = nodeValue("surfaceBox", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone) .setDisplay(VALUE_DISPLAY._default) + + input_display_list = [ + ["Number", false], 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + ["Boolean", false], 19, + ["Color", false], 20, 21, 22, + ["Path", false], 23, 24, 25, 26, + ["Curve", false], 27, + ["Text", false], 28, 29, 30, 31, 32, + ["Surface", false], 33, + ]; +} \ No newline at end of file diff --git a/scripts/node_widget_test/node_widget_test.yy b/scripts/node_widget_test/node_widget_test.yy new file mode 100644 index 000000000..9f3e1c9db --- /dev/null +++ b/scripts/node_widget_test/node_widget_test.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_widget_test", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "misc", + "path": "folders/nodes/data/misc.yy", + }, +} \ No newline at end of file diff --git a/scripts/panel_inspector/panel_inspector.gml b/scripts/panel_inspector/panel_inspector.gml index 5e4f6f2b2..a92c8290a 100644 --- a/scripts/panel_inspector/panel_inspector.gml +++ b/scripts/panel_inspector/panel_inspector.gml @@ -493,13 +493,13 @@ function Panel_Inspector() : PanelContent() constructor { if(!jun.show_in_inspector || jun.type == VALUE_TYPE.object) continue; if(filter_text != "") { - var pos = string_pos(filter_text, string_lower(jun.name)); + var pos = string_pos(filter_text, string_lower(jun.getName())); if(pos == 0) continue; } #region ++++ draw widget ++++ var lb_h = line_get_height(f_p0) + ui(8); - var lb_w = line_get_width(jun.name, f_p0) + ui(16); + var lb_w = line_get_width(jun.getName(), f_p0) + ui(16); var padd = ui(8); var _selY = yy - ui(0); diff --git a/scripts/panel_node_data_gen/panel_node_data_gen.gml b/scripts/panel_node_data_gen/panel_node_data_gen.gml index d45f9ca0f..f03f35ef8 100644 --- a/scripts/panel_node_data_gen/panel_node_data_gen.gml +++ b/scripts/panel_node_data_gen/panel_node_data_gen.gml @@ -90,16 +90,24 @@ function Panel_Node_Data_Gen() : PanelContent() constructor { for( var i = 0; i < ds_list_size(_b.inputs); i++ ) { _din[i] = __node_data_clone(_b.inputs[| i]); + var _in = _b.inputs[| i]; _jin[i] = { - type: _b.inputs[| i].type, - visible: _b.inputs[| i].visible? 1 : 0, + type: _in.type, + visible: _in.visible? 1 : 0, }; _lin[i] = { - name: _b.inputs[| i]._initName, - tooltip: _b.inputs[| i].tooltip, + name: _in._initName, + tooltip: _in.tooltip, }; + + switch(_in.display_type) { + case VALUE_DISPLAY.enum_button : + case VALUE_DISPLAY.enum_scroll : + _lin[i].display_data = _in.display_data; + break; + } } for( var i = 0; i < ds_list_size(_b.outputs); i++ ) { diff --git a/scripts/quarternionBox/quarternionBox.gml b/scripts/quarternionBox/quarternionBox.gml index 392adb2c4..4f2e6cb9f 100644 --- a/scripts/quarternionBox/quarternionBox.gml +++ b/scripts/quarternionBox/quarternionBox.gml @@ -17,7 +17,7 @@ function quarternionBox(_onModify) : widget() constructor { size = 4; axis = [ "x", "y", "z", "w" ]; - tooltip = new tooltipSelector("Angle type", ["Quaternion", "Euler"]); + tooltip = new tooltipSelector("Angle type", [__txt("Quaternion"), __txt("Euler")]); disp_w = noone; clickable = true; diff --git a/scripts/rangeBox/rangeBox.gml b/scripts/rangeBox/rangeBox.gml index be3cad404..c2e7caf1c 100644 --- a/scripts/rangeBox/rangeBox.gml +++ b/scripts/rangeBox/rangeBox.gml @@ -3,8 +3,8 @@ function rangeBox(_type, _onModify) : widget() constructor { extra_data = { linked : false }; tooltip = new tooltipSelector("Value Type", [ - __txt("Random Range"), - __txt("Constant"), + __txtx("widget_range_random", "Random Range"), + __txtx("widget_range_constant", "Constant"), ]); onModifyIndex = function(index, val) { diff --git a/scripts/rotatorRandom/rotatorRandom.gml b/scripts/rotatorRandom/rotatorRandom.gml index 3882503f2..d4678b646 100644 --- a/scripts/rotatorRandom/rotatorRandom.gml +++ b/scripts/rotatorRandom/rotatorRandom.gml @@ -11,7 +11,12 @@ function rotatorRandom(_onModify) : widget() constructor { tb_min_1 = new textBox(TEXTBOX_INPUT.number, function(val) { return onModify(3, val); } ).setSlidable(true, 1); tb_max_1 = new textBox(TEXTBOX_INPUT.number, function(val) { return onModify(4, val); } ).setSlidable(true, 1); - tooltip = new tooltipSelector("Mode", ["Range", "Span", "Double Range", "Double Span"]); + tooltip = new tooltipSelector("Mode", [ + __txtx("widget_rotator_random_range", "Range"), + __txtx("widget_rotator_random_span", "Span"), + __txtx("widget_rotator_random_double_range", "Double Range"), + __txtx("widget_rotator_random_double_span", "Double Span") + ]); static setInteract = function(interactable = noone) { self.interactable = interactable; diff --git a/scripts/shell_functions/shell_functions.gml b/scripts/shell_functions/shell_functions.gml index 1ab8231bd..26b1a925f 100644 --- a/scripts/shell_functions/shell_functions.gml +++ b/scripts/shell_functions/shell_functions.gml @@ -12,7 +12,7 @@ function shell_execute(path, command, ref = noone) { try { var res = execute_shell(path, command); - noti_status("Execute shell complete", THEME.noti_icon_console, COLORS._main_accent, ref); + noti_status("Execute shell complete", THEME.noti_icon_console,, ref); } catch(e) { noti_warning($"Execute shell failed: {e}", THEME.noti_icon_console_failed, COLORS._main_value_negative, ref); } diff --git a/scripts/transformBox/transformBox.gml b/scripts/transformBox/transformBox.gml index 7ded8cc00..f269ff03b 100644 --- a/scripts/transformBox/transformBox.gml +++ b/scripts/transformBox/transformBox.gml @@ -60,7 +60,7 @@ function transformBox(_onModify) : widget() constructor { var lbw = ui(80); draw_set_text(f_p0, fa_left, fa_center, COLORS._main_text_inner); - draw_text_add(_x, _y + tbh / 2, "Position"); + draw_text_add(_x, _y + tbh / 2, __txt("Position")); var tbw = (_w - lbw) / 2 - ui(4); tb[TRANSFORM.pos_x].draw(_x + lbw, _y, tbw, tbh, _data[TRANSFORM.pos_x], _m); @@ -76,7 +76,7 @@ function transformBox(_onModify) : widget() constructor { _y += ui(72); draw_set_text(f_p0, fa_left, fa_center, COLORS._main_text_inner); - draw_text_add(_x, _y + tbh / 2, "Scale"); + draw_text_add(_x, _y + tbh / 2, __txt("Scale")); var tbw = array_length(_data) > 4? (_w - lbw) / 2 - ui(4) : _w - lbw; diff --git a/scripts/vectorRangeBox/vectorRangeBox.gml b/scripts/vectorRangeBox/vectorRangeBox.gml index 86fb377a1..92ae8058d 100644 --- a/scripts/vectorRangeBox/vectorRangeBox.gml +++ b/scripts/vectorRangeBox/vectorRangeBox.gml @@ -5,8 +5,8 @@ function vectorRangeBox(_size, _type, _onModify, _unit = noone) : widget() const extra_data = { linked : false }; tooltip = new tooltipSelector("Value Type", [ - __txt("Random Range"), - __txt("Constant"), + __txtx("widget_range_random", "Random Range"), + __txtx("widget_range_constant", "Constant"), ]); onModifyIndex = function(index, val) {