Skip to content

Commit 72a7296

Browse files
author
Liam Sherwin
committed
Add duplicate button
1 parent af48ace commit 72a7296

File tree

3 files changed

+34
-2
lines changed

3 files changed

+34
-2
lines changed

core/engine/Engine.gd

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,11 @@ func create_component(classname: String, name: String = "") -> Promise:
184184
return Client.send_command("engine", "create_component", [classname, name])
185185

186186

187+
## Duplicates a component
188+
func duplicate_component(p_component: EngineComponent) -> Promise:
189+
return Client.send_command("engine", "duplicate_component", [p_component])
190+
191+
187192
## Server: Adds a component to the engine
188193
func add_component(component: EngineComponent) -> void: Client.send_command("engine", "add_component", [component])
189194

panels/Functions/Functions.gd

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ class_name UIFunctions extends UIPanel
88
## The Delete button
99
@export var _delete_button: Button
1010

11+
## The Duplicate Button
12+
@export var _duplicate_button: Button
13+
1114
## The ComponentList
1215
@export var _component_list: ComponentList
1316

@@ -22,6 +25,15 @@ func _on_delete_pressed() -> void:
2225
Interface.confirm_and_delete_component(_component_list.get_selected())
2326

2427

28+
## Called when the Duplicate button is pressed
29+
func _on_duplicate_pressed() -> void:
30+
Core.duplicate_component(_component_list.get_selected()).then(func (component: EngineComponent):
31+
if component:
32+
Interface.show_name_prompt(component)
33+
)
34+
35+
2536
## Called when an item is selected
2637
func _on_component_list_selected(component: EngineComponent) -> void:
2738
_delete_button.disabled = component == null
39+
_duplicate_button.disabled = component == null

panels/Functions/Functions.tscn

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
[gd_scene load_steps=10 format=3 uid="uid://cedqo06n6en8u"]
1+
[gd_scene load_steps=11 format=3 uid="uid://cedqo06n6en8u"]
22

33
[ext_resource type="StyleBox" uid="uid://daxhx5qr5qdeu" path="res://assets/styles/SolidPanel.tres" id="1_es5ky"]
44
[ext_resource type="Script" uid="uid://byqpqgm3d03aq" path="res://panels/Functions/Functions.gd" id="2_bfwkh"]
55
[ext_resource type="PackedScene" uid="uid://dr0kfolsg46yu" path="res://components/PanelMenuBar.tscn" id="3_rou2v"]
66
[ext_resource type="PackedScene" uid="uid://c4vlxpk3ywg42" path="res://components/ComponentList/ComponentList.tscn" id="4_bosbs"]
7+
[ext_resource type="Texture2D" uid="uid://cuvwwbojtcpg6" path="res://assets/icons/Duplicate.svg" id="4_fsh4n"]
78
[ext_resource type="Texture2D" uid="uid://bbennjke0ioen" path="res://assets/icons/Add.svg" id="5_7afv4"]
89
[ext_resource type="PackedScene" uid="uid://nqgh8nmma3kj" path="res://components/ComponentSettings/ComponentSettings.tscn" id="5_re3nl"]
910
[ext_resource type="Texture2D" uid="uid://dfrrs2dnvlvsu" path="res://assets/icons/Delete.svg" id="6_fsh4n"]
@@ -17,7 +18,7 @@ unicode = 79
1718
[sub_resource type="Shortcut" id="Shortcut_fsh4n"]
1819
events = [SubResource("InputEventKey_7afv4")]
1920

20-
[node name="Functions" type="PanelContainer" node_paths=PackedStringArray("_delete_button", "_component_list", "edit_controls")]
21+
[node name="Functions" type="PanelContainer" node_paths=PackedStringArray("_delete_button", "_duplicate_button", "_component_list", "edit_controls")]
2122
anchors_preset = 15
2223
anchor_right = 1.0
2324
anchor_bottom = 1.0
@@ -26,6 +27,7 @@ grow_vertical = 2
2627
theme_override_styles/panel = ExtResource("1_es5ky")
2728
script = ExtResource("2_bfwkh")
2829
_delete_button = NodePath("VBoxContainer/HBoxContainer/VBoxContainer/PanelContainer/HBoxContainer/Delete")
30+
_duplicate_button = NodePath("VBoxContainer/PanelMenuBar/HBoxContainer/ScrollContainer/PanelContainer/HBoxContainer/Duplicate")
2931
_component_list = NodePath("VBoxContainer/HBoxContainer/VBoxContainer/ComponentList")
3032
edit_controls = NodePath("VBoxContainer/PanelMenuBar/HBoxContainer/EditControls")
3133

@@ -35,6 +37,18 @@ layout_mode = 2
3537
[node name="PanelMenuBar" parent="VBoxContainer" instance=ExtResource("3_rou2v")]
3638
layout_mode = 2
3739

40+
[node name="PanelContainer" type="PanelContainer" parent="VBoxContainer/PanelMenuBar/HBoxContainer/ScrollContainer" index="0"]
41+
layout_mode = 2
42+
size_flags_vertical = 3
43+
44+
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/PanelMenuBar/HBoxContainer/ScrollContainer/PanelContainer"]
45+
layout_mode = 2
46+
47+
[node name="Duplicate" type="Button" parent="VBoxContainer/PanelMenuBar/HBoxContainer/ScrollContainer/PanelContainer/HBoxContainer"]
48+
layout_mode = 2
49+
disabled = true
50+
icon = ExtResource("4_fsh4n")
51+
3852
[node name="HBoxContainer" type="HSplitContainer" parent="VBoxContainer"]
3953
layout_mode = 2
4054
size_flags_vertical = 3
@@ -76,6 +90,7 @@ icon = ExtResource("6_fsh4n")
7690
layout_mode = 2
7791
size_flags_horizontal = 3
7892

93+
[connection signal="pressed" from="VBoxContainer/PanelMenuBar/HBoxContainer/ScrollContainer/PanelContainer/HBoxContainer/Duplicate" to="." method="_on_duplicate_pressed"]
7994
[connection signal="selected" from="VBoxContainer/HBoxContainer/VBoxContainer/ComponentList" to="." method="_on_component_list_selected"]
8095
[connection signal="selected" from="VBoxContainer/HBoxContainer/VBoxContainer/ComponentList" to="VBoxContainer/HBoxContainer/ComponentSettings" method="set_component"]
8196
[connection signal="pressed" from="VBoxContainer/HBoxContainer/VBoxContainer/PanelContainer/HBoxContainer/Create" to="." method="_on_create_pressed"]

0 commit comments

Comments
 (0)