package org.jabref.gui.fieldeditors;
import javafx.fxml.FXML;
import javafx.scene.Parent;
import javafx.scene.control.ComboBox;
import javafx.scene.layout.HBox;
import org.jabref.gui.util.ControlHelper;
import org.jabref.gui.util.ViewModelListCellFactory;
import org.jabref.model.entry.BibEntry;
/**
* Field editor that provides various pre-defined options as a drop-down combobox.
*/
public class OptionEditor<T> extends HBox implements FieldEditorFX {
private final String fieldName;
@FXML private OptionEditorViewModel<T> viewModel;
@FXML private ComboBox<T> comboBox;
public OptionEditor(String fieldName, OptionEditorViewModel<T> viewModel) {
this.fieldName = fieldName;
this.viewModel = viewModel;
ControlHelper.loadFXMLForControl(this);
comboBox.setConverter(viewModel.getStringConverter());
comboBox.setCellFactory(new ViewModelListCellFactory<T>().withText(viewModel::convertToDisplayText));
comboBox.getItems().setAll(viewModel.getItems());
comboBox.getEditor().textProperty().bindBidirectional(viewModel.textProperty());
}
public OptionEditorViewModel<T> getViewModel() {
return viewModel;
}
@Override
public void bindToEntry(BibEntry entry) {
viewModel.bindToEntry(fieldName, entry);
}
@Override
public Parent getNode() {
return this;
}
}