1
0
Fork 0
mirror of https://github.com/Orama-Interactive/Pixelorama.git synced 2025-02-13 09:13:07 +00:00
Pixelorama/src/Palette/CreatePaletteDialog.gd
2024-05-11 17:02:33 +03:00

131 lines
4.2 KiB
GDScript

extends ConfirmationDialog
## Emitted when user confirms their changes
signal saved(preset, name, comment, width, height, add_alpha_colors, colors_from)
## Reference to current palette stored when dialog opens
var current_palette: Palette
@onready var preset_input := $VBoxContainer/PaletteMetadata/Preset as OptionButton
@onready var name_input := $VBoxContainer/PaletteMetadata/Name as LineEdit
@onready var comment_input := $VBoxContainer/PaletteMetadata/Comment as TextEdit
@onready var width_input := $VBoxContainer/PaletteMetadata/Width as SpinBox
@onready var height_input := $VBoxContainer/PaletteMetadata/Height as SpinBox
@onready var alpha_colors_input := $VBoxContainer/ColorsSettings/AddAlphaColors as CheckBox
@onready var get_colors_from_input := (
$VBoxContainer/ColorsSettings/GetColorsFrom/GetColorsFrom as OptionButton
)
@onready var colors_settings := $VBoxContainer/ColorsSettings as VBoxContainer
@onready var already_exists_warning := $VBoxContainer/AlreadyExistsWarning as Label
@onready var enter_name_warning := $VBoxContainer/EnterNameWarning as Label
## Opens dialog
func open(opened_current_palette: Palette) -> void:
# Only to fill dialog when preset is FROM_CURRENT_PALETTE
current_palette = opened_current_palette
set_default_values()
preset_input.selected = Palettes.NewPalettePresetType.EMPTY
# Colors settings are only available for FROM_CURRENT_SPRITE and FROM_CURRENT_SELECTION presets
colors_settings.hide()
# Hide warning
toggle_already_exists_warning(false)
# Disable ok button until user enters name
toggle_ok_button_disability(true)
# Disable create "From Current Palette" if there's no palette
preset_input.set_item_disabled(1, !current_palette)
# Stop all inputs in the rest of the app
Global.dialog_open(true)
popup_centered()
width_input.editable = true
height_input.editable = true
## Resets all dialog values to default
func set_default_values() -> void:
name_input.text = ""
comment_input.text = ""
width_input.value = Palette.DEFAULT_WIDTH
height_input.value = Palette.DEFAULT_HEIGHT
alpha_colors_input.button_pressed = true
get_colors_from_input.selected = Palettes.GetColorsFrom.CURRENT_FRAME
## Shows/hides a warning when palette already exists
func toggle_already_exists_warning(to_show: bool) -> void:
already_exists_warning.visible = to_show
# Required to resize window to correct size if warning causes content overflow
size = size
func toggle_ok_button_disability(disable: bool) -> void:
get_ok_button().disabled = disable
enter_name_warning.visible = disable
func _on_CreatePaletteDialog_visibility_changed() -> void:
Global.dialog_open(visible)
func _on_CreatePaletteDialog_confirmed() -> void:
saved.emit(
preset_input.selected,
name_input.text,
comment_input.text,
width_input.value,
height_input.value,
alpha_colors_input.button_pressed,
get_colors_from_input.selected
)
func _on_Preset_item_selected(index: int) -> void:
# Enable width and height inputs (can be disabled by current palette preset)
width_input.editable = true
height_input.editable = true
toggle_already_exists_warning(false)
toggle_ok_button_disability(true)
match index:
Palettes.NewPalettePresetType.EMPTY:
colors_settings.hide()
set_default_values()
Palettes.NewPalettePresetType.FROM_CURRENT_PALETTE:
colors_settings.hide()
# If any palette was selected, copy its settings to dialog
if current_palette:
name_input.text = current_palette.name
comment_input.text = current_palette.comment
width_input.value = current_palette.width
height_input.value = current_palette.height
toggle_already_exists_warning(true)
# Copying palette presets grid size
width_input.editable = false
height_input.editable = false
Palettes.NewPalettePresetType.FROM_CURRENT_SPRITE:
colors_settings.show()
set_default_values()
Palettes.NewPalettePresetType.FROM_CURRENT_SELECTION:
colors_settings.show()
set_default_values()
func _on_Name_text_changed(new_name: String) -> void:
var disable_warning := false
if Palettes.does_palette_exist(new_name):
disable_warning = true
toggle_already_exists_warning(disable_warning)
toggle_ok_button_disability(disable_warning)
# Disable ok button on empty name
if new_name == "":
toggle_ok_button_disability(true)