Initial commit

This commit is contained in:
2025-08-28 22:38:53 +02:00
commit f15208fe6d
232 changed files with 16821 additions and 0 deletions

24
gui/core/pom.xml Normal file
View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>ch.gtache.fro.gui</groupId>
<artifactId>gui</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>gui-core</artifactId>
<dependencies>
<dependency>
<groupId>ch.gtache.fro.gui</groupId>
<artifactId>gui-api</artifactId>
</dependency>
<dependency>
<groupId>ch.gtache.fro</groupId>
<artifactId>fro-core</artifactId>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,41 @@
package ch.gtache.fro.gui.impl;
import jakarta.inject.Inject;
import jakarta.inject.Singleton;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Map;
import java.util.ResourceBundle;
import java.util.Set;
import java.util.stream.Collectors;
/**
* Combination of multiple resource bundles
*/
@Singleton
public class CombinedResourceBundle extends ResourceBundle {
private final Map<String, String> entries;
@Inject
CombinedResourceBundle(final Set<ResourceBundle> resourceBundles) {
this.entries = resourceBundles.stream()
.flatMap(r -> r.keySet().stream().map(k -> new KeyValue(k, r.getString(k))))
.collect(Collectors.toUnmodifiableMap(KeyValue::key, KeyValue::value));
}
@Override
protected Object handleGetObject(final String key) {
return entries.get(key);
}
@Override
public Enumeration<String> getKeys() {
return Collections.enumeration(entries.keySet());
}
private record KeyValue(String key, String value) {
}
}

View File

@@ -0,0 +1,34 @@
package ch.gtache.fro.modules.gui.impl;
import ch.gtache.fro.modules.practice.gui.impl.GuiPracticeCoreModule;
import dagger.Module;
import dagger.Provides;
import dagger.multibindings.IntoSet;
import java.util.ResourceBundle;
@Module(includes = GuiPracticeCoreModule.class)
public abstract class GuiCoreModule {
private GuiCoreModule() {
}
@Provides
@IntoSet
static ResourceBundle providesFetchBundle() {
return ResourceBundle.getBundle("ch.gtache.fro.gui.impl.FetchBundle");
}
@Provides
@IntoSet
static ResourceBundle providesMainBundle() {
return ResourceBundle.getBundle("ch.gtache.fro.gui.impl.MainBundle");
}
@Provides
@IntoSet
static ResourceBundle providesSettingsBundle() {
return ResourceBundle.getBundle("ch.gtache.fro.gui.impl.SettingsBundle");
}
}

View File

@@ -0,0 +1,63 @@
package ch.gtache.fro.modules.practice.gui.impl;
import dagger.Module;
import dagger.Provides;
import dagger.multibindings.IntoSet;
import java.util.ResourceBundle;
@Module
public abstract class GuiPracticeCoreModule {
private GuiPracticeCoreModule() {
}
@Provides
@IntoSet
static ResourceBundle providesPracticeBundle() {
return ResourceBundle.getBundle("ch.gtache.fro.practice.gui.impl.PracticeBundle");
}
@Provides
@IntoSet
static ResourceBundle providesPracticePictureExactBundle() {
return ResourceBundle.getBundle("ch.gtache.fro.practice.gui.impl.PracticePictureExactBundle");
}
@Provides
@IntoSet
static ResourceBundle providesPracticePictureMultichoiceBundle() {
return ResourceBundle.getBundle("ch.gtache.fro.practice.gui.impl.PracticePictureMultichoiceBundle");
}
@Provides
@IntoSet
static ResourceBundle providesPracticeResultBundle() {
return ResourceBundle.getBundle("ch.gtache.fro.practice.gui.impl.PracticeResultBundle");
}
@Provides
@IntoSet
static ResourceBundle providesPracticeSettingsBundle() {
return ResourceBundle.getBundle("ch.gtache.fro.practice.gui.impl.PracticeSettingsBundle");
}
@Provides
@IntoSet
static ResourceBundle providesPracticeSoundExactBundle() {
return ResourceBundle.getBundle("ch.gtache.fro.practice.gui.impl.PracticeSoundExactBundle");
}
@Provides
@IntoSet
static ResourceBundle providesPracticeSoundMultichoiceBundle() {
return ResourceBundle.getBundle("ch.gtache.fro.practice.gui.impl.PracticeSoundMultichoiceBundle");
}
@Provides
@IntoSet
static ResourceBundle providesPracticeSoundMultichoicePictureBundle() {
return ResourceBundle.getBundle("ch.gtache.fro.practice.gui.impl.PracticeSoundMultichoicePictureBundle");
}
}

View File

@@ -0,0 +1,13 @@
/**
* GUI core module for the FRO project
*/
module ch.gtache.fro.gui.core {
requires transitive ch.gtache.fro.gui.api;
requires ch.gtache.fro.core;
requires jakarta.inject;
requires dagger;
exports ch.gtache.fro.gui.impl;
exports ch.gtache.fro.modules.gui.impl;
exports ch.gtache.fro.modules.practice.gui.impl;
}

View File

@@ -0,0 +1,3 @@
fetch.button.all.label=Fetch all
fetch.button.fetch.label=Fetch
fetch.providers.label=Providers

View File

@@ -0,0 +1,3 @@
fetch.button.all.label=Fetch all
fetch.button.fetch.label=Fetch
fetch.providers.label=Providers

View File

@@ -0,0 +1,3 @@
fetch.button.all.label=Télécharger tous
fetch.button.fetch.label=Télécharger
fetch.providers.label=Sources

View File

@@ -0,0 +1,3 @@
main.tab.fetch.label=Fetch
main.tab.practice.label=Practice
main.tab.settings.label=Settings

View File

@@ -0,0 +1,3 @@
main.tab.fetch.label=Fetch
main.tab.practice.label=Practice
main.tab.settings.label=Settings

View File

@@ -0,0 +1,3 @@
main.tab.fetch.label=Téléchargement
main.tab.practice.label=Entraînement
main.tab.settings.label=Paramètres

View File

@@ -0,0 +1,5 @@
settings.table.column.bird=Bird
settings.table.column.enabled=Enabled
settings.table.column.fetchers=Fetchers
settings.table.column.pictures=Pictures
settings.table.column.sounds=Sounds

View File

@@ -0,0 +1,5 @@
settings.table.column.bird=Bird
settings.table.column.enabled=Enabled
settings.table.column.fetchers=Fetchers
settings.table.column.pictures=Pictures
settings.table.column.sounds=Sounds

View File

@@ -0,0 +1,5 @@
settings.table.column.bird=Oiseau
settings.table.column.enabled=Activé
settings.table.column.fetchers=Fournisseurs
settings.table.column.pictures=Images
settings.table.column.sounds=Sons

View File

@@ -0,0 +1 @@
practice.picture.exact.validate.button.label=Confirm

View File

@@ -0,0 +1 @@
practice.picture.exact.validate.button.label=Confirm

View File

@@ -0,0 +1 @@
practice.picture.exact.validate.button.label=Confirmer

View File

@@ -0,0 +1 @@
practice.picture.multichoice.validate.button.label=Confirm

View File

@@ -0,0 +1 @@
practice.picture.multichoice.validate.button.label=Confirm

View File

@@ -0,0 +1 @@
practice.picture.multichoice.validate.button.label=Confirmer

View File

@@ -0,0 +1,3 @@
practice.result.failure.label=Failed guesses
practice.result.label=Practice result
practice.result.success.label=Correct guesses

View File

@@ -0,0 +1,3 @@
practice.result.failure.label=Failed guesses
practice.result.label=Practice result
practice.result.success.label=Correct guesses

View File

@@ -0,0 +1,3 @@
practice.result.failure.label=Choix incorrects
practice.result.label=Résultat
practice.result.success.label=Choix corrects

View File

@@ -0,0 +1,3 @@
practice.settings.start.button.label=Start
practice.settings.suggestions.number.label=Number of suggestions
practice.settings.type.label=Practice type

View File

@@ -0,0 +1,3 @@
practice.settings.start.button.label=Start
practice.settings.suggestions.number.label=Number of suggestions
practice.settings.type.label=Practice type

View File

@@ -0,0 +1,3 @@
practice.settings.start.button.label=Démarrer
practice.settings.suggestions.number.label=Nombre de suggestions
practice.settings.type.label=Type d'entraînement

View File

@@ -0,0 +1 @@
practice.sound.exact.validate.button.label=Confirm

View File

@@ -0,0 +1 @@
practice.sound.exact.validate.button.label=Confirm

View File

@@ -0,0 +1 @@
practice.sound.exact.validate.button.label=Confirmer

View File

@@ -0,0 +1 @@
practice.sound.multichoice.validate.button.label=Confirm

View File

@@ -0,0 +1 @@
practice.sound.multichoice.validate.button.label=Confirm

View File

@@ -0,0 +1 @@
practice.sound.multichoice.validate.button.label=Confirmer

View File

@@ -0,0 +1 @@
practice.sound.multichoice.picture.validate.button.label=Confirm

View File

@@ -0,0 +1 @@
practice.sound.multichoice.picture.validate.button.label=Confirm

View File

@@ -0,0 +1 @@
practice.sound.multichoice.picture.validate.button.label=Confirmer