IntProperty and FloatProperty can take an optional range, step and unit. PropertyList shows those settings as a Slider: a track to click or drag, snapping to the step, with the value and unit beside it. Zoom and freelook levels and durations, fullbright brightness, the theme radii, animation timings and HUD scale and radius get ranges; the rest stay number boxes. Co-Authored-By: Claude Opus 5.5 <[email protected]>
63 lines
1.5 KiB
Java
63 lines
1.5 KiB
Java
package org.saturnclient.config.property;
|
|
|
|
import com.fasterxml.jackson.databind.JsonNode;
|
|
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
|
|
|
|
public class IntProperty extends Property {
|
|
public int value;
|
|
public final int defaultValue;
|
|
|
|
/** Bounds for a slider, when the setting has a sensible range */
|
|
public Integer min, max;
|
|
public int step = 1;
|
|
/** Shown after the value, like "ms" */
|
|
public String unit = "";
|
|
|
|
public IntProperty(int defaultValue) {
|
|
this.value = defaultValue;
|
|
this.defaultValue = defaultValue;
|
|
}
|
|
|
|
/**
|
|
* Gives the setting a range, so it's edited with a slider.
|
|
*/
|
|
public IntProperty range(int min, int max) {
|
|
return range(min, max, 1);
|
|
}
|
|
|
|
public IntProperty range(int min, int max, int step) {
|
|
this.min = min;
|
|
this.max = max;
|
|
this.step = step;
|
|
return this;
|
|
}
|
|
|
|
public IntProperty unit(String unit) {
|
|
this.unit = unit;
|
|
return this;
|
|
}
|
|
|
|
public boolean hasRange() {
|
|
return min != null && max != null;
|
|
}
|
|
|
|
@Override
|
|
public void reset() {
|
|
this.value = defaultValue;
|
|
this.isReset = true;
|
|
}
|
|
|
|
@Override
|
|
public JsonNode toJson() {
|
|
return JsonNodeFactory.instance.numberNode(this.value);
|
|
}
|
|
|
|
@Override
|
|
public void loadFromJson(JsonNode element) {
|
|
if (element.isInt())
|
|
this.value = element.intValue();
|
|
else if (element.isTextual())
|
|
this.value = ColorProperty.parseHexToInt(element.textValue());
|
|
}
|
|
}
|