diff --git a/resources/view/TreeView.fxml b/resources/view/TreeView.fxml index c14543e..2a3fa0a 100644 --- a/resources/view/TreeView.fxml +++ b/resources/view/TreeView.fxml @@ -6,6 +6,10 @@ + + + + @@ -14,7 +18,17 @@ diff --git a/src/launcher/Launch.java b/src/launcher/Launch.java index 7f9d144..cf4884a 100644 --- a/src/launcher/Launch.java +++ b/src/launcher/Launch.java @@ -49,13 +49,13 @@ public class Launch extends Application { while (true) { Platform.runLater(() -> { capteurs.forEach(c -> { - if(c instanceof UnitCapteur uc){ + if(c instanceof UnitCapteur uc && uc.isGenTemp()){ uc.genTemp(); } }); capteurs.forEach(c -> { - if(c instanceof UnitCapteur uc){ - uc.genTemp(); + if(c instanceof CapteurVirtuel vc){ + vc.genTemp(); }}); }); try { diff --git a/src/model/CapteurAbstrait.java b/src/model/CapteurAbstrait.java index 332479b..2dedd60 100644 --- a/src/model/CapteurAbstrait.java +++ b/src/model/CapteurAbstrait.java @@ -2,11 +2,15 @@ package model; import javafx.beans.property.*; +import java.util.HashMap; +import java.util.Map; + public abstract class CapteurAbstrait { private Property id; private StringProperty nom; private StringProperty displayNom; private ObjectProperty temp = new SimpleObjectProperty(); + private Boolean isGenTemp; CapteurAbstrait(Property id, StringProperty nom){ this.id = id; @@ -14,6 +18,7 @@ public abstract class CapteurAbstrait { this.displayNom = new SimpleStringProperty(); this.displayNom.bind(this.nom); this.temp.setValue(0.0); + this.isGenTemp = true; } public abstract void genTemp(); @@ -51,4 +56,10 @@ public abstract class CapteurAbstrait { public abstract T accept (Visitor v); + public Map getCapteurs(){ + return new HashMap<>(); + }; + + public Boolean isGenTemp() {return this.isGenTemp;}; + public void setIsGenTemp(boolean b) {this.isGenTemp = b;}; } diff --git a/src/model/UnitCapteur.java b/src/model/UnitCapteur.java index 6e46d5b..868444b 100644 --- a/src/model/UnitCapteur.java +++ b/src/model/UnitCapteur.java @@ -26,4 +26,8 @@ public class UnitCapteur extends CapteurAbstrait{ public StrategyCaptor getStrategie() { return strategie; } + + public void setStrategy(StrategyCaptor strategie) { + this.strategie = strategie; + } } diff --git a/src/view/TreeViewCtrl.java b/src/view/TreeViewCtrl.java index 9790ed0..e0ae87c 100644 --- a/src/view/TreeViewCtrl.java +++ b/src/view/TreeViewCtrl.java @@ -7,13 +7,21 @@ import java.util.List; import java.util.ResourceBundle; import javafx.beans.binding.Bindings; +import javafx.beans.property.SimpleIntegerProperty; +import javafx.beans.property.SimpleObjectProperty; +import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.*; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.control.cell.TextFieldTableCell; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.input.MouseEvent; +import javafx.util.converter.IntegerStringConverter; import javafx.util.converter.NumberStringConverter; import model.*; @@ -32,8 +40,11 @@ public class TreeViewCtrl extends FXMLView { @FXML private Label temperatureLabel; + @FXML private TableView sousCapteurs; @FXML private ComboBox strategyOptions; + @FXML + private ToggleButton arretGenTemp; private ArrayList capteurAbstraits; @@ -66,8 +77,6 @@ public class TreeViewCtrl extends FXMLView { } public void initializeCapteur() { - strategyOptions.getItems().addAll("CPU", "Random"); - treeView.setCellFactory(param -> new TreeCell() { @Override protected void updateItem(CapteurAbstrait capteur, boolean empty) { @@ -93,7 +102,12 @@ public class TreeViewCtrl extends FXMLView { } } }); + } + + public void initialize(){ strategyOptions.setVisible(false); + sousCapteurs.setVisible(false); + arretGenTemp.setVisible(false); treeView.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { if (oldValue != null) { CapteurAbstrait capteur = oldValue.getValue(); @@ -103,6 +117,8 @@ public class TreeViewCtrl extends FXMLView { if(capteur instanceof UnitCapteur){ strategyOptions.setVisible(false); } + sousCapteurs.getItems().clear(); + sousCapteurs.getColumns().clear(); } if (newValue != null) { CapteurAbstrait capteur = newValue.getValue(); @@ -124,6 +140,90 @@ public class TreeViewCtrl extends FXMLView { }); if(capteur instanceof UnitCapteur){ strategyOptions.setVisible(true); + sousCapteurs.setVisible(false); + arretGenTemp.setVisible(true); + strategyOptions.setOnAction(event ->{ + if(strategyOptions.getValue().equals("CPU")){ + ((UnitCapteur) newValue.getValue()).setStrategy(new StrategyCPU()); + } + else if (strategyOptions.getValue().equals("Random")){ + ((UnitCapteur) newValue.getValue()).setStrategy(new StrategyRandom()); + } + if(!newValue.getValue().isGenTemp()){ + arretGenTemp.setSelected(true); + }; + initializeCapteur(); + }); + arretGenTemp.setOnAction(event -> { + newValue.getValue().setIsGenTemp(!arretGenTemp.isSelected()); + }); + } else if(capteur instanceof CapteurVirtuel){ + strategyOptions.setVisible(false); + sousCapteurs.setVisible(true); + arretGenTemp.setVisible(false); + ObservableList capteurs = FXCollections.observableArrayList(newValue.getValue().getCapteurs().keySet()); + sousCapteurs.setItems(capteurs); + TableColumn iconColumn = new TableColumn<>("Icone"); + iconColumn.setCellFactory(column -> { + return new TableCell() { + @Override + protected void updateItem(Object item, boolean empty) { + super.updateItem(item, empty); + if (empty) { + setGraphic(null); + } else { + if (getTableRow() != null){ + CapteurAbstrait capteur = (CapteurAbstrait) getTableRow().getItem(); + if (capteur instanceof CapteurVirtuel) { + ImageView capVirt = new ImageView("images/virtual.png"); + capVirt.setFitWidth(25); + capVirt.setFitHeight(25); + setGraphic(capVirt); + } else if (capteur instanceof UnitCapteur) { + UnitCapteur unitCaptor = (UnitCapteur) capteur; + if (unitCaptor.getStrategie() instanceof StrategyCPU) { + ImageView capCpu = new ImageView("images/cpu.png"); + capCpu.setFitWidth(25); + capCpu.setFitHeight(25); + setGraphic(capCpu); + } else if (unitCaptor.getStrategie() instanceof StrategyRandom) { + ImageView capRand = new ImageView("images/random.png"); + capRand.setFitWidth(25); + capRand.setFitHeight(25); + setGraphic(capRand); + } + } + } + } + } + }; + }); + sousCapteurs.getColumns().add(iconColumn); + TableColumn idColumn = new TableColumn<>("id"); + idColumn.setCellValueFactory(cellData -> new SimpleIntegerProperty(Integer.parseInt(cellData.getValue().getId().getValue())).asObject()); + sousCapteurs.getColumns().add(idColumn); + TableColumn NameColumn = new TableColumn<>("Nom"); + NameColumn.setCellValueFactory(cellData -> new SimpleStringProperty(cellData.getValue().getNom().getValue())); + sousCapteurs.getColumns().add(NameColumn); + NameColumn.setEditable(true); + + TableColumn poidsColumn = new TableColumn<>("Poids"); + poidsColumn.setCellValueFactory(cellData -> { + CapteurAbstrait captor = cellData.getValue(); + if (captor != null && newValue.getValue().getCapteurs().get(captor) != null) { + return new SimpleIntegerProperty(newValue.getValue().getCapteurs().get(captor)).asObject(); + } else { + return new SimpleObjectProperty<>(null); + } + }); + sousCapteurs.getColumns().add(poidsColumn); + poidsColumn.setEditable(true); + poidsColumn.setCellFactory(TextFieldTableCell.forTableColumn(new IntegerStringConverter())); + + poidsColumn.setOnEditCommit(event -> { + CapteurAbstrait capteur2 = event.getRowValue(); + newValue.getValue().getCapteurs().put(capteur2, event.getNewValue()); + }); } } });