extends WindowDialog onready var palette_grid = $VBoxContainer/HBoxContainer/Panel/EditPaletteGridContainer onready var color_name_edit = $VBoxContainer/HBoxContainer3/EditPaletteColorNameLineEdit onready var color_picker = $VBoxContainer/HBoxContainer/EditPaletteColorPicker var palette_button = preload("res://Prefabs/PaletteButton.tscn"); var current_palette : String var current_swatch := -1 var working_palette : Dictionary func open(palette : String) -> void: current_palette = palette if Global.palettes.has(palette): working_palette = Global.palettes[palette].duplicate() _display_palette() self.popup_centered() pass func _display_palette() -> void: _clear_swatches() var index := 0 for color_data in working_palette.colors: var color = Color(color_data.data) var new_button = palette_button.instance() new_button.color = color new_button.get_child(0).modulate = color new_button.hint_tooltip = color_data.data.to_upper() + " " + color_data.name new_button.draggable = true new_button.index = index new_button.connect("on_drop_data", self, "on_move_swatch") new_button.connect("pressed", self, "on_swatch_select", [index]) palette_grid.add_child(new_button) index += 1 func _clear_swatches() -> void: for child in palette_grid.get_children(): if child is BaseButton: child.disconnect("on_drop_data", self, "on_move_swatch") child.queue_free() func on_swatch_select(index : int) -> void: current_swatch = index color_name_edit.text = working_palette.colors[index].name color_picker.color = working_palette.colors[index].data pass func on_move_swatch(from : int, to : int) -> void: var color_to_move = working_palette.colors[from] working_palette.colors.remove(from) working_palette.colors.insert(to, color_to_move) palette_grid.move_child(palette_grid.get_child(from), to) # Re-index swatches with new order var index := 0 for child in palette_grid.get_children(): child.index = index index += 1 pass func _on_AddSwatchButton_pressed() -> void: var color = Color.white var color_data = {} color_data.data = color.to_html(true) color_data.name = "no name" working_palette.colors.push_back(color_data) var new_button = palette_button.instance() new_button.color = color new_button.get_child(0).modulate = color new_button.hint_tooltip = color_data.data.to_upper() + " " + color_data.name new_button.draggable = true var index : int = palette_grid.get_child_count() new_button.index = index new_button.connect("on_drop_data", self, "on_move_swatch") new_button.connect("pressed", self, "on_swatch_select", [index]) palette_grid.add_child(new_button) pass # Replace with function body. func _on_RemoveSwatchButton_pressed() -> void: working_palette.colors.remove(current_swatch) palette_grid.remove_child(palette_grid.get_child(current_swatch)) pass # Replace with function body. func _on_EditPaletteSaveButton_pressed() -> void: Global.palettes[current_palette] = working_palette Global.palette_container.on_palette_select(current_palette) Global.palette_container.save_palette(current_palette, working_palette.name + ".json") self.hide() pass # Replace with function body. func _on_EditPaletteCancelButton_pressed() -> void: self.hide() pass # Replace with function body. func _on_EditPaletteColorNameLineEdit_text_changed(new_text) -> void: if current_swatch >= 0 && current_swatch < working_palette.colors.size(): working_palette.colors[current_swatch].name = new_text _refresh_hint_tooltip(current_swatch) pass func _on_EditPaletteColorPicker_color_changed(color) -> void: if current_swatch >= 0 && current_swatch < working_palette.colors.size(): palette_grid.get_child(current_swatch).get_child(0).modulate = color working_palette.colors[current_swatch].data = color.to_html(true) _refresh_hint_tooltip(current_swatch) pass func _refresh_hint_tooltip(index : int): palette_grid.get_child(current_swatch).hint_tooltip = working_palette.colors[current_swatch].data.to_upper() + " " + working_palette.colors[current_swatch].name pass