diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ad73fc3..e2d5ccb 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -6,6 +6,7 @@ on: push: branches: - refactor + - configMenu jobs: build-binary: diff --git a/include/configMenu.h b/include/configMenu.h new file mode 100644 index 0000000..75b285b --- /dev/null +++ b/include/configMenu.h @@ -0,0 +1,3 @@ +#pragma once + +void configMenu(); \ No newline at end of file diff --git a/include/input.h b/include/input.h index 7e259b5..ba7d619 100644 --- a/include/input.h +++ b/include/input.h @@ -7,6 +7,7 @@ typedef enum Button { PAD_BUTTON_A, PAD_BUTTON_B, + PAD_BUTTON_X, PAD_BUTTON_UP, PAD_BUTTON_DOWN, PAD_BUTTON_LEFT, diff --git a/include/json.h b/include/json.h index ca9cb86..0bc85b2 100644 --- a/include/json.h +++ b/include/json.h @@ -5,11 +5,10 @@ class Date { public: - Date(uint32_t high, uint32_t low, uint8_t s) { - highID = high; - lowID = low; - slot = s; - path = stringFormat("sd:/wiiu/backups/%08x%08x/%u/savemiiMeta.json", highID, lowID, slot); + Date(uint32_t high, uint32_t low, uint8_t s) : highID(high), + lowID(low), + slot(s), + path(stringFormat("sd:/wiiu/backups/%08x%08x/%u/savemiiMeta.json", highID, lowID, slot)) { } std::string get(); bool set(std::string date); diff --git a/include/language.h b/include/language.h index 93b54a6..ac8bed1 100644 --- a/include/language.h +++ b/include/language.h @@ -1,6 +1,7 @@ #pragma once #include +#include #include #include @@ -26,6 +27,7 @@ typedef enum { } Swkbd_LanguageType; void loadLanguage(Swkbd_LanguageType language) __attribute__((cold)); +std::string getLoadedLanguage(); Swkbd_LanguageType getSystemLanguage() __attribute__((cold)); bool gettextLoadLanguage(const char *langFile); void gettextCleanUp() __attribute__((__cold__)); diff --git a/include/log_freetype.h b/include/log_freetype.h index 5fb9bc7..ecea27b 100644 --- a/include/log_freetype.h +++ b/include/log_freetype.h @@ -18,6 +18,7 @@ #endif bool WHBLogFreetypeInit() __attribute__((cold)); +bool setFont(OSSharedDataType font); void WHBLogFreetypeFree() __attribute__((cold)); void drawPixel(int32_t x, int32_t y, uint8_t r, uint8_t g, uint8_t b, uint8_t a); void ttfFontColor32(uint32_t color); diff --git a/include/savemng.h b/include/savemng.h index ab9b4c9..1094700 100644 --- a/include/savemng.h +++ b/include/savemng.h @@ -20,7 +20,12 @@ #include #include -#define PATH_SIZE 0x400 +#define PATH_SIZE 0x400 + +#define VERSION_MAJOR 1 +#define VERSION_MINOR 4 +#define VERSION_MICRO 9 +#define M_OFF 1 typedef struct { uint32_t highID; diff --git a/languages/SChinese.json b/languages/SChinese.json index b07620a..7a870ee 100644 --- a/languages/SChinese.json +++ b/languages/SChinese.json @@ -14,7 +14,7 @@ " Wii U Save Management (%u Title%s)": " Wii U保存数据管理(%u 软件%s)", " vWii Save Management (%u Title%s)": " vWii保存数据管理(%u 软件%s)", " Batch Backup": " 批量备份", - "\ue000: Select Mode": "\ue000:选择模式", + "\uE002: Options \ue000: Select Mode": "\uE002:选项 \ue000:选择模式", " Backup All (%u Title%s)": " 备份所有保存数据(%u 软件%s)", " Backup Wii U (%u Title%s)": " 备份Wii U软件的保存数据(%u 软件%s)", " Backup vWii (%u Title%s)": " 备份vWii软件的保存数据(%u 软件%s)", diff --git a/languages/TChinese.json b/languages/TChinese.json index 9b66454..7dc1fdb 100644 --- a/languages/TChinese.json +++ b/languages/TChinese.json @@ -14,7 +14,7 @@ " Wii U Save Management (%u Title%s)": " Wii U保存資料管理(%u軟體%s)", " vWii Save Management (%u Title%s)": " vWii保存資料管理(%u軟體%s)", " Batch Backup": " 批量備份", - "\ue000: Select Mode": "\ue000:選擇模式", + "\uE002: Options \ue000: Select Mode": "\uE002:選項 \ue000:選擇模式", " Backup All (%u Title%s)": " 全部備份(%u 標題%s)", " Backup Wii U (%u Title%s)": " 備份Wii U軟體(%u Title%s)", " Backup vWii (%u Title%s)": " 備份vWii軟體(%u軟體%s)", @@ -95,4 +95,4 @@ "Failed to delete user folder.\n%s": "無法刪除使用者資料夾。\n%s", "Failed to import savedata from loadiine.": "無法從loadiine導入保存數據。", "Failed to export savedata to loadiine.": "無法導出保存數據到Loadiine。" -} +} \ No newline at end of file diff --git a/languages/english.json b/languages/english.json index 9f548f8..61afe05 100644 --- a/languages/english.json +++ b/languages/english.json @@ -1,98 +1,98 @@ { - "Disclaimer:": "", - "There is always the potential for a brick.": "", - "Everything you do with this software is your own responsibility": "", - "Out of memory.": "", - "Loaded %i Wii U titles.": "", - "%s%s (No banner.bin)": "", - "Loaded %i Wii titles.": "", - "None": "", - "Name": "", - "Storage": "", - "Storage+Name": "", - "initFS failed. Please make sure your MochaPayload is up-to-date": "", - " Wii U Save Management (%u Title%s)": "", - " vWii Save Management (%u Title%s)": "", - " Batch Backup": "", - "\ue000: Select Mode": "", - " Backup All (%u Title%s)": "", - " Backup Wii U (%u Title%s)": "", - " Backup vWii (%u Title%s)": "", - "\ue000: Backup \ue001: Back": "", - "%s Sort: %s \ue084": "", - " [Not Init]": "", - "\ue000: Select Game \ue001: Back": "", - " Backup savedata": "", - " Restore savedata": "", - " Wipe savedata": "", - " Import from loadiine": "", - " Export to loadiine": "", - " Copy Savedata to Title in %s": "", - "\ue000: Select Task \ue001: Back": "", - "Destination:": "", - "Select %s:": "", - "version": "", - "Delete from:": "", - "slot": "", - "Empty": "", - "Used": "", - "Select SD user to copy from:": "", - "all users": "", - "Has Save": "", - "Select Wii U user to delete from:": "", - "Select Wii U user%s:": "", - " to copy from": "", - " to copy to": "", - "Date: %s": "", - "Include 'common' save?": "", - "yes": "", - "no ": "", - "No 'common' save found.": "", - "\ue000: Restore \ue001: Back": "", - "\ue000: Wipe \ue001: Back": "", - "\ue000: Import \ue001: Back": "", - "\ue000: Export \ue001: Back": "", - "\ue000: Copy \ue001: Back": "", - "Press \ue044 to exit.": "", - "No Wii U titles found.": "", - "No vWii saves found.": "", - "CBHC save. Could be dangerous to modify. Continue?": "", - "Are you REALLY sure?": "", - "vWii saves are in the vWii section. Continue?": "", - "Recommended to run Game at least one time. Continue?": "", - "No save to Backup.": "", - "No save to Wipe.": "", - "No save to Export.": "", - "No save to Copy.": "", - "Copying file: %s": "", - "From: %s": "", - "To: %s": "", - "\ue000 Yes - \ue001 No": "", - "\ue000 Confirm - \ue001 Cancel": "", - "Filesize: %d bytes": "", - "Deleting folder %s": "", - "From: \n%s": "", - "Failed to delete folder %s\n%s": "", - "Deleting file %s": "", - "Failed to delete file %s\n%s": "", - "Loadiine game folder not found.": "", - "Failed to open Loadiine game save directory.": "", - "Are you sure?": "", - "Backup current savedata first to next empty slot?": "", - "Backup done. Now copying Savedata.": "", - "Common save not found.": "", - "Copy failed.": "", - "Backup failed.": "", - "Backup found on this slot. Overwrite it?": "", - "No save found for this user.": "", - "Backup failed. DO NOT restore from this slot.": "", - "No backup found on selected slot.": "", - "Restore failed.": "", - "Hm, are you REALLY sure?": "", - "Backup current savedata first?": "", - "Failed to delete common folder.\n%s": "", - "Failed to delete savefile.": "", - "Failed to delete user folder.\n%s": "", - "Failed to import savedata from loadiine.": "", - "Failed to export savedata to loadiine.": "" + "Disclaimer:": "Disclaimer:", + "There is always the potential for a brick.": "There is always the potential for a brick.", + "Everything you do with this software is your own responsibility": "Everything you do with this software is your own responsibility", + "Out of memory.": "Out of memory.", + "Loaded %i Wii U titles.": "Loaded %i Wii U titles.", + "%s%s (No banner.bin)": "%s%s (No banner.bin)", + "Loaded %i Wii titles.": "Loaded %i Wii titles.", + "None": "None", + "Name": "Name", + "Storage": "Storage", + "Storage+Name": "Storage+Name", + "initFS failed. Please make sure your MochaPayload is up-to-date": "initFS failed. Please make sure your MochaPayload is up-to-date", + " Wii U Save Management (%u Title%s)": " Wii U Save Management (%u Title%s)", + " vWii Save Management (%u Title%s)": " vWii Save Management (%u Title%s)", + " Batch Backup": " Batch Backup", + "\uE002: Options \ue000: Select Mode": "\uE002: Options \ue000: Select Mode", + " Backup All (%u Title%s)": " Backup All (%u Title%s)", + " Backup Wii U (%u Title%s)": " Backup Wii U (%u Title%s)", + " Backup vWii (%u Title%s)": " Backup vWii (%u Title%s)", + "\ue000: Backup \ue001: Back": "\ue000: Backup \ue001: Back", + "%s Sort: %s \ue084": "%s Sort: %s \ue084", + " [Not Init]": " [Not Init]", + "\ue000: Select Game \ue001: Back": "\ue000: Select Game \ue001: Back", + " Backup savedata": " Backup savedata", + " Restore savedata": " Restore savedata", + " Wipe savedata": " Wipe savedata", + " Import from loadiine": " Import from loadiine", + " Export to loadiine": " Export to loadiine", + " Copy Savedata to Title in %s": " Copy Savedata to Title in %s", + "\ue000: Select Task \ue001: Back": "\ue000: Select Task \ue001: Back", + "Destination:": "Destination:", + "Select %s:": "Select %s:", + "version": "version", + "Delete from:": "Delete from:", + "slot": "slot", + "Empty": "Empty", + "Used": "Used", + "Select SD user to copy from:": "Select SD user to copy from:", + "all users": "all users", + "Has Save": "Has Save", + "Select Wii U user to delete from:": "Select Wii U user to delete from:", + "Select Wii U user%s:": "Select Wii U user%s:", + " to copy from": " to copy from", + " to copy to": " to copy to", + "Date: %s": "Date: %s", + "Include 'common' save?": "Include 'common' save?", + "yes": "yes", + "no ": "no ", + "No 'common' save found.": "No 'common' save found.", + "\ue000: Restore \ue001: Back": "\ue000: Restore \ue001: Back", + "\ue000: Wipe \ue001: Back": "\ue000: Wipe \ue001: Back", + "\ue000: Import \ue001: Back": "\ue000: Import \ue001: Back", + "\ue000: Export \ue001: Back": "\ue000: Export \ue001: Back", + "\ue000: Copy \ue001: Back": "\ue000: Copy \ue001: Back", + "Press \ue044 to exit.": "Press \ue044 to exit.", + "No Wii U titles found.": "No Wii U titles found.", + "No vWii saves found.": "No vWii saves found.", + "CBHC save. Could be dangerous to modify. Continue?": "CBHC save. Could be dangerous to modify. Continue?", + "Are you REALLY sure?": "Are you REALLY sure?", + "vWii saves are in the vWii section. Continue?": "vWii saves are in the vWii section. Continue?", + "Recommended to run Game at least one time. Continue?": "Recommended to run Game at least one time. Continue?", + "No save to Backup.": "No save to Backup.", + "No save to Wipe.": "No save to Wipe.", + "No save to Export.": "No save to Export.", + "No save to Copy.": "No save to Copy.", + "Copying file: %s": "Copying file: %s", + "From: %s": "From: %s", + "To: %s": "To: %s", + "\ue000 Yes - \ue001 No": "\ue000 Yes - \ue001 No", + "\ue000 Confirm - \ue001 Cancel": "\ue000 Confirm - \ue001 Cancel", + "Filesize: %d bytes": "Filesize: %d bytes", + "Deleting folder %s": "Deleting folder %s", + "From: \n%s": "From: \n%s", + "Failed to delete folder %s\n%s": "Failed to delete folder %s\n%s", + "Deleting file %s": "Deleting file %s", + "Failed to delete file %s\n%s": "Failed to delete file %s\n%s", + "Loadiine game folder not found.": "Loadiine game folder not found.", + "Failed to open Loadiine game save directory.": "Failed to open Loadiine game save directory.", + "Are you sure?": "Are you sure?", + "Backup current savedata first to next empty slot?": "Backup current savedata first to next empty slot?", + "Backup done. Now copying Savedata.": "Backup done. Now copying Savedata.", + "Common save not found.": "Common save not found.", + "Copy failed.": "Copy failed.", + "Backup failed.": "Backup failed.", + "Backup found on this slot. Overwrite it?": "Backup found on this slot. Overwrite it?", + "No save found for this user.": "No save found for this user.", + "Backup failed. DO NOT restore from this slot.": "Backup failed. DO NOT restore from this slot.", + "No backup found on selected slot.": "No backup found on selected slot.", + "Restore failed.": "Restore failed.", + "Hm, are you REALLY sure?": "Hm, are you REALLY sure?", + "Backup current savedata first?": "Backup current savedata first?", + "Failed to delete common folder.\n%s": "Failed to delete common folder.\n%s", + "Failed to delete savefile.": "Failed to delete savefile.", + "Failed to delete user folder.\n%s": "Failed to delete user folder.\n%s", + "Failed to import savedata from loadiine.": "Failed to import savedata from loadiine.", + "Failed to export savedata to loadiine.": "Failed to export savedata to loadiine." } \ No newline at end of file diff --git a/languages/italian.json b/languages/italian.json index da782b5..78dbd3b 100644 --- a/languages/italian.json +++ b/languages/italian.json @@ -14,14 +14,14 @@ " Wii U Save Management (%u Title%s)": " Gestione di salvataggio Wii U (%u Titolo%s)", " vWii Save Management (%u Title%s)": " gestione di salvataggio vWii (%u Titolo%s)", " Batch Backup": " Backup Batch", - "\ue000: Select Mode": "\ue000: Seleziona La Modalità", + "\uE002: Options \ue000: Select Mode": "\uE002: Opzioni \ue000: Seleziona La Modalità", " Backup All (%u Title%s)": " Backup di tutto (%u titolo%s)", " Backup Wii U (%u Title%s)": " Backup Wii U (%u Titolo%s)", " Backup vWii (%u Title%s)": " Backup vWii (%u Titolo%s)", - "\ue000: Backup \ue001: Back": "\ue000: Backup : Indietro", + "\ue000: Backup \ue001: Back": "\ue000: Backup \ue001: Indietro", "%s Sort: %s \ue084": "%s Ordinamento: %s \ue084", " [Not Init]": " [Non Init]", - "\ue000: Select Game \ue001: Back": "\ue000: Seleziona Partita \ue001:Indietro", + "\ue000: Select Game \ue001: Back": "\ue000: Seleziona Partita \ue001: Indietro", " Backup savedata": " Backup salvataggio", " Restore savedata": " Ripristina salvataggio", " Wipe savedata": " Pulisci salvataggio", @@ -44,15 +44,15 @@ " to copy from": " per copiare da", " to copy to": " per copiare su", "Date: %s": "Data: %s", - "Include 'common' save?": "Includi salvataggio 'comuni'?", + "Include 'common' save?": "Includi salvataggio 'common'?", "yes": "sì", "no ": "no ", "No 'common' save found.": "Nessun salvataggio 'comune' trovato.", "\ue000: Restore \ue001: Back": "\ue000: Ripristina \ue001: Indietro", - "\ue000: Wipe \ue001: Back": "\ue000: Pulire \ue001:Indietro", - "\ue000: Import \ue001: Back": "\ue000: Importa \ue001:Indietro", - "\ue000: Export \ue001: Back": "\ue000: Esporta \ue001:Indietro", - "\ue000: Copy \ue001: Back": "\ue000: Copia \ue001:Indietro", + "\ue000: Wipe \ue001: Back": "\ue000: Pulire \ue001: Indietro", + "\ue000: Import \ue001: Back": "\ue000: Importa \ue001: Indietro", + "\ue000: Export \ue001: Back": "\ue000: Esporta \ue001: Indietro", + "\ue000: Copy \ue001: Back": "\ue000: Copia \ue001: Indietro", "Press \ue044 to exit.": "Premi \ue044 per uscire.", "No Wii U titles found.": "Nessun titolo Wii U trovato.", "No vWii saves found.": "Nessun salvataggio vWii trovato.", @@ -70,11 +70,11 @@ "\ue000 Yes - \ue001 No": "\ue000 Sì - \ue001 No", "\ue000 Confirm - \ue001 Cancel": "\ue000 Conferma - \ue001 Annulla", "Filesize: %d bytes": "Dimensione file: %d byte", - "Deleting folder %s": "Eliminazione cartella '%s'", - "From: \n%s": "Da: %s", - "Failed to delete folder %s\n%s": "Non è stato possibile eliminare il file %s %s", - "Deleting file %s": "Eliminazione cartella '%s'", - "Failed to delete file %s\n%s": "Non è stato possibile eliminare il file %s %s", + "Deleting folder %s": "Eliminazione cartella %s", + "From: \n%s": "Da: \n%s", + "Failed to delete folder %s\n%s": "Non è stato possibile eliminare il file %s\n%s", + "Deleting file %s": "Eliminazione cartella %s", + "Failed to delete file %s\n%s": "Non è stato possibile eliminare il file %s\n%s", "Loadiine game folder not found.": "Cartella di gioco Loadiine non trovata.", "Failed to open Loadiine game save directory.": "Apertura della directory di salvataggio del gioco Loadiine non riuscita.", "Are you sure?": "Sei sicuro?", @@ -92,7 +92,7 @@ "Backup current savedata first?": "Salvare prima il salvataggio corrente?", "Failed to delete common folder.\n%s": "Impossibile eliminare la cartella comune.\n%s", "Failed to delete savefile.": "Non è stato possibile eliminare il salvataggio.", - "Failed to delete user folder.\n%s": "Impossibile eliminare la cartella. %s", + "Failed to delete user folder.\n%s": "Impossibile eliminare la cartella.\n%s", "Failed to import savedata from loadiine.": "Impossibile importare salvataggi da loadiine.", "Failed to export savedata to loadiine.": "Impossibile importare salvataggi da loadiine." } \ No newline at end of file diff --git a/languages/japanese.json b/languages/japanese.json index 47d01e0..cf3cf8e 100644 --- a/languages/japanese.json +++ b/languages/japanese.json @@ -11,23 +11,23 @@ "Storage": "ストレージ", "Storage+Name": "ストレージ+名前", "initFS failed. Please make sure your MochaPayload is up-to-date": "initFS が失敗しました。 MochaPayload が最新であることを確認してください", - " Wii U Save Management (%u Title%s)": "Wii U セーブ管理 (%u タイトル%s)", - " vWii Save Management (%u Title%s)": "vWii セーブ管理 (%u タイトル%s)", - " Batch Backup": "バッチバックアップ", - "\ue000: Select Mode": "\ue000: モードの選択", - " Backup All (%u Title%s)": "すべてバックアップ (%u タイトル%s)", - " Backup Wii U (%u Title%s)": "バックアップ Wii U (%u タイトル%s)", - " Backup vWii (%u Title%s)": "バックアップ vWii (%u タイトル%s)", + " Wii U Save Management (%u Title%s)": " Wii U セーブ管理 (%u タイトル%s)", + " vWii Save Management (%u Title%s)": " vWii セーブ管理 (%u タイトル%s)", + " Batch Backup": " バッチバックアップ", + "\uE002: Options \ue000: Select Mode": "\uE002: オプション \ue000: モードの選択", + " Backup All (%u Title%s)": " すべてバックアップ (%u タイトル%s)", + " Backup Wii U (%u Title%s)": " バックアップ Wii U (%u タイトル%s)", + " Backup vWii (%u Title%s)": " バックアップ vWii (%u タイトル%s)", "\ue000: Backup \ue001: Back": "\ue000: バックアップ \ue001: 戻る", "%s Sort: %s \ue084": "%s 並べ替え: %s \ue084", " [Not Init]": "[初期化しない]", "\ue000: Select Game \ue001: Back": "\ue000: ゲームを選択 \ue001: 戻る", - " Backup savedata": "セーブデータのバックアップ", - " Restore savedata": "セーブデータの復元", - " Wipe savedata": "セーブデータを消去", - " Import from loadiine": "ローディーンからインポート", - " Export to loadiine": "ローディーンにエクスポート", - " Copy Savedata to Title in %s": "セーブデータを %s のタイトルにコピー", + " Backup savedata": " セーブデータのバックアップ", + " Restore savedata": " セーブデータの復元", + " Wipe savedata": " セーブデータを消去", + " Import from loadiine": " ローディーンからインポート", + " Export to loadiine": " ローディーンにエクスポート", + " Copy Savedata to Title in %s": " セーブデータを %s のタイトルにコピー", "\ue000: Select Task \ue001: Back": "\ue000: タスクを選択 \ue001: 戻る", "Destination:": "行き先:", "Select %s:": "%s を選択:", @@ -41,8 +41,8 @@ "Has Save": "保存あり", "Select Wii U user to delete from:": "削除するWii Uユーザーを選択:", "Select Wii U user%s:": "Wii Uユーザー%sを選択:", - " to copy from": "からコピーする", - " to copy to": "コピーする", + " to copy from": " からコピーする", + " to copy to": " コピーする", "Date: %s": "日付: %s", "Include 'common' save?": "「共通」保存を含めますか?", "yes": "はい", @@ -95,4 +95,4 @@ "Failed to delete user folder.\n%s": "ユーザー フォルダの削除に失敗しました。\n%s", "Failed to import savedata from loadiine.": "loadiine からセーブデータをインポートできませんでした。", "Failed to export savedata to loadiine.": "セーブデータを loadiine にエクスポートできませんでした。" -} +} \ No newline at end of file diff --git a/languages/korean.json b/languages/korean.json index 1c4e922..921a845 100644 --- a/languages/korean.json +++ b/languages/korean.json @@ -14,7 +14,7 @@ " Wii U Save Management (%u Title%s)": " Wii U 저장 관리 (%u 타이틀%s)", " vWii Save Management (%u Title%s)": " vWii 저장 관리(%u 타이틀%s)", " Batch Backup": " 일괄 백업", - "\ue000: Select Mode": "\ue000: 모드 선택", + "\uE002: Options \ue000: Select Mode": "\uE002: 옵션 \ue000: 모드 선택", " Backup All (%u Title%s)": " 모두 백업 (%u 타이틀%s)", " Backup Wii U (%u Title%s)": " Wii U 백업 (%u 타이틀%s)", " Backup vWii (%u Title%s)": " vWii 백업 (%u 타이틀%s)", @@ -95,4 +95,4 @@ "Failed to delete user folder.\n%s": "사용자 폴더를 삭제하지 못했습니다.\n%s", "Failed to import savedata from loadiine.": "loadiine에서 저장 데이터를 가져오지 못했습니다.", "Failed to export savedata to loadiine.": "저장 데이터를 loadiine으로 내보내지 못했습니다." -} +} \ No newline at end of file diff --git a/languages/russian.json b/languages/russian.json index 03ac0bd..1350ae9 100644 --- a/languages/russian.json +++ b/languages/russian.json @@ -14,7 +14,7 @@ " Wii U Save Management (%u Title%s)": " Управление сохранениями Wii U (%u Имя%s)", " vWii Save Management (%u Title%s)": " Управление сохранениями vWii (%u Имя%s)", " Batch Backup": " Пакетный бекап", - ": Select Mode": ": Выбор режима", + "\uE002: Options \ue000: Select Mode": "\uE002: Опции \ue000: Выбор режима", " Backup All (%u Title%s)": " Сделать бекап для всех (%u Имя%s)", " Backup Wii U (%u Title%s)": " Бекап только для Wii U (%u Имя%s)", " Backup vWii (%u Title%s)": " Бекап только для vWii (%u Имя%s)", diff --git a/languages/spanish.json b/languages/spanish.json index 26ddbcc..17db2ba 100644 --- a/languages/spanish.json +++ b/languages/spanish.json @@ -14,7 +14,7 @@ " Wii U Save Management (%u Title%s)": " Gestión de saves de Wii U (%u Título%s)", " vWii Save Management (%u Title%s)": " Gestión de saves de vWii (%u Título%s)", " Batch Backup": " Copia de seguridad en masa", - "\ue000: Select Mode": "\ue000: Seleccionar", + "\uE002: Options \ue000: Select Mode": "\uE002: Opciones \ue000: Seleccionar", " Backup All (%u Title%s)": " Copiar Todo (%u Título%s)", " Backup Wii U (%u Title%s)": " Copiar Wii U (%u Título%s)", " Backup vWii (%u Title%s)": " Copiar vWii (%u Título%s)", diff --git a/src/configMenu.cpp b/src/configMenu.cpp new file mode 100644 index 0000000..b7c3f04 --- /dev/null +++ b/src/configMenu.cpp @@ -0,0 +1,79 @@ +#include +#include +#include +#include +#include +#include +#include + +static int cursorPos = 0; +static bool redraw = true; + +static std::string language = ""; + +static void drawConfigMenuFrame() { + OSScreenClearBufferEx(SCREEN_DRC, 0x00006F00); + OSScreenClearBufferEx(SCREEN_TV, 0x00006F00); + consolePrintPos(0, 0, "SaveMii v%u.%u.%u", VERSION_MAJOR, VERSION_MINOR, VERSION_MICRO); + consolePrintPos(0, 1, "----------------------------------------------------------------------------"); + consolePrintPos(M_OFF, 2, gettext(" Language: %s"), language.c_str()); + consolePrintPos(M_OFF, 2 + cursorPos, "\u2192"); + consolePrintPos(0, 16, "----------------------------------------------------------------------------"); + consolePrintPos(0, 17, gettext("Press \ue044 to exit.")); + flipBuffers(); + WHBLogFreetypeDraw(); +} + +void configMenu() { + Input input; + language = getLoadedLanguage(); + while (AppRunning()) { + input.read(); + if (input.get(TRIGGER, PAD_BUTTON_ANY)) + redraw = true; + if (input.get(TRIGGER, PAD_BUTTON_B)) + break; + if (input.get(TRIGGER, PAD_BUTTON_RIGHT)) { + if (language == gettext("Japanese")) + loadLanguage(Swkbd_LanguageType__Italian); + else if (language == gettext("Italian")) + loadLanguage(Swkbd_LanguageType__Spanish); + else if (language == gettext("Spanish")) + loadLanguage(Swkbd_LanguageType__Chinese1); + else if (language == gettext("Traditional Chinese")) + loadLanguage(Swkbd_LanguageType__Korean); + else if (language == gettext("Korean")) + loadLanguage(Swkbd_LanguageType__Russian); + else if (language == gettext("Russian")) + loadLanguage(Swkbd_LanguageType__Chinese2); + else if (language == gettext("Simplified Chinese")) + loadLanguage(Swkbd_LanguageType__English); + else if (language == gettext("English")) + loadLanguage(Swkbd_LanguageType__Japanese); + } + if (input.get(TRIGGER, PAD_BUTTON_LEFT)) { + if (language == gettext("Japanese")) + loadLanguage(Swkbd_LanguageType__English); + else if (language == gettext("English")) + loadLanguage(Swkbd_LanguageType__Chinese2); + else if (language == gettext("Simplified Chinese")) + loadLanguage(Swkbd_LanguageType__Russian); + else if (language == gettext("Russian")) + loadLanguage(Swkbd_LanguageType__Korean); + else if (language == gettext("Korean")) + loadLanguage(Swkbd_LanguageType__Chinese1); + else if (language == gettext("Traditional Chinese")) + loadLanguage(Swkbd_LanguageType__Spanish); + else if (language == gettext("Spanish")) + loadLanguage(Swkbd_LanguageType__Italian); + else if (language == gettext("Italian")) + loadLanguage(Swkbd_LanguageType__Japanese); + } + if (redraw) { + language = getLoadedLanguage(); + drawConfigMenuFrame(); + redraw = false; + } + } + return; +} \ No newline at end of file diff --git a/src/input.cpp b/src/input.cpp index d90646b..d7b4826 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -55,6 +55,12 @@ bool Input::get(ButtonState state, Button button) { if (kpadClassicState & WPAD_CLASSIC_BUTTON_B) return true; if (kpadProState & WPAD_PRO_BUTTON_B) return true; break; + case PAD_BUTTON_X: + if (vpadState & VPAD_BUTTON_X) return true; + if (kpadState & WPAD_BUTTON_1) return true; + if (kpadClassicState & WPAD_CLASSIC_BUTTON_X) return true; + if (kpadProState & WPAD_PRO_BUTTON_X) return true; + break; case PAD_BUTTON_UP: if (vpadState & VPAD_BUTTON_UP) return true; if (vpadState & VPAD_STICK_L_EMULATION_UP) return true; diff --git a/src/language.cpp b/src/language.cpp index cfb1022..53bd87f 100644 --- a/src/language.cpp +++ b/src/language.cpp @@ -1,3 +1,5 @@ +#include "log_freetype.h" +#include #include #include @@ -20,14 +22,19 @@ static MSG *baseMSG = NULL; Swkbd_LanguageType sysLang; +Swkbd_LanguageType loadedLang; + void loadLanguage(Swkbd_LanguageType language) { + loadedLang = language; switch (language) { case Swkbd_LanguageType__Japanese: + setFont(OS_SHAREDDATATYPE_FONT_STANDARD); gettextLoadLanguage("romfs:/japanese.json"); break; - /*case Swkbd_LanguageType__English: - gettextLoadLanguage("romfs:/english.json"); - break;*/ + case Swkbd_LanguageType__English: + setFont(OS_SHAREDDATATYPE_FONT_STANDARD); + gettextLoadLanguage("romfs:/english.json"); + break; /*case Swkbd_LanguageType__French: gettextLoadLanguage("romfs:/french.json"); break; @@ -35,15 +42,19 @@ void loadLanguage(Swkbd_LanguageType language) { gettextLoadLanguage("romfs:/german.json"); break;*/ case Swkbd_LanguageType__Italian: + setFont(OS_SHAREDDATATYPE_FONT_STANDARD); gettextLoadLanguage("romfs:/italian.json"); break; case Swkbd_LanguageType__Spanish: + setFont(OS_SHAREDDATATYPE_FONT_STANDARD); gettextLoadLanguage("romfs:/spanish.json"); break; case Swkbd_LanguageType__Chinese1: + setFont(OS_SHAREDDATATYPE_FONT_CHINESE); gettextLoadLanguage("romfs:/TChinese.json"); break; case Swkbd_LanguageType__Korean: + setFont(OS_SHAREDDATATYPE_FONT_KOREAN); gettextLoadLanguage("romfs:/korean.json"); break; /* @@ -54,13 +65,61 @@ void loadLanguage(Swkbd_LanguageType language) { gettextLoadLanguage("romfs:/portuguese.json"); break;*/ case Swkbd_LanguageType__Russian: + setFont(OS_SHAREDDATATYPE_FONT_STANDARD); gettextLoadLanguage("romfs:/russian.json"); break; case Swkbd_LanguageType__Chinese2: + setFont(OS_SHAREDDATATYPE_FONT_CHINESE); gettextLoadLanguage("romfs:/SChinese.json"); break; default: - //gettextLoadLanguage("romfs:/english.json"); + setFont(OS_SHAREDDATATYPE_FONT_STANDARD); + gettextLoadLanguage("romfs:/english.json"); + break; + } +} + +std::string getLoadedLanguage() { + switch (loadedLang) { + case Swkbd_LanguageType__Japanese: + return gettext("Japanese"); + break; + case Swkbd_LanguageType__English: + return gettext("English"); + break; + /*case Swkbd_LanguageType__French: + gettextLoadLanguage("romfs:/french.json"); + break; + case Swkbd_LanguageType__German: + gettextLoadLanguage("romfs:/german.json"); + break;*/ + case Swkbd_LanguageType__Italian: + return gettext("Italian"); + break; + case Swkbd_LanguageType__Spanish: + return gettext("Spanish"); + break; + case Swkbd_LanguageType__Chinese1: + return gettext("Traditional Chinese"); + break; + case Swkbd_LanguageType__Korean: + return gettext("Korean"); + break; + /* + case Swkbd_LanguageType__Dutch: + gettextLoadLanguage("romfs:/dutch.json"); + break; + case Swkbd_LanguageType__Potuguese: + gettextLoadLanguage("romfs:/portuguese.json"); + break;*/ + case Swkbd_LanguageType__Russian: + return gettext("Russian"); + break; + case Swkbd_LanguageType__Chinese2: + return gettext("Simplified Chinese"); + break; + default: + return gettext("English"); break; } } diff --git a/src/log_freetype.cpp b/src/log_freetype.cpp index 51acc30..1d978fe 100644 --- a/src/log_freetype.cpp +++ b/src/log_freetype.cpp @@ -143,6 +143,23 @@ bool WHBLogFreetypeInit() { return false; } +bool setFont(OSSharedDataType font) { + FT_Error result; + if ((result = FT_Init_FreeType(&fontLibrary)) != 0) + return true; + + uint32_t fontSize; + OSGetSharedData(font, 0, (void **) &fontBuffer, &fontSize); + + if ((result = FT_New_Memory_Face(fontLibrary, fontBuffer, fontSize, 0, &fontFace)) != 0) + return true; + if ((result = FT_Select_Charmap(fontFace, FT_ENCODING_UNICODE)) != 0) + return true; + if ((result = FT_Set_Pixel_Sizes(fontFace, 0, 22))) + return true; + return false; +} + void WHBLogFreetypeFree() { FT_Done_Face(fontFace); FT_Done_FreeType(fontLibrary); diff --git a/src/main.cpp b/src/main.cpp index 8ba9ecc..caa2441 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,4 +1,6 @@ +#include #include +#include #include #include #include @@ -8,11 +10,6 @@ #include #include -#define VERSION_MAJOR 1 -#define VERSION_MINOR 4 -#define VERSION_MICRO 8 -#define M_OFF 1 - static uint8_t slot = 0; static int8_t allusers = -1, allusers_d = -1, sdusers = -1; static bool common = true; @@ -476,7 +473,7 @@ int main() { (vWiiTitlesCount > 1) ? "s" : ""); consolePrintPos(M_OFF, 4, gettext(" Batch Backup")); consolePrintPos(M_OFF, 2 + cursor, "\u2192"); - consolePrintPosAligned(17, 4, 2, gettext("\ue000: Select Mode")); + consolePrintPosAligned(17, 4, 2, gettext("\uE002: Options \ue000: Select Mode")); } break; case selectTitle: { if (mode == batchBackup) { @@ -1055,6 +1052,8 @@ int main() { } if (menu == selectTask) cursor = cursort; + } else if (input.get(TRIGGER, PAD_BUTTON_X) && menu == mainMenu) { + configMenu(); } }