mirror of
https://github.com/Orama-Interactive/Pixelorama.git
synced 2025-03-04 02:23:15 +00:00
Add a Reset layout option for the default layouts in the layouts menu
Easy and user friendly way to reset default layouts, similar to Photoshop. This only works for default layouts, currently Default and Tallscreen.
This commit is contained in:
parent
96d0efe3ba
commit
b3ae706383
8 changed files with 51 additions and 11 deletions
|
@ -311,9 +311,14 @@ msgstr ""
|
||||||
msgid "Masking:"
|
msgid "Masking:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#. Verb, resets something.
|
||||||
msgid "Reset"
|
msgid "Reset"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#. Verb, resets something.
|
||||||
|
msgid "Reset %s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Use Current Frame"
|
msgid "Use Current Frame"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ Files extracted from source:
|
||||||
## godot-dockable-container
|
## godot-dockable-container
|
||||||
|
|
||||||
- Upstream: https://github.com/gilzoide/godot-dockable-container
|
- Upstream: https://github.com/gilzoide/godot-dockable-container
|
||||||
- Version: Based on [e852cbeeb3f06f62c559898b4cf5756858367766](https://github.com/OverloadedOrama/godot-dockable-container/commit/e852cbeeb3f06f62c559898b4cf5756858367766), but with changes in layout.gd that add a `save_on_change` variable and a `save()` method.
|
- Version: Based on [e852cbeeb3f06f62c559898b4cf5756858367766](https://github.com/OverloadedOrama/godot-dockable-container/commit/e852cbeeb3f06f62c559898b4cf5756858367766), but with changes in layout.gd that add a `save_on_change` and `layout_reset_path` variables, and a `save()`, `copy_from()` and `reset()` methods.
|
||||||
- License: [CC0-1.0](https://github.com/gilzoide/godot-dockable-container/blob/main/LICENSE)
|
- License: [CC0-1.0](https://github.com/gilzoide/godot-dockable-container/blob/main/LICENSE)
|
||||||
|
|
||||||
## SmartSlicer
|
## SmartSlicer
|
||||||
|
|
|
@ -41,6 +41,8 @@ enum { MARGIN_LEFT, MARGIN_RIGHT, MARGIN_TOP, MARGIN_BOTTOM, MARGIN_CENTER }
|
||||||
if changed.is_connected(save):
|
if changed.is_connected(save):
|
||||||
changed.disconnect(save)
|
changed.disconnect(save)
|
||||||
|
|
||||||
|
## A path to a layout that this layout can be reset to.
|
||||||
|
@export var layout_reset_path := ""
|
||||||
var _changed_signal_queued := false
|
var _changed_signal_queued := false
|
||||||
var _first_leaf: DockableLayoutPanel
|
var _first_leaf: DockableLayoutPanel
|
||||||
var _hidden_tabs: Dictionary
|
var _hidden_tabs: Dictionary
|
||||||
|
@ -76,6 +78,20 @@ func clone() -> DockableLayout:
|
||||||
return duplicate(true)
|
return duplicate(true)
|
||||||
|
|
||||||
|
|
||||||
|
func copy_from(other_layout: DockableLayout) -> void:
|
||||||
|
root = other_layout.root
|
||||||
|
hidden_tabs = other_layout.hidden_tabs
|
||||||
|
windows = other_layout.windows
|
||||||
|
changed.emit()
|
||||||
|
|
||||||
|
|
||||||
|
func reset() -> void:
|
||||||
|
if not layout_reset_path.is_empty():
|
||||||
|
var layout_to_reset := load(layout_reset_path)
|
||||||
|
if is_instance_valid(layout_to_reset) and layout_to_reset is DockableLayout:
|
||||||
|
copy_from(layout_to_reset.clone())
|
||||||
|
|
||||||
|
|
||||||
func get_names() -> PackedStringArray:
|
func get_names() -> PackedStringArray:
|
||||||
return _root.get_names()
|
return _root.get_names()
|
||||||
|
|
||||||
|
|
|
@ -192,3 +192,4 @@ hidden_tabs = {
|
||||||
}
|
}
|
||||||
windows = {}
|
windows = {}
|
||||||
save_on_change = false
|
save_on_change = false
|
||||||
|
layout_reset_path = ""
|
||||||
|
|
|
@ -162,3 +162,4 @@ hidden_tabs = {
|
||||||
}
|
}
|
||||||
windows = {}
|
windows = {}
|
||||||
save_on_change = false
|
save_on_change = false
|
||||||
|
layout_reset_path = ""
|
||||||
|
|
|
@ -236,11 +236,18 @@ func _handle_layout_files() -> void:
|
||||||
if files.size() == 0:
|
if files.size() == 0:
|
||||||
for layout in Global.default_layouts:
|
for layout in Global.default_layouts:
|
||||||
var file_name := layout.resource_path.get_basename().get_file() + ".tres"
|
var file_name := layout.resource_path.get_basename().get_file() + ".tres"
|
||||||
ResourceSaver.save(layout, Global.LAYOUT_DIR.path_join(file_name))
|
var new_layout := layout.clone()
|
||||||
|
new_layout.layout_reset_path = layout.resource_path
|
||||||
|
ResourceSaver.save(new_layout, Global.LAYOUT_DIR.path_join(file_name))
|
||||||
files = dir.get_files()
|
files = dir.get_files()
|
||||||
for file in files:
|
for file in files:
|
||||||
var layout := ResourceLoader.load(Global.LAYOUT_DIR.path_join(file))
|
var layout := ResourceLoader.load(Global.LAYOUT_DIR.path_join(file))
|
||||||
if layout is DockableLayout:
|
if layout is DockableLayout:
|
||||||
|
if layout.layout_reset_path.is_empty():
|
||||||
|
if file == "Default.tres":
|
||||||
|
layout.layout_reset_path = Global.default_layouts[0].resource_path
|
||||||
|
elif file == "Tallscreen.tres":
|
||||||
|
layout.layout_reset_path = Global.default_layouts[1].resource_path
|
||||||
Global.layouts.append(layout)
|
Global.layouts.append(layout)
|
||||||
# Save the layout every time it changes
|
# Save the layout every time it changes
|
||||||
layout.save_on_change = true
|
layout.save_on_change = true
|
||||||
|
|
|
@ -18,6 +18,7 @@ root = SubResource("1")
|
||||||
hidden_tabs = {}
|
hidden_tabs = {}
|
||||||
windows = {}
|
windows = {}
|
||||||
save_on_change = false
|
save_on_change = false
|
||||||
|
layout_reset_path = ""
|
||||||
|
|
||||||
[node name="ManageLayouts" type="AcceptDialog"]
|
[node name="ManageLayouts" type="AcceptDialog"]
|
||||||
title = "Manage Layouts"
|
title = "Manage Layouts"
|
||||||
|
|
|
@ -398,13 +398,12 @@ func _setup_panels_submenu(item: String) -> void:
|
||||||
|
|
||||||
|
|
||||||
func _setup_layouts_submenu(item: String) -> void:
|
func _setup_layouts_submenu(item: String) -> void:
|
||||||
layouts_submenu.set_name("layouts_submenu")
|
|
||||||
layouts_submenu.hide_on_checkable_item_selection = false
|
layouts_submenu.hide_on_checkable_item_selection = false
|
||||||
populate_layouts_submenu()
|
populate_layouts_submenu()
|
||||||
|
|
||||||
layouts_submenu.id_pressed.connect(_layouts_submenu_id_pressed)
|
layouts_submenu.id_pressed.connect(_layouts_submenu_id_pressed)
|
||||||
window_menu.add_child(layouts_submenu)
|
window_menu.add_child(layouts_submenu)
|
||||||
window_menu.add_submenu_item(item, layouts_submenu.get_name())
|
window_menu.add_submenu_node_item(item, layouts_submenu)
|
||||||
|
|
||||||
var saved_layout: int = Global.config_cache.get_value("window", "layout", 0)
|
var saved_layout: int = Global.config_cache.get_value("window", "layout", 0)
|
||||||
set_layout(saved_layout)
|
set_layout(saved_layout)
|
||||||
|
@ -412,10 +411,12 @@ func _setup_layouts_submenu(item: String) -> void:
|
||||||
|
|
||||||
func populate_layouts_submenu() -> void:
|
func populate_layouts_submenu() -> void:
|
||||||
layouts_submenu.clear() # Does not do anything if it's called for the first time
|
layouts_submenu.clear() # Does not do anything if it's called for the first time
|
||||||
layouts_submenu.add_item("Manage Layouts", 0)
|
|
||||||
for layout in Global.layouts:
|
for layout in Global.layouts:
|
||||||
var layout_name := layout.resource_path.get_basename().get_file()
|
var layout_name := layout.resource_path.get_basename().get_file()
|
||||||
layouts_submenu.add_radio_check_item(layout_name)
|
layouts_submenu.add_radio_check_item(layout_name)
|
||||||
|
layouts_submenu.add_separator()
|
||||||
|
layouts_submenu.add_item("Manage Layouts")
|
||||||
|
layouts_submenu.add_item("Reset Default")
|
||||||
|
|
||||||
|
|
||||||
func _setup_image_menu() -> void:
|
func _setup_image_menu() -> void:
|
||||||
|
@ -847,10 +848,13 @@ func _panels_submenu_id_pressed(id: int) -> void:
|
||||||
|
|
||||||
|
|
||||||
func _layouts_submenu_id_pressed(id: int) -> void:
|
func _layouts_submenu_id_pressed(id: int) -> void:
|
||||||
if id == 0:
|
var layout_count := Global.layouts.size()
|
||||||
|
if id < layout_count:
|
||||||
|
set_layout(id)
|
||||||
|
elif id == layout_count + 1:
|
||||||
manage_layouts_dialog.popup()
|
manage_layouts_dialog.popup()
|
||||||
else:
|
elif id == layout_count + 2:
|
||||||
set_layout(id - 1)
|
Global.layouts[selected_layout].reset()
|
||||||
|
|
||||||
|
|
||||||
func set_layout(id: int) -> void:
|
func set_layout(id: int) -> void:
|
||||||
|
@ -859,10 +863,15 @@ func set_layout(id: int) -> void:
|
||||||
if id >= Global.layouts.size():
|
if id >= Global.layouts.size():
|
||||||
id = 0
|
id = 0
|
||||||
selected_layout = id
|
selected_layout = id
|
||||||
main_ui.layout = Global.layouts[id]
|
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 - 1, tr("Reset %s") % layout_name)
|
||||||
|
layouts_submenu.set_item_disabled(
|
||||||
|
layouts_submenu.item_count - 1, layout.layout_reset_path.is_empty()
|
||||||
|
)
|
||||||
for i in Global.layouts.size():
|
for i in Global.layouts.size():
|
||||||
var offset := i + 1
|
layouts_submenu.set_item_checked(i, i == id)
|
||||||
layouts_submenu.set_item_checked(offset, offset == (id + 1))
|
|
||||||
|
|
||||||
for i in ui_elements.size():
|
for i in ui_elements.size():
|
||||||
var index := panels_submenu.get_item_index(i)
|
var index := panels_submenu.get_item_index(i)
|
||||||
|
|
Loading…
Add table
Reference in a new issue