From 5824d2a0eb9fa4906aa516f1ce8a0ccc1aca8ae4 Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas Date: Fri, 2 Feb 2024 02:59:07 +0200 Subject: [PATCH] Choose which layout to copy from when adding a new layout --- Translations/Translations.pot | 8 +++- src/UI/Dialogs/ManageLayouts.gd | 77 ++++++++++++++++++------------- src/UI/Dialogs/ManageLayouts.tscn | 50 +++++++++++++------- 3 files changed, 86 insertions(+), 49 deletions(-) diff --git a/Translations/Translations.pot b/Translations/Translations.pot index f7eacf798..1a3f235b3 100644 --- a/Translations/Translations.pot +++ b/Translations/Translations.pot @@ -289,7 +289,13 @@ msgstr "" msgid "Add Layout" msgstr "" -msgid "Edit Layout" +msgid "Copy from" +msgstr "" + +msgid "Rename" +msgstr "" + +msgid "Rename Layout" msgstr "" msgid "Are you sure you want to delete this layout?" diff --git a/src/UI/Dialogs/ManageLayouts.gd b/src/UI/Dialogs/ManageLayouts.gd index 90d60a4ed..8179246d5 100644 --- a/src/UI/Dialogs/ManageLayouts.gd +++ b/src/UI/Dialogs/ManageLayouts.gd @@ -3,13 +3,20 @@ extends AcceptDialog var layout_selected := -1 var is_editing := false -@onready var layout_list: ItemList = find_child("SavedLayouts") -@onready var edit_layout: Button = find_child("EditLayout") -@onready var delete_layout: Button = find_child("DeleteLayout") -@onready var layout_settings: ConfirmationDialog = $LayoutSettings -@onready var layout_name: LineEdit = $LayoutSettings/LayoutName -@onready var delete_confirmation: ConfirmationDialog = $DeleteConfirmation -@onready var mimic_ui = find_child("LayoutPreview") +@onready var layout_list := %SavedLayouts as ItemList +@onready var rename_layout := %RenameLayout as Button +@onready var delete_layout := %DeleteLayout as Button +@onready var layout_settings := $LayoutSettings as ConfirmationDialog +@onready var layout_name := %LayoutName as LineEdit +@onready var layout_from := %LayoutFrom as OptionButton +@onready var delete_confirmation := $DeleteConfirmation as ConfirmationDialog +@onready var mimic_ui := %LayoutPreview as DockableContainer + + +func _ready() -> void: + # Fill the copy layout from option button with the default layouts + for layout in Global.default_layouts: + layout_from.add_item(layout.resource_path.get_basename().get_file()) func _on_ManageLayouts_about_to_show() -> void: @@ -33,13 +40,13 @@ func _on_SavedLayouts_item_activated(index: int) -> void: func _on_SavedLayouts_item_selected(index: int) -> void: layout_selected = index - edit_layout.disabled = false + rename_layout.disabled = false delete_layout.disabled = false refresh_preview() func _on_SavedLayouts_empty_clicked(_position: Vector2, _button_index: int) -> void: - edit_layout.disabled = true + rename_layout.disabled = true delete_layout.disabled = true @@ -47,13 +54,15 @@ func _on_AddLayout_pressed() -> void: is_editing = false layout_name.text = "New Layout" layout_settings.title = "Add Layout" + layout_from.get_parent().visible = true layout_settings.popup_centered() -func _on_EditLayout_pressed() -> void: +func _on_rename_layout_pressed() -> void: is_editing = true layout_name.text = layout_list.get_item_text(layout_selected) - layout_settings.title = "Edit Layout" + layout_settings.title = "Rename Layout" + layout_from.get_parent().visible = false layout_settings.popup_centered() @@ -64,31 +73,35 @@ func _on_DeleteLayout_pressed() -> void: func _on_LayoutSettings_confirmed() -> void: var file_name := layout_name.text + ".tres" var path := Global.LAYOUT_DIR.path_join(file_name) - var layout: DockableLayout = Global.control.main_ui.layout.clone() + var layout: DockableLayout + if layout_from.selected == 0: + layout = Global.control.main_ui.layout.clone() + else: + layout = Global.default_layouts[layout_from.selected - 1].clone() layout.resource_name = layout_name.text layout.resource_path = path var err := ResourceSaver.save(layout, path) if err != OK: print(err) + return + if is_editing: + var old_file_name: String = layout_list.get_item_text(layout_selected) + ".tres" + if old_file_name != file_name: + delete_layout_file(old_file_name) + Global.layouts[layout_selected] = layout + layout_list.set_item_text(layout_selected, layout_name.text) + Global.top_menu_container.layouts_submenu.set_item_text( + layout_selected + 1, layout_name.text + ) else: - if is_editing: - var old_file_name: String = layout_list.get_item_text(layout_selected) + ".tres" - if old_file_name != file_name: - delete_layout_file(old_file_name) - Global.layouts[layout_selected] = layout - layout_list.set_item_text(layout_selected, layout_name.text) - Global.top_menu_container.layouts_submenu.set_item_text( - layout_selected + 1, layout_name.text - ) - else: - Global.layouts.append(layout) - # Save the layout every time it changes - layout.save_on_change = true - Global.control.main_ui.layout = layout - layout_list.add_item(layout_name.text) - Global.top_menu_container.populate_layouts_submenu() - var n: int = Global.top_menu_container.layouts_submenu.get_item_count() - Global.top_menu_container.layouts_submenu.set_item_checked(n - 1, true) + Global.layouts.append(layout) + # Save the layout every time it changes + layout.save_on_change = true + Global.control.main_ui.layout = layout + layout_list.add_item(layout_name.text) + Global.top_menu_container.populate_layouts_submenu() + var n: int = Global.top_menu_container.layouts_submenu.get_item_count() + Global.top_menu_container.layouts_submenu.set_item_checked(n - 1, true) func delete_layout_file(file_name: String) -> void: @@ -104,12 +117,12 @@ func _on_DeleteConfirmation_confirmed() -> void: layout_list.remove_item(layout_selected) Global.top_menu_container.populate_layouts_submenu() layout_selected = -1 - edit_layout.disabled = true + rename_layout.disabled = true delete_layout.disabled = true refresh_preview() -func refresh_preview(): +func refresh_preview() -> void: for tab in mimic_ui.get_tabs(): mimic_ui.remove_child(tab) for item in Global.control.main_ui.get_tabs(): diff --git a/src/UI/Dialogs/ManageLayouts.tscn b/src/UI/Dialogs/ManageLayouts.tscn index 1cc05e5fc..0765cc07c 100644 --- a/src/UI/Dialogs/ManageLayouts.tscn +++ b/src/UI/Dialogs/ManageLayouts.tscn @@ -20,6 +20,7 @@ save_on_change = false [node name="ManageLayouts" type="AcceptDialog"] title = "Manage Layouts" +size = Vector2i(500, 500) exclusive = false popup_window = true script = ExtResource("1") @@ -31,7 +32,7 @@ anchor_bottom = 1.0 offset_left = 8.0 offset_top = 8.0 offset_right = -8.0 -offset_bottom = -36.0 +offset_bottom = -49.0 [node name="PreviewHeader" type="HBoxContainer" parent="VBoxContainer"] layout_mode = 2 @@ -55,6 +56,7 @@ layout_mode = 2 size_flags_vertical = 3 [node name="LayoutPreview" type="Container" parent="VBoxContainer/PreviewContainer"] +unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 @@ -80,6 +82,7 @@ layout_mode = 2 text = "Double click to set as new startup layout" [node name="SavedLayouts" type="ItemList" parent="VBoxContainer"] +unique_name_in_owner = true custom_minimum_size = Vector2(0, 100) layout_mode = 2 @@ -88,38 +91,53 @@ layout_mode = 2 [node name="AddLayout" type="Button" parent="VBoxContainer/ButtonsContainer"] layout_mode = 2 -size_flags_horizontal = 0 +size_flags_horizontal = 3 mouse_default_cursor_shape = 2 text = "Add" -[node name="EditLayout" type="Button" parent="VBoxContainer/ButtonsContainer"] +[node name="RenameLayout" type="Button" parent="VBoxContainer/ButtonsContainer"] +unique_name_in_owner = true layout_mode = 2 -size_flags_horizontal = 0 +size_flags_horizontal = 3 mouse_default_cursor_shape = 2 disabled = true -text = "Edit" +text = "Rename" [node name="DeleteLayout" type="Button" parent="VBoxContainer/ButtonsContainer"] +unique_name_in_owner = true layout_mode = 2 -size_flags_horizontal = 0 +size_flags_horizontal = 3 mouse_default_cursor_shape = 2 disabled = true text = "Delete" [node name="LayoutSettings" type="ConfirmationDialog" parent="."] -[node name="LayoutName" type="LineEdit" parent="LayoutSettings"] -anchors_preset = 14 -anchor_top = 0.5 -anchor_right = 1.0 -anchor_bottom = 0.5 -offset_left = 8.0 -offset_top = -26.0 -offset_right = -8.0 -offset_bottom = -2.0 +[node name="VBoxContainer" type="VBoxContainer" parent="LayoutSettings"] +offset_right = 40.0 +offset_bottom = 40.0 + +[node name="LayoutName" type="LineEdit" parent="LayoutSettings/VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 size_flags_horizontal = 3 placeholder_text = "Insert name" +[node name="HBoxContainer" type="HBoxContainer" parent="LayoutSettings/VBoxContainer"] +layout_mode = 2 + +[node name="LayoutFromLabel" type="Label" parent="LayoutSettings/VBoxContainer/HBoxContainer"] +layout_mode = 2 +text = "Copy from" + +[node name="LayoutFrom" type="OptionButton" parent="LayoutSettings/VBoxContainer/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +item_count = 1 +selected = 0 +popup/item_0/text = "Current layout" +popup/item_0/id = 0 + [node name="DeleteConfirmation" type="ConfirmationDialog" parent="."] dialog_text = "Are you sure you want to delete this layout?" @@ -129,7 +147,7 @@ dialog_text = "Are you sure you want to delete this layout?" [connection signal="item_activated" from="VBoxContainer/SavedLayouts" to="." method="_on_SavedLayouts_item_activated"] [connection signal="item_selected" from="VBoxContainer/SavedLayouts" to="." method="_on_SavedLayouts_item_selected"] [connection signal="pressed" from="VBoxContainer/ButtonsContainer/AddLayout" to="." method="_on_AddLayout_pressed"] -[connection signal="pressed" from="VBoxContainer/ButtonsContainer/EditLayout" to="." method="_on_EditLayout_pressed"] +[connection signal="pressed" from="VBoxContainer/ButtonsContainer/RenameLayout" to="." method="_on_rename_layout_pressed"] [connection signal="pressed" from="VBoxContainer/ButtonsContainer/DeleteLayout" to="." method="_on_DeleteLayout_pressed"] [connection signal="confirmed" from="LayoutSettings" to="." method="_on_LayoutSettings_confirmed"] [connection signal="confirmed" from="DeleteConfirmation" to="." method="_on_DeleteConfirmation_confirmed"]