feat(renderer): extend ToggleButtonData and SwitchData to include allowNoneToggledInGroup flag
This commit is contained in:
@@ -9,6 +9,8 @@ import de.extio.game_engine.renderer.g2d.theme.Theme;
|
|||||||
public interface ThemeManager {
|
public interface ThemeManager {
|
||||||
|
|
||||||
List<String> getAvailableThemeNames();
|
List<String> getAvailableThemeNames();
|
||||||
|
|
||||||
|
List<String> getPatternRendererNames();
|
||||||
|
|
||||||
Optional<Theme> loadThemeFromStorage(String themeName);
|
Optional<Theme> loadThemeFromStorage(String themeName);
|
||||||
|
|
||||||
|
|||||||
@@ -11,10 +11,13 @@ import de.extio.game_engine.renderer.model.event.UiControlEvent;
|
|||||||
public abstract class G2DAbstractToggleButtonControlImpl extends G2DButtonControlImpl implements ToggleButtonControl, SwitchControl {
|
public abstract class G2DAbstractToggleButtonControlImpl extends G2DButtonControlImpl implements ToggleButtonControl, SwitchControl {
|
||||||
|
|
||||||
protected boolean drawBorder = true;
|
protected boolean drawBorder = true;
|
||||||
|
|
||||||
|
protected boolean allowNoneToggledInGroup;
|
||||||
|
|
||||||
protected void applyToggleButtonData(final ToggleButtonData data) {
|
protected void applyToggleButtonData(final ToggleButtonData data) {
|
||||||
if (data != null) {
|
if (data != null) {
|
||||||
if (this.lastControlDataUpdateTimeInternal < this.lastControlDataUpdateTime) {
|
if (this.lastControlDataUpdateTimeInternal < this.lastControlDataUpdateTime) {
|
||||||
|
this.allowNoneToggledInGroup = data.allowNoneToggledInGroup();
|
||||||
this.setToggled(data.toggled());
|
this.setToggled(data.toggled());
|
||||||
this.lastControlDataUpdateTimeInternal = this.lastControlDataUpdateTime;
|
this.lastControlDataUpdateTimeInternal = this.lastControlDataUpdateTime;
|
||||||
}
|
}
|
||||||
@@ -70,7 +73,7 @@ public abstract class G2DAbstractToggleButtonControlImpl extends G2DButtonContro
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!controlInGroupToggled) {
|
if (!controlInGroupToggled && !this.allowNoneToggledInGroup) {
|
||||||
this.control.setToggled(true);
|
this.control.setToggled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,16 +23,21 @@ public class G2DThemeManager implements ThemeManager {
|
|||||||
private static final Logger LOGGER = LoggerFactory.getLogger(G2DThemeManager.class);
|
private static final Logger LOGGER = LoggerFactory.getLogger(G2DThemeManager.class);
|
||||||
|
|
||||||
private static final List<String> THEME_STORAGE_PATH = List.of("gameEngine");
|
private static final List<String> THEME_STORAGE_PATH = List.of("gameEngine");
|
||||||
|
|
||||||
private static final String THEME_STORAGE_NAME = "lastTheme";
|
private static final String THEME_STORAGE_NAME = "lastTheme";
|
||||||
|
|
||||||
private G2DRenderer g2dRenderer;
|
private G2DRenderer g2dRenderer;
|
||||||
|
|
||||||
private G2DRendererControl g2dRendererControl;
|
private G2DRendererControl g2dRendererControl;
|
||||||
|
|
||||||
private final StaticResourceService staticResourceService;
|
private final StaticResourceService staticResourceService;
|
||||||
|
|
||||||
private final StorageService storageService;
|
private final StorageService storageService;
|
||||||
|
|
||||||
private final Map<String, PatternRenderer> patternRenderers;
|
private final Map<String, PatternRenderer> patternRenderers;
|
||||||
|
|
||||||
private final Map<String, Theme> themes;
|
private final Map<String, Theme> themes;
|
||||||
|
|
||||||
private final Theme defaultTheme;
|
private final Theme defaultTheme;
|
||||||
|
|
||||||
private Theme currentTheme;
|
private Theme currentTheme;
|
||||||
@@ -64,7 +69,7 @@ public class G2DThemeManager implements ThemeManager {
|
|||||||
.sorted()
|
.sorted()
|
||||||
.toList();
|
.toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<Theme> loadThemeFromStorage(final String themeName) {
|
public Optional<Theme> loadThemeFromStorage(final String themeName) {
|
||||||
if (themeName == null || themeName.isBlank()) {
|
if (themeName == null || themeName.isBlank()) {
|
||||||
@@ -102,20 +107,20 @@ public class G2DThemeManager implements ThemeManager {
|
|||||||
loaded.ifPresent(this::registerTheme);
|
loaded.ifPresent(this::registerTheme);
|
||||||
return loaded;
|
return loaded;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setCurrentTheme(final String themeName) {
|
public void setCurrentTheme(final String themeName) {
|
||||||
if (themeName == null || themeName.isBlank()) {
|
if (themeName == null || themeName.isBlank()) {
|
||||||
this.applyLastUsedOrDefault();
|
this.applyLastUsedOrDefault();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final var direct = this.themes.get(themeName);
|
final var direct = this.themes.get(themeName);
|
||||||
if (direct != null) {
|
if (direct != null) {
|
||||||
this.setCurrentTheme(direct);
|
this.setCurrentTheme(direct);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final var byDisplayName = this.themes.values().stream()
|
final var byDisplayName = this.themes.values().stream()
|
||||||
.filter(theme -> theme != null && theme.getName() != null && theme.getName().equalsIgnoreCase(themeName))
|
.filter(theme -> theme != null && theme.getName() != null && theme.getName().equalsIgnoreCase(themeName))
|
||||||
.findFirst()
|
.findFirst()
|
||||||
@@ -124,7 +129,7 @@ public class G2DThemeManager implements ThemeManager {
|
|||||||
this.setCurrentTheme(byDisplayName);
|
this.setCurrentTheme(byDisplayName);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.setCurrentTheme(this.loadTheme(themeName));
|
this.setCurrentTheme(this.loadTheme(themeName));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -161,7 +166,7 @@ public class G2DThemeManager implements ThemeManager {
|
|||||||
LOGGER.warn("Theme '{}' not found in storage. Using default theme.", themeName);
|
LOGGER.warn("Theme '{}' not found in storage. Using default theme.", themeName);
|
||||||
return this.defaultTheme;
|
return this.defaultTheme;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void applyLastUsedOrDefault() {
|
private void applyLastUsedOrDefault() {
|
||||||
try {
|
try {
|
||||||
final Optional<Theme> persistedTheme = this.storageService.loadByPath(Theme.class, THEME_STORAGE_PATH, THEME_STORAGE_NAME);
|
final Optional<Theme> persistedTheme = this.storageService.loadByPath(Theme.class, THEME_STORAGE_PATH, THEME_STORAGE_NAME);
|
||||||
@@ -171,7 +176,7 @@ public class G2DThemeManager implements ThemeManager {
|
|||||||
LOGGER.info("Loaded last used theme: {}", this.currentTheme.getName());
|
LOGGER.info("Loaded last used theme: {}", this.currentTheme.getName());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.applyTheme(this.defaultTheme);
|
this.applyTheme(this.defaultTheme);
|
||||||
LOGGER.info("Loaded default theme: {}", this.currentTheme.getName());
|
LOGGER.info("Loaded default theme: {}", this.currentTheme.getName());
|
||||||
}
|
}
|
||||||
@@ -179,13 +184,13 @@ public class G2DThemeManager implements ThemeManager {
|
|||||||
LOGGER.warn("Could not load last used theme. Using default.", e);
|
LOGGER.warn("Could not load last used theme. Using default.", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void applyTheme(Theme theme) {
|
private void applyTheme(Theme theme) {
|
||||||
this.currentTheme = theme;
|
this.currentTheme = theme;
|
||||||
this.g2dRendererControl.getUiOptions().setFontResource(new StaticResource(List.of("renderer"), this.currentTheme.getFont()));
|
this.g2dRendererControl.getUiOptions().setFontResource(new StaticResource(List.of("renderer"), this.currentTheme.getFont()));
|
||||||
this.g2dRenderer.reset();
|
this.g2dRenderer.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void registerTheme(final Theme theme) {
|
private void registerTheme(final Theme theme) {
|
||||||
if (theme == null || theme.getName() == null || theme.getName().isBlank()) {
|
if (theme == null || theme.getName() == null || theme.getName().isBlank()) {
|
||||||
return;
|
return;
|
||||||
@@ -204,20 +209,27 @@ public class G2DThemeManager implements ThemeManager {
|
|||||||
LOGGER.warn("Could not persist last used theme", e);
|
LOGGER.warn("Could not persist last used theme", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setG2dRenderer(final G2DRenderer g2dRenderer) {
|
public void setG2dRenderer(final G2DRenderer g2dRenderer) {
|
||||||
this.g2dRenderer = g2dRenderer;
|
this.g2dRenderer = g2dRenderer;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setG2dRendererControl(G2DRendererControl g2dRendererControl) {
|
public void setG2dRendererControl(G2DRendererControl g2dRendererControl) {
|
||||||
this.g2dRendererControl = g2dRendererControl;
|
this.g2dRendererControl = g2dRendererControl;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PatternRenderer getPatternRenderer(final String rendererName) {
|
public PatternRenderer getPatternRenderer(final String rendererName) {
|
||||||
return this.patternRenderers.get(rendererName);
|
return this.patternRenderers.get(rendererName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PatternRenderer getCurrentPatternRenderer() {
|
public PatternRenderer getCurrentPatternRenderer() {
|
||||||
return this.patternRenderers.get(this.currentTheme.getPatternRendererName());
|
return this.patternRenderers.get(this.currentTheme.getPatternRendererName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> getPatternRendererNames() {
|
||||||
|
return this.patternRenderers.keySet().stream()
|
||||||
|
.sorted()
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,9 +16,9 @@ public interface ControlRenderingBo extends RenderingBoHasDimension {
|
|||||||
|
|
||||||
record ButtonData(RgbaColor backgroundColor, StaticResource iconResource) {}
|
record ButtonData(RgbaColor backgroundColor, StaticResource iconResource) {}
|
||||||
|
|
||||||
record ToggleButtonData(boolean toggled, StaticResource iconResource) {}
|
record ToggleButtonData(boolean toggled, boolean allowNoneToggledInGroup, StaticResource iconResource) {}
|
||||||
|
|
||||||
record SwitchData(boolean toggled, StaticResource iconResource, boolean drawBorder) {}
|
record SwitchData(boolean toggled, boolean allowNoneToggledInGroup, StaticResource iconResource, boolean drawBorder) {}
|
||||||
|
|
||||||
record WindowCloseButtonData(boolean thickBorder) {}
|
record WindowCloseButtonData(boolean thickBorder) {}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user