mirror of
https://github.com/Orama-Interactive/Pixelorama.git
synced 2025-02-07 19:09:50 +00:00
Remove the Manage Layouts dialog
Instead, add "Add Layout" and "Delete Layout" options in the layouts submenu. This makes layout management easier, more intuitive and quicker, as it now requires less clicks. This is similar to what Photoshop does with its Workspaces By removing the manage layouts dialog, we also got rid of duplicate code that already existed in TopMenuContainer, and it should be less bug-prone now.
This commit is contained in:
parent
b3ae706383
commit
7b96947066
|
@ -350,20 +350,16 @@ msgstr ""
|
|||
msgid "Preview"
|
||||
msgstr ""
|
||||
|
||||
#. Found in the manage layouts dialog
|
||||
msgid "This is a preview, changing this won't change the layout"
|
||||
msgstr ""
|
||||
|
||||
#. Found in the manage layouts dialog
|
||||
msgid "Double click to set as new startup layout"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add Layout"
|
||||
msgstr ""
|
||||
|
||||
#. Verb, deletes something.
|
||||
msgid "Delete %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy from"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -1,140 +0,0 @@
|
|||
extends AcceptDialog
|
||||
|
||||
var layout_selected := -1
|
||||
var is_editing := false
|
||||
|
||||
@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:
|
||||
for layout in Global.layouts:
|
||||
layout_list.add_item(layout.resource_path.get_basename().get_file())
|
||||
refresh_preview()
|
||||
if layout_selected != -1:
|
||||
layout_list.select(layout_selected)
|
||||
|
||||
|
||||
func _on_ManageLayouts_visibility_changed() -> void:
|
||||
if visible:
|
||||
return
|
||||
layout_list.clear()
|
||||
Global.dialog_open(false)
|
||||
|
||||
|
||||
func _on_SavedLayouts_item_activated(index: int) -> void:
|
||||
Global.top_menu_container.set_layout(index)
|
||||
|
||||
|
||||
func _on_SavedLayouts_item_selected(index: int) -> void:
|
||||
layout_selected = index
|
||||
rename_layout.disabled = false
|
||||
delete_layout.disabled = false
|
||||
refresh_preview()
|
||||
|
||||
|
||||
func _on_SavedLayouts_empty_clicked(_position: Vector2, _button_index: int) -> void:
|
||||
rename_layout.disabled = true
|
||||
delete_layout.disabled = true
|
||||
|
||||
|
||||
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_rename_layout_pressed() -> void:
|
||||
is_editing = true
|
||||
layout_name.text = layout_list.get_item_text(layout_selected)
|
||||
layout_settings.title = "Rename Layout"
|
||||
layout_from.get_parent().visible = false
|
||||
layout_settings.popup_centered()
|
||||
|
||||
|
||||
func _on_DeleteLayout_pressed() -> void:
|
||||
delete_confirmation.popup_centered()
|
||||
|
||||
|
||||
func _on_LayoutSettings_confirmed() -> void:
|
||||
var file_name := layout_name.text + ".tres"
|
||||
var path := Global.LAYOUT_DIR.path_join(file_name)
|
||||
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)
|
||||
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.layouts.sort_custom(
|
||||
func(a: DockableLayout, b: DockableLayout):
|
||||
return a.resource_path.get_file() < b.resource_path.get_file()
|
||||
)
|
||||
var layout_index := Global.layouts.find(layout)
|
||||
Global.top_menu_container.populate_layouts_submenu()
|
||||
Global.top_menu_container.layouts_submenu.set_item_checked(layout_index + 1, true)
|
||||
|
||||
|
||||
func delete_layout_file(file_name: String) -> void:
|
||||
var dir := DirAccess.open(Global.LAYOUT_DIR)
|
||||
if not is_instance_valid(dir):
|
||||
return
|
||||
dir.remove(Global.LAYOUT_DIR.path_join(file_name))
|
||||
|
||||
|
||||
func _on_DeleteConfirmation_confirmed() -> void:
|
||||
delete_layout_file(layout_list.get_item_text(layout_selected) + ".tres")
|
||||
Global.layouts.remove_at(layout_selected)
|
||||
layout_list.remove_item(layout_selected)
|
||||
Global.top_menu_container.populate_layouts_submenu()
|
||||
layout_selected = -1
|
||||
rename_layout.disabled = true
|
||||
delete_layout.disabled = true
|
||||
refresh_preview()
|
||||
|
||||
|
||||
func refresh_preview() -> void:
|
||||
for tab in mimic_ui.get_tabs():
|
||||
mimic_ui.remove_child(tab)
|
||||
tab.queue_free()
|
||||
for item in Global.control.main_ui.get_tabs():
|
||||
var box := TextEdit.new()
|
||||
box.name = item.name
|
||||
box.text = item.name
|
||||
box.editable = false
|
||||
mimic_ui.add_child(box)
|
||||
if layout_selected == -1:
|
||||
mimic_ui.visible = false
|
||||
return
|
||||
mimic_ui.visible = true
|
||||
mimic_ui.set_layout(Global.layouts[layout_selected].clone())
|
|
@ -1,154 +0,0 @@
|
|||
[gd_scene load_steps=7 format=3 uid="uid://d1phd84dk4t5e"]
|
||||
|
||||
[ext_resource type="Script" path="res://src/UI/Dialogs/ManageLayouts.gd" id="1"]
|
||||
[ext_resource type="Script" path="res://addons/dockable_container/layout_panel.gd" id="2"]
|
||||
[ext_resource type="Script" path="res://addons/dockable_container/layout.gd" id="3"]
|
||||
[ext_resource type="Script" path="res://addons/dockable_container/dockable_container.gd" id="4"]
|
||||
|
||||
[sub_resource type="Resource" id="1"]
|
||||
resource_name = "Tabs"
|
||||
script = ExtResource("2")
|
||||
names = PackedStringArray()
|
||||
current_tab = -1
|
||||
|
||||
[sub_resource type="Resource" id="2"]
|
||||
resource_name = "Layout"
|
||||
script = ExtResource("3")
|
||||
root = SubResource("1")
|
||||
hidden_tabs = {}
|
||||
windows = {}
|
||||
save_on_change = false
|
||||
layout_reset_path = ""
|
||||
|
||||
[node name="ManageLayouts" type="AcceptDialog"]
|
||||
title = "Manage Layouts"
|
||||
size = Vector2i(500, 500)
|
||||
script = ExtResource("1")
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="."]
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = 8.0
|
||||
offset_top = 8.0
|
||||
offset_right = -8.0
|
||||
offset_bottom = -49.0
|
||||
|
||||
[node name="PreviewHeader" type="HBoxContainer" parent="VBoxContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 0
|
||||
|
||||
[node name="Label" type="Label" parent="VBoxContainer/PreviewHeader"]
|
||||
layout_mode = 2
|
||||
theme_type_variation = &"HeaderSmall"
|
||||
text = "Preview"
|
||||
|
||||
[node name="HSeparator" type="HSeparator" parent="VBoxContainer/PreviewHeader"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="PreviewInstruction" type="Label" parent="VBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "This is a preview, changing this won't change the layout"
|
||||
|
||||
[node name="PreviewContainer" type="ScrollContainer" parent="VBoxContainer"]
|
||||
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
|
||||
script = ExtResource("4")
|
||||
tabs_visible = false
|
||||
layout = SubResource("2")
|
||||
|
||||
[node name="LayoutsHeader" type="HBoxContainer" parent="VBoxContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 0
|
||||
|
||||
[node name="Label" type="Label" parent="VBoxContainer/LayoutsHeader"]
|
||||
layout_mode = 2
|
||||
theme_type_variation = &"HeaderSmall"
|
||||
text = "Layouts"
|
||||
|
||||
[node name="HSeparator" type="HSeparator" parent="VBoxContainer/LayoutsHeader"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="LayoutInstruction" type="Label" parent="VBoxContainer"]
|
||||
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
|
||||
|
||||
[node name="ButtonsContainer" type="HBoxContainer" parent="VBoxContainer"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="AddLayout" type="Button" parent="VBoxContainer/ButtonsContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
mouse_default_cursor_shape = 2
|
||||
text = "Add"
|
||||
|
||||
[node name="RenameLayout" type="Button" parent="VBoxContainer/ButtonsContainer"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
mouse_default_cursor_shape = 2
|
||||
disabled = true
|
||||
text = "Rename"
|
||||
|
||||
[node name="DeleteLayout" type="Button" parent="VBoxContainer/ButtonsContainer"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
mouse_default_cursor_shape = 2
|
||||
disabled = true
|
||||
text = "Delete"
|
||||
|
||||
[node name="LayoutSettings" type="ConfirmationDialog" parent="."]
|
||||
always_on_top = true
|
||||
|
||||
[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
|
||||
selected = 0
|
||||
item_count = 1
|
||||
popup/item_0/text = "Current layout"
|
||||
|
||||
[node name="DeleteConfirmation" type="ConfirmationDialog" parent="."]
|
||||
always_on_top = true
|
||||
dialog_text = "Are you sure you want to delete this layout?"
|
||||
|
||||
[connection signal="about_to_popup" from="." to="." method="_on_ManageLayouts_about_to_show"]
|
||||
[connection signal="visibility_changed" from="." to="." method="_on_ManageLayouts_visibility_changed"]
|
||||
[connection signal="empty_clicked" from="VBoxContainer/SavedLayouts" to="." method="_on_SavedLayouts_empty_clicked"]
|
||||
[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/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"]
|
|
@ -53,7 +53,6 @@ var palettize_dialog := Dialog.new("res://src/UI/Dialogs/ImageEffects/PalettizeD
|
|||
var pixelize_dialog := Dialog.new("res://src/UI/Dialogs/ImageEffects/PixelizeDialog.tscn")
|
||||
var posterize_dialog := Dialog.new("res://src/UI/Dialogs/ImageEffects/Posterize.tscn")
|
||||
var loaded_effect_dialogs: Array[Dialog] = []
|
||||
var manage_layouts_dialog := Dialog.new("res://src/UI/Dialogs/ManageLayouts.tscn")
|
||||
var window_opacity_dialog := Dialog.new("res://src/UI/Dialogs/WindowOpacityDialog.tscn")
|
||||
var about_dialog := Dialog.new("res://src/UI/Dialogs/AboutDialog.tscn")
|
||||
|
||||
|
@ -67,6 +66,10 @@ var about_dialog := Dialog.new("res://src/UI/Dialogs/AboutDialog.tscn")
|
|||
@onready var view_menu := $MarginContainer/HBoxContainer/MenuBar/View as PopupMenu
|
||||
@onready var window_menu := $MarginContainer/HBoxContainer/MenuBar/Window as PopupMenu
|
||||
@onready var help_menu := $MarginContainer/HBoxContainer/MenuBar/Help as PopupMenu
|
||||
@onready var add_layout_confirmation := $AddLayoutConfirmation as ConfirmationDialog
|
||||
@onready var delete_layout_confirmation := $DeleteLayoutConfirmation as ConfirmationDialog
|
||||
@onready var layout_name_line_edit := %LayoutName as LineEdit
|
||||
@onready var layout_from_option_button := %LayoutFrom as OptionButton
|
||||
|
||||
@onready var greyscale_vision: ColorRect = main_ui.find_child("GreyscaleVision")
|
||||
@onready var current_frame_mark := %CurrentFrameMark as Label
|
||||
|
@ -110,6 +113,9 @@ func _ready() -> void:
|
|||
_setup_effects_menu()
|
||||
_setup_select_menu()
|
||||
_setup_help_menu()
|
||||
# Fill the copy layout from option button with the default layouts
|
||||
for layout in Global.default_layouts:
|
||||
layout_from_option_button.add_item(layout.resource_path.get_basename().get_file())
|
||||
|
||||
|
||||
func _input(event: InputEvent) -> void:
|
||||
|
@ -415,8 +421,9 @@ func populate_layouts_submenu() -> void:
|
|||
var layout_name := layout.resource_path.get_basename().get_file()
|
||||
layouts_submenu.add_radio_check_item(layout_name)
|
||||
layouts_submenu.add_separator()
|
||||
layouts_submenu.add_item("Manage Layouts")
|
||||
layouts_submenu.add_item("Reset Default")
|
||||
layouts_submenu.add_item("Add Layout")
|
||||
layouts_submenu.add_item(tr("Delete %s") % "Default")
|
||||
layouts_submenu.add_item(tr("Reset %s") % "Default")
|
||||
|
||||
|
||||
func _setup_image_menu() -> void:
|
||||
|
@ -852,8 +859,11 @@ func _layouts_submenu_id_pressed(id: int) -> void:
|
|||
if id < layout_count:
|
||||
set_layout(id)
|
||||
elif id == layout_count + 1:
|
||||
manage_layouts_dialog.popup()
|
||||
layout_name_line_edit.text = "New layout"
|
||||
add_layout_confirmation.popup_centered()
|
||||
elif id == layout_count + 2:
|
||||
delete_layout_confirmation.popup_centered()
|
||||
elif id == layout_count + 3:
|
||||
Global.layouts[selected_layout].reset()
|
||||
|
||||
|
||||
|
@ -866,6 +876,7 @@ func set_layout(id: int) -> void:
|
|||
var layout := Global.layouts[id]
|
||||
main_ui.layout = layout
|
||||
var layout_name := layout.resource_path.get_basename().get_file()
|
||||
layouts_submenu.set_item_text(layouts_submenu.item_count - 2, tr("Delete %s") % layout_name)
|
||||
layouts_submenu.set_item_text(layouts_submenu.item_count - 1, tr("Reset %s") % layout_name)
|
||||
layouts_submenu.set_item_disabled(
|
||||
layouts_submenu.item_count - 1, layout.layout_reset_path.is_empty()
|
||||
|
@ -884,6 +895,59 @@ func set_layout(id: int) -> void:
|
|||
window_menu.set_item_checked(Global.WindowMenu.ZEN_MODE, false)
|
||||
|
||||
|
||||
func _on_add_layout_confirmation_confirmed() -> void:
|
||||
var file_name := layout_name_line_edit.text + ".tres"
|
||||
var path := Global.LAYOUT_DIR.path_join(file_name)
|
||||
var layout: DockableLayout
|
||||
if layout_from_option_button.selected == 0:
|
||||
layout = Global.control.main_ui.layout.clone()
|
||||
layout.layout_reset_path = ""
|
||||
else:
|
||||
layout = Global.default_layouts[layout_from_option_button.selected - 1].clone()
|
||||
layout.resource_name = layout_name_line_edit.text
|
||||
layout.resource_path = path
|
||||
var err := ResourceSaver.save(layout, path)
|
||||
if err != OK:
|
||||
print(err)
|
||||
return
|
||||
Global.layouts.append(layout)
|
||||
# Save the layout every time it changes
|
||||
layout.save_on_change = true
|
||||
Global.control.main_ui.layout = layout
|
||||
Global.layouts.sort_custom(
|
||||
func(a: DockableLayout, b: DockableLayout):
|
||||
return a.resource_path.get_file() < b.resource_path.get_file()
|
||||
)
|
||||
var layout_index := Global.layouts.find(layout)
|
||||
populate_layouts_submenu()
|
||||
set_layout(layout_index)
|
||||
|
||||
|
||||
func _on_delete_layout_confirmation_confirmed() -> void:
|
||||
if Global.layouts.size() <= 1: # Don't delete any layout if we only have one left.
|
||||
return
|
||||
var layout_name := Global.layouts[selected_layout].resource_path.get_basename().get_file()
|
||||
delete_layout_file(layout_name + ".tres")
|
||||
Global.layouts.remove_at(selected_layout)
|
||||
populate_layouts_submenu()
|
||||
set_layout(0)
|
||||
|
||||
|
||||
func delete_layout_file(file_name: String) -> void:
|
||||
var dir := DirAccess.open(Global.LAYOUT_DIR)
|
||||
if not is_instance_valid(dir):
|
||||
return
|
||||
dir.remove(Global.LAYOUT_DIR.path_join(file_name))
|
||||
|
||||
|
||||
func _on_add_layout_confirmation_visibility_changed() -> void:
|
||||
Global.dialog_open(add_layout_confirmation.visible)
|
||||
|
||||
|
||||
func _on_delete_layout_confirmation_visibility_changed() -> void:
|
||||
Global.dialog_open(delete_layout_confirmation.visible)
|
||||
|
||||
|
||||
func _toggle_greyscale_view() -> void:
|
||||
Global.greyscale_view = !Global.greyscale_view
|
||||
greyscale_vision.visible = Global.greyscale_view
|
||||
|
|
|
@ -109,3 +109,46 @@ unique_name_in_owner = true
|
|||
layout_mode = 2
|
||||
size_flags_vertical = 1
|
||||
text = "1/1"
|
||||
|
||||
[node name="AddLayoutConfirmation" type="ConfirmationDialog" parent="."]
|
||||
auto_translate_mode = 1
|
||||
title = "Add Layout"
|
||||
size = Vector2i(246, 123)
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="AddLayoutConfirmation"]
|
||||
offset_left = 8.0
|
||||
offset_top = 8.0
|
||||
offset_right = 238.0
|
||||
offset_bottom = 74.0
|
||||
|
||||
[node name="LayoutName" type="LineEdit" parent="AddLayoutConfirmation/VBoxContainer"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
placeholder_text = "Insert name"
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="AddLayoutConfirmation/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="LayoutFromLabel" type="Label" parent="AddLayoutConfirmation/VBoxContainer/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
text = "Copy from"
|
||||
|
||||
[node name="LayoutFrom" type="OptionButton" parent="AddLayoutConfirmation/VBoxContainer/HBoxContainer"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
selected = 0
|
||||
item_count = 1
|
||||
popup/item_0/text = "Current layout"
|
||||
|
||||
[node name="DeleteLayoutConfirmation" type="ConfirmationDialog" parent="."]
|
||||
auto_translate_mode = 1
|
||||
title = "Delete Layout"
|
||||
dialog_text = "Are you sure you want to delete this layout?"
|
||||
|
||||
[connection signal="confirmed" from="AddLayoutConfirmation" to="." method="_on_add_layout_confirmation_confirmed"]
|
||||
[connection signal="visibility_changed" from="AddLayoutConfirmation" to="." method="_on_add_layout_confirmation_visibility_changed"]
|
||||
[connection signal="confirmed" from="DeleteLayoutConfirmation" to="." method="_on_delete_layout_confirmation_confirmed"]
|
||||
[connection signal="visibility_changed" from="DeleteLayoutConfirmation" to="." method="_on_delete_layout_confirmation_visibility_changed"]
|
||||
|
|
Loading…
Reference in a new issue