feat(demo): add language selection window and update localization keys
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
curId: 8
|
curId: 10
|
||||||
descriptions:
|
descriptions:
|
||||||
test-2: ""
|
test-2: ""
|
||||||
test-1: "aaa"
|
test-1: "aaa"
|
||||||
@@ -19,6 +19,8 @@ languages:
|
|||||||
test-6: "OK"
|
test-6: "OK"
|
||||||
test-7: "Toggle Audio"
|
test-7: "Toggle Audio"
|
||||||
test-8: "ScrollArea Demo"
|
test-8: "ScrollArea Demo"
|
||||||
|
test-9: "Select Language"
|
||||||
|
test-10: "Current: "
|
||||||
de:
|
de:
|
||||||
test-1: "hallo"
|
test-1: "hallo"
|
||||||
test-2: "welt"
|
test-2: "welt"
|
||||||
@@ -28,6 +30,8 @@ languages:
|
|||||||
test-6: "Ok"
|
test-6: "Ok"
|
||||||
test-7: "Audio umschalten"
|
test-7: "Audio umschalten"
|
||||||
test-8: "ScrollArea Demo"
|
test-8: "ScrollArea Demo"
|
||||||
|
test-9: "Sprache auswählen"
|
||||||
|
test-10: "Aktuell: "
|
||||||
languagesInfo:
|
languagesInfo:
|
||||||
en:
|
en:
|
||||||
name: "English"
|
name: "English"
|
||||||
|
|||||||
@@ -18,11 +18,10 @@ import de.extio.game_engine.renderer.container.ScrollArea;
|
|||||||
import de.extio.game_engine.renderer.container.Window;
|
import de.extio.game_engine.renderer.container.Window;
|
||||||
import de.extio.game_engine.renderer.model.RenderingBoLayer;
|
import de.extio.game_engine.renderer.model.RenderingBoLayer;
|
||||||
import de.extio.game_engine.renderer.model.bo.ControlRenderingBo;
|
import de.extio.game_engine.renderer.model.bo.ControlRenderingBo;
|
||||||
import de.extio.game_engine.renderer.model.bo.DrawEffectRenderingBo;
|
|
||||||
import de.extio.game_engine.renderer.model.bo.DrawEffectRenderingBoEffects;
|
|
||||||
import de.extio.game_engine.renderer.model.bo.ControlRenderingBo.ButtonControl;
|
import de.extio.game_engine.renderer.model.bo.ControlRenderingBo.ButtonControl;
|
||||||
import de.extio.game_engine.renderer.model.bo.ControlRenderingBo.LabelControl;
|
import de.extio.game_engine.renderer.model.bo.ControlRenderingBo.LabelControl;
|
||||||
import de.extio.game_engine.renderer.model.color.RgbaColor;
|
import de.extio.game_engine.renderer.model.bo.DrawEffectRenderingBo;
|
||||||
|
import de.extio.game_engine.renderer.model.bo.DrawEffectRenderingBoEffects;
|
||||||
import de.extio.game_engine.renderer.model.bo.DrawFontRenderingBo;
|
import de.extio.game_engine.renderer.model.bo.DrawFontRenderingBo;
|
||||||
import de.extio.game_engine.renderer.model.bo.DrawImageRenderingBo;
|
import de.extio.game_engine.renderer.model.bo.DrawImageRenderingBo;
|
||||||
import de.extio.game_engine.renderer.model.bo.HorizontalAlignment;
|
import de.extio.game_engine.renderer.model.bo.HorizontalAlignment;
|
||||||
@@ -59,10 +58,14 @@ public class DemoModule extends AbstractClientModule {
|
|||||||
|
|
||||||
private Window scrollAreaWindow;
|
private Window scrollAreaWindow;
|
||||||
|
|
||||||
|
private Window languageSelectionWindow;
|
||||||
|
|
||||||
private ScrollArea scrollArea;
|
private ScrollArea scrollArea;
|
||||||
|
|
||||||
private final Map<String, String> themeSelectionByControlId = new HashMap<>();
|
private final Map<String, String> themeSelectionByControlId = new HashMap<>();
|
||||||
|
|
||||||
|
private final Map<String, String> languageSelectionByControlId = new HashMap<>();
|
||||||
|
|
||||||
private boolean audioMuted;
|
private boolean audioMuted;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -93,6 +96,13 @@ public class DemoModule extends AbstractClientModule {
|
|||||||
this.scrollAreaWindow.setCloseButton(true);
|
this.scrollAreaWindow.setCloseButton(true);
|
||||||
this.scrollAreaWindow.setParent(this.mainWindow);
|
this.scrollAreaWindow.setParent(this.mainWindow);
|
||||||
|
|
||||||
|
this.languageSelectionWindow = this.applicationContext.getBean(Window.class);
|
||||||
|
this.languageSelectionWindow.setNormalizedDimension(RendererControl.REFERENCE_RESOLUTION.divide(7).multiply(2));
|
||||||
|
this.languageSelectionWindow.setNormalizedPosition(centeredPosition(this.languageSelectionWindow.getNormalizedDimension()));
|
||||||
|
this.languageSelectionWindow.setDraggable(true);
|
||||||
|
this.languageSelectionWindow.setCloseButton(true);
|
||||||
|
this.languageSelectionWindow.setParent(this.mainWindow);
|
||||||
|
|
||||||
this.scrollArea = this.applicationContext.getBean(ScrollArea.class);
|
this.scrollArea = this.applicationContext.getBean(ScrollArea.class);
|
||||||
this.scrollAreaWindow.addComponent(this.scrollArea);
|
this.scrollAreaWindow.addComponent(this.scrollArea);
|
||||||
|
|
||||||
@@ -106,6 +116,7 @@ public class DemoModule extends AbstractClientModule {
|
|||||||
this.getModuleService().unloadModule(this.secondaryWindow.getId());
|
this.getModuleService().unloadModule(this.secondaryWindow.getId());
|
||||||
this.getModuleService().unloadModule(this.themeSelectionWindow.getId());
|
this.getModuleService().unloadModule(this.themeSelectionWindow.getId());
|
||||||
this.getModuleService().unloadModule(this.scrollAreaWindow.getId());
|
this.getModuleService().unloadModule(this.scrollAreaWindow.getId());
|
||||||
|
this.getModuleService().unloadModule(this.languageSelectionWindow.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -124,6 +135,7 @@ public class DemoModule extends AbstractClientModule {
|
|||||||
this.getModuleService().changeActiveState(this.secondaryWindow.getId(), false);
|
this.getModuleService().changeActiveState(this.secondaryWindow.getId(), false);
|
||||||
this.getModuleService().changeActiveState(this.themeSelectionWindow.getId(), false);
|
this.getModuleService().changeActiveState(this.themeSelectionWindow.getId(), false);
|
||||||
this.getModuleService().changeActiveState(this.scrollAreaWindow.getId(), false);
|
this.getModuleService().changeActiveState(this.scrollAreaWindow.getId(), false);
|
||||||
|
this.getModuleService().changeActiveState(this.languageSelectionWindow.getId(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -138,6 +150,7 @@ public class DemoModule extends AbstractClientModule {
|
|||||||
this.getModuleService().changeActiveState(this.secondaryWindow.getId(), false);
|
this.getModuleService().changeActiveState(this.secondaryWindow.getId(), false);
|
||||||
this.getModuleService().changeActiveState(this.themeSelectionWindow.getId(), false);
|
this.getModuleService().changeActiveState(this.themeSelectionWindow.getId(), false);
|
||||||
this.getModuleService().changeActiveState(this.scrollAreaWindow.getId(), false);
|
this.getModuleService().changeActiveState(this.scrollAreaWindow.getId(), false);
|
||||||
|
this.getModuleService().changeActiveState(this.languageSelectionWindow.getId(), false);
|
||||||
this.audioController.stopMusic();
|
this.audioController.stopMusic();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -168,6 +181,13 @@ public class DemoModule extends AbstractClientModule {
|
|||||||
this.getModuleService().changeDisplayState(this.scrollAreaWindow.getId(), true);
|
this.getModuleService().changeDisplayState(this.scrollAreaWindow.getId(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case "DemoModule_MainWindow_Label_Language" -> {
|
||||||
|
this.audioController.play(new StaticResource(List.of("audio"), "contact0.ogg"));
|
||||||
|
this.setupLanguageSelectionWindow();
|
||||||
|
this.getModuleService().changeActiveState(this.languageSelectionWindow.getId(), true);
|
||||||
|
this.getModuleService().changeDisplayState(this.languageSelectionWindow.getId(), true);
|
||||||
|
}
|
||||||
|
|
||||||
case "DemoModule_SecondaryWindow_Button_Ok" -> {
|
case "DemoModule_SecondaryWindow_Button_Ok" -> {
|
||||||
this.audioController.play(new StaticResource(List.of("audio"), "alert0.ogg"));
|
this.audioController.play(new StaticResource(List.of("audio"), "alert0.ogg"));
|
||||||
this.getModuleService().changeActiveState(this.secondaryWindow.getId(), false);
|
this.getModuleService().changeActiveState(this.secondaryWindow.getId(), false);
|
||||||
@@ -178,6 +198,19 @@ public class DemoModule extends AbstractClientModule {
|
|||||||
if (themeName != null) {
|
if (themeName != null) {
|
||||||
this.audioController.play(new StaticResource(List.of("audio"), "alert0.ogg"));
|
this.audioController.play(new StaticResource(List.of("audio"), "alert0.ogg"));
|
||||||
this.themeManager.setCurrentTheme(themeName);
|
this.themeManager.setCurrentTheme(themeName);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
final var languageShort = this.languageSelectionByControlId.get(event.getId());
|
||||||
|
if (languageShort != null) {
|
||||||
|
this.audioController.play(new StaticResource(List.of("audio"), "alert0.ogg"));
|
||||||
|
this.localizationService.setLanguage(languageShort);
|
||||||
|
this.getModuleService().changeActiveState(this.languageSelectionWindow.getId(), false);
|
||||||
|
// refresh UI
|
||||||
|
this.getModuleService().changeActiveState(this.id, false);
|
||||||
|
this.getModuleService().changeActiveState(this.id, true);
|
||||||
|
this.getModuleService().changeDisplayState(this.id, true);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -219,22 +252,32 @@ public class DemoModule extends AbstractClientModule {
|
|||||||
|
|
||||||
bo = this.renderingBoPool.acquire("DemoModule_MainWindow_Label_Start", ControlRenderingBo.class)
|
bo = this.renderingBoPool.acquire("DemoModule_MainWindow_Label_Start", ControlRenderingBo.class)
|
||||||
.setCaption(this.localizationService.translate("test-4"))
|
.setCaption(this.localizationService.translate("test-4"))
|
||||||
.setFontSize(96)
|
.setFontSize(78)
|
||||||
.setType(LabelControl.class)
|
.setType(LabelControl.class)
|
||||||
.setVisible(true)
|
.setVisible(true)
|
||||||
.setEnabled(true)
|
.setEnabled(true)
|
||||||
.withDimensionAbsolute(RendererControl.REFERENCE_RESOLUTION.divide(9).multiply(7).substract(20).getX(), 120)
|
.withDimensionAbsolute(RendererControl.REFERENCE_RESOLUTION.divide(9).multiply(7).substract(20).getX(), 120)
|
||||||
.withPositionRelative(10, 500);
|
.withPositionRelative(10, 480);
|
||||||
|
this.mainWindow.putRenderingBo(bo);
|
||||||
|
|
||||||
|
bo = this.renderingBoPool.acquire("DemoModule_MainWindow_Label_Language", ControlRenderingBo.class)
|
||||||
|
.setCaption(this.localizationService.translate("test-9"))
|
||||||
|
.setFontSize(78)
|
||||||
|
.setType(LabelControl.class)
|
||||||
|
.setVisible(true)
|
||||||
|
.setEnabled(true)
|
||||||
|
.withDimensionAbsolute(RendererControl.REFERENCE_RESOLUTION.divide(9).multiply(7).substract(20).getX(), 120)
|
||||||
|
.withPositionRelative(10, 580);
|
||||||
this.mainWindow.putRenderingBo(bo);
|
this.mainWindow.putRenderingBo(bo);
|
||||||
|
|
||||||
bo = this.renderingBoPool.acquire("DemoModule_MainWindow_Button_ScrollDemo", ControlRenderingBo.class)
|
bo = this.renderingBoPool.acquire("DemoModule_MainWindow_Button_ScrollDemo", ControlRenderingBo.class)
|
||||||
.setCaption(this.localizationService.translate("test-8"))
|
.setCaption(this.localizationService.translate("test-8"))
|
||||||
.setFontSize(96)
|
.setFontSize(78)
|
||||||
.setType(LabelControl.class)
|
.setType(LabelControl.class)
|
||||||
.setVisible(true)
|
.setVisible(true)
|
||||||
.setEnabled(true)
|
.setEnabled(true)
|
||||||
.withDimensionAbsolute(RendererControl.REFERENCE_RESOLUTION.divide(9).multiply(7).substract(20).getX(), 120)
|
.withDimensionAbsolute(RendererControl.REFERENCE_RESOLUTION.divide(9).multiply(7).substract(20).getX(), 120)
|
||||||
.withPositionRelative(10, 630);
|
.withPositionRelative(10, 690);
|
||||||
this.mainWindow.putRenderingBo(bo);
|
this.mainWindow.putRenderingBo(bo);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -306,9 +349,6 @@ public class DemoModule extends AbstractClientModule {
|
|||||||
this.themeSelectionByControlId.clear();
|
this.themeSelectionByControlId.clear();
|
||||||
|
|
||||||
final var themes = this.themeManager.getAvailableThemeNames();
|
final var themes = this.themeManager.getAvailableThemeNames();
|
||||||
final var title = themes.size() <= 1
|
|
||||||
? "Theme"
|
|
||||||
: "Select Theme";
|
|
||||||
|
|
||||||
final var paddingX = 20;
|
final var paddingX = 20;
|
||||||
final var paddingBottom = 24;
|
final var paddingBottom = 24;
|
||||||
@@ -328,7 +368,7 @@ public class DemoModule extends AbstractClientModule {
|
|||||||
this.themeSelectionWindow.setNormalizedPosition(centeredPosition(ImmutableCoordI2.create(desiredWidth, desiredHeight)));
|
this.themeSelectionWindow.setNormalizedPosition(centeredPosition(ImmutableCoordI2.create(desiredWidth, desiredHeight)));
|
||||||
|
|
||||||
var bo = this.renderingBoPool.acquire("DemoModule_ThemeSelect_Text_Title", DrawFontRenderingBo.class)
|
var bo = this.renderingBoPool.acquire("DemoModule_ThemeSelect_Text_Title", DrawFontRenderingBo.class)
|
||||||
.setText(title)
|
.setText(this.localizationService.translate("test-4"))
|
||||||
.setSize(42)
|
.setSize(42)
|
||||||
.setAlignment(HorizontalAlignment.CENTER)
|
.setAlignment(HorizontalAlignment.CENTER)
|
||||||
.withDimensionAbsolute(desiredWidth - (paddingX * 2), headerHeight)
|
.withDimensionAbsolute(desiredWidth - (paddingX * 2), headerHeight)
|
||||||
@@ -338,7 +378,7 @@ public class DemoModule extends AbstractClientModule {
|
|||||||
final var currentTheme = this.themeManager.getCurrentTheme();
|
final var currentTheme = this.themeManager.getCurrentTheme();
|
||||||
final var currentThemeName = currentTheme != null ? currentTheme.getName() : "";
|
final var currentThemeName = currentTheme != null ? currentTheme.getName() : "";
|
||||||
bo = this.renderingBoPool.acquire("DemoModule_ThemeSelect_Text_Current", DrawFontRenderingBo.class)
|
bo = this.renderingBoPool.acquire("DemoModule_ThemeSelect_Text_Current", DrawFontRenderingBo.class)
|
||||||
.setText(currentThemeName.isBlank() ? "" : "Current: " + currentThemeName)
|
.setText(currentThemeName.isBlank() ? "" : this.localizationService.translate("test-10") + currentThemeName)
|
||||||
.setSize(24)
|
.setSize(24)
|
||||||
.setAlignment(HorizontalAlignment.CENTER)
|
.setAlignment(HorizontalAlignment.CENTER)
|
||||||
.withDimensionAbsolute(desiredWidth - (paddingX * 2), currentHeight)
|
.withDimensionAbsolute(desiredWidth - (paddingX * 2), currentHeight)
|
||||||
@@ -366,6 +406,70 @@ public class DemoModule extends AbstractClientModule {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setupLanguageSelectionWindow() {
|
||||||
|
this.languageSelectionWindow.clearRenderingBos();
|
||||||
|
this.languageSelectionByControlId.clear();
|
||||||
|
|
||||||
|
final var languages = this.localizationService.getLanguages();
|
||||||
|
final var title = "Select Language";
|
||||||
|
|
||||||
|
final var paddingX = 20;
|
||||||
|
final var paddingBottom = 24;
|
||||||
|
final var columns = 2;
|
||||||
|
final var columnGap = 24;
|
||||||
|
final var buttonWidth = 340;
|
||||||
|
final var buttonHeight = 54;
|
||||||
|
final var headerHeight = 60;
|
||||||
|
final var currentHeight = 40;
|
||||||
|
final var startY = 150;
|
||||||
|
final var gapY = 14;
|
||||||
|
final var rows = (languages.size() + columns - 1) / columns;
|
||||||
|
|
||||||
|
final var desiredWidth = (paddingX * 2) + (columns * buttonWidth) + ((columns - 1) * columnGap);
|
||||||
|
final var desiredHeight = startY + (rows * buttonHeight) + (Math.max(0, rows - 1) * gapY) + paddingBottom;
|
||||||
|
this.languageSelectionWindow.setNormalizedDimension(ImmutableCoordI2.create(desiredWidth, desiredHeight));
|
||||||
|
this.languageSelectionWindow.setNormalizedPosition(centeredPosition(ImmutableCoordI2.create(desiredWidth, desiredHeight)));
|
||||||
|
|
||||||
|
var bo = this.renderingBoPool.acquire("DemoModule_LanguageSelect_Text_Title", DrawFontRenderingBo.class)
|
||||||
|
.setText(title)
|
||||||
|
.setSize(42)
|
||||||
|
.setAlignment(HorizontalAlignment.CENTER)
|
||||||
|
.withDimensionAbsolute(desiredWidth - (paddingX * 2), headerHeight)
|
||||||
|
.withPositionRelative(paddingX, 40);
|
||||||
|
this.languageSelectionWindow.putRenderingBo(bo);
|
||||||
|
|
||||||
|
final var currentLanguage = this.localizationService.getCurrentLanguage();
|
||||||
|
final var currentLangObj = languages.stream().filter(l -> l.getShortName().equals(currentLanguage)).findFirst().orElse(null);
|
||||||
|
final var currentLangName = currentLangObj != null ? currentLangObj.getName() : currentLanguage;
|
||||||
|
bo = this.renderingBoPool.acquire("DemoModule_LanguageSelect_Text_Current", DrawFontRenderingBo.class)
|
||||||
|
.setText("Current: " + currentLangName)
|
||||||
|
.setSize(24)
|
||||||
|
.setAlignment(HorizontalAlignment.CENTER)
|
||||||
|
.withDimensionAbsolute(desiredWidth - (paddingX * 2), currentHeight)
|
||||||
|
.withPositionRelative(paddingX, 95);
|
||||||
|
this.languageSelectionWindow.putRenderingBo(bo);
|
||||||
|
|
||||||
|
for (var i = 0; i < languages.size(); i++) {
|
||||||
|
final var language = languages.get(i);
|
||||||
|
final var controlId = "DemoModule_LanguageSelect_Button_" + sanitizeLanguageId(language.getShortName());
|
||||||
|
this.languageSelectionByControlId.put(controlId, language.getShortName());
|
||||||
|
final var column = i % columns;
|
||||||
|
final var row = i / columns;
|
||||||
|
final var x = paddingX + (column * (buttonWidth + columnGap));
|
||||||
|
final var y = startY + (row * (buttonHeight + gapY));
|
||||||
|
|
||||||
|
bo = this.renderingBoPool.acquire(controlId, ControlRenderingBo.class)
|
||||||
|
.setCaption(language.getName())
|
||||||
|
.setType(ButtonControl.class)
|
||||||
|
.setFontSize(28)
|
||||||
|
.setVisible(true)
|
||||||
|
.setEnabled(true)
|
||||||
|
.withDimensionAbsolute(buttonWidth, buttonHeight)
|
||||||
|
.withPositionRelative(x, y);
|
||||||
|
this.languageSelectionWindow.putRenderingBo(bo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void setupScrollAreaWindow() {
|
private void setupScrollAreaWindow() {
|
||||||
this.scrollAreaWindow.clearRenderingBos();
|
this.scrollAreaWindow.clearRenderingBos();
|
||||||
|
|
||||||
@@ -443,4 +547,11 @@ public class DemoModule extends AbstractClientModule {
|
|||||||
}
|
}
|
||||||
return themeName.replaceAll("[^a-zA-Z0-9]+", "_");
|
return themeName.replaceAll("[^a-zA-Z0-9]+", "_");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static String sanitizeLanguageId(final String shortName) {
|
||||||
|
if (shortName == null || shortName.isBlank()) {
|
||||||
|
return "Unknown";
|
||||||
|
}
|
||||||
|
return shortName.replaceAll("[^a-zA-Z0-9]+", "_");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user