Initial commit, layout mockup

This commit is contained in:
2025-02-15 22:57:49 +01:00
commit 21b101e2bb
70 changed files with 7646 additions and 0 deletions

View File

@@ -0,0 +1,22 @@
extends EditorInspectorPlugin
const LayoutEditorProperty := preload("layout_editor_property.gd")
func _can_handle(object: Object) -> bool:
return object is DockableContainer
func _parse_property(
_object: Object,
_type: Variant.Type,
name: String,
_hint: PropertyHint,
_hint_text: String,
_usage: int,
_wide: bool
) -> bool:
if name == "layout":
var editor_property := LayoutEditorProperty.new()
add_property_editor("layout", editor_property)
return false

View File

@@ -0,0 +1,71 @@
extends EditorProperty
var _container := DockableContainer.new()
var _hidden_menu_button := MenuButton.new()
var _hidden_menu_popup: PopupMenu
var _hidden_menu_list: PackedStringArray
func _ready() -> void:
custom_minimum_size = Vector2(128, 256)
_hidden_menu_button.text = "Visible nodes"
add_child(_hidden_menu_button)
_hidden_menu_popup = _hidden_menu_button.get_popup()
_hidden_menu_popup.hide_on_checkable_item_selection = false
_hidden_menu_popup.about_to_popup.connect(_on_hidden_menu_popup_about_to_show)
_hidden_menu_popup.id_pressed.connect(_on_hidden_menu_popup_id_pressed)
_container.clone_layout_on_ready = false
_container.custom_minimum_size = custom_minimum_size
var value := _get_layout().clone() # The layout gets reset when selecting it without clone
for n in value.get_names():
var child := _create_child_control(n)
_container.add_child(child)
_container.set(get_edited_property(), value)
add_child(_container)
set_bottom_editor(_container)
func _exit_tree() -> void: # Not sure if this is needed, but just to be sure
queue_free()
func _update_property() -> void:
var value := _get_layout()
_container.set(get_edited_property(), value)
func _get_layout() -> DockableLayout:
var original_container := get_edited_object() as DockableContainer
return original_container.get(get_edited_property())
func _create_child_control(named: String) -> Label:
var new_control := Label.new()
new_control.name = named
new_control.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
new_control.vertical_alignment = VERTICAL_ALIGNMENT_CENTER
new_control.clip_text = true
new_control.text = named
return new_control
func _on_hidden_menu_popup_about_to_show() -> void:
var layout := _get_layout().clone()
_hidden_menu_popup.clear()
_hidden_menu_list = layout.get_names()
for i in _hidden_menu_list.size():
var tab_name := _hidden_menu_list[i]
_hidden_menu_popup.add_check_item(tab_name, i)
_hidden_menu_popup.set_item_checked(i, not layout.is_tab_hidden(tab_name))
func _on_hidden_menu_popup_id_pressed(id: int) -> void:
var layout := _get_layout().clone()
var tab_name := _hidden_menu_list[id]
var new_hidden := not layout.is_tab_hidden(tab_name)
_get_layout().set_tab_hidden(tab_name, new_hidden)
_hidden_menu_popup.set_item_checked(id, not new_hidden)
emit_changed(get_edited_property(), _get_layout()) # This line may not be needed