diff --git a/src/fr/uca/iut/clfreville2/gui/MainWindows.java b/src/fr/uca/iut/clfreville2/gui/MainWindows.java index 8c2a3c0..635ca4a 100644 --- a/src/fr/uca/iut/clfreville2/gui/MainWindows.java +++ b/src/fr/uca/iut/clfreville2/gui/MainWindows.java @@ -4,6 +4,7 @@ import fr.uca.iut.clfreville2.gui.image.ImageSupplier; import fr.uca.iut.clfreville2.gui.image.SensorTypeImageSupplier; import fr.uca.iut.clfreville2.gui.image.StandardImageSupplier; import fr.uca.iut.clfreville2.gui.list.NameableStringConverter; +import fr.uca.iut.clfreville2.gui.table.SourceTableRow; import fr.uca.iut.clfreville2.gui.table.WeightSpinnerTableCell; import fr.uca.iut.clfreville2.gui.thread.Ticker; import fr.uca.iut.clfreville2.gui.tree.SensorTreeCell; @@ -174,6 +175,7 @@ public class MainWindows { @FXML private void bindSources() { + sourcesView.setRowFactory(row -> new SourceTableRow(this::delete)); sourceWeight.setCellValueFactory(cell -> new SimpleObjectProperty<>(cell.getValue())); sourceWeight.setCellFactory(cell -> new WeightSpinnerTableCell()); sourceIcon.setCellValueFactory(cell -> new SimpleObjectProperty<>(cell.getValue().sensor())); @@ -214,4 +216,12 @@ public class MainWindows { } return selected.getValue(); } + + private void delete(Sensor source) { + Sensor target = getSelectedSensor(); + if (!(target instanceof VirtualSensor virtual)) { + return; + } + virtual.removeSource(source); + } } diff --git a/src/fr/uca/iut/clfreville2/gui/table/SourceTableRow.java b/src/fr/uca/iut/clfreville2/gui/table/SourceTableRow.java new file mode 100644 index 0000000..1926348 --- /dev/null +++ b/src/fr/uca/iut/clfreville2/gui/table/SourceTableRow.java @@ -0,0 +1,34 @@ +package fr.uca.iut.clfreville2.gui.table; + +import fr.uca.iut.clfreville2.model.sensor.Sensor; +import fr.uca.iut.clfreville2.model.sensor.VirtualSensor.DataSource; +import javafx.scene.control.ContextMenu; +import javafx.scene.control.MenuItem; +import javafx.scene.control.TableRow; + +import java.util.function.Consumer; + +public class SourceTableRow extends TableRow { + + private final MenuItem deleteItem; + private final ContextMenu menu; + private final Consumer deleteConsumer; + + public SourceTableRow(Consumer deleteConsumer) { + this.deleteItem = new MenuItem("Remove"); + this.menu = new ContextMenu(deleteItem); + this.deleteConsumer = deleteConsumer; + } + + @Override + protected void updateItem(DataSource item, boolean empty) { + super.updateItem(item, empty); + if (empty) { + deleteItem.setOnAction(null); + setContextMenu(null); + } else { + deleteItem.setOnAction((e) -> deleteConsumer.accept(item.sensor())); + setContextMenu(menu); + } + } +}