You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
170 lines
5.0 KiB
170 lines
5.0 KiB
6 months ago
|
@tool
|
||
|
extends DialogicEditor
|
||
|
|
||
|
## Editor that contains all settings
|
||
|
|
||
|
var button_group := ButtonGroup.new()
|
||
|
var registered_sections :Array[DialogicSettingsPage] = []
|
||
|
|
||
|
|
||
|
func _get_title() -> String:
|
||
|
return "Settings"
|
||
|
|
||
|
|
||
|
func _get_icon() -> Texture:
|
||
|
return get_theme_icon("PluginScript", "EditorIcons")
|
||
|
|
||
|
|
||
|
func _register():
|
||
|
editors_manager.register_simple_editor(self)
|
||
|
self.alternative_text = "Customize dialogic and it's behaviour"
|
||
|
|
||
|
|
||
|
func _ready():
|
||
|
if get_parent() is SubViewport:
|
||
|
return
|
||
|
|
||
|
register_settings_section("res://addons/dialogic/Editor/Settings/settings_general.tscn")
|
||
|
register_settings_section("res://addons/dialogic/Editor/Settings/settings_translation.tscn")
|
||
|
register_settings_section("res://addons/dialogic/Editor/Settings/settings_modules.tscn")
|
||
|
|
||
|
for indexer in DialogicUtil.get_indexers():
|
||
|
for settings_page in indexer._get_settings_pages():
|
||
|
register_settings_section(settings_page)
|
||
|
|
||
|
add_registered_sections()
|
||
|
%SettingsTabs.get_child(0).button_pressed = true
|
||
|
%SettingsContent.get_child(0).show()
|
||
|
|
||
|
|
||
|
func register_settings_section(path:String) -> void:
|
||
|
var section :Control = load(path).instantiate()
|
||
|
registered_sections.append(section)
|
||
|
|
||
|
|
||
|
func add_registered_sections() -> void:
|
||
|
for i in %SettingsTabs.get_children():
|
||
|
i.queue_free()
|
||
|
for i in %FeatureTabs.get_children():
|
||
|
i.queue_free()
|
||
|
|
||
|
for i in %SettingsContent.get_children():
|
||
|
i.queue_free()
|
||
|
|
||
|
|
||
|
registered_sections.sort_custom(section_sort)
|
||
|
for section in registered_sections:
|
||
|
|
||
|
section.name = section._get_title()
|
||
|
|
||
|
var vbox := VBoxContainer.new()
|
||
|
vbox.set_meta('section', section)
|
||
|
vbox.size_flags_vertical = Control.SIZE_EXPAND_FILL
|
||
|
vbox.name = section.name
|
||
|
var hbox := HBoxContainer.new()
|
||
|
|
||
|
var title := Label.new()
|
||
|
title.text = section.name
|
||
|
title.theme_type_variation = 'DialogicSectionBig'
|
||
|
hbox.add_child(title)
|
||
|
vbox.add_child(hbox)
|
||
|
|
||
|
|
||
|
if !section.short_info.is_empty():
|
||
|
var tooltip_hint :Control = load("res://addons/dialogic/Editor/Common/hint_tooltip_icon.tscn").instantiate()
|
||
|
tooltip_hint.hint_text = section.short_info
|
||
|
hbox.add_child(tooltip_hint)
|
||
|
|
||
|
|
||
|
var scroll := ScrollContainer.new()
|
||
|
scroll.size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
||
|
scroll.size_flags_vertical = Control.SIZE_EXPAND_FILL
|
||
|
var inner_vbox := VBoxContainer.new()
|
||
|
inner_vbox.size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
||
|
inner_vbox.size_flags_vertical = Control.SIZE_EXPAND_FILL
|
||
|
scroll.add_child(inner_vbox)
|
||
|
var panel := PanelContainer.new()
|
||
|
panel.theme_type_variation = "DialogicPanelA"
|
||
|
panel.size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
||
|
if section.size_flags_vertical == Control.SIZE_EXPAND_FILL:
|
||
|
panel.size_flags_vertical = Control.SIZE_EXPAND_FILL
|
||
|
inner_vbox.add_child(panel)
|
||
|
|
||
|
|
||
|
var info_section :Control = section._get_info_section()
|
||
|
if info_section != null:
|
||
|
inner_vbox.add_child(Control.new())
|
||
|
inner_vbox.get_child(-1).custom_minimum_size.y = 50
|
||
|
|
||
|
inner_vbox.add_child(title.duplicate())
|
||
|
inner_vbox.get_child(-1).text = "Information"
|
||
|
var info_panel := panel.duplicate()
|
||
|
info_panel.theme_type_variation = "DialogicPanelDarkA"
|
||
|
|
||
|
inner_vbox.add_child(info_panel)
|
||
|
info_section.get_parent().remove_child(info_section)
|
||
|
info_panel.add_child(info_section)
|
||
|
|
||
|
panel.add_child(section)
|
||
|
vbox.add_child(scroll)
|
||
|
|
||
|
|
||
|
var button := Button.new()
|
||
|
button.text = " "+section.name
|
||
|
button.tooltip_text = section.name
|
||
|
button.toggle_mode = true
|
||
|
button.button_group = button_group
|
||
|
button.expand_icon = true
|
||
|
button.alignment = HORIZONTAL_ALIGNMENT_LEFT
|
||
|
button.flat = true
|
||
|
button.add_theme_color_override('font_pressed_color', get_theme_color("property_color_z", "Editor"))
|
||
|
button.add_theme_color_override('font_hover_color', get_theme_color('warning_color', 'Editor'))
|
||
|
button.add_theme_color_override('font_focus_color', get_theme_color('warning_color', 'Editor'))
|
||
|
button.add_theme_stylebox_override('focus', StyleBoxEmpty.new())
|
||
|
button.pressed.connect(open_tab.bind(vbox))
|
||
|
if section._is_feature_tab():
|
||
|
%FeatureTabs.add_child(button)
|
||
|
else:
|
||
|
%SettingsTabs.add_child(button)
|
||
|
|
||
|
vbox.hide()
|
||
|
# if section.has_method('_get_icon'):
|
||
|
# icon.texture = section._get_icon()
|
||
|
%SettingsContent.add_child(vbox)
|
||
|
|
||
|
|
||
|
func open_tab(tab_to_show:Control) -> void:
|
||
|
for tab in %SettingsContent.get_children():
|
||
|
tab.hide()
|
||
|
|
||
|
tab_to_show.show()
|
||
|
|
||
|
|
||
|
func section_sort(item1:DialogicSettingsPage, item2:DialogicSettingsPage) -> bool:
|
||
|
if !item1._is_feature_tab() and item2._is_feature_tab():
|
||
|
return true
|
||
|
if item1._get_priority() > item2._get_priority():
|
||
|
return true
|
||
|
return false
|
||
|
|
||
|
|
||
|
|
||
|
func _open(extra_information:Variant = null) -> void:
|
||
|
refresh()
|
||
|
if typeof(extra_information) == TYPE_STRING:
|
||
|
if %SettingsContent.has_node(extra_information):
|
||
|
open_tab(%SettingsContent.get_node(extra_information))
|
||
|
|
||
|
|
||
|
func _close():
|
||
|
for child in %SettingsContent.get_children():
|
||
|
if child.get_meta('section').has_method('_about_to_close'):
|
||
|
child.get_meta('section')._about_to_close()
|
||
|
|
||
|
|
||
|
func refresh():
|
||
|
for child in %SettingsContent.get_children():
|
||
|
if child.get_meta('section').has_method('_refresh'):
|
||
|
child.get_meta('section')._refresh()
|
||
|
|