Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package ch.epfl.javions.gui;
- import ch.epfl.javions.Units;
- import ch.epfl.javions.adsb.CallSign;
- import javafx.beans.property.ObjectProperty;
- import javafx.beans.property.ReadOnlyDoubleWrapper;
- import javafx.beans.property.ReadOnlyObjectWrapper;
- import javafx.collections.FXCollections;
- import javafx.collections.ObservableList;
- import javafx.collections.ObservableSet;
- import javafx.collections.SetChangeListener;
- import javafx.scene.Node;
- import javafx.scene.control.TableColumn;
- import javafx.scene.control.TableView;
- import java.text.NumberFormat;
- import java.text.ParseException;
- import java.util.List;
- import java.util.function.Consumer;
- public final class AircraftTableController {
- private final ObservableSet<ObservableAircraftState> aircraftStates;
- private final ObjectProperty<ObservableAircraftState> selectedAircraftState;
- private final TableView<ObservableAircraftState> tableView;
- public AircraftTableController(ObservableSet<ObservableAircraftState> aircraftStates,
- ObjectProperty<ObservableAircraftState> selectedAircraftState) {
- this.aircraftStates = FXCollections.unmodifiableObservableSet(aircraftStates);
- this.selectedAircraftState = selectedAircraftState;
- ObservableList<ObservableAircraftState> list = FXCollections.observableArrayList(aircraftStates);
- tableView = new TableView<>(list);
- tableView.getStylesheets().add("table.css");
- tableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY_SUBSEQUENT_COLUMNS);
- tableView.setTableMenuButtonVisible(true);
- buildTable();
- aircraftStates.addListener((SetChangeListener<ObservableAircraftState>) change -> {
- if (change.wasAdded()) {
- // Add the value to each column cell of the tableView
- tableView.getItems().add(change.getElementAdded());
- }
- else if (change.wasRemoved()) {
- tableView.getItems().remove(change.getElementRemoved());
- }
- });
- }
- public Node pane() {
- return tableView;
- }
- public void setOnDoubleClick(Consumer<ObservableAircraftState> onDoubleClick) {
- tableView.setOnMouseClicked(event -> {
- if (event.getClickCount() == 2 && tableView.getSelectionModel().getSelectedItem() != null) {
- onDoubleClick.accept(tableView.getSelectionModel().getSelectedItem());
- }
- });
- }
- private void buildTable() {
- tableView.getColumns().addAll(
- createStringColumn("OACI", "numeric", 60, f -> f.getValue().getIcaoAddress().string()),
- createStringColumn("Indicatif", null, 70, f -> f.getValue().callSignProperty().map(CallSign::string)),
- createStringColumn("Immatriculation", null, 90, f -> f.getValue().getData() != null ?
- f.getValue().getData().registration().string() : ""),
- createStringColumn("Modèle", null, 230, f -> f.getValue().getData() != null ?
- f.getValue().getData().model() : ""),
- createStringColumn("Type", null, 50, f -> f.getValue().getData() != null ?
- f.getValue().getData().typeDesignator().string() : ""),
- createStringColumn("Description", null, 70, f -> f.getValue().getData() != null ?
- f.getValue().getData().description().string() : ""),
- createNumericColumn("Latitude (°)", "numeric", f -> Units.convertTo(f.getValue().positionProperty().get().latitude(), Units.Angle.DEGREE)),
- createNumericColumn("Longitude (°)", "numeric", f -> Units.convertTo(f.getValue().positionProperty().get().longitude(), Units.Angle.DEGREE)),
- createNumericColumn("Altitude (m)", "numeric", f -> f.getValue().positionProperty().get().altitude())
- );
- }
- private <T> TableColumn<ObservableAircraftState, String> createStringColumn(String name, String styleClass, double prefWidth,
- ObservableValue<T> observableValue) {
- TableColumn<ObservableAircraftState, String> column = new TableColumn<>(name);
- column.setCellValueFactory(f -> new ReadOnlyObjectWrapper<>(observableValue.getValue().toString()));
- column.setPrefWidth(prefWidth);
- if (styleClass != null) {
- column.getStyleClass().add(styleClass);
- }
- return column;
- }
- private TableColumn<ObservableAircraftState, String> createNumericColumn(String name, String styleClass,
- ObservableValue<Number> observableValue) {
- TableColumn<ObservableAircraftState, String> column = new TableColumn<>(name);
- column.setCellValueFactory(f -> {
- NumberFormat format = NumberFormat.getInstance();
- format.setMinimumFractionDigits(4);
- format.setMaximumFractionDigits(4);
- ReadOnlyDoubleWrapper wrapper = new ReadOnlyDoubleWrapper(observableValue.getValue().doubleValue());
- return wrapper.map(format::format);
- });
- column.getStyleClass().add(styleClass);
- setComparator(column);
- return column;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment