1
0
Fork 0
mirror of https://github.com/Orama-Interactive/Pixelorama.git synced 2025-02-07 10:59:49 +00:00
Pixelorama/src/Palette/CreatePaletteDialog.gd
2022-03-29 02:35:32 +03:00

130 lines
4 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
onready var name_input := $VBoxContainer/PaletteMetadata/Name
onready var comment_input := $VBoxContainer/PaletteMetadata/Comment
onready var width_input := $VBoxContainer/PaletteMetadata/Width
onready var height_input := $VBoxContainer/PaletteMetadata/Height
onready var alpha_colors_input := $VBoxContainer/ColorsSettings/AddAlphaColors
onready var get_colors_from_input := $VBoxContainer/ColorsSettings/GetColorsFrom/GetColorsFrom
onready var colors_settings := $VBoxContainer/ColorsSettings
onready var already_exists_warning := $VBoxContainer/AlreadyExistsWarning
onready var enter_name_warning := $VBoxContainer/EnterNameWarning
# 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.pressed = true
get_colors_from_input.selected = Palettes.GetColorsFrom.CURRENT_FRAME
# Shows/hides a warning when palette already exists
func toggle_already_exists_warning(visible: bool) -> void:
already_exists_warning.visible = visible
# Required to resize window to correct size if warning causes content overflow
rect_size = rect_size
func toggle_ok_button_disability(disable: bool) -> void:
get_ok().disabled = disable
enter_name_warning.visible = disable
func _on_CreatePaletteDialog_popup_hide() -> void:
Global.dialog_open(false)
func _on_CreatePaletteDialog_confirmed() -> void:
emit_signal(
"saved",
preset_input.selected,
name_input.text,
comment_input.text,
width_input.value,
height_input.value,
alpha_colors_input.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 it's 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):
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)