diff options
Diffstat (limited to 'modules/visual_script')
12 files changed, 207 insertions, 141 deletions
diff --git a/modules/visual_script/doc_classes/VisualScript.xml b/modules/visual_script/doc_classes/VisualScript.xml index 5807c98d32..ff6b7a8b5f 100644 --- a/modules/visual_script/doc_classes/VisualScript.xml +++ b/modules/visual_script/doc_classes/VisualScript.xml @@ -14,142 +14,142 @@ <methods> <method name="add_custom_signal"> <return type="void" /> - <argument index="0" name="name" type="StringName" /> + <param index="0" name="name" type="StringName" /> <description> Add a custom signal with the specified name to the VisualScript. </description> </method> <method name="add_function"> <return type="void" /> - <argument index="0" name="name" type="StringName" /> - <argument index="1" name="func_node_id" type="int" /> + <param index="0" name="name" type="StringName" /> + <param index="1" name="func_node_id" type="int" /> <description> Add a function with the specified name to the VisualScript, and assign the root [VisualScriptFunction] node's id as [code]func_node_id[/code]. </description> </method> <method name="add_node"> <return type="void" /> - <argument index="0" name="id" type="int" /> - <argument index="1" name="node" type="VisualScriptNode" /> - <argument index="2" name="position" type="Vector2" default="Vector2(0, 0)" /> + <param index="0" name="id" type="int" /> + <param index="1" name="node" type="VisualScriptNode" /> + <param index="2" name="position" type="Vector2" default="Vector2(0, 0)" /> <description> Add a node to the VisualScript. </description> </method> <method name="add_variable"> <return type="void" /> - <argument index="0" name="name" type="StringName" /> - <argument index="1" name="default_value" type="Variant" default="null" /> - <argument index="2" name="export" type="bool" default="false" /> + <param index="0" name="name" type="StringName" /> + <param index="1" name="default_value" type="Variant" default="null" /> + <param index="2" name="export" type="bool" default="false" /> <description> Add a variable to the VisualScript, optionally giving it a default value or marking it as exported. </description> </method> <method name="custom_signal_add_argument"> <return type="void" /> - <argument index="0" name="name" type="StringName" /> - <argument index="1" name="type" type="int" enum="Variant.Type" /> - <argument index="2" name="argname" type="String" /> - <argument index="3" name="index" type="int" default="-1" /> + <param index="0" name="name" type="StringName" /> + <param index="1" name="type" type="int" enum="Variant.Type" /> + <param index="2" name="argname" type="String" /> + <param index="3" name="index" type="int" default="-1" /> <description> Add an argument to a custom signal added with [method add_custom_signal]. </description> </method> <method name="custom_signal_get_argument_count" qualifiers="const"> <return type="int" /> - <argument index="0" name="name" type="StringName" /> + <param index="0" name="name" type="StringName" /> <description> Get the count of a custom signal's arguments. </description> </method> <method name="custom_signal_get_argument_name" qualifiers="const"> <return type="String" /> - <argument index="0" name="name" type="StringName" /> - <argument index="1" name="argidx" type="int" /> + <param index="0" name="name" type="StringName" /> + <param index="1" name="argidx" type="int" /> <description> Get the name of a custom signal's argument. </description> </method> <method name="custom_signal_get_argument_type" qualifiers="const"> <return type="int" enum="Variant.Type" /> - <argument index="0" name="name" type="StringName" /> - <argument index="1" name="argidx" type="int" /> + <param index="0" name="name" type="StringName" /> + <param index="1" name="argidx" type="int" /> <description> Get the type of a custom signal's argument. </description> </method> <method name="custom_signal_remove_argument"> <return type="void" /> - <argument index="0" name="name" type="StringName" /> - <argument index="1" name="argidx" type="int" /> + <param index="0" name="name" type="StringName" /> + <param index="1" name="argidx" type="int" /> <description> Remove a specific custom signal's argument. </description> </method> <method name="custom_signal_set_argument_name"> <return type="void" /> - <argument index="0" name="name" type="StringName" /> - <argument index="1" name="argidx" type="int" /> - <argument index="2" name="argname" type="String" /> + <param index="0" name="name" type="StringName" /> + <param index="1" name="argidx" type="int" /> + <param index="2" name="argname" type="String" /> <description> Rename a custom signal's argument. </description> </method> <method name="custom_signal_set_argument_type"> <return type="void" /> - <argument index="0" name="name" type="StringName" /> - <argument index="1" name="argidx" type="int" /> - <argument index="2" name="type" type="int" enum="Variant.Type" /> + <param index="0" name="name" type="StringName" /> + <param index="1" name="argidx" type="int" /> + <param index="2" name="type" type="int" enum="Variant.Type" /> <description> Change the type of a custom signal's argument. </description> </method> <method name="custom_signal_swap_argument"> <return type="void" /> - <argument index="0" name="name" type="StringName" /> - <argument index="1" name="argidx" type="int" /> - <argument index="2" name="withidx" type="int" /> + <param index="0" name="name" type="StringName" /> + <param index="1" name="argidx" type="int" /> + <param index="2" name="withidx" type="int" /> <description> Swap two of the arguments of a custom signal. </description> </method> <method name="data_connect"> <return type="void" /> - <argument index="0" name="from_node" type="int" /> - <argument index="1" name="from_port" type="int" /> - <argument index="2" name="to_node" type="int" /> - <argument index="3" name="to_port" type="int" /> + <param index="0" name="from_node" type="int" /> + <param index="1" name="from_port" type="int" /> + <param index="2" name="to_node" type="int" /> + <param index="3" name="to_port" type="int" /> <description> Connect two data ports. The value of [code]from_node[/code]'s [code]from_port[/code] would be fed into [code]to_node[/code]'s [code]to_port[/code]. </description> </method> <method name="data_disconnect"> <return type="void" /> - <argument index="0" name="from_node" type="int" /> - <argument index="1" name="from_port" type="int" /> - <argument index="2" name="to_node" type="int" /> - <argument index="3" name="to_port" type="int" /> + <param index="0" name="from_node" type="int" /> + <param index="1" name="from_port" type="int" /> + <param index="2" name="to_node" type="int" /> + <param index="3" name="to_port" type="int" /> <description> Disconnect two data ports previously connected with [method data_connect]. </description> </method> <method name="get_function_node_id" qualifiers="const"> <return type="int" /> - <argument index="0" name="name" type="StringName" /> + <param index="0" name="name" type="StringName" /> <description> Returns the id of a function's entry point node. </description> </method> <method name="get_node" qualifiers="const"> <return type="VisualScriptNode" /> - <argument index="0" name="id" type="int" /> + <param index="0" name="id" type="int" /> <description> Returns a node given its id. </description> </method> <method name="get_node_position" qualifiers="const"> <return type="Vector2" /> - <argument index="0" name="id" type="int" /> + <param index="0" name="id" type="int" /> <description> Returns a node's position in pixels. </description> @@ -162,129 +162,129 @@ </method> <method name="get_variable_default_value" qualifiers="const"> <return type="Variant" /> - <argument index="0" name="name" type="StringName" /> + <param index="0" name="name" type="StringName" /> <description> Returns the default (initial) value of a variable. </description> </method> <method name="get_variable_export" qualifiers="const"> <return type="bool" /> - <argument index="0" name="name" type="StringName" /> + <param index="0" name="name" type="StringName" /> <description> Returns whether a variable is exported. </description> </method> <method name="get_variable_info" qualifiers="const"> <return type="Dictionary" /> - <argument index="0" name="name" type="StringName" /> + <param index="0" name="name" type="StringName" /> <description> Returns the information for a given variable as a dictionary. The information includes its name, type, hint and usage. </description> </method> <method name="has_custom_signal" qualifiers="const"> <return type="bool" /> - <argument index="0" name="name" type="StringName" /> + <param index="0" name="name" type="StringName" /> <description> Returns whether a signal exists with the specified name. </description> </method> <method name="has_data_connection" qualifiers="const"> <return type="bool" /> - <argument index="0" name="from_node" type="int" /> - <argument index="1" name="from_port" type="int" /> - <argument index="2" name="to_node" type="int" /> - <argument index="3" name="to_port" type="int" /> + <param index="0" name="from_node" type="int" /> + <param index="1" name="from_port" type="int" /> + <param index="2" name="to_node" type="int" /> + <param index="3" name="to_port" type="int" /> <description> Returns whether the specified data ports are connected. </description> </method> <method name="has_function" qualifiers="const"> <return type="bool" /> - <argument index="0" name="name" type="StringName" /> + <param index="0" name="name" type="StringName" /> <description> Returns whether a function exists with the specified name. </description> </method> <method name="has_node" qualifiers="const"> <return type="bool" /> - <argument index="0" name="id" type="int" /> + <param index="0" name="id" type="int" /> <description> Returns whether a node exists with the given id. </description> </method> <method name="has_sequence_connection" qualifiers="const"> <return type="bool" /> - <argument index="0" name="from_node" type="int" /> - <argument index="1" name="from_output" type="int" /> - <argument index="2" name="to_node" type="int" /> + <param index="0" name="from_node" type="int" /> + <param index="1" name="from_output" type="int" /> + <param index="2" name="to_node" type="int" /> <description> Returns whether the specified sequence ports are connected. </description> </method> <method name="has_variable" qualifiers="const"> <return type="bool" /> - <argument index="0" name="name" type="StringName" /> + <param index="0" name="name" type="StringName" /> <description> Returns whether a variable exists with the specified name. </description> </method> <method name="remove_custom_signal"> <return type="void" /> - <argument index="0" name="name" type="StringName" /> + <param index="0" name="name" type="StringName" /> <description> Remove a custom signal with the given name. </description> </method> <method name="remove_function"> <return type="void" /> - <argument index="0" name="name" type="StringName" /> + <param index="0" name="name" type="StringName" /> <description> Remove a specific function and its nodes from the script. </description> </method> <method name="remove_node"> <return type="void" /> - <argument index="0" name="id" type="int" /> + <param index="0" name="id" type="int" /> <description> Remove the node with the specified id. </description> </method> <method name="remove_variable"> <return type="void" /> - <argument index="0" name="name" type="StringName" /> + <param index="0" name="name" type="StringName" /> <description> Remove a variable with the given name. </description> </method> <method name="rename_custom_signal"> <return type="void" /> - <argument index="0" name="name" type="StringName" /> - <argument index="1" name="new_name" type="StringName" /> + <param index="0" name="name" type="StringName" /> + <param index="1" name="new_name" type="StringName" /> <description> Change the name of a custom signal. </description> </method> <method name="rename_function"> <return type="void" /> - <argument index="0" name="name" type="StringName" /> - <argument index="1" name="new_name" type="StringName" /> + <param index="0" name="name" type="StringName" /> + <param index="1" name="new_name" type="StringName" /> <description> Change the name of a function. </description> </method> <method name="rename_variable"> <return type="void" /> - <argument index="0" name="name" type="StringName" /> - <argument index="1" name="new_name" type="StringName" /> + <param index="0" name="name" type="StringName" /> + <param index="1" name="new_name" type="StringName" /> <description> Change the name of a variable. </description> </method> <method name="sequence_connect"> <return type="void" /> - <argument index="0" name="from_node" type="int" /> - <argument index="1" name="from_output" type="int" /> - <argument index="2" name="to_node" type="int" /> + <param index="0" name="from_node" type="int" /> + <param index="1" name="from_output" type="int" /> + <param index="2" name="to_node" type="int" /> <description> Connect two sequence ports. The execution will flow from of [code]from_node[/code]'s [code]from_output[/code] into [code]to_node[/code]. Unlike [method data_connect], there isn't a [code]to_port[/code], since the target node can have only one sequence port. @@ -292,55 +292,55 @@ </method> <method name="sequence_disconnect"> <return type="void" /> - <argument index="0" name="from_node" type="int" /> - <argument index="1" name="from_output" type="int" /> - <argument index="2" name="to_node" type="int" /> + <param index="0" name="from_node" type="int" /> + <param index="1" name="from_output" type="int" /> + <param index="2" name="to_node" type="int" /> <description> Disconnect two sequence ports previously connected with [method sequence_connect]. </description> </method> <method name="set_instance_base_type"> <return type="void" /> - <argument index="0" name="type" type="StringName" /> + <param index="0" name="type" type="StringName" /> <description> Set the base type of the script. </description> </method> <method name="set_node_position"> <return type="void" /> - <argument index="0" name="id" type="int" /> - <argument index="1" name="position" type="Vector2" /> + <param index="0" name="id" type="int" /> + <param index="1" name="position" type="Vector2" /> <description> Set the node position in the VisualScript graph. </description> </method> <method name="set_scroll"> <return type="void" /> - <argument index="0" name="offset" type="Vector2" /> + <param index="0" name="offset" type="Vector2" /> <description> Set the screen center to the given position. </description> </method> <method name="set_variable_default_value"> <return type="void" /> - <argument index="0" name="name" type="StringName" /> - <argument index="1" name="value" type="Variant" /> + <param index="0" name="name" type="StringName" /> + <param index="1" name="value" type="Variant" /> <description> Change the default (initial) value of a variable. </description> </method> <method name="set_variable_export"> <return type="void" /> - <argument index="0" name="name" type="StringName" /> - <argument index="1" name="enable" type="bool" /> + <param index="0" name="name" type="StringName" /> + <param index="1" name="enable" type="bool" /> <description> Change whether a variable is exported. </description> </method> <method name="set_variable_info"> <return type="void" /> - <argument index="0" name="name" type="StringName" /> - <argument index="1" name="value" type="Dictionary" /> + <param index="0" name="name" type="StringName" /> + <param index="1" name="value" type="Dictionary" /> <description> Set a variable's info, using the same format as [method get_variable_info]. </description> @@ -348,7 +348,7 @@ </methods> <signals> <signal name="node_ports_changed"> - <argument index="0" name="id" type="int" /> + <param index="0" name="id" type="int" /> <description> Emitted when the ports of a node are changed. </description> diff --git a/modules/visual_script/doc_classes/VisualScriptConstructor.xml b/modules/visual_script/doc_classes/VisualScriptConstructor.xml index 5ec17350bd..a003f21ab9 100644 --- a/modules/visual_script/doc_classes/VisualScriptConstructor.xml +++ b/modules/visual_script/doc_classes/VisualScriptConstructor.xml @@ -21,13 +21,13 @@ </method> <method name="set_constructor"> <return type="void" /> - <argument index="0" name="constructor" type="Dictionary" /> + <param index="0" name="constructor" type="Dictionary" /> <description> </description> </method> <method name="set_constructor_type"> <return type="void" /> - <argument index="0" name="type" type="int" enum="Variant.Type" /> + <param index="0" name="type" type="int" enum="Variant.Type" /> <description> </description> </method> diff --git a/modules/visual_script/doc_classes/VisualScriptCustomNode.xml b/modules/visual_script/doc_classes/VisualScriptCustomNode.xml index 97b89fb987..6e522b2f84 100644 --- a/modules/visual_script/doc_classes/VisualScriptCustomNode.xml +++ b/modules/visual_script/doc_classes/VisualScriptCustomNode.xml @@ -29,28 +29,28 @@ </method> <method name="_get_input_value_port_hint" qualifiers="virtual const"> <return type="int" /> - <argument index="0" name="input_idx" type="int" /> + <param index="0" name="input_idx" type="int" /> <description> Returns the specified input port's hint. See the [enum @GlobalScope.PropertyHint] hints. </description> </method> <method name="_get_input_value_port_hint_string" qualifiers="virtual const"> <return type="String" /> - <argument index="0" name="input_idx" type="int" /> + <param index="0" name="input_idx" type="int" /> <description> Returns the specified input port's hint string. </description> </method> <method name="_get_input_value_port_name" qualifiers="virtual const"> <return type="String" /> - <argument index="0" name="input_idx" type="int" /> + <param index="0" name="input_idx" type="int" /> <description> Returns the specified input port's name. </description> </method> <method name="_get_input_value_port_type" qualifiers="virtual const"> <return type="int" /> - <argument index="0" name="input_idx" type="int" /> + <param index="0" name="input_idx" type="int" /> <description> Returns the specified input port's type. See the [enum Variant.Type] values. </description> @@ -63,7 +63,7 @@ </method> <method name="_get_output_sequence_port_text" qualifiers="virtual const"> <return type="String" /> - <argument index="0" name="seq_idx" type="int" /> + <param index="0" name="seq_idx" type="int" /> <description> Returns the specified [b]sequence[/b] output's name. </description> @@ -76,28 +76,28 @@ </method> <method name="_get_output_value_port_hint" qualifiers="virtual const"> <return type="int" /> - <argument index="0" name="output_idx" type="int" /> + <param index="0" name="output_idx" type="int" /> <description> Returns the specified output port's hint. See the [enum @GlobalScope.PropertyHint] hints. </description> </method> <method name="_get_output_value_port_hint_string" qualifiers="virtual const"> <return type="String" /> - <argument index="0" name="output_idx" type="int" /> + <param index="0" name="output_idx" type="int" /> <description> Returns the specified output port's hint string. </description> </method> <method name="_get_output_value_port_name" qualifiers="virtual const"> <return type="String" /> - <argument index="0" name="output_idx" type="int" /> + <param index="0" name="output_idx" type="int" /> <description> Returns the specified output port's name. </description> </method> <method name="_get_output_value_port_type" qualifiers="virtual const"> <return type="int" /> - <argument index="0" name="output_idx" type="int" /> + <param index="0" name="output_idx" type="int" /> <description> Returns the specified output port's type. See the [enum Variant.Type] values. </description> @@ -122,10 +122,10 @@ </method> <method name="_step" qualifiers="virtual const"> <return type="Variant" /> - <argument index="0" name="inputs" type="Array" /> - <argument index="1" name="outputs" type="Array" /> - <argument index="2" name="start_mode" type="int" /> - <argument index="3" name="working_mem" type="Array" /> + <param index="0" name="inputs" type="Array" /> + <param index="1" name="outputs" type="Array" /> + <param index="2" name="start_mode" type="int" /> + <param index="3" name="working_mem" type="Array" /> <description> Execute the custom node's logic, returning the index of the output sequence port to use or a [String] when there is an error. The [code]inputs[/code] array contains the values of the input ports. diff --git a/modules/visual_script/doc_classes/VisualScriptCustomNodes.xml b/modules/visual_script/doc_classes/VisualScriptCustomNodes.xml index f04c862174..48d7975051 100644 --- a/modules/visual_script/doc_classes/VisualScriptCustomNodes.xml +++ b/modules/visual_script/doc_classes/VisualScriptCustomNodes.xml @@ -11,17 +11,17 @@ <methods> <method name="add_custom_node"> <return type="void" /> - <argument index="0" name="name" type="String" /> - <argument index="1" name="category" type="String" /> - <argument index="2" name="script" type="Script" /> + <param index="0" name="name" type="String" /> + <param index="1" name="category" type="String" /> + <param index="2" name="script" type="Script" /> <description> Add a custom Visual Script node to the editor. It'll be placed under "Custom Nodes" with the [code]category[/code] as the parameter. </description> </method> <method name="remove_custom_node"> <return type="void" /> - <argument index="0" name="name" type="String" /> - <argument index="1" name="category" type="String" /> + <param index="0" name="name" type="String" /> + <param index="1" name="category" type="String" /> <description> Remove a custom Visual Script node from the editor. Custom nodes already placed on scripts won't be removed. </description> diff --git a/modules/visual_script/doc_classes/VisualScriptFunctionState.xml b/modules/visual_script/doc_classes/VisualScriptFunctionState.xml index ef09c9d4a0..03fef9c13b 100644 --- a/modules/visual_script/doc_classes/VisualScriptFunctionState.xml +++ b/modules/visual_script/doc_classes/VisualScriptFunctionState.xml @@ -11,9 +11,9 @@ <methods> <method name="connect_to_signal"> <return type="void" /> - <argument index="0" name="obj" type="Object" /> - <argument index="1" name="signals" type="String" /> - <argument index="2" name="args" type="Array" /> + <param index="0" name="obj" type="Object" /> + <param index="1" name="signals" type="String" /> + <param index="2" name="args" type="Array" /> <description> Connects this [VisualScriptFunctionState] to a signal in the given object to automatically resume when it's emitted. </description> @@ -26,7 +26,7 @@ </method> <method name="resume"> <return type="Variant" /> - <argument index="0" name="args" type="Array" default="[]" /> + <param index="0" name="args" type="Array" default="[]" /> <description> Resumes the function to run from the point it was yielded. </description> diff --git a/modules/visual_script/doc_classes/VisualScriptLists.xml b/modules/visual_script/doc_classes/VisualScriptLists.xml index 27a81fce2f..607965bf71 100644 --- a/modules/visual_script/doc_classes/VisualScriptLists.xml +++ b/modules/visual_script/doc_classes/VisualScriptLists.xml @@ -11,64 +11,64 @@ <methods> <method name="add_input_data_port"> <return type="void" /> - <argument index="0" name="type" type="int" enum="Variant.Type" /> - <argument index="1" name="name" type="String" /> - <argument index="2" name="index" type="int" /> + <param index="0" name="type" type="int" enum="Variant.Type" /> + <param index="1" name="name" type="String" /> + <param index="2" name="index" type="int" /> <description> Adds an input port to the Visual Script node. </description> </method> <method name="add_output_data_port"> <return type="void" /> - <argument index="0" name="type" type="int" enum="Variant.Type" /> - <argument index="1" name="name" type="String" /> - <argument index="2" name="index" type="int" /> + <param index="0" name="type" type="int" enum="Variant.Type" /> + <param index="1" name="name" type="String" /> + <param index="2" name="index" type="int" /> <description> Adds an output port to the Visual Script node. </description> </method> <method name="remove_input_data_port"> <return type="void" /> - <argument index="0" name="index" type="int" /> + <param index="0" name="index" type="int" /> <description> Removes an input port from the Visual Script node. </description> </method> <method name="remove_output_data_port"> <return type="void" /> - <argument index="0" name="index" type="int" /> + <param index="0" name="index" type="int" /> <description> Removes an output port from the Visual Script node. </description> </method> <method name="set_input_data_port_name"> <return type="void" /> - <argument index="0" name="index" type="int" /> - <argument index="1" name="name" type="String" /> + <param index="0" name="index" type="int" /> + <param index="1" name="name" type="String" /> <description> Sets the name of an input port. </description> </method> <method name="set_input_data_port_type"> <return type="void" /> - <argument index="0" name="index" type="int" /> - <argument index="1" name="type" type="int" enum="Variant.Type" /> + <param index="0" name="index" type="int" /> + <param index="1" name="type" type="int" enum="Variant.Type" /> <description> Sets the type of an input port. </description> </method> <method name="set_output_data_port_name"> <return type="void" /> - <argument index="0" name="index" type="int" /> - <argument index="1" name="name" type="String" /> + <param index="0" name="index" type="int" /> + <param index="1" name="name" type="String" /> <description> Sets the name of an output port. </description> </method> <method name="set_output_data_port_type"> <return type="void" /> - <argument index="0" name="index" type="int" /> - <argument index="1" name="type" type="int" enum="Variant.Type" /> + <param index="0" name="index" type="int" /> + <param index="1" name="type" type="int" enum="Variant.Type" /> <description> Sets the type of an output port. </description> diff --git a/modules/visual_script/doc_classes/VisualScriptNode.xml b/modules/visual_script/doc_classes/VisualScriptNode.xml index 2eb99dc25f..97c4f8ce76 100644 --- a/modules/visual_script/doc_classes/VisualScriptNode.xml +++ b/modules/visual_script/doc_classes/VisualScriptNode.xml @@ -11,7 +11,7 @@ <methods> <method name="get_default_input_value" qualifiers="const"> <return type="Variant" /> - <argument index="0" name="port_idx" type="int" /> + <param index="0" name="port_idx" type="int" /> <description> Returns the default value of a given port. The default value is used when nothing is connected to the port. </description> @@ -30,8 +30,8 @@ </method> <method name="set_default_input_value"> <return type="void" /> - <argument index="0" name="port_idx" type="int" /> - <argument index="1" name="value" type="Variant" /> + <param index="0" name="port_idx" type="int" /> + <param index="1" name="value" type="Variant" /> <description> Change the default value of a given port. </description> diff --git a/modules/visual_script/editor/visual_script_editor.cpp b/modules/visual_script/editor/visual_script_editor.cpp index 1e9755f45f..7f8e9d8254 100644 --- a/modules/visual_script/editor/visual_script_editor.cpp +++ b/modules/visual_script/editor/visual_script_editor.cpp @@ -42,10 +42,32 @@ #include "editor/editor_node.h" #include "editor/editor_resource_preview.h" #include "editor/editor_scale.h" +#include "editor/editor_settings.h" +#include "scene/gui/check_button.h" +#include "scene/gui/graph_edit.h" +#include "scene/gui/separator.h" #include "scene/gui/view_panner.h" #include "scene/main/window.h" #ifdef TOOLS_ENABLED + +void VisualScriptEditedProperty::_bind_methods() { + ClassDB::bind_method(D_METHOD("set_edited_property", "value"), &VisualScriptEditedProperty::set_edited_property); + ClassDB::bind_method(D_METHOD("get_edited_property"), &VisualScriptEditedProperty::get_edited_property); + + ADD_PROPERTY(PropertyInfo(Variant::NIL, "edited_property", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NIL_IS_VARIANT), "set_edited_property", "get_edited_property"); +} + +void VisualScriptEditedProperty::set_edited_property(Variant p_variant) { + edited_property = p_variant; +} + +Variant VisualScriptEditedProperty::get_edited_property() const { + return edited_property; +} + +///////////////// + class VisualScriptEditorSignalEdit : public Object { GDCLASS(VisualScriptEditorSignalEdit, Object); @@ -3898,14 +3920,14 @@ int VisualScriptEditor::_create_new_node_from_name(const String &p_text, const V return new_id; } -void VisualScriptEditor::_default_value_changed() { +void VisualScriptEditor::_default_value_changed(const StringName &p_property, const Variant &p_value, const String &p_field, bool p_changing) { Ref<VisualScriptNode> vsn = script->get_node(editing_id); if (vsn.is_null()) { return; } undo_redo->create_action(TTR("Change Input Value")); - undo_redo->add_do_method(vsn.ptr(), "set_default_input_value", editing_input, default_value_edit->get_variant()); + undo_redo->add_do_method(vsn.ptr(), "set_default_input_value", editing_input, p_value); undo_redo->add_undo_method(vsn.ptr(), "set_default_input_value", editing_input, vsn->get_default_input_value(editing_input)); undo_redo->add_do_method(this, "_update_graph", editing_id); @@ -3928,9 +3950,6 @@ void VisualScriptEditor::_default_value_edited(Node *p_button, int p_id, int p_i Variant::construct(pinfo.type, existing, &existingp, 1, ce); } - default_value_edit->set_position(Object::cast_to<Control>(p_button)->get_screen_position() + Vector2(0, Object::cast_to<Control>(p_button)->get_size().y) * graph->get_zoom()); - default_value_edit->reset_size(); - if (pinfo.type == Variant::NODE_PATH) { Node *edited_scene = get_tree()->get_edited_scene_root(); if (edited_scene) { // Fixing an old crash bug ( Visual Script Crashes on editing NodePath with an empty scene open). @@ -3948,11 +3967,33 @@ void VisualScriptEditor::_default_value_edited(Node *p_button, int p_id, int p_i } } - if (default_value_edit->edit(nullptr, pinfo.name, pinfo.type, existing, pinfo.hint, pinfo.hint_string)) { - if (pinfo.hint == PROPERTY_HINT_MULTILINE_TEXT) { - default_value_edit->popup_centered_ratio(); + edited_default_property_holder->set_edited_property(existing); + + if (default_property_editor) { + default_property_editor->disconnect("property_changed", callable_mp(this, &VisualScriptEditor::_default_value_changed)); + default_property_editor_popup->remove_child(default_property_editor); + } + + default_property_editor = EditorInspector::instantiate_property_editor(edited_default_property_holder.ptr(), pinfo.type, "edited_property", pinfo.hint, pinfo.hint_string, PROPERTY_USAGE_NONE); + if (default_property_editor) { + default_property_editor->set_object_and_property(edited_default_property_holder.ptr(), "edited_property"); + default_property_editor->update_property(); + default_property_editor->set_name_split_ratio(0); + default_property_editor_popup->add_child(default_property_editor); + + default_property_editor->connect("property_changed", callable_mp(this, &VisualScriptEditor::_default_value_changed)); + + Button *button = Object::cast_to<Button>(p_button); + if (button) { + default_property_editor_popup->set_position(button->get_screen_position() + Vector2(0, button->get_size().height) * graph->get_zoom()); + } + + default_property_editor_popup->reset_size(); + + if (pinfo.hint == PROPERTY_HINT_MULTILINE_TEXT || !button) { + default_property_editor_popup->popup_centered_ratio(); } else { - default_value_edit->popup(); + default_property_editor_popup->popup(); } } @@ -4795,9 +4836,11 @@ VisualScriptEditor::VisualScriptEditor() { set_process_input(true); - default_value_edit = memnew(CustomPropertyEditor); - add_child(default_value_edit); - default_value_edit->connect("variant_changed", callable_mp(this, &VisualScriptEditor::_default_value_changed)); + default_property_editor_popup = memnew(PopupPanel); + default_property_editor_popup->set_min_size(Size2i(180, 0) * EDSCALE); + add_child(default_property_editor_popup); + + edited_default_property_holder.instantiate(); new_connect_node_select = memnew(VisualScriptPropertySelector); add_child(new_connect_node_select); diff --git a/modules/visual_script/editor/visual_script_editor.h b/modules/visual_script/editor/visual_script_editor.h index a6df7bba73..6b337e52f6 100644 --- a/modules/visual_script/editor/visual_script_editor.h +++ b/modules/visual_script/editor/visual_script_editor.h @@ -34,15 +34,31 @@ #include "../visual_script.h" #include "editor/create_dialog.h" #include "editor/plugins/script_editor_plugin.h" -#include "editor/property_editor.h" -#include "scene/gui/graph_edit.h" #include "visual_script_property_selector.h" +class GraphEdit; + class VisualScriptEditorSignalEdit; class VisualScriptEditorVariableEdit; #ifdef TOOLS_ENABLED +class VisualScriptEditedProperty : public RefCounted { + GDCLASS(VisualScriptEditedProperty, RefCounted); + +private: + Variant edited_property; + +protected: + static void _bind_methods(); + +public: + void set_edited_property(Variant p_variant); + Variant get_edited_property() const; + + VisualScriptEditedProperty() {} +}; + // TODO: Maybe this class should be refactored. // See https://github.com/godotengine/godot/issues/51913 class VisualScriptEditor : public ScriptEditorBase { @@ -115,7 +131,9 @@ class VisualScriptEditor : public ScriptEditorBase { AcceptDialog *edit_variable_dialog = nullptr; EditorInspector *edit_variable_edit = nullptr; - CustomPropertyEditor *default_value_edit = nullptr; + PopupPanel *default_property_editor_popup = nullptr; + EditorProperty *default_property_editor = nullptr; + Ref<VisualScriptEditedProperty> edited_default_property_holder; UndoRedo *undo_redo = nullptr; @@ -276,7 +294,7 @@ class VisualScriptEditor : public ScriptEditorBase { int data_disconnect_node = 0; int data_disconnect_port = 0; - void _default_value_changed(); + void _default_value_changed(const StringName &p_property, const Variant &p_value, const String &p_field, bool p_changing); void _default_value_edited(Node *p_button, int p_id, int p_input_port); void _menu_option(int p_what); diff --git a/modules/visual_script/editor/visual_script_property_selector.cpp b/modules/visual_script/editor/visual_script_property_selector.cpp index f98ce5bb26..712c89368b 100644 --- a/modules/visual_script/editor/visual_script_property_selector.cpp +++ b/modules/visual_script/editor/visual_script_property_selector.cpp @@ -39,6 +39,7 @@ #include "editor/doc_tools.h" #include "editor/editor_feature_profile.h" #include "editor/editor_scale.h" +#include "editor/editor_settings.h" #include "scene/main/node.h" #include "scene/main/window.h" diff --git a/modules/visual_script/editor/visual_script_property_selector.h b/modules/visual_script/editor/visual_script_property_selector.h index 41f8eea735..4de626467e 100644 --- a/modules/visual_script/editor/visual_script_property_selector.h +++ b/modules/visual_script/editor/visual_script_property_selector.h @@ -33,8 +33,8 @@ #include "../visual_script.h" #include "editor/editor_help.h" -#include "editor/property_editor.h" #include "scene/gui/rich_text_label.h" +#include "scene/gui/tree.h" class VisualScriptPropertySelector : public ConfirmationDialog { GDCLASS(VisualScriptPropertySelector, ConfirmationDialog); diff --git a/modules/visual_script/visual_script.cpp b/modules/visual_script/visual_script.cpp index 4215a979e0..73249371cd 100644 --- a/modules/visual_script/visual_script.cpp +++ b/modules/visual_script/visual_script.cpp @@ -1206,6 +1206,10 @@ bool VisualScriptInstance::get(const StringName &p_name, Variant &r_ret) const { } void VisualScriptInstance::get_property_list(List<PropertyInfo> *p_properties) const { +#ifdef TOOLS_ENABLED + p_properties->push_back(script->get_class_category()); +#endif // TOOLS_ENABLED + for (const KeyValue<StringName, VisualScript::Variable> &E : script->variables) { if (!E.value._export) { continue; |