package nl.uva.softwcons.qls.ui.widget; import static nl.uva.softwcons.ql.eval.value.UndefinedValue.UNDEFINED; import javafx.scene.Node; import javafx.scene.control.Slider; import nl.uva.softwcons.ql.eval.ValueChangeListener; import nl.uva.softwcons.ql.eval.value.Value; import nl.uva.softwcons.ql.ui.converter.ValueConverter; import nl.uva.softwcons.ql.ui.widget.Widget; public class SliderWidget extends Widget { private final Slider slider; private ValueConverter<Number> converter; public SliderWidget(final double start, final double end, final double step) { this.slider = new Slider(start, end, start); slider.setBlockIncrement(step); slider.setShowTickLabels(true); slider.setShowTickMarks(true); slider.setMinorTickCount(1); slider.setMajorTickUnit(1f); slider.setSnapToTicks(true); } public SliderWidget(final double start, final double end, final double step, final ValueConverter<Number> converter) { this(start, end, step); this.converter = converter; } @Override public void addListener(final ValueChangeListener<Value> listener) { slider.valueProperty().addListener((observable, oldValue, newValue) -> { listener.processValueChange(converter.toValue(newValue)); }); } @Override public void setValue(final Value value) { if (value == UNDEFINED) { slider.setValue(slider.minProperty().get()); return; } slider.setValue(value.getNumber().doubleValue()); } @Override public void setEditable(final boolean editable) { this.slider.setDisable(!editable); } @Override public Node getWidget() { return slider; } @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public void setConverter(final ValueConverter converter) { this.converter = converter; } }