diff --git a/build.rs b/build.rs index 550847d..4a15829 100644 --- a/build.rs +++ b/build.rs @@ -3,6 +3,7 @@ fn main() { println!("cargo::rerun-if-changed=retroachievements"); println!("cargo::rerun-if-changed=src/compat"); println!("cargo::rerun-if-changed=data/translations"); + println!("cargo::rerun-if-changed=data/ui"); #[cfg(feature = "gui")] { diff --git a/data/translations/de/LC_MESSAGES/gopher64.po b/data/translations/de/LC_MESSAGES/gopher64.po index d164013..4b5435c 100644 --- a/data/translations/de/LC_MESSAGES/gopher64.po +++ b/data/translations/de/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-14 14:53+0000\n" +"POT-Creation-Date: 2026-05-19 06:44+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: German\n" @@ -47,42 +47,42 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Spenden (über GitHub)" -#: src/ui/gui/appwindow.slint:95 +#: src/ui/gui/appwindow.slint:103 msgctxt "Menu" msgid "Local Game" msgstr "Lokales Spiel" -#: src/ui/gui/appwindow.slint:96 +#: src/ui/gui/appwindow.slint:107 msgctxt "Menu" msgid "Controller Config" msgstr "Controller-Konfiguration" -#: src/ui/gui/appwindow.slint:97 +#: src/ui/gui/appwindow.slint:111 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:98 +#: src/ui/gui/appwindow.slint:115 msgctxt "Menu" msgid "Cheats" msgstr "Cheats" -#: src/ui/gui/appwindow.slint:99 +#: src/ui/gui/appwindow.slint:119 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:100 +#: src/ui/gui/appwindow.slint:123 msgctxt "Menu" msgid "Settings" msgstr "Einstellungen" -#: src/ui/gui/appwindow.slint:101 +#: src/ui/gui/appwindow.slint:127 msgctxt "Menu" msgid "About" msgstr "Über" -#: src/ui/gui/appwindow.slint:195 +#: src/ui/gui/appwindow.slint:248 msgctxt "ErrorDialog" msgid "Error" msgstr "Fehler" @@ -107,45 +107,40 @@ msgctxt "Cheats" msgid "No Cheats Available" msgstr "Keine Cheats verfügbar" -#: src/ui/gui/controller_page.slint:26 +#: src/ui/gui/controller_page.slint:80 +msgctxt "ControllerSettingsGrid" +msgid "Enabled" +msgstr "Aktiviert" + +#: src/ui/gui/controller_page.slint:93 +msgctxt "ControllerSettingsGrid" +msgid "Transfer Pak" +msgstr "Transfer Pak" + +#: src/ui/gui/controller_page.slint:107 +msgctxt "ControllerSettingsGrid" +msgid "Profile" +msgstr "Profil" + +#: src/ui/gui/controller_page.slint:157 msgctxt "ControllerConfig" msgid "Controller Configuration" msgstr "Controller-Konfiguration" -#: src/ui/gui/controller_page.slint:37 +#: src/ui/gui/controller_page.slint:168 msgctxt "ControllerConfig" msgid "Configure Input Profile" msgstr "Eingabeprofil konfigurieren" -#: src/ui/gui/controller_page.slint:49 +#: src/ui/gui/controller_page.slint:176 msgctxt "ControllerConfig" -msgid "Port" -msgstr "Port" +msgid "Controller Settings" +msgstr "Controller-Einstellungen" -#: src/ui/gui/controller_page.slint:60 +#: src/ui/gui/controller_page.slint:186 msgctxt "ControllerConfig" -msgid "Enabled" -msgstr "Aktiviert" - -#: src/ui/gui/controller_page.slint:73 -msgctxt "ControllerConfig" -msgid "Emulate VRU" -msgstr "VRU emulieren" - -#: src/ui/gui/controller_page.slint:87 -msgctxt "ControllerConfig" -msgid "Transfer Pak" -msgstr "Transfer Pak" - -#: src/ui/gui/controller_page.slint:101 -msgctxt "ControllerConfig" -msgid "Profile" -msgstr "Profil" - -#: src/ui/gui/controller_page.slint:117 -msgctxt "ControllerConfig" -msgid "Controller" -msgstr "Controller" +msgid "Controller Assignment" +msgstr "Controller-Zuweisung" #: src/ui/gui/input_profile.slint:10 msgctxt "InputProfileDialog" @@ -486,62 +481,75 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Unterstützte Spiele anzeigen" -#: src/ui/gui/settings_page.slint:22 +#: src/ui/gui/settings_page.slint:23 msgctxt "Settings" msgid "Settings" msgstr "Einstellungen" -#: src/ui/gui/settings_page.slint:29 +#: src/ui/gui/settings_page.slint:30 msgctxt "Settings" msgid "Resolution:" msgstr "Auflösung:" -#: src/ui/gui/settings_page.slint:45 +#: src/ui/gui/settings_page.slint:46 msgctxt "Settings" msgid "SSAA downscaling" msgstr "SSAA-Herunterskalierung" -#: src/ui/gui/settings_page.slint:56 +#: src/ui/gui/settings_page.slint:57 msgctxt "Settings" msgid "Integer Scaling" msgstr "Pixelgenaue Skalierung" -#: src/ui/gui/settings_page.slint:67 +#: src/ui/gui/settings_page.slint:68 msgctxt "Settings" msgid "Fullscreen" msgstr "Vollbild" -#: src/ui/gui/settings_page.slint:78 +#: src/ui/gui/settings_page.slint:79 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "16:9 (gestreckt)" -#: src/ui/gui/settings_page.slint:89 +#: src/ui/gui/settings_page.slint:90 msgctxt "Settings" msgid "VSync" msgstr "VSync" -#: src/ui/gui/settings_page.slint:100 +#: src/ui/gui/settings_page.slint:101 msgctxt "Settings" msgid "Apply CRT shader" msgstr "CRT-Shader anwenden" -#: src/ui/gui/settings_page.slint:115 +#: src/ui/gui/settings_page.slint:116 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "N64-CPU übertakten (kann Fehler verursachen)" -#: src/ui/gui/settings_page.slint:126 +#: src/ui/gui/settings_page.slint:127 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Expansion Pak deaktivieren" -#: src/ui/gui/settings_page.slint:137 +#: src/ui/gui/settings_page.slint:138 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "UNFLoader emulieren" +#: src/ui/gui/settings_page.slint:149 +msgctxt "Settings" +msgid "Emulate VRU" +msgstr "VRU emulieren" + #: src/ui/gui/vru_dialog.slint:7 msgctxt "VruDialog" msgid "What Would You Like To Say?" msgstr "Was möchten Sie sagen?" + +#~ msgctxt "ControllerConfig" +#~ msgid "Port" +#~ msgstr "Port" + +#~ msgctxt "ControllerConfig" +#~ msgid "Controller" +#~ msgstr "Controller" diff --git a/data/translations/es/LC_MESSAGES/gopher64.po b/data/translations/es/LC_MESSAGES/gopher64.po index a862e46..5d8cef6 100644 --- a/data/translations/es/LC_MESSAGES/gopher64.po +++ b/data/translations/es/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-14 14:53+0000\n" +"POT-Creation-Date: 2026-05-19 06:44+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: Gemini\n" "Language-Team: Spanish (Spain)\n" @@ -47,42 +47,42 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Donar (a través de GitHub)" -#: src/ui/gui/appwindow.slint:95 +#: src/ui/gui/appwindow.slint:103 msgctxt "Menu" msgid "Local Game" msgstr "Juego local" -#: src/ui/gui/appwindow.slint:96 +#: src/ui/gui/appwindow.slint:107 msgctxt "Menu" msgid "Controller Config" msgstr "Config. del mando" -#: src/ui/gui/appwindow.slint:97 +#: src/ui/gui/appwindow.slint:111 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:98 +#: src/ui/gui/appwindow.slint:115 msgctxt "Menu" msgid "Cheats" msgstr "Trucos" -#: src/ui/gui/appwindow.slint:99 +#: src/ui/gui/appwindow.slint:119 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:100 +#: src/ui/gui/appwindow.slint:123 msgctxt "Menu" msgid "Settings" msgstr "Ajustes" -#: src/ui/gui/appwindow.slint:101 +#: src/ui/gui/appwindow.slint:127 msgctxt "Menu" msgid "About" msgstr "Acerca de" -#: src/ui/gui/appwindow.slint:195 +#: src/ui/gui/appwindow.slint:248 msgctxt "ErrorDialog" msgid "Error" msgstr "Error" @@ -107,45 +107,40 @@ msgctxt "Cheats" msgid "No Cheats Available" msgstr "No hay trucos disponibles" -#: src/ui/gui/controller_page.slint:26 +#: src/ui/gui/controller_page.slint:80 +msgctxt "ControllerSettingsGrid" +msgid "Enabled" +msgstr "Activado" + +#: src/ui/gui/controller_page.slint:93 +msgctxt "ControllerSettingsGrid" +msgid "Transfer Pak" +msgstr "Transfer Pak" + +#: src/ui/gui/controller_page.slint:107 +msgctxt "ControllerSettingsGrid" +msgid "Profile" +msgstr "Perfil" + +#: src/ui/gui/controller_page.slint:157 msgctxt "ControllerConfig" msgid "Controller Configuration" msgstr "Configuración del mando" -#: src/ui/gui/controller_page.slint:37 +#: src/ui/gui/controller_page.slint:168 msgctxt "ControllerConfig" msgid "Configure Input Profile" msgstr "Configurar perfil de entrada" -#: src/ui/gui/controller_page.slint:49 +#: src/ui/gui/controller_page.slint:176 msgctxt "ControllerConfig" -msgid "Port" -msgstr "Puerto" +msgid "Controller Settings" +msgstr "Ajustes del mando" -#: src/ui/gui/controller_page.slint:60 +#: src/ui/gui/controller_page.slint:186 msgctxt "ControllerConfig" -msgid "Enabled" -msgstr "Activado" - -#: src/ui/gui/controller_page.slint:73 -msgctxt "ControllerConfig" -msgid "Emulate VRU" -msgstr "Emular VRU" - -#: src/ui/gui/controller_page.slint:87 -msgctxt "ControllerConfig" -msgid "Transfer Pak" -msgstr "Transfer Pak" - -#: src/ui/gui/controller_page.slint:101 -msgctxt "ControllerConfig" -msgid "Profile" -msgstr "Perfil" - -#: src/ui/gui/controller_page.slint:117 -msgctxt "ControllerConfig" -msgid "Controller" -msgstr "Mando" +msgid "Controller Assignment" +msgstr "Asignación del mando" #: src/ui/gui/input_profile.slint:10 msgctxt "InputProfileDialog" @@ -485,62 +480,75 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Ver juegos compatibles" -#: src/ui/gui/settings_page.slint:22 +#: src/ui/gui/settings_page.slint:23 msgctxt "Settings" msgid "Settings" msgstr "Ajustes" -#: src/ui/gui/settings_page.slint:29 +#: src/ui/gui/settings_page.slint:30 msgctxt "Settings" msgid "Resolution:" msgstr "Resolución:" -#: src/ui/gui/settings_page.slint:45 +#: src/ui/gui/settings_page.slint:46 msgctxt "Settings" msgid "SSAA downscaling" msgstr "Reducción de escala SSAA" -#: src/ui/gui/settings_page.slint:56 +#: src/ui/gui/settings_page.slint:57 msgctxt "Settings" msgid "Integer Scaling" msgstr "Escalado por enteros" -#: src/ui/gui/settings_page.slint:67 +#: src/ui/gui/settings_page.slint:68 msgctxt "Settings" msgid "Fullscreen" msgstr "Pantalla completa" -#: src/ui/gui/settings_page.slint:78 +#: src/ui/gui/settings_page.slint:79 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "Pantalla ancha (estirado)" -#: src/ui/gui/settings_page.slint:89 +#: src/ui/gui/settings_page.slint:90 msgctxt "Settings" msgid "VSync" msgstr "Sincronización vertical (VSync)" -#: src/ui/gui/settings_page.slint:100 +#: src/ui/gui/settings_page.slint:101 msgctxt "Settings" msgid "Apply CRT shader" msgstr "Aplicar sombreador CRT" -#: src/ui/gui/settings_page.slint:115 +#: src/ui/gui/settings_page.slint:116 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "Overclock CPU N64 (puede causar errores)" -#: src/ui/gui/settings_page.slint:126 +#: src/ui/gui/settings_page.slint:127 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Desactivar Expansion Pak" -#: src/ui/gui/settings_page.slint:137 +#: src/ui/gui/settings_page.slint:138 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "Emular UNFLoader" +#: src/ui/gui/settings_page.slint:149 +msgctxt "Settings" +msgid "Emulate VRU" +msgstr "Emular VRU" + #: src/ui/gui/vru_dialog.slint:7 msgctxt "VruDialog" msgid "What Would You Like To Say?" msgstr "¿Qué te gustaría decir?" + +#~ msgctxt "ControllerConfig" +#~ msgid "Port" +#~ msgstr "Puerto" + +#~ msgctxt "ControllerConfig" +#~ msgid "Controller" +#~ msgstr "Mando" diff --git a/data/translations/fr/LC_MESSAGES/gopher64.po b/data/translations/fr/LC_MESSAGES/gopher64.po index 71b7e0e..abec052 100644 --- a/data/translations/fr/LC_MESSAGES/gopher64.po +++ b/data/translations/fr/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-14 14:53+0000\n" +"POT-Creation-Date: 2026-05-19 06:44+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: French (France)\n" @@ -47,42 +47,42 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Faire un don (via GitHub)" -#: src/ui/gui/appwindow.slint:95 +#: src/ui/gui/appwindow.slint:103 msgctxt "Menu" msgid "Local Game" msgstr "Jeu local" -#: src/ui/gui/appwindow.slint:96 +#: src/ui/gui/appwindow.slint:107 msgctxt "Menu" msgid "Controller Config" msgstr "Configuration manette" -#: src/ui/gui/appwindow.slint:97 +#: src/ui/gui/appwindow.slint:111 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:98 +#: src/ui/gui/appwindow.slint:115 msgctxt "Menu" msgid "Cheats" msgstr "Triche" -#: src/ui/gui/appwindow.slint:99 +#: src/ui/gui/appwindow.slint:119 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:100 +#: src/ui/gui/appwindow.slint:123 msgctxt "Menu" msgid "Settings" msgstr "Paramètres" -#: src/ui/gui/appwindow.slint:101 +#: src/ui/gui/appwindow.slint:127 msgctxt "Menu" msgid "About" msgstr "À propos" -#: src/ui/gui/appwindow.slint:195 +#: src/ui/gui/appwindow.slint:248 msgctxt "ErrorDialog" msgid "Error" msgstr "Erreur" @@ -107,45 +107,40 @@ msgctxt "Cheats" msgid "No Cheats Available" msgstr "Aucune triche disponible" -#: src/ui/gui/controller_page.slint:26 +#: src/ui/gui/controller_page.slint:80 +msgctxt "ControllerSettingsGrid" +msgid "Enabled" +msgstr "Activé" + +#: src/ui/gui/controller_page.slint:93 +msgctxt "ControllerSettingsGrid" +msgid "Transfer Pak" +msgstr "Transfer Pak" + +#: src/ui/gui/controller_page.slint:107 +msgctxt "ControllerSettingsGrid" +msgid "Profile" +msgstr "Profil" + +#: src/ui/gui/controller_page.slint:157 msgctxt "ControllerConfig" msgid "Controller Configuration" msgstr "Configuration de la manette" -#: src/ui/gui/controller_page.slint:37 +#: src/ui/gui/controller_page.slint:168 msgctxt "ControllerConfig" msgid "Configure Input Profile" msgstr "Configurer le profil d'entrée" -#: src/ui/gui/controller_page.slint:49 +#: src/ui/gui/controller_page.slint:176 msgctxt "ControllerConfig" -msgid "Port" -msgstr "Port" +msgid "Controller Settings" +msgstr "Paramètres de la manette" -#: src/ui/gui/controller_page.slint:60 +#: src/ui/gui/controller_page.slint:186 msgctxt "ControllerConfig" -msgid "Enabled" -msgstr "Activé" - -#: src/ui/gui/controller_page.slint:73 -msgctxt "ControllerConfig" -msgid "Emulate VRU" -msgstr "Émuler le VRU" - -#: src/ui/gui/controller_page.slint:87 -msgctxt "ControllerConfig" -msgid "Transfer Pak" -msgstr "Transfer Pak" - -#: src/ui/gui/controller_page.slint:101 -msgctxt "ControllerConfig" -msgid "Profile" -msgstr "Profil" - -#: src/ui/gui/controller_page.slint:117 -msgctxt "ControllerConfig" -msgid "Controller" -msgstr "Manette" +msgid "Controller Assignment" +msgstr "Attribution de la manette" #: src/ui/gui/input_profile.slint:10 msgctxt "InputProfileDialog" @@ -488,62 +483,75 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Voir les jeux pris en charge" -#: src/ui/gui/settings_page.slint:22 +#: src/ui/gui/settings_page.slint:23 msgctxt "Settings" msgid "Settings" msgstr "Paramètres" -#: src/ui/gui/settings_page.slint:29 +#: src/ui/gui/settings_page.slint:30 msgctxt "Settings" msgid "Resolution:" msgstr "Résolution :" -#: src/ui/gui/settings_page.slint:45 +#: src/ui/gui/settings_page.slint:46 msgctxt "Settings" msgid "SSAA downscaling" msgstr "Réduction SSAA" -#: src/ui/gui/settings_page.slint:56 +#: src/ui/gui/settings_page.slint:57 msgctxt "Settings" msgid "Integer Scaling" msgstr "Mise à l'échelle par entiers" -#: src/ui/gui/settings_page.slint:67 +#: src/ui/gui/settings_page.slint:68 msgctxt "Settings" msgid "Fullscreen" msgstr "Plein écran" -#: src/ui/gui/settings_page.slint:78 +#: src/ui/gui/settings_page.slint:79 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "Écran large (étiré)" -#: src/ui/gui/settings_page.slint:89 +#: src/ui/gui/settings_page.slint:90 msgctxt "Settings" msgid "VSync" msgstr "Synchro verticale" -#: src/ui/gui/settings_page.slint:100 +#: src/ui/gui/settings_page.slint:101 msgctxt "Settings" msgid "Apply CRT shader" msgstr "Appliquer le filtre CRT" -#: src/ui/gui/settings_page.slint:115 +#: src/ui/gui/settings_page.slint:116 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "Surcharger le CPU N64 (risque de bugs)" -#: src/ui/gui/settings_page.slint:126 +#: src/ui/gui/settings_page.slint:127 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Désactiver l'Expansion Pak" -#: src/ui/gui/settings_page.slint:137 +#: src/ui/gui/settings_page.slint:138 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "Émuler UNFLoader" +#: src/ui/gui/settings_page.slint:149 +msgctxt "Settings" +msgid "Emulate VRU" +msgstr "Émuler le VRU" + #: src/ui/gui/vru_dialog.slint:7 msgctxt "VruDialog" msgid "What Would You Like To Say?" msgstr "Que souhaitez-vous dire ?" + +#~ msgctxt "ControllerConfig" +#~ msgid "Port" +#~ msgstr "Port" + +#~ msgctxt "ControllerConfig" +#~ msgid "Controller" +#~ msgstr "Manette" diff --git a/data/translations/gopher64.pot b/data/translations/gopher64.pot index 16574dd..862fb2b 100644 --- a/data/translations/gopher64.pot +++ b/data/translations/gopher64.pot @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2026-05-14 14:53+0000\n" +"POT-Creation-Date: 2026-05-19 06:44+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -47,42 +47,42 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "" -#: src/ui/gui/appwindow.slint:95 +#: src/ui/gui/appwindow.slint:103 msgctxt "Menu" msgid "Local Game" msgstr "" -#: src/ui/gui/appwindow.slint:96 +#: src/ui/gui/appwindow.slint:107 msgctxt "Menu" msgid "Controller Config" msgstr "" -#: src/ui/gui/appwindow.slint:97 +#: src/ui/gui/appwindow.slint:111 msgctxt "Menu" msgid "Netplay" msgstr "" -#: src/ui/gui/appwindow.slint:98 +#: src/ui/gui/appwindow.slint:115 msgctxt "Menu" msgid "Cheats" msgstr "" -#: src/ui/gui/appwindow.slint:99 +#: src/ui/gui/appwindow.slint:119 msgctxt "Menu" msgid "RetroAchievements" msgstr "" -#: src/ui/gui/appwindow.slint:100 +#: src/ui/gui/appwindow.slint:123 msgctxt "Menu" msgid "Settings" msgstr "" -#: src/ui/gui/appwindow.slint:101 +#: src/ui/gui/appwindow.slint:127 msgctxt "Menu" msgid "About" msgstr "" -#: src/ui/gui/appwindow.slint:195 +#: src/ui/gui/appwindow.slint:248 msgctxt "ErrorDialog" msgid "Error" msgstr "" @@ -107,44 +107,39 @@ msgctxt "Cheats" msgid "No Cheats Available" msgstr "" -#: src/ui/gui/controller_page.slint:26 +#: src/ui/gui/controller_page.slint:80 +msgctxt "ControllerSettingsGrid" +msgid "Enabled" +msgstr "" + +#: src/ui/gui/controller_page.slint:93 +msgctxt "ControllerSettingsGrid" +msgid "Transfer Pak" +msgstr "" + +#: src/ui/gui/controller_page.slint:107 +msgctxt "ControllerSettingsGrid" +msgid "Profile" +msgstr "" + +#: src/ui/gui/controller_page.slint:157 msgctxt "ControllerConfig" msgid "Controller Configuration" msgstr "" -#: src/ui/gui/controller_page.slint:37 +#: src/ui/gui/controller_page.slint:168 msgctxt "ControllerConfig" msgid "Configure Input Profile" msgstr "" -#: src/ui/gui/controller_page.slint:49 +#: src/ui/gui/controller_page.slint:176 msgctxt "ControllerConfig" -msgid "Port" +msgid "Controller Settings" msgstr "" -#: src/ui/gui/controller_page.slint:60 +#: src/ui/gui/controller_page.slint:186 msgctxt "ControllerConfig" -msgid "Enabled" -msgstr "" - -#: src/ui/gui/controller_page.slint:73 -msgctxt "ControllerConfig" -msgid "Emulate VRU" -msgstr "" - -#: src/ui/gui/controller_page.slint:87 -msgctxt "ControllerConfig" -msgid "Transfer Pak" -msgstr "" - -#: src/ui/gui/controller_page.slint:101 -msgctxt "ControllerConfig" -msgid "Profile" -msgstr "" - -#: src/ui/gui/controller_page.slint:117 -msgctxt "ControllerConfig" -msgid "Controller" +msgid "Controller Assignment" msgstr "" #: src/ui/gui/input_profile.slint:10 @@ -483,61 +478,66 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "" -#: src/ui/gui/settings_page.slint:22 +#: src/ui/gui/settings_page.slint:23 msgctxt "Settings" msgid "Settings" msgstr "" -#: src/ui/gui/settings_page.slint:29 +#: src/ui/gui/settings_page.slint:30 msgctxt "Settings" msgid "Resolution:" msgstr "" -#: src/ui/gui/settings_page.slint:45 +#: src/ui/gui/settings_page.slint:46 msgctxt "Settings" msgid "SSAA downscaling" msgstr "" -#: src/ui/gui/settings_page.slint:56 +#: src/ui/gui/settings_page.slint:57 msgctxt "Settings" msgid "Integer Scaling" msgstr "" -#: src/ui/gui/settings_page.slint:67 +#: src/ui/gui/settings_page.slint:68 msgctxt "Settings" msgid "Fullscreen" msgstr "" -#: src/ui/gui/settings_page.slint:78 +#: src/ui/gui/settings_page.slint:79 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "" -#: src/ui/gui/settings_page.slint:89 +#: src/ui/gui/settings_page.slint:90 msgctxt "Settings" msgid "VSync" msgstr "" -#: src/ui/gui/settings_page.slint:100 +#: src/ui/gui/settings_page.slint:101 msgctxt "Settings" msgid "Apply CRT shader" msgstr "" -#: src/ui/gui/settings_page.slint:115 +#: src/ui/gui/settings_page.slint:116 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "" -#: src/ui/gui/settings_page.slint:126 +#: src/ui/gui/settings_page.slint:127 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "" -#: src/ui/gui/settings_page.slint:137 +#: src/ui/gui/settings_page.slint:138 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "" +#: src/ui/gui/settings_page.slint:149 +msgctxt "Settings" +msgid "Emulate VRU" +msgstr "" + #: src/ui/gui/vru_dialog.slint:7 msgctxt "VruDialog" msgid "What Would You Like To Say?" diff --git a/data/translations/ja/LC_MESSAGES/gopher64.po b/data/translations/ja/LC_MESSAGES/gopher64.po index 6ddf13b..25da6d2 100644 --- a/data/translations/ja/LC_MESSAGES/gopher64.po +++ b/data/translations/ja/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-14 14:53+0000\n" +"POT-Creation-Date: 2026-05-19 06:44+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Japanese\n" @@ -47,42 +47,42 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "GitHubで寄付" -#: src/ui/gui/appwindow.slint:95 +#: src/ui/gui/appwindow.slint:103 msgctxt "Menu" msgid "Local Game" msgstr "ローカルゲーム" -#: src/ui/gui/appwindow.slint:96 +#: src/ui/gui/appwindow.slint:107 msgctxt "Menu" msgid "Controller Config" msgstr "コントローラー設定" -#: src/ui/gui/appwindow.slint:97 +#: src/ui/gui/appwindow.slint:111 msgctxt "Menu" msgid "Netplay" msgstr "ネットプレイ" -#: src/ui/gui/appwindow.slint:98 +#: src/ui/gui/appwindow.slint:115 msgctxt "Menu" msgid "Cheats" msgstr "チート" -#: src/ui/gui/appwindow.slint:99 +#: src/ui/gui/appwindow.slint:119 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:100 +#: src/ui/gui/appwindow.slint:123 msgctxt "Menu" msgid "Settings" msgstr "設定" -#: src/ui/gui/appwindow.slint:101 +#: src/ui/gui/appwindow.slint:127 msgctxt "Menu" msgid "About" msgstr "バージョン情報" -#: src/ui/gui/appwindow.slint:195 +#: src/ui/gui/appwindow.slint:248 msgctxt "ErrorDialog" msgid "Error" msgstr "エラー" @@ -107,45 +107,40 @@ msgctxt "Cheats" msgid "No Cheats Available" msgstr "利用できるチートはありません" -#: src/ui/gui/controller_page.slint:26 +#: src/ui/gui/controller_page.slint:80 +msgctxt "ControllerSettingsGrid" +msgid "Enabled" +msgstr "有効" + +#: src/ui/gui/controller_page.slint:93 +msgctxt "ControllerSettingsGrid" +msgid "Transfer Pak" +msgstr "Transfer Pak" + +#: src/ui/gui/controller_page.slint:107 +msgctxt "ControllerSettingsGrid" +msgid "Profile" +msgstr "プロファイル" + +#: src/ui/gui/controller_page.slint:157 msgctxt "ControllerConfig" msgid "Controller Configuration" msgstr "コントローラー設定" -#: src/ui/gui/controller_page.slint:37 +#: src/ui/gui/controller_page.slint:168 msgctxt "ControllerConfig" msgid "Configure Input Profile" msgstr "入力プロファイルを設定" -#: src/ui/gui/controller_page.slint:49 +#: src/ui/gui/controller_page.slint:176 msgctxt "ControllerConfig" -msgid "Port" -msgstr "ポート" +msgid "Controller Settings" +msgstr "コントローラー詳細設定" -#: src/ui/gui/controller_page.slint:60 +#: src/ui/gui/controller_page.slint:186 msgctxt "ControllerConfig" -msgid "Enabled" -msgstr "有効" - -#: src/ui/gui/controller_page.slint:73 -msgctxt "ControllerConfig" -msgid "Emulate VRU" -msgstr "VRUをエミュレート" - -#: src/ui/gui/controller_page.slint:87 -msgctxt "ControllerConfig" -msgid "Transfer Pak" -msgstr "Transfer Pak" - -#: src/ui/gui/controller_page.slint:101 -msgctxt "ControllerConfig" -msgid "Profile" -msgstr "プロファイル" - -#: src/ui/gui/controller_page.slint:117 -msgctxt "ControllerConfig" -msgid "Controller" -msgstr "コントローラー" +msgid "Controller Assignment" +msgstr "コントローラー割り当て" #: src/ui/gui/input_profile.slint:10 msgctxt "InputProfileDialog" @@ -485,62 +480,75 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "対応ゲームを表示" -#: src/ui/gui/settings_page.slint:22 +#: src/ui/gui/settings_page.slint:23 msgctxt "Settings" msgid "Settings" msgstr "設定" -#: src/ui/gui/settings_page.slint:29 +#: src/ui/gui/settings_page.slint:30 msgctxt "Settings" msgid "Resolution:" msgstr "解像度:" -#: src/ui/gui/settings_page.slint:45 +#: src/ui/gui/settings_page.slint:46 msgctxt "Settings" msgid "SSAA downscaling" msgstr "SSAAダウンスケール" -#: src/ui/gui/settings_page.slint:56 +#: src/ui/gui/settings_page.slint:57 msgctxt "Settings" msgid "Integer Scaling" msgstr "整数倍スケーリング" -#: src/ui/gui/settings_page.slint:67 +#: src/ui/gui/settings_page.slint:68 msgctxt "Settings" msgid "Fullscreen" msgstr "全画面表示" -#: src/ui/gui/settings_page.slint:78 +#: src/ui/gui/settings_page.slint:79 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "ワイド画面(伸ばす)" -#: src/ui/gui/settings_page.slint:89 +#: src/ui/gui/settings_page.slint:90 msgctxt "Settings" msgid "VSync" msgstr "垂直同期(VSync)" -#: src/ui/gui/settings_page.slint:100 +#: src/ui/gui/settings_page.slint:101 msgctxt "Settings" msgid "Apply CRT shader" msgstr "CRTシェーダーを適用" -#: src/ui/gui/settings_page.slint:115 +#: src/ui/gui/settings_page.slint:116 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "N64のCPUをオーバークロック(不具合の原因になることがあります)" -#: src/ui/gui/settings_page.slint:126 +#: src/ui/gui/settings_page.slint:127 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "拡張パックを無効にする" -#: src/ui/gui/settings_page.slint:137 +#: src/ui/gui/settings_page.slint:138 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "UNFLoaderをエミュレート" +#: src/ui/gui/settings_page.slint:149 +msgctxt "Settings" +msgid "Emulate VRU" +msgstr "VRUをエミュレート" + #: src/ui/gui/vru_dialog.slint:7 msgctxt "VruDialog" msgid "What Would You Like To Say?" msgstr "何と言いますか?" + +#~ msgctxt "ControllerConfig" +#~ msgid "Port" +#~ msgstr "ポート" + +#~ msgctxt "ControllerConfig" +#~ msgid "Controller" +#~ msgstr "コントローラー" diff --git a/data/translations/nl/LC_MESSAGES/gopher64.po b/data/translations/nl/LC_MESSAGES/gopher64.po index 2162354..18b0735 100644 --- a/data/translations/nl/LC_MESSAGES/gopher64.po +++ b/data/translations/nl/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-14 14:53+0000\n" +"POT-Creation-Date: 2026-05-19 06:44+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Dutch (Netherlands)\n" @@ -47,42 +47,42 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Doneren (via GitHub)" -#: src/ui/gui/appwindow.slint:95 +#: src/ui/gui/appwindow.slint:103 msgctxt "Menu" msgid "Local Game" msgstr "Lokaal spel" -#: src/ui/gui/appwindow.slint:96 +#: src/ui/gui/appwindow.slint:107 msgctxt "Menu" msgid "Controller Config" msgstr "Controllerconfiguratie" -#: src/ui/gui/appwindow.slint:97 +#: src/ui/gui/appwindow.slint:111 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:98 +#: src/ui/gui/appwindow.slint:115 msgctxt "Menu" msgid "Cheats" msgstr "Cheats" -#: src/ui/gui/appwindow.slint:99 +#: src/ui/gui/appwindow.slint:119 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:100 +#: src/ui/gui/appwindow.slint:123 msgctxt "Menu" msgid "Settings" msgstr "Instellingen" -#: src/ui/gui/appwindow.slint:101 +#: src/ui/gui/appwindow.slint:127 msgctxt "Menu" msgid "About" msgstr "Over" -#: src/ui/gui/appwindow.slint:195 +#: src/ui/gui/appwindow.slint:248 msgctxt "ErrorDialog" msgid "Error" msgstr "Fout" @@ -107,45 +107,40 @@ msgctxt "Cheats" msgid "No Cheats Available" msgstr "Geen cheats beschikbaar" -#: src/ui/gui/controller_page.slint:26 +#: src/ui/gui/controller_page.slint:80 +msgctxt "ControllerSettingsGrid" +msgid "Enabled" +msgstr "Ingeschakeld" + +#: src/ui/gui/controller_page.slint:93 +msgctxt "ControllerSettingsGrid" +msgid "Transfer Pak" +msgstr "Transfer Pak" + +#: src/ui/gui/controller_page.slint:107 +msgctxt "ControllerSettingsGrid" +msgid "Profile" +msgstr "Profiel" + +#: src/ui/gui/controller_page.slint:157 msgctxt "ControllerConfig" msgid "Controller Configuration" msgstr "Controllerconfiguratie" -#: src/ui/gui/controller_page.slint:37 +#: src/ui/gui/controller_page.slint:168 msgctxt "ControllerConfig" msgid "Configure Input Profile" msgstr "Invoerprofiel configureren" -#: src/ui/gui/controller_page.slint:49 +#: src/ui/gui/controller_page.slint:176 msgctxt "ControllerConfig" -msgid "Port" -msgstr "Poort" +msgid "Controller Settings" +msgstr "Controllerinstellingen" -#: src/ui/gui/controller_page.slint:60 +#: src/ui/gui/controller_page.slint:186 msgctxt "ControllerConfig" -msgid "Enabled" -msgstr "Ingeschakeld" - -#: src/ui/gui/controller_page.slint:73 -msgctxt "ControllerConfig" -msgid "Emulate VRU" -msgstr "VRU emuleren" - -#: src/ui/gui/controller_page.slint:87 -msgctxt "ControllerConfig" -msgid "Transfer Pak" -msgstr "Transfer Pak" - -#: src/ui/gui/controller_page.slint:101 -msgctxt "ControllerConfig" -msgid "Profile" -msgstr "Profiel" - -#: src/ui/gui/controller_page.slint:117 -msgctxt "ControllerConfig" -msgid "Controller" -msgstr "Controller" +msgid "Controller Assignment" +msgstr "Controllertoewijzing" #: src/ui/gui/input_profile.slint:10 msgctxt "InputProfileDialog" @@ -486,62 +481,75 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Ondersteunde spellen bekijken" -#: src/ui/gui/settings_page.slint:22 +#: src/ui/gui/settings_page.slint:23 msgctxt "Settings" msgid "Settings" msgstr "Instellingen" -#: src/ui/gui/settings_page.slint:29 +#: src/ui/gui/settings_page.slint:30 msgctxt "Settings" msgid "Resolution:" msgstr "Resolutie:" -#: src/ui/gui/settings_page.slint:45 +#: src/ui/gui/settings_page.slint:46 msgctxt "Settings" msgid "SSAA downscaling" msgstr "SSAA-downscaling" -#: src/ui/gui/settings_page.slint:56 +#: src/ui/gui/settings_page.slint:57 msgctxt "Settings" msgid "Integer Scaling" msgstr "Schalen in hele getallen" -#: src/ui/gui/settings_page.slint:67 +#: src/ui/gui/settings_page.slint:68 msgctxt "Settings" msgid "Fullscreen" msgstr "Volledig scherm" -#: src/ui/gui/settings_page.slint:78 +#: src/ui/gui/settings_page.slint:79 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "Breedbeeld (uitgerekt)" -#: src/ui/gui/settings_page.slint:89 +#: src/ui/gui/settings_page.slint:90 msgctxt "Settings" msgid "VSync" msgstr "VSync" -#: src/ui/gui/settings_page.slint:100 +#: src/ui/gui/settings_page.slint:101 msgctxt "Settings" msgid "Apply CRT shader" msgstr "CRT-shader toepassen" -#: src/ui/gui/settings_page.slint:115 +#: src/ui/gui/settings_page.slint:116 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "N64-CPU overklokken (kan bugs veroorzaken)" -#: src/ui/gui/settings_page.slint:126 +#: src/ui/gui/settings_page.slint:127 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Expansion Pak uitschakelen" -#: src/ui/gui/settings_page.slint:137 +#: src/ui/gui/settings_page.slint:138 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "UNFLoader emuleren" +#: src/ui/gui/settings_page.slint:149 +msgctxt "Settings" +msgid "Emulate VRU" +msgstr "VRU emuleren" + #: src/ui/gui/vru_dialog.slint:7 msgctxt "VruDialog" msgid "What Would You Like To Say?" msgstr "Wat wil je zeggen?" + +#~ msgctxt "ControllerConfig" +#~ msgid "Port" +#~ msgstr "Poort" + +#~ msgctxt "ControllerConfig" +#~ msgid "Controller" +#~ msgstr "Controller" diff --git a/data/translations/pt_BR/LC_MESSAGES/gopher64.po b/data/translations/pt_BR/LC_MESSAGES/gopher64.po index 63fd66c..37f2ba7 100644 --- a/data/translations/pt_BR/LC_MESSAGES/gopher64.po +++ b/data/translations/pt_BR/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2026-05-14 14:53+0000\n" +"POT-Creation-Date: 2026-05-19 06:44+0000\n" "PO-Revision-Date: 2026-05-11 18:11-3000\n" "Last-Translator: EDUARDO CARVALHO \n" "Language-Team: LANGUAGE \n" @@ -47,42 +47,42 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Doações (via GitHub)" -#: src/ui/gui/appwindow.slint:95 +#: src/ui/gui/appwindow.slint:103 msgctxt "Menu" msgid "Local Game" msgstr "Jogo Local" -#: src/ui/gui/appwindow.slint:96 +#: src/ui/gui/appwindow.slint:107 msgctxt "Menu" msgid "Controller Config" msgstr "Configurar Controle" -#: src/ui/gui/appwindow.slint:97 +#: src/ui/gui/appwindow.slint:111 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:98 +#: src/ui/gui/appwindow.slint:115 msgctxt "Menu" msgid "Cheats" msgstr "Trapaças" -#: src/ui/gui/appwindow.slint:99 +#: src/ui/gui/appwindow.slint:119 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:100 +#: src/ui/gui/appwindow.slint:123 msgctxt "Menu" msgid "Settings" msgstr "Configurações" -#: src/ui/gui/appwindow.slint:101 +#: src/ui/gui/appwindow.slint:127 msgctxt "Menu" msgid "About" msgstr "Sobre" -#: src/ui/gui/appwindow.slint:195 +#: src/ui/gui/appwindow.slint:248 msgctxt "ErrorDialog" msgid "Error" msgstr "Erro" @@ -107,45 +107,40 @@ msgctxt "Cheats" msgid "No Cheats Available" msgstr "Sem trapaças disponíveis" -#: src/ui/gui/controller_page.slint:26 +#: src/ui/gui/controller_page.slint:80 +msgctxt "ControllerSettingsGrid" +msgid "Enabled" +msgstr "Habilitado" + +#: src/ui/gui/controller_page.slint:93 +msgctxt "ControllerSettingsGrid" +msgid "Transfer Pak" +msgstr "Transfer Pak" + +#: src/ui/gui/controller_page.slint:107 +msgctxt "ControllerSettingsGrid" +msgid "Profile" +msgstr "Perfil" + +#: src/ui/gui/controller_page.slint:157 msgctxt "ControllerConfig" msgid "Controller Configuration" msgstr "Configurar Controles" -#: src/ui/gui/controller_page.slint:37 +#: src/ui/gui/controller_page.slint:168 msgctxt "ControllerConfig" msgid "Configure Input Profile" msgstr "Configurar Perfil de Controle" -#: src/ui/gui/controller_page.slint:49 +#: src/ui/gui/controller_page.slint:176 msgctxt "ControllerConfig" -msgid "Port" -msgstr "Entrada" +msgid "Controller Settings" +msgstr "Configurações do controle" -#: src/ui/gui/controller_page.slint:60 +#: src/ui/gui/controller_page.slint:186 msgctxt "ControllerConfig" -msgid "Enabled" -msgstr "Habilitado" - -#: src/ui/gui/controller_page.slint:73 -msgctxt "ControllerConfig" -msgid "Emulate VRU" -msgstr "Emular VRU" - -#: src/ui/gui/controller_page.slint:87 -msgctxt "ControllerConfig" -msgid "Transfer Pak" -msgstr "Transfer Pak" - -#: src/ui/gui/controller_page.slint:101 -msgctxt "ControllerConfig" -msgid "Profile" -msgstr "Perfil" - -#: src/ui/gui/controller_page.slint:117 -msgctxt "ControllerConfig" -msgid "Controller" -msgstr "Controle" +msgid "Controller Assignment" +msgstr "Atribuição do controle" #: src/ui/gui/input_profile.slint:10 msgctxt "InputProfileDialog" @@ -487,62 +482,75 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Ver Jogos com Suporte" -#: src/ui/gui/settings_page.slint:22 +#: src/ui/gui/settings_page.slint:23 msgctxt "Settings" msgid "Settings" msgstr "Configurações" -#: src/ui/gui/settings_page.slint:29 +#: src/ui/gui/settings_page.slint:30 msgctxt "Settings" msgid "Resolution:" msgstr "Resolução:" -#: src/ui/gui/settings_page.slint:45 +#: src/ui/gui/settings_page.slint:46 msgctxt "Settings" msgid "SSAA downscaling" msgstr "Redução de SSAA" -#: src/ui/gui/settings_page.slint:56 +#: src/ui/gui/settings_page.slint:57 msgctxt "Settings" msgid "Integer Scaling" msgstr "Proporção Íntegra" -#: src/ui/gui/settings_page.slint:67 +#: src/ui/gui/settings_page.slint:68 msgctxt "Settings" msgid "Fullscreen" msgstr "Tela Cheia" -#: src/ui/gui/settings_page.slint:78 +#: src/ui/gui/settings_page.slint:79 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "Widescreen (esticar)" -#: src/ui/gui/settings_page.slint:89 +#: src/ui/gui/settings_page.slint:90 msgctxt "Settings" msgid "VSync" msgstr "VSync" -#: src/ui/gui/settings_page.slint:100 +#: src/ui/gui/settings_page.slint:101 msgctxt "Settings" msgid "Apply CRT shader" msgstr "Aplicar filtro de CRT" -#: src/ui/gui/settings_page.slint:115 +#: src/ui/gui/settings_page.slint:116 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "Overclock da CPU do N64 (pode causar bugs)" -#: src/ui/gui/settings_page.slint:126 +#: src/ui/gui/settings_page.slint:127 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Desabilitar Expansion Pak" -#: src/ui/gui/settings_page.slint:137 +#: src/ui/gui/settings_page.slint:138 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "Emular UNFLoader" +#: src/ui/gui/settings_page.slint:149 +msgctxt "Settings" +msgid "Emulate VRU" +msgstr "Emular VRU" + #: src/ui/gui/vru_dialog.slint:7 msgctxt "VruDialog" msgid "What Would You Like To Say?" msgstr "O que você quer falar?" + +#~ msgctxt "ControllerConfig" +#~ msgid "Port" +#~ msgstr "Entrada" + +#~ msgctxt "ControllerConfig" +#~ msgid "Controller" +#~ msgstr "Controle" diff --git a/data/translations/ru/LC_MESSAGES/gopher64.po b/data/translations/ru/LC_MESSAGES/gopher64.po index 29f4f0a..4ae19f7 100644 --- a/data/translations/ru/LC_MESSAGES/gopher64.po +++ b/data/translations/ru/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-14 14:53+0000\n" +"POT-Creation-Date: 2026-05-19 06:44+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Russian\n" @@ -47,42 +47,42 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Пожертвовать (через GitHub)" -#: src/ui/gui/appwindow.slint:95 +#: src/ui/gui/appwindow.slint:103 msgctxt "Menu" msgid "Local Game" msgstr "Локальная игра" -#: src/ui/gui/appwindow.slint:96 +#: src/ui/gui/appwindow.slint:107 msgctxt "Menu" msgid "Controller Config" msgstr "Настройка контроллера" -#: src/ui/gui/appwindow.slint:97 +#: src/ui/gui/appwindow.slint:111 msgctxt "Menu" msgid "Netplay" msgstr "Сетевая игра" -#: src/ui/gui/appwindow.slint:98 +#: src/ui/gui/appwindow.slint:115 msgctxt "Menu" msgid "Cheats" msgstr "Читы" -#: src/ui/gui/appwindow.slint:99 +#: src/ui/gui/appwindow.slint:119 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:100 +#: src/ui/gui/appwindow.slint:123 msgctxt "Menu" msgid "Settings" msgstr "Настройки" -#: src/ui/gui/appwindow.slint:101 +#: src/ui/gui/appwindow.slint:127 msgctxt "Menu" msgid "About" msgstr "О программе" -#: src/ui/gui/appwindow.slint:195 +#: src/ui/gui/appwindow.slint:248 msgctxt "ErrorDialog" msgid "Error" msgstr "Ошибка" @@ -107,45 +107,40 @@ msgctxt "Cheats" msgid "No Cheats Available" msgstr "Читы недоступны" -#: src/ui/gui/controller_page.slint:26 +#: src/ui/gui/controller_page.slint:80 +msgctxt "ControllerSettingsGrid" +msgid "Enabled" +msgstr "Включено" + +#: src/ui/gui/controller_page.slint:93 +msgctxt "ControllerSettingsGrid" +msgid "Transfer Pak" +msgstr "Transfer Pak" + +#: src/ui/gui/controller_page.slint:107 +msgctxt "ControllerSettingsGrid" +msgid "Profile" +msgstr "Профиль" + +#: src/ui/gui/controller_page.slint:157 msgctxt "ControllerConfig" msgid "Controller Configuration" msgstr "Настройка контроллера" -#: src/ui/gui/controller_page.slint:37 +#: src/ui/gui/controller_page.slint:168 msgctxt "ControllerConfig" msgid "Configure Input Profile" msgstr "Настроить профиль ввода" -#: src/ui/gui/controller_page.slint:49 +#: src/ui/gui/controller_page.slint:176 msgctxt "ControllerConfig" -msgid "Port" -msgstr "Порт" +msgid "Controller Settings" +msgstr "Настройки контроллера" -#: src/ui/gui/controller_page.slint:60 +#: src/ui/gui/controller_page.slint:186 msgctxt "ControllerConfig" -msgid "Enabled" -msgstr "Включено" - -#: src/ui/gui/controller_page.slint:73 -msgctxt "ControllerConfig" -msgid "Emulate VRU" -msgstr "Эмулировать VRU" - -#: src/ui/gui/controller_page.slint:87 -msgctxt "ControllerConfig" -msgid "Transfer Pak" -msgstr "Transfer Pak" - -#: src/ui/gui/controller_page.slint:101 -msgctxt "ControllerConfig" -msgid "Profile" -msgstr "Профиль" - -#: src/ui/gui/controller_page.slint:117 -msgctxt "ControllerConfig" -msgid "Controller" -msgstr "Контроллер" +msgid "Controller Assignment" +msgstr "Назначение контроллера" #: src/ui/gui/input_profile.slint:10 msgctxt "InputProfileDialog" @@ -485,62 +480,75 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Просмотреть поддерживаемые игры" -#: src/ui/gui/settings_page.slint:22 +#: src/ui/gui/settings_page.slint:23 msgctxt "Settings" msgid "Settings" msgstr "Настройки" -#: src/ui/gui/settings_page.slint:29 +#: src/ui/gui/settings_page.slint:30 msgctxt "Settings" msgid "Resolution:" msgstr "Разрешение:" -#: src/ui/gui/settings_page.slint:45 +#: src/ui/gui/settings_page.slint:46 msgctxt "Settings" msgid "SSAA downscaling" msgstr "SSAA даунскейлинг" -#: src/ui/gui/settings_page.slint:56 +#: src/ui/gui/settings_page.slint:57 msgctxt "Settings" msgid "Integer Scaling" msgstr "Целочисленное масштабирование" -#: src/ui/gui/settings_page.slint:67 +#: src/ui/gui/settings_page.slint:68 msgctxt "Settings" msgid "Fullscreen" msgstr "Полноэкранный режим" -#: src/ui/gui/settings_page.slint:78 +#: src/ui/gui/settings_page.slint:79 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "Широкоэкранный режим (растянуто)" -#: src/ui/gui/settings_page.slint:89 +#: src/ui/gui/settings_page.slint:90 msgctxt "Settings" msgid "VSync" msgstr "Вертикальная синхронизация" -#: src/ui/gui/settings_page.slint:100 +#: src/ui/gui/settings_page.slint:101 msgctxt "Settings" msgid "Apply CRT shader" msgstr "Применить шейдер ЭЛТ" -#: src/ui/gui/settings_page.slint:115 +#: src/ui/gui/settings_page.slint:116 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "Разгон процессора N64 (может вызвать ошибки)" -#: src/ui/gui/settings_page.slint:126 +#: src/ui/gui/settings_page.slint:127 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Отключить Expansion Pak" -#: src/ui/gui/settings_page.slint:137 +#: src/ui/gui/settings_page.slint:138 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "Эмулировать UNFLoader" +#: src/ui/gui/settings_page.slint:149 +msgctxt "Settings" +msgid "Emulate VRU" +msgstr "Эмулировать VRU" + #: src/ui/gui/vru_dialog.slint:7 msgctxt "VruDialog" msgid "What Would You Like To Say?" msgstr "Что вы хотите сказать?" + +#~ msgctxt "ControllerConfig" +#~ msgid "Port" +#~ msgstr "Порт" + +#~ msgctxt "ControllerConfig" +#~ msgid "Controller" +#~ msgstr "Контроллер" diff --git a/data/RobotoMono-Regular.ttf b/data/ui/RobotoMono-Regular.ttf similarity index 100% rename from data/RobotoMono-Regular.ttf rename to data/ui/RobotoMono-Regular.ttf diff --git a/data/controller.png b/data/ui/controller.png similarity index 100% rename from data/controller.png rename to data/ui/controller.png diff --git a/data/ui/icons/about.svg b/data/ui/icons/about.svg new file mode 100644 index 0000000..93966a6 --- /dev/null +++ b/data/ui/icons/about.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/ui/icons/achievements.svg b/data/ui/icons/achievements.svg new file mode 100644 index 0000000..aad2e4b --- /dev/null +++ b/data/ui/icons/achievements.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/ui/icons/cheats.svg b/data/ui/icons/cheats.svg new file mode 100644 index 0000000..c03e719 --- /dev/null +++ b/data/ui/icons/cheats.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/ui/icons/controller.svg b/data/ui/icons/controller.svg new file mode 100644 index 0000000..c79c7ac --- /dev/null +++ b/data/ui/icons/controller.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/ui/icons/local_game.svg b/data/ui/icons/local_game.svg new file mode 100644 index 0000000..8a3ab49 --- /dev/null +++ b/data/ui/icons/local_game.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/ui/icons/netplay.svg b/data/ui/icons/netplay.svg new file mode 100644 index 0000000..27a99d5 --- /dev/null +++ b/data/ui/icons/netplay.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/ui/icons/settings.svg b/data/ui/icons/settings.svg new file mode 100644 index 0000000..1b5aa82 --- /dev/null +++ b/data/ui/icons/settings.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index b8f28d5..0b27831 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -66,8 +66,8 @@ export component AppWindow inherits Window { in-out property disable_expansion_pak <=> SettingsData.disable_expansion_pak; in-out property resolution <=> SettingsData.resolution; in-out property emulate_usb <=> SettingsData.emulate_usb; + in-out property emulate_vru <=> SettingsData.emulate_vru; in-out property rom_dir <=> SettingsData.rom_dir; - in-out property emulate_vru <=> ControllerData.emulate_vru; in-out property controller_enabled <=> ControllerData.controller_enabled; in-out property controller_changed <=> ControllerData.controller_changed; in-out property transferpak <=> ControllerData.transferpak; @@ -83,26 +83,66 @@ export component AppWindow inherits Window { in-out property cheat_game_name <=> CheatsData.cheat_game_name; in-out property cheat_game_crc <=> CheatsData.cheat_game_crc; in-out property cheats <=> CheatsData.cheats; - preferred-width: 700px; - preferred-height: 500px; + + private property is-portrait: root.width < root.height; + private property bar-thickness: 56px; + + min-width: 320px; + min-height: 240px; + preferred-width: 600px; + preferred-height: 600px; title: "Gopher64"; icon: @image-url("../../../data/icon/gopher64.png"); - HorizontalLayout { - side-bar := SideBar { - title: "Gopher64"; - model: [ - @tr("Menu" => "Local Game"), - @tr("Menu" => "Controller Config"), - @tr("Menu" => "Netplay"), - @tr("Menu" => "Cheats"), - @tr("Menu" => "RetroAchievements"), - @tr("Menu" => "Settings"), - @tr("Menu" => "About") - ]; - } + side-bar := SideBar { + portrait: root.is-portrait; + title: "Gopher64"; + model: [ + { + icon: @image-url("../../../data/ui/icons/local_game.svg"), + label: @tr("Menu" => "Local Game"), + }, + { + icon: @image-url("../../../data/ui/icons/controller.svg"), + label: @tr("Menu" => "Controller Config"), + }, + { + icon: @image-url("../../../data/ui/icons/netplay.svg"), + label: @tr("Menu" => "Netplay"), + }, + { + icon: @image-url("../../../data/ui/icons/cheats.svg"), + label: @tr("Menu" => "Cheats"), + }, + { + icon: @image-url("../../../data/ui/icons/achievements.svg"), + label: @tr("Menu" => "RetroAchievements"), + }, + { + icon: @image-url("../../../data/ui/icons/settings.svg"), + label: @tr("Menu" => "Settings"), + }, + { + icon: @image-url("../../../data/ui/icons/about.svg"), + label: @tr("Menu" => "About"), + }, + ]; + x: 0; + y: root.is-portrait ? parent.height - root.bar-thickness : 0; + width: root.is-portrait ? parent.width : root.bar-thickness; + height: root.is-portrait ? root.bar-thickness : parent.height; + } + + content-area := Rectangle { + clip: true; + x: root.is-portrait ? 0 : root.bar-thickness; + y: 0; + width: root.is-portrait ? parent.width : parent.width - root.bar-thickness; + height: root.is-portrait ? parent.height - root.bar-thickness : parent.height; if(side-bar.current-item == 0): LocalGame { + width: 100%; + height: 100%; open_rom_button_clicked => { open_rom_button_clicked(); } @@ -117,6 +157,8 @@ export component AppWindow inherits Window { } } if(side-bar.current-item == 1): ControllerConfig { + width: 100%; + height: 100%; input_profile_button_clicked => { input_profile_button_clicked(); } @@ -128,6 +170,8 @@ export component AppWindow inherits Window { } } if(side-bar.current-item == 2): Netplay { + width: 100%; + height: 100%; create_session_button_clicked => { create_session_button_clicked(); } @@ -142,6 +186,8 @@ export component AppWindow inherits Window { } } if(side-bar.current-item == 3): Cheats { + width: 100%; + height: 100%; cheats_select_rom_clicked(rom_dir) => { cheats_select_rom_clicked(rom_dir); } @@ -153,6 +199,8 @@ export component AppWindow inherits Window { } } if(side-bar.current-item == 4): RetroAchievements { + width: 100%; + height: 100%; ra_button_clicked(password) => { ra_button_clicked(password); } @@ -166,8 +214,13 @@ export component AppWindow inherits Window { ra_show_profile_clicked(); } } - if(side-bar.current-item == 5): Settings { } + if(side-bar.current-item == 5): Settings { + width: 100%; + height: 100%; + } if(side-bar.current-item == 6): About { + width: 100%; + height: 100%; wiki_button_clicked => { wiki_button_clicked(); } diff --git a/src/ui/gui/controller_page.slint b/src/ui/gui/controller_page.slint index 9a0e1a6..8708184 100644 --- a/src/ui/gui/controller_page.slint +++ b/src/ui/gui/controller_page.slint @@ -1,12 +1,11 @@ // Copyright © SixtyFPS GmbH // SPDX-License-Identifier: MIT -import { Switch, ComboBox, Button, HorizontalBox, VerticalBox, GroupBox } from "std-widgets.slint"; +import { Switch, ComboBox, Button, VerticalBox, GroupBox } from "std-widgets.slint"; import { Page } from "page.slint"; import { State } from "localgame_page.slint"; export global ControllerData { - in-out property emulate_vru; in-out property <[bool]> controller_enabled; in-out property <[bool]> transferpak; in-out property <[string]> gb_rom_paths; @@ -19,9 +18,141 @@ export global ControllerData { in-out property <[bool]> controller_changed; } +component ControllerPortLabel inherits Text { + height: 32px; + width: 36px; + vertical-alignment: center; + horizontal-alignment: center; + font-weight: 600; +} + +component ControllerFieldHeader inherits Text { + height: 28px; + horizontal-alignment: left; + vertical-alignment: center; + font-size: 13px; +} + +component ControllerSettingsColumn inherits VerticalLayout { + in property title; + in property content-min-width: 0px; + spacing: 6px; + alignment: start; + horizontal-stretch: 0; + min-width: content-min-width > header.preferred-width ? content-min-width : header.preferred-width; + + header := ControllerFieldHeader { + text: root.title; + } + + @children +} + +component ControllerSettingsCell inherits HorizontalLayout { + height: 32px; + alignment: start; + + @children +} + +component ControllerSettingsGrid inherits HorizontalLayout { + callback transferpak_toggled(int, bool); + + spacing: 12px; + alignment: start; + + VerticalLayout { + spacing: 6px; + alignment: start; + horizontal-stretch: 0; + + Rectangle { + width: 36px; + height: 28px; + } + + for player[index] in [0, 1, 2, 3]: ControllerPortLabel { + text: index + 1; + } + } + + ControllerSettingsColumn { + title: @tr("ControllerSettingsGrid" => "Enabled"); + + for player[index] in [0, 1, 2, 3]: ControllerSettingsCell { + Switch { + checked: ControllerData.controller_enabled[index]; + toggled => { + ControllerData.controller_enabled[index] = self.checked; + } + } + } + } + + ControllerSettingsColumn { + title: @tr("ControllerSettingsGrid" => "Transfer Pak"); + + for player[index] in [0, 1, 2, 3]: ControllerSettingsCell { + Switch { + checked: ControllerData.transferpak[index]; + toggled => { + ControllerData.transferpak[index] = self.checked; + root.transferpak_toggled(index, self.checked); + } + } + } + } + + ControllerSettingsColumn { + title: @tr("ControllerSettingsGrid" => "Profile"); + content-min-width: 150px; + + for player[index] in [0, 1, 2, 3]: ControllerSettingsCell { + ComboBox { + horizontal-stretch: 0; + min-width: self.preferred-width > 150px ? self.preferred-width : 150px; + model: ControllerData.input_profiles; + current-index: ControllerData.selected_profile_binding[index]; + selected => { + ControllerData.selected_profile_binding[index] = self.current-index; + } + } + } + } +} + +component ControllerAssignmentGrid inherits VerticalLayout { + spacing: 6px; + alignment: start; + + for player[index] in [0, 1, 2, 3]: HorizontalLayout { + spacing: 8px; + alignment: start; + + ControllerPortLabel { + text: index + 1; + } + + HorizontalLayout { + alignment: start; + + ComboBox { + horizontal-stretch: 0; + min-width: self.preferred-width > 300px ? self.preferred-width : 300px; + model: ControllerData.controller_names; + current-index: ControllerData.selected_controller[index]; + selected => { + ControllerData.selected_controller[index] = self.current-index; + ControllerData.controller_changed[index] = true; + } + } + } + } +} + export component ControllerConfig inherits Page { callback input_profile_button_clicked; - callback transferpak_toggled(int,bool); + callback transferpak_toggled(int, bool); callback controller_window_created; title: @tr("Controller Configuration"); @@ -30,105 +161,31 @@ export component ControllerConfig inherits Page { } VerticalBox { + spacing: 8px; alignment: start; - HorizontalBox { - alignment: start; - Button { - text: @tr("Configure Input Profile"); - enabled: !State.game_running; - clicked => { - input_profile_button_clicked(); + + Button { + text: @tr("Configure Input Profile"); + enabled: !State.game_running; + clicked => { + input_profile_button_clicked(); + } + } + + GroupBox { + title: @tr("Controller Settings"); + + ControllerSettingsGrid { + transferpak_toggled(index, enabled) => { + root.transferpak_toggled(index, enabled); } } } - Rectangle { } + GroupBox { + title: @tr("Controller Assignment"); - HorizontalBox { - GroupBox { - title: @tr("Port"); - VerticalLayout { - alignment: space-between; - for player in [0, 1, 2, 3]: Text { - text: player + 1; - vertical-alignment: center; - } - } - } - - GroupBox { - title: @tr("Enabled"); - VerticalLayout { - alignment: space-between; - for player in [0, 1, 2, 3]: Switch { - checked: ControllerData.controller_enabled[player]; - toggled => { - ControllerData.controller_enabled[player] = self.checked; - } - } - } - } - - GroupBox { - title: @tr("Emulate VRU"); - VerticalLayout { - alignment: space-between; - for valid in [false, false, false, true]: Switch { - enabled: valid; - checked: valid && ControllerData.emulate_vru; - toggled => { - ControllerData.emulate_vru = self.checked; - } - } - } - } - - GroupBox { - title: @tr("Transfer Pak"); - VerticalLayout { - alignment: space-between; - for player in [0, 1, 2, 3]: Switch { - checked: ControllerData.transferpak[player]; - toggled => { - ControllerData.transferpak[player] = self.checked; - transferpak_toggled(player,self.checked); - } - } - } - } - - GroupBox { - title: @tr("Profile"); - horizontal-stretch: 0.25; - VerticalLayout { - alignment: space-between; - for player in [0, 1, 2, 3]: ComboBox { - model: ControllerData.input_profiles; - min-width: self.preferred-width > 150px ? self.preferred-width : 150px; - current-index: ControllerData.selected_profile_binding[player]; - selected => { - ControllerData.selected_profile_binding[player] = self.current-index; - } - } - } - } - - GroupBox { - title: @tr("Controller"); - horizontal-stretch: 0.75; - VerticalLayout { - alignment: space-between; - for player in [0, 1, 2, 3]: ComboBox { - model: ControllerData.controller_names; - min-width: self.preferred-width > 300px ? self.preferred-width : 300px; - current-index: ControllerData.selected_controller[player]; - selected => { - ControllerData.selected_controller[player] = self.current-index; - ControllerData.controller_changed[player] = true; - } - } - } - } + ControllerAssignmentGrid { } } } } diff --git a/src/ui/gui/page.slint b/src/ui/gui/page.slint index cb52e7d..5f031fa 100644 --- a/src/ui/gui/page.slint +++ b/src/ui/gui/page.slint @@ -1,7 +1,7 @@ // Copyright © SixtyFPS GmbH // SPDX-License-Identifier: MIT -import { Switch, GridBox, ListView, ScrollView, HorizontalBox, VerticalBox, Palette } from "std-widgets.slint"; +import { ScrollView, HorizontalBox, VerticalBox } from "std-widgets.slint"; export component Page inherits VerticalBox { in property title: "title"; @@ -15,9 +15,17 @@ export component Page inherits VerticalBox { text <=> root.title; } - // Spacer Rectangle { } } - @children + ScrollView { + vertical-stretch: 1; + + VerticalBox { + padding: 8px; + alignment: start; + + @children + } + } } diff --git a/src/ui/gui/settings_page.slint b/src/ui/gui/settings_page.slint index 6b2cd6c..6168c0c 100644 --- a/src/ui/gui/settings_page.slint +++ b/src/ui/gui/settings_page.slint @@ -15,6 +15,7 @@ export global SettingsData { in-out property disable_expansion_pak; in-out property resolution; in-out property emulate_usb; + in-out property emulate_vru; in-out property rom_dir; } @@ -141,5 +142,16 @@ export component Settings inherits Page { } } } + + HorizontalBox { + alignment: start; + Switch { + text: @tr("Emulate VRU"); + checked: SettingsData.emulate_vru; + toggled => { + SettingsData.emulate_vru = self.checked; + } + } + } } } diff --git a/src/ui/gui/side_bar.slint b/src/ui/gui/side_bar.slint index 074ac96..cade454 100644 --- a/src/ui/gui/side_bar.slint +++ b/src/ui/gui/side_bar.slint @@ -1,19 +1,79 @@ // Copyright © SixtyFPS GmbH // SPDX-License-Identifier: MIT -import { HorizontalBox, VerticalBox, Palette } from "std-widgets.slint"; +import { Palette } from "std-widgets.slint"; + +export struct SideBarEntry { + icon: image, + label: string, +} + +component SideBarButton inherits Rectangle { + in property selected; + in property has-focus; + in property icon; + + callback clicked <=> touch.clicked; + + width: 48px; + height: 48px; + border-radius: 8px; + + highlight := Rectangle { + width: 100%; + height: 100%; + border-radius: parent.border-radius; + background: Palette.control-background; + opacity: 0; + + animate opacity { duration: 150ms; } + } + + icon-display := Image { + source: root.icon; + width: 24px; + height: 24px; + colorize: Palette.foreground; + x: (parent.width - self.width) / 2; + y: (parent.height - self.height) / 2; + + animate colorize { duration: 150ms; } + } + + touch := TouchArea { + width: 100%; + height: 100%; + } + + states [ + selected when root.selected: { + highlight.opacity: 1; + highlight.background: Palette.accent-background; + icon-display.colorize: Palette.accent-foreground; + } + pressed when touch.pressed && !root.selected: { + highlight.opacity: 0.55; + } + hover when touch.has-hover && !root.selected: { + highlight.opacity: 0.4; + } + focused when root.has-focus && !root.selected: { + highlight.opacity: 0.4; + } + ] +} component SideBarItem inherits Rectangle { in property tab-index; in property selected; in property has-focus; - in-out property text <=> label.text; + in property icon; + in property label; - callback clicked <=> touch.clicked; + callback clicked <=> button.clicked; - min-height: l.preferred-height; accessible-role: tab; - accessible-label: root.text; + accessible-label: root.label; accessible-item-index: root.tab-index; accessible-item-selectable: true; accessible-item-selected: root.selected; @@ -21,124 +81,128 @@ component SideBarItem inherits Rectangle { self.clicked(); } - states [ - pressed when touch.pressed: { - state.opacity: 0.8; - } - hover when touch.has-hover: { - state.opacity: 0.6; - } - selected when root.selected: { - state.opacity: 1; - } - focused when root.has-focus: { - state.opacity: 0.8; - } - ] - - state := Rectangle { - opacity: 0; - background: Palette.background; - - animate opacity { duration: 150ms; } - } - - l := HorizontalBox { - y: (parent.height - self.height) / 2; - spacing: 0px; - - label := Text { - vertical-alignment: center; - accessible-role: none; - } - } - - touch := TouchArea { - width: 100%; - height: 100%; + button := SideBarButton { + icon: root.icon; + selected: root.selected; + has-focus: root.has-focus; } } export component SideBar inherits Rectangle { - in property <[string]> model: []; - in property title <=> label.text; - out property current-item: 0; - out property current-focused: fs.has-focus ? fs.focused-tab : -1; // The currently focused tab + in property <[SideBarEntry]> model: []; + in property title: "Gopher64"; + in property portrait; + in-out property current-item: 0; + out property current-focused: fs.has-focus ? fs.focused-tab : -1; - width: 180px; forward-focus: fs; Rectangle { + width: 100%; + height: 100%; background: Palette.background.darker(0.2); } - VerticalBox { - padding-left: 0px; - padding-right: 0px; - alignment: start; - - label := Text { - font-size: 16px; - horizontal-alignment: center; + fs := FocusScope { + key-pressed(event) => { + if (event.text == "\n") { + root.current-item = root.current-focused; + return accept; + } + if (root.portrait) { + if (event.text == Key.LeftArrow) { + self.focused-tab = Math.max(self.focused-tab - 1, 0); + return accept; + } + if (event.text == Key.RightArrow) { + self.focused-tab = Math.min(self.focused-tab + 1, root.model.length - 1); + return accept; + } + } else { + if (event.text == Key.UpArrow) { + self.focused-tab = Math.max(self.focused-tab - 1, 0); + return accept; + } + if (event.text == Key.DownArrow) { + self.focused-tab = Math.min(self.focused-tab + 1, root.model.length - 1); + return accept; + } + } + return reject; } - navigation := VerticalLayout { - alignment: start; - vertical-stretch: 0; - accessible-role: tab-list; - accessible-delegate-focus: root.current-focused >= 0 ? root.current-focused : root.current-item; - accessible-label: root.title; - accessible-item-count: root.model.length; - - fs := FocusScope { - key-pressed(event) => { - if (event.text == "\n") { - root.current-item = root.current-focused; - return accept; - } - if (event.text == Key.UpArrow) { - self.focused-tab = Math.max(self.focused-tab - 1, 0); - return accept; - } - if (event.text == Key.DownArrow) { - self.focused-tab = Math.min(self.focused-tab + 1, root.model.length - 1); - return accept; - } - return reject; - } - - key-released(event) => { - if (event.text == " ") { - root.current-item = root.current-focused; - return accept; - } - return reject; - } - - property focused-tab: 0; - - x: 0; - width: 0; // Do not react on clicks + key-released(event) => { + if (event.text == " ") { + root.current-item = root.current-focused; + return accept; } + return reject; + } - for item[index] in root.model: SideBarItem { + property focused-tab: 0; + + width: 0; + height: 0; + } + + // Bottom bar in portrait: icons in a row, centered vertically in the bar. + portrait-strip := HorizontalLayout { + visible: root.portrait; + width: 100%; + height: 100%; + padding: 4px; + spacing: 4px; + alignment: space-evenly; + + accessible-role: tab-list; + accessible-delegate-focus: root.current-focused >= 0 ? root.current-focused : root.current-item; + accessible-label: root.title; + accessible-item-count: root.model.length; + + for item[index] in root.model: VerticalLayout { + alignment: center; + + SideBarItem { clicked => { root.current-item = index; } tab-index: index; has-focus: index == root.current-focused; - text: item; + icon: item.icon; + label: item.label; selected: index == root.current-item; } } + } - VerticalLayout { - bottom := VerticalBox { - padding-top: 0px; - padding-bottom: 0px; + // Left rail in landscape: icons in a column, centered horizontally in the bar. + landscape-strip := VerticalLayout { + visible: !root.portrait; + width: 100%; + height: 100%; + padding: 4px; + spacing: 4px; + alignment: space-evenly; - @children + accessible-role: tab-list; + accessible-delegate-focus: root.current-focused >= 0 ? root.current-focused : root.current-item; + accessible-label: root.title; + accessible-item-count: root.model.length; + + for item[index] in root.model: HorizontalLayout { + alignment: center; + + SideBarItem { + clicked => { + root.current-item = index; + } + + tab-index: index; + has-focus: index == root.current-focused; + icon: item.icon; + label: item.label; + selected: index == root.current-item; } } } diff --git a/src/ui/input.rs b/src/ui/input.rs index 76a0fd5..327034e 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -729,7 +729,7 @@ pub fn configure_input_profile( initial_state: 0, }; - let image_bytes = include_bytes!("../../data/controller.png"); + let image_bytes = include_bytes!("../../data/ui/controller.png"); let image = unsafe { sdl3_image_sys::image::IMG_LoadPNG_IO(sdl3_sys::everything::SDL_IOFromConstMem( image_bytes.as_ptr() as *const std::ffi::c_void, @@ -740,7 +740,7 @@ pub fn configure_input_profile( unsafe { sdl3_sys::surface::SDL_DestroySurface(image) }; let text_engine = unsafe { sdl3_ttf_sys::ttf::TTF_CreateRendererTextEngine(renderer) }; let font = unsafe { - let font_bytes = include_bytes!("../../data/RobotoMono-Regular.ttf"); + let font_bytes = include_bytes!("../../data/ui/RobotoMono-Regular.ttf"); sdl3_ttf_sys::ttf::TTF_OpenFontIO( sdl3_sys::everything::SDL_IOFromConstMem( font_bytes.as_ptr() as *const std::ffi::c_void, diff --git a/src/ui/video.rs b/src/ui/video.rs index 2da072f..8b7c58e 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -102,7 +102,7 @@ pub fn init(device: &mut device::Device) { let gfx_info = build_gfx_info(device); unsafe { - let font_bytes = include_bytes!("../../data/RobotoMono-Regular.ttf"); + let font_bytes = include_bytes!("../../data/ui/RobotoMono-Regular.ttf"); rdp_init( device.ui.video.window as *mut std::ffi::c_void, gfx_info,