package milkman.ui.main.dialogs; import com.jfoenix.controls.JFXComboBox; import com.jfoenix.controls.JFXDialogLayout; import javafx.scene.control.Dialog; import javafx.scene.control.Label; import lombok.Getter; import milkman.utils.fxml.FxmlBuilder; import milkman.utils.fxml.FxmlUtil; import java.util.List; import java.util.Optional; import static milkman.utils.fxml.FxmlBuilder.*; public class SelectValueDialog { private Dialog dialog; @Getter boolean cancelled = true; JFXComboBox<String> valueSelection; Label promptLabel; Label title; public SelectValueDialog() {} public void showAndWait(String title, String prompt, Optional<String> prefilledValue, List<String> values) { JFXDialogLayout content = new SelectValueDialogFxml(this); this.title.setText(title); promptLabel.setText(prompt); valueSelection.getItems().addAll(values); prefilledValue.ifPresent(valueSelection::setValue); dialog = FxmlUtil.createDialog(content); dialog.showAndWait(); } public String getInput() { return valueSelection.getValue(); } private void onSave() { cancelled = false; dialog.close(); } private void onCancel() { cancelled = true; dialog.close(); } public static class SelectValueDialogFxml extends JFXDialogLayout { public SelectValueDialogFxml(SelectValueDialog controller){ setHeading(controller.title = label("Title")); var vbox = new FxmlBuilder.VboxExt(); controller.promptLabel = vbox.add(label("")); controller.valueSelection = vbox.add(new JFXComboBox<>()); setBody(vbox); setActions(submit(controller::onSave), cancel(controller::onCancel)); } } }