mirror of
https://gitlab.com/MaddoScientisto/cirnogodot.git
synced 2026-06-18 00:33:47 +00:00
Refactor creator dialogs to use centralized settings management and improve UI state handling
This commit is contained in:
parent
5a8ccbe51b
commit
99281deef4
12 changed files with 510 additions and 242 deletions
152
addons/weapon_creator/SettingsDialog.gd
Normal file
152
addons/weapon_creator/SettingsDialog.gd
Normal file
|
|
@ -0,0 +1,152 @@
|
|||
@tool
|
||||
class_name SettingsDialog
|
||||
extends BaseCreatorDialog
|
||||
|
||||
# Settings dialog for configuring Weapon Creator plugin defaults
|
||||
|
||||
# UI fields
|
||||
var weapons_dir_field: LineEdit
|
||||
var items_dir_field: LineEdit
|
||||
var bullets_dir_field: LineEdit
|
||||
var bullets_3d_dir_field: LineEdit
|
||||
var items_database_field: LineEdit
|
||||
var default_bullet_2d_field: LineEdit
|
||||
var default_bullet_3d_field: LineEdit
|
||||
var reset_button: Button
|
||||
|
||||
func _init() -> void:
|
||||
if ResourceLoader.exists(SETTINGS_PATH):
|
||||
settings = ResourceLoader.load(SETTINGS_PATH)
|
||||
if not settings:
|
||||
settings = WeaponCreatorSettings.new()
|
||||
|
||||
func _configure_window() -> void:
|
||||
var saved_size = settings.get("settings_dialog_size") if settings else null
|
||||
size = saved_size if saved_size else Vector2i(600, 600)
|
||||
transient = false
|
||||
exclusive = false
|
||||
unresizable = false
|
||||
|
||||
func _update_title() -> void:
|
||||
title = "Weapon Creator Settings"
|
||||
|
||||
func _get_saved_position() -> Vector2i:
|
||||
if settings:
|
||||
var pos = settings.get("settings_dialog_position")
|
||||
return pos if pos else Vector2i.ZERO
|
||||
return Vector2i.ZERO
|
||||
|
||||
func _save_dialog_size() -> void:
|
||||
settings.set("settings_dialog_size", size)
|
||||
|
||||
func _save_dialog_position() -> void:
|
||||
settings.set("settings_dialog_position", position)
|
||||
|
||||
func _build_content(container: VBoxContainer) -> void:
|
||||
var section_label = _create_section_label("Resource Paths")
|
||||
container.add_child(section_label)
|
||||
|
||||
var weapons_input = _create_input("Weapons Directory:")
|
||||
weapons_dir_field = weapons_input.edit
|
||||
container.add_child(weapons_input.container)
|
||||
|
||||
var items_input = _create_input("Items Directory:")
|
||||
items_dir_field = items_input.edit
|
||||
container.add_child(items_input.container)
|
||||
|
||||
var bullets_input = _create_input("Bullets Directory:")
|
||||
bullets_dir_field = bullets_input.edit
|
||||
container.add_child(bullets_input.container)
|
||||
|
||||
var bullets_3d_input = _create_input("Bullets 3D Directory:")
|
||||
bullets_3d_dir_field = bullets_3d_input.edit
|
||||
container.add_child(bullets_3d_input.container)
|
||||
|
||||
var database_input = _create_input("Items Database:")
|
||||
items_database_field = database_input.edit
|
||||
container.add_child(database_input.container)
|
||||
|
||||
container.add_child(HSeparator.new())
|
||||
|
||||
var defaults_label = _create_section_label("Default Bullets")
|
||||
container.add_child(defaults_label)
|
||||
|
||||
var bullet_2d_input = _create_input("Default Bullet 2D:")
|
||||
default_bullet_2d_field = bullet_2d_input.edit
|
||||
container.add_child(bullet_2d_input.container)
|
||||
|
||||
var bullet_3d_input = _create_input("Default Bullet 3D:")
|
||||
default_bullet_3d_field = bullet_3d_input.edit
|
||||
container.add_child(bullet_3d_input.container)
|
||||
|
||||
container.add_child(HSeparator.new())
|
||||
|
||||
var reset_section = _create_section_label("Reset Options")
|
||||
container.add_child(reset_section)
|
||||
|
||||
reset_button = Button.new()
|
||||
reset_button.text = "Reset All Settings (Filters, Dialog Sizes, Defaults)"
|
||||
reset_button.pressed.connect(_on_reset_pressed)
|
||||
container.add_child(reset_button)
|
||||
|
||||
func _build_buttons(vbox: VBoxContainer) -> void:
|
||||
var button_hbox = HBoxContainer.new()
|
||||
button_hbox.alignment = BoxContainer.ALIGNMENT_END
|
||||
button_hbox.add_theme_constant_override("separation", 8)
|
||||
vbox.add_child(button_hbox)
|
||||
|
||||
var cancel_button = Button.new()
|
||||
cancel_button.text = "Cancel"
|
||||
cancel_button.pressed.connect(_on_cancel_pressed)
|
||||
button_hbox.add_child(cancel_button)
|
||||
|
||||
var save_button = Button.new()
|
||||
save_button.text = "Save"
|
||||
save_button.pressed.connect(_on_create_pressed)
|
||||
button_hbox.add_child(save_button)
|
||||
|
||||
func _set_default_values() -> void:
|
||||
weapons_dir_field.text = settings.get("weapons_dir")
|
||||
items_dir_field.text = settings.get("items_dir")
|
||||
bullets_dir_field.text = settings.get("bullets_dir")
|
||||
bullets_3d_dir_field.text = settings.get("bullets_3d_dir")
|
||||
items_database_field.text = settings.get("items_database_path")
|
||||
default_bullet_2d_field.text = settings.get("default_bullet_2d")
|
||||
default_bullet_3d_field.text = settings.get("default_bullet_3d")
|
||||
|
||||
func _apply_prefill_data() -> void:
|
||||
_set_default_values()
|
||||
|
||||
func _on_create_pressed() -> void:
|
||||
settings.set("weapons_dir", weapons_dir_field.text)
|
||||
settings.set("items_dir", items_dir_field.text)
|
||||
settings.set("bullets_dir", bullets_dir_field.text)
|
||||
settings.set("bullets_3d_dir", bullets_3d_dir_field.text)
|
||||
settings.set("items_database_path", items_database_field.text)
|
||||
settings.set("default_bullet_2d", default_bullet_2d_field.text)
|
||||
settings.set("default_bullet_3d", default_bullet_3d_field.text)
|
||||
|
||||
_save_dialog_size()
|
||||
_save_dialog_position()
|
||||
settings.call("save_settings")
|
||||
|
||||
queue_free()
|
||||
|
||||
func _on_reset_pressed() -> void:
|
||||
var dialog = ConfirmationDialog.new()
|
||||
dialog.dialog_text = "This will reset all settings including:\n- Resource paths\n- Default bullets\n- All dialog sizes\n- All dialog positions\n- All viewer filters\n\nAre you sure?"
|
||||
dialog.title = "Reset All Settings"
|
||||
add_child(dialog)
|
||||
|
||||
dialog.confirmed.connect(func():
|
||||
settings.call("reset_to_defaults")
|
||||
_set_default_values()
|
||||
dialog.queue_free()
|
||||
)
|
||||
|
||||
dialog.canceled.connect(func():
|
||||
dialog.queue_free()
|
||||
)
|
||||
|
||||
dialog.popup_centered()
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue