// Path: src/main/java/tornadofx/control/NaviSelect.java
// public class NaviSelect<T> extends HBox {
// 	private ComboBox<String> editButton = new ComboBox<>();
// 	private Button gotoButton = new Button();
//     private Function<T, String> defaultVisualConverter = t -> { String value = t == null ? null : t.toString(); return value == null ? "" : value; };
//     private ObjectProperty<Function<T, String>> visualConverter = new SimpleObjectProperty<Function<T, String>>(defaultVisualConverter) {
//         public void set(Function<T, String> newValue) {
//             super.set(newValue);
//             visualBinding.invalidate();
//         }
//     };
//     private ObjectProperty<T> value = new SimpleObjectProperty<>();
//     private StringBinding visualBinding = createStringBinding(() -> getVisualConverter().apply(getValue()), valueProperty());
// 
//     public NaviSelect() {
// 		getStyleClass().add("navi-select");
// 		editButton.getStyleClass().add("edit-button");
// 
//         editButton.valueProperty().bind(visualBinding);
//         HBox.setHgrow(editButton, Priority.ALWAYS);
// 
// 		editButton.setTooltip(new Tooltip("Edit"));
// 
// 		Pane gotoButtonGraphic = new Pane();
// 		gotoButtonGraphic.getStyleClass().add("icon");
// 		gotoButton.setGraphic(gotoButtonGraphic);
// 		gotoButton.setTooltip(new Tooltip("Goto"));
// 
// 		gotoButton.getStyleClass().add("goto-button");
// 
// 		getChildren().addAll(editButton, gotoButton);
// 	}
// 
// 	public void setOnEdit(EventHandler<MouseEvent> editHandler) {
// 		editButton.setOnMouseClicked(editHandler);
// 	}
// 
// 	public void setOnGoto(EventHandler<ActionEvent> gotoHandler) {
// 		gotoButton.setOnAction(gotoHandler);
// 	}
// 
// 	public ObjectProperty<T> valueProperty() { return value; }
// 	public T getValue() { return value.get(); }
// 	public void setValue(T value) { this.value.set(value); }
// 
// 	public ComboBox<String> getEditButton() {
// 		return editButton;
// 	}
// 
// 	public void setEditButton(ComboBox<String> editButton) {
// 		this.editButton = editButton;
// 	}
// 
// 	public Button getGotoButton() {
// 		return gotoButton;
// 	}
// 
// 	public void setGotoButton(Button gotoButton) {
// 		this.gotoButton = gotoButton;
// 	}
// 
// 	public String getUserAgentStylesheet() {
// 		return ListMenu.class.getResource("naviselect.css").toExternalForm();
// 	}
// 
//     public Function<T, String> getVisualConverter() {
//         return visualConverter.get();
//     }
// 
//     public ObjectProperty<Function<T, String>> visualConverterProperty() {
//         return visualConverter;
//     }
// 
//     public void setVisualConverter(Function<T, String> visualConverter) {
//         this.visualConverter.set(visualConverter);
//     }
// 
// }


import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import tornadofx.control.NaviSelect;
import static javafx.scene.control.Alert.AlertType.INFORMATION;
package tornadofx.control.test;



public class NaviSelectDemo extends Application {
	public void start(Stage stage) throws Exception {
		stage.setTitle("NaviSelect Demo");

		HBox root = new HBox(10);
		root.setAlignment(Pos.CENTER_LEFT);
		root.setPadding(new Insets(50));

		Label label = new Label("Choose customer:");
		label.setStyle("-fx-font-weight: bold");

// Path: src/main/java/tornadofx/control/NaviSelect.java
// public class NaviSelect<T> extends HBox {
// 	private ComboBox<String> editButton = new ComboBox<>();
// 	private Button gotoButton = new Button();
//     private Function<T, String> defaultVisualConverter = t -> { String value = t == null ? null : t.toString(); return value == null ? "" : value; };
//     private ObjectProperty<Function<T, String>> visualConverter = new SimpleObjectProperty<Function<T, String>>(defaultVisualConverter) {
//         public void set(Function<T, String> newValue) {
//             super.set(newValue);
//             visualBinding.invalidate();
//         }
//     };
//     private ObjectProperty<T> value = new SimpleObjectProperty<>();
//     private StringBinding visualBinding = createStringBinding(() -> getVisualConverter().apply(getValue()), valueProperty());
// 
//     public NaviSelect() {
// 		getStyleClass().add("navi-select");
// 		editButton.getStyleClass().add("edit-button");
// 
//         editButton.valueProperty().bind(visualBinding);
//         HBox.setHgrow(editButton, Priority.ALWAYS);
// 
// 		editButton.setTooltip(new Tooltip("Edit"));
// 
// 		Pane gotoButtonGraphic = new Pane();
// 		gotoButtonGraphic.getStyleClass().add("icon");
// 		gotoButton.setGraphic(gotoButtonGraphic);
// 		gotoButton.setTooltip(new Tooltip("Goto"));
// 
// 		gotoButton.getStyleClass().add("goto-button");
// 
// 		getChildren().addAll(editButton, gotoButton);
// 	}
// 
// 	public void setOnEdit(EventHandler<MouseEvent> editHandler) {
// 		editButton.setOnMouseClicked(editHandler);
// 	}
// 
// 	public void setOnGoto(EventHandler<ActionEvent> gotoHandler) {
// 		gotoButton.setOnAction(gotoHandler);
// 	}
// 
// 	public ObjectProperty<T> valueProperty() { return value; }
// 	public T getValue() { return value.get(); }
// 	public void setValue(T value) { this.value.set(value); }
// 
// 	public ComboBox<String> getEditButton() {
// 		return editButton;
// 	}
// 
// 	public void setEditButton(ComboBox<String> editButton) {
// 		this.editButton = editButton;
// 	}
// 
// 	public Button getGotoButton() {
// 		return gotoButton;
// 	}
// 
// 	public void setGotoButton(Button gotoButton) {
// 		this.gotoButton = gotoButton;
// 	}
// 
// 	public String getUserAgentStylesheet() {
// 		return ListMenu.class.getResource("naviselect.css").toExternalForm();
// 	}
// 
//     public Function<T, String> getVisualConverter() {
//         return visualConverter.get();
//     }
// 
//     public ObjectProperty<Function<T, String>> visualConverterProperty() {
//         return visualConverter;
//     }
// 
//     public void setVisualConverter(Function<T, String> visualConverter) {
//         this.visualConverter.set(visualConverter);
//     }
// 
// }


// Path: src/test/java/tornadofx/control/test/NaviSelectDemo.java
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import tornadofx.control.NaviSelect;
import static javafx.scene.control.Alert.AlertType.INFORMATION;

package tornadofx.control.test;



public class NaviSelectDemo extends Application {
	public void start(Stage stage) throws Exception {
		stage.setTitle("NaviSelect Demo");

		HBox root = new HBox(10);
		root.setAlignment(Pos.CENTER_LEFT);
		root.setPadding(new Insets(50));

		Label label = new Label("Choose customer:");
		label.setStyle("-fx-font-weight: bold");

		NaviSelect<Email> navi = new NaviSelect<>();