1
0
Fork 0
mirror of https://github.com/Orama-Interactive/Pixelorama.git synced 2025-02-08 03:19:49 +00:00
Pixelorama/src/UI/Dialogs/ManageLayouts.gd

142 lines
4.2 KiB
GDScript

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())