package com.kodcu.config.factory;
import com.dooapp.fxform.view.FXFormNode;
import com.dooapp.fxform.view.FXFormNodeWrapper;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
import javafx.scene.control.ChoiceBox;
import javafx.util.Callback;
import java.util.Objects;
/**
* Created by usta on 17.07.2015.
*/
public class ListChoiceBoxFactory implements Callback<Void, FXFormNode> {
private final ChoiceBox choiceBox;
public ListChoiceBoxFactory() {
this.choiceBox = new ChoiceBox();
}
public ListChoiceBoxFactory(ChoiceBox choiceBox) {
this.choiceBox = choiceBox;
}
public FXFormNode call(Void aVoid) {
choiceBox.itemsProperty().addListener((observable, oldValue, newValue) -> {
choiceBox.getSelectionModel().selectFirst();
((ObservableList) newValue).addListener(new ListChangeListener() {
@Override
public void onChanged(Change change) {
change.next();
if (change.wasAdded()) {
choiceBox.getSelectionModel().selectFirst();
}
}
});
});
choiceBox.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> {
if (Objects.nonNull(newValue)) {
if (!newValue.equals(choiceBox.getItems().get(0))) {
choiceBox.getItems().removeAll(newValue);
choiceBox.getItems().add(0, newValue);
choiceBox.getSelectionModel().selectFirst();
}
}
});
FXFormNodeWrapper fxFormNodeWrapper = new FXFormNodeWrapper(choiceBox, choiceBox.itemsProperty());
return fxFormNodeWrapper;
}
}