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());
+ });
}
}
});