diff --git a/src/main/java/org/saturnclient/ui/screens/ConfigEditor.java b/src/main/java/org/saturnclient/ui/screens/ConfigEditor.java index 1650f1c..5792558 100644 --- a/src/main/java/org/saturnclient/ui/screens/ConfigEditor.java +++ b/src/main/java/org/saturnclient/ui/screens/ConfigEditor.java @@ -4,7 +4,14 @@ import java.util.Map; import org.saturnclient.config.ConfigManager; import org.saturnclient.config.Theme; +import org.saturnclient.config.property.BoolProperty; +import org.saturnclient.config.property.ColorProperty; +import org.saturnclient.config.property.FloatProperty; +import org.saturnclient.config.property.IntProperty; +import org.saturnclient.config.property.KeybindingProperty; +import org.saturnclient.config.property.NamespaceProperty; import org.saturnclient.config.property.Property; +import org.saturnclient.config.property.SelectProperty; import org.saturnclient.ui.SaturnScreen; import org.saturnclient.ui.components.Sidebar; import org.saturnclient.ui.components.inputs.FloatInput; @@ -42,10 +49,9 @@ public class ConfigEditor extends SaturnScreen { draw(new Sidebar(1, this.provider::close).centerOffset(width, height, -(scrollWidth / 2 + 20), 0)); } - @SuppressWarnings("unchecked") - private int drawProperties(Scroll configScroll, Map> properties, int row, int col, int w) { - for (Map.Entry> propEntry : properties.entrySet()) { - Property prop = propEntry.getValue(); + private int drawProperties(Scroll configScroll, Map properties, int row, int col, int w) { + for (Map.Entry propEntry : properties.entrySet()) { + Property prop = propEntry.getValue(); String propName = propEntry.getKey(); boolean full = isFull(prop); @@ -58,53 +64,63 @@ public class ConfigEditor extends SaturnScreen { int modX = (w / 2) * col; // two-column layout int modY = 25 * row; - if (prop.getType() == Property.PropertyType.NAMESPACE) { + if (prop instanceof NamespaceProperty) { configScroll.draw( - new Text( - propName).position(Fonts.centerX(520, propName, Theme.FONT.value), modY + 1) + new Text(propName) + .position(Fonts.centerX(520, propName, Theme.FONT.value), modY + 1) .scale(0.7f)); } else { configScroll.draw( - new Text( - propName).position(modX, modY + 1).scale(0.7f)); + new Text(propName) + .position(modX, modY + 1) + .scale(0.7f)); } - switch (prop.getType()) { - case BOOLEAN: - configScroll.draw( - new Toggle((Property) prop) - .position(modX + (w / 2) - 40, modY) - .scale(0.5f)); - break; - - case HEX: - configScroll.draw(new ColorInput((Property) prop).position(w / 2, modY)); - break; - - case INTEGER: - configScroll.draw(new IntInput((Property) prop).position(w / 2, modY)); - break; - - case FLOAT: - configScroll.draw(new FloatInput((Property) prop).position(w / 2, modY)); - break; - - case NAMESPACE: - Map> nestedProperties = (Map>) prop.value; - row = drawProperties(configScroll, nestedProperties, row + 1, col, w); - break; - - case SELECT: - configScroll.draw(new Select((Property) prop).position(w / 2, modY)); - break; - - case KEYBINDING: - configScroll.draw(new KeybindingSelector((Property) prop).position(w / 2, modY)); - break; - - case STRING: + // instanceof dispatch + if (prop instanceof BoolProperty p) { + configScroll.draw( + new Toggle(p) + .position(modX + (w / 2) - 40, modY) + .scale(0.5f)); } + else if (prop instanceof ColorProperty p) { + configScroll.draw( + new ColorInput(p) + .position(w / 2, modY)); + } + + else if (prop instanceof IntProperty p) { + configScroll.draw( + new IntInput(p) + .position(w / 2, modY)); + } + + else if (prop instanceof FloatProperty p) { + configScroll.draw( + new FloatInput(p) + .position(w / 2, modY)); + } + + else if (prop instanceof NamespaceProperty p) { + Map nestedProperties = p.value; + row = drawProperties(configScroll, nestedProperties, row + 1, col, w); + } + + else if (prop instanceof SelectProperty p) { + configScroll.draw( + new Select(p) + .position(w / 2, modY)); + } + + else if (prop instanceof KeybindingProperty p) { + configScroll.draw( + new KeybindingSelector(p) + .position(w / 2, modY)); + } + + // STRING → intentionally no component (same as before) + if (full) { row++; // full-width takes a whole row col = 0; @@ -120,12 +136,7 @@ public class ConfigEditor extends SaturnScreen { return row; } - public static boolean isFull(Property prop) { - switch (prop.getType()) { - case BOOLEAN: - return false; - default: - return true; - } + public static boolean isFull(Property prop) { + return prop instanceof BoolProperty; } }