feat(renderer): extend ToggleButtonData and SwitchData to include allowNoneToggledInGroup flag

This commit is contained in:
extio-de
2026-02-01 14:11:07 +01:00
parent 3d240259c1
commit 4a21be1730
4 changed files with 34 additions and 17 deletions

View File

@@ -10,6 +10,8 @@ public interface ThemeManager {
List<String> getAvailableThemeNames(); List<String> getAvailableThemeNames();
List<String> getPatternRendererNames();
Optional<Theme> loadThemeFromStorage(String themeName); Optional<Theme> loadThemeFromStorage(String themeName);
void saveThemeToStorage(Theme theme); void saveThemeToStorage(Theme theme);

View File

@@ -12,9 +12,12 @@ public abstract class G2DAbstractToggleButtonControlImpl extends G2DButtonContro
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);
} }
} }

View File

@@ -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;
@@ -220,4 +225,11 @@ public class G2DThemeManager implements ThemeManager {
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();
}
} }

View File

@@ -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) {}