Initial commit, layout mockup
This commit is contained in:
@@ -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
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user