From d2860d70dab61bcc7aa88db0f7103269e29f4fa9 Mon Sep 17 00:00:00 2001 From: Baconator2558 <77943363+Baconator2558@users.noreply.github.com> Date: Wed, 20 Aug 2025 13:55:24 -0500 Subject: [PATCH] Add Option to Save Active Palette as Preset (#899) * Update djui_panel_player.c * Update Czech.ini * Update Dutch.ini * Update English.ini * Update French.ini * Update German.ini * Update Italian.ini * Update Japanese.ini * Update Polish.ini * Update Portuguese.ini * Update Russian.ini * Update Spanish.ini * Update djui_panel_player.c --- lang/Czech.ini | 1 + lang/Dutch.ini | 1 + lang/English.ini | 1 + lang/French.ini | 1 + lang/German.ini | 1 + lang/Italian.ini | 1 + lang/Japanese.ini | 1 + lang/Polish.ini | 1 + lang/Portuguese.ini | 1 + lang/Russian.ini | 1 + lang/Spanish.ini | 1 + src/pc/djui/djui_panel_player.c | 61 +++++++++++++++++++++++++++++++++ 12 files changed, 72 insertions(+) diff --git a/lang/Czech.ini b/lang/Czech.ini index f11f8065c..ddf7ae547 100644 --- a/lang/Czech.ini +++ b/lang/Czech.ini @@ -386,6 +386,7 @@ NAME = "Jméno" MODEL = "Model" PALETTE_PRESET = "Přednastavení barev" EDIT_PALETTE = "Upravit barvy" +ACTIVE_PALETTE = "Uložit paletu jako předvolbu" PRESET_NAME = "Název" DELETE_PRESET = "Smazat" SAVE_PRESET = "Uložit" diff --git a/lang/Dutch.ini b/lang/Dutch.ini index bf4f6f53e..a06530f8b 100644 --- a/lang/Dutch.ini +++ b/lang/Dutch.ini @@ -386,6 +386,7 @@ NAME = "Naam" MODEL = "Model" PALETTE_PRESET = "Palet voor-instelling" EDIT_PALETTE = "Bewerk Palet" +ACTIVE_PALETTE = "Sla Actief Op Als Palet Preset" PRESET_NAME = "Naam" DELETE_PRESET = "Verwijderen" SAVE_PRESET = "Opslaan" diff --git a/lang/English.ini b/lang/English.ini index 5977aa9e0..14ec1d462 100644 --- a/lang/English.ini +++ b/lang/English.ini @@ -386,6 +386,7 @@ NAME = "Name" MODEL = "Character" PALETTE_PRESET = "Palette Preset" EDIT_PALETTE = "Edit Palette" +ACTIVE_PALETTE = "Save Active Palette as Preset" PRESET_NAME = "Preset Name" DELETE_PRESET = "Delete Preset" SAVE_PRESET = "Save Preset" diff --git a/lang/French.ini b/lang/French.ini index 4886e0540..b0dfe3be2 100644 --- a/lang/French.ini +++ b/lang/French.ini @@ -386,6 +386,7 @@ NAME = "Pseudo" MODEL = "Personnage" PALETTE_PRESET = "Palettes par défaut" EDIT_PALETTE = "Modifier la palette" +ACTIVE_PALETTE = "Enregistrer la palette active en tant que préréglage" PRESET_NAME = "Nom" DELETE_PRESET = "Supprimer" SAVE_PRESET = "Enregistrer" diff --git a/lang/German.ini b/lang/German.ini index 15248f8d9..46d0bf440 100644 --- a/lang/German.ini +++ b/lang/German.ini @@ -386,6 +386,7 @@ NAME = "Name" MODEL = "Modell" PALETTE_PRESET = "Paletten-Vorlage" EDIT_PALETTE = "Palette bearbeiten" +ACTIVE_PALETTE = "Aktive Palette als Vorlage speichern" PRESET_NAME = "Name" DELETE_PRESET = "Löschen" SAVE_PRESET = "Speichern" diff --git a/lang/Italian.ini b/lang/Italian.ini index eec74d0b7..e0827a2f6 100644 --- a/lang/Italian.ini +++ b/lang/Italian.ini @@ -384,6 +384,7 @@ NAME = "Nome" MODEL = "Modello" PALETTE_PRESET = "Opzioni Palette" EDIT_PALETTE = "Modifica Palette" +ACTIVE_PALETTE = "Salva Palette Attiva" PRESET_NAME = "Nome" DELETE_PRESET = "Elimina" SAVE_PRESET = "Salva" diff --git a/lang/Japanese.ini b/lang/Japanese.ini index 058bd1679..322c449e8 100644 --- a/lang/Japanese.ini +++ b/lang/Japanese.ini @@ -387,6 +387,7 @@ NAME = "名前" MODEL = "キャラクター" PALETTE_PRESET = "パレットのプリセット" EDIT_PALETTE = "パレットの変更" +ACTIVE_PALETTE = "使用中のパレットを保存する" PRESET_NAME = "プリセットの名前" DELETE_PRESET = "プリセットを消す" SAVE_PRESET = "プリセットを保存する" diff --git a/lang/Polish.ini b/lang/Polish.ini index b06b94414..9781c549e 100644 --- a/lang/Polish.ini +++ b/lang/Polish.ini @@ -386,6 +386,7 @@ NAME = "Nazwa" MODEL = "Model" PALETTE_PRESET = "Preset Palety" EDIT_PALETTE = "Edytuj Paletę" +ACTIVE_PALETTE = "Ustaw Aktywne Kolory jako Szablon" PRESET_NAME = "Nazwa presetu" DELETE_PRESET = "Usuń preset" SAVE_PRESET = "Zapisz preset" diff --git a/lang/Portuguese.ini b/lang/Portuguese.ini index d236ff701..e935499a6 100644 --- a/lang/Portuguese.ini +++ b/lang/Portuguese.ini @@ -386,6 +386,7 @@ NAME = "Nome" MODEL = "Personagem" PALETTE_PRESET = "Paleta" EDIT_PALETTE = "Editar paleta" +ACTIVE_PALETTE = "Salvar Paleta Atual como Predefinição" PRESET_NAME = "Nome da paleta" DELETE_PRESET = "Excluir" SAVE_PRESET = "Salvar" diff --git a/lang/Russian.ini b/lang/Russian.ini index 0def17f6b..c08f39c8a 100644 --- a/lang/Russian.ini +++ b/lang/Russian.ini @@ -385,6 +385,7 @@ NAME = "Имя" MODEL = "Модель" PALETTE_PRESET = "Предустановка палитры" EDIT_PALETTE = "Редактировать палитру" +ACTIVE_PALETTE = "Сохранить Текущую Палитру как Шаблон" PRESET_NAME = "Имя" DELETE_PRESET = "Удалить" SAVE_PRESET = "Сохранить" diff --git a/lang/Spanish.ini b/lang/Spanish.ini index 7eeecb085..039f31e26 100644 --- a/lang/Spanish.ini +++ b/lang/Spanish.ini @@ -386,6 +386,7 @@ NAME = "Nombre" MODEL = "Modelo" PALETTE_PRESET = "Paletas predeterminadas" EDIT_PALETTE = "Editar Paleta" +ACTIVE_PALETTE = "Guardar la paleta actual como determinada" PRESET_NAME = "Nombre" DELETE_PRESET = "Eliminar" SAVE_PRESET = "Guardar" diff --git a/src/pc/djui/djui_panel_player.c b/src/pc/djui/djui_panel_player.c index fde444931..48a53c8a9 100644 --- a/src/pc/djui/djui_panel_player.c +++ b/src/pc/djui/djui_panel_player.c @@ -183,6 +183,7 @@ static void djui_panel_player_edit_palette_delete(UNUSED struct DjuiBase* caller // } player_palette_delete(fs_get_write_path(PALETTES_DIRECTORY), sPalettePresetNameTextBox->buffer, false); sReloadPalettePresetSelection = true; + djui_panel_menu_back(caller); } static void djui_panel_player_edit_palette_export(UNUSED struct DjuiBase* caller) { @@ -190,6 +191,13 @@ static void djui_panel_player_edit_palette_export(UNUSED struct DjuiBase* caller sReloadPalettePresetSelection = true; } +static void djui_panel_player_active_palette_export(UNUSED struct DjuiBase* caller) { + configPlayerPalette = gNetworkPlayers[0].overridePalette; + player_palette_export(sPalettePresetNameTextBox->buffer); + sReloadPalettePresetSelection = true; + djui_panel_menu_back(caller); +} + static void (*sSavedDestroy)(struct DjuiBase*); static void djui_panel_player_edit_palette_destroy(struct DjuiBase* caller) { if (gNetworkType != NT_NONE) { @@ -326,6 +334,58 @@ static void djui_panel_player_edit_palette_create(struct DjuiBase* caller) { djui_panel_add(caller, panel, NULL); } +static void djui_panel_player_name_active_palette(struct DjuiBase* caller) { + gDjuiInPlayerMenu = true; + + struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(PLAYER, PALETTE), true); + + // A bit of a gross hack to send out palette changes and update the palette preset selection box on unpause AND + // pressing the Back button + sSavedDestroy = panel->base.destroy; + panel->base.destroy = djui_panel_player_edit_palette_destroy; + + struct DjuiBase* body = djui_three_panel_get_body(panel); + + { + struct DjuiRect* rect2 = djui_rect_container_create(body, 32); + { + struct DjuiText* text1 = djui_text_create(&rect2->base, DLANG(PLAYER, PRESET_NAME)); + djui_base_set_size_type(&text1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); + djui_base_set_color(&text1->base, 220, 220, 220, 255); + djui_base_set_size(&text1->base, 0.585f, 64); + djui_base_set_alignment(&text1->base, DJUI_HALIGN_LEFT, DJUI_VALIGN_TOP); + djui_text_set_drop_shadow(text1, 64, 64, 64, 100); + + sPalettePresetNameTextBox = djui_inputbox_create(&rect2->base, 32); + djui_inputbox_set_text(sPalettePresetNameTextBox, djui_panel_player_edit_palette_preset_name_get_text()); + djui_base_set_size_type(&sPalettePresetNameTextBox->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); + djui_base_set_size(&sPalettePresetNameTextBox->base, 0.45f, 32); + djui_base_set_alignment(&sPalettePresetNameTextBox->base, DJUI_HALIGN_RIGHT, DJUI_VALIGN_TOP); + djui_interactable_hook_value_change(&sPalettePresetNameTextBox->base, djui_panel_player_edit_palette_preset_name_text_change); + djui_interactable_hook_focus(&sPalettePresetNameTextBox->base, djui_inputbox_on_focus_begin, NULL, djui_panel_player_edit_palette_preset_name_on_focus_end); + } + + struct DjuiRect* rect3 = djui_rect_container_create(body, 32); + { + struct DjuiButton* button1 = djui_button_left_create(&rect3->base, DLANG(MENU, CANCEL), DJUI_BUTTON_STYLE_NORMAL, djui_panel_menu_back); + djui_base_set_size(&button1->base, 0.485f, 32); + struct DjuiButton* button2 = djui_button_right_create(&rect3->base, DLANG(PLAYER, SAVE_PRESET), DJUI_BUTTON_STYLE_NORMAL, djui_panel_player_active_palette_export); + djui_base_set_size(&button2->base, 0.485f, 32); + } + + { + struct DjuiText *text = djui_text_create(body, DLANG(PLAYER, CAP_TOGGLE)); + djui_text_set_alignment(text, DJUI_HALIGN_CENTER, DJUI_VALIGN_TOP); + djui_base_set_size_type(&text->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); + djui_base_set_size(&text->base, 1.0f, 64); + gDjuiPaletteToggle = text; + } + } + + djui_panel_add(caller, panel, NULL); +} + + ////////////////// // player panel // @@ -463,6 +523,7 @@ void djui_panel_player_create(struct DjuiBase* caller) { sPalettePresetSelection = djui_selectionbox_create(body, DLANG(PLAYER, PALETTE_PRESET), palettePresets, gPresetPaletteCount + 1, &sPalettePresetIndex, djui_panel_player_update_preset_palette); djui_button_create(body, DLANG(PLAYER, EDIT_PALETTE), DJUI_BUTTON_STYLE_NORMAL, djui_panel_player_edit_palette_create); + djui_button_create(body, DLANG(PLAYER, ACTIVE_PALETTE), DJUI_BUTTON_STYLE_NORMAL, djui_panel_player_name_active_palette); djui_button_create(body, DLANG(MENU, BACK), DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back); {