diff --git a/javafx_1.iml b/javafx_1.iml
new file mode 100644
index 0000000..8969dea
--- /dev/null
+++ b/javafx_1.iml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/images/snow.png b/resources/images/snow.png
new file mode 100644
index 0000000..492f08b
Binary files /dev/null and b/resources/images/snow.png differ
diff --git a/resources/images/sun.png b/resources/images/sun.png
new file mode 100644
index 0000000..d538c3e
Binary files /dev/null and b/resources/images/sun.png differ
diff --git a/resources/images/suncloud.png b/resources/images/suncloud.png
new file mode 100644
index 0000000..1799d51
Binary files /dev/null and b/resources/images/suncloud.png differ
diff --git a/resources/view/Image.fxml b/resources/view/Image.fxml
new file mode 100644
index 0000000..5513879
--- /dev/null
+++ b/resources/view/Image.fxml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/resources/view/Thermostat.fxml b/resources/view/Thermostat.fxml
new file mode 100644
index 0000000..1c28411
--- /dev/null
+++ b/resources/view/Thermostat.fxml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/launcher/Launch.java b/src/launcher/Launch.java
new file mode 100644
index 0000000..08bf814
--- /dev/null
+++ b/src/launcher/Launch.java
@@ -0,0 +1,54 @@
+package launcher;
+
+import javafx.application.Application;
+import javafx.fxml.FXML;
+import javafx.fxml.FXMLLoader;
+import javafx.fxml.Initializable;
+import javafx.scene.Group;
+import javafx.scene.Parent;
+import javafx.scene.Scene;
+import javafx.scene.layout.BorderPane;
+import javafx.scene.layout.StackPane;
+import javafx.scene.text.Text;
+import javafx.stage.Stage;
+import model.Capteur;
+import view.CapteurView;
+import view.ImageCtrlView;
+import view.ThermostatView;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.Random;
+import java.util.ResourceBundle;
+
+public class Launch extends Application {
+ public static void main(String[] args) {
+ launch(args);
+ }
+
+ @Override
+ public void start(Stage primaryStage) throws IOException, InterruptedException {
+ Capteur captor = new Capteur(1,"CapteurIncroyable", 15);
+
+ Stage thermostatStage = new Stage();
+ CapteurView capteurView = new ImageCtrlView(captor,"view/Image.fxml","mon titre");
+ ThermostatView thermostatView = new ThermostatView(captor,"view/Thermostat.fxml","mon titre");
+
+ Random random = new Random();
+
+ Thread t = new Thread() {
+ public void run() {
+ while (true) {
+ captor.setTemp(random.nextInt(30));
+ try {
+ sleep(1000);
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+ };
+ t.start();
+ }
+}
+
diff --git a/src/model/Capteur.java b/src/model/Capteur.java
new file mode 100644
index 0000000..e573844
--- /dev/null
+++ b/src/model/Capteur.java
@@ -0,0 +1,52 @@
+package model;
+
+
+import javafx.beans.property.ObjectProperty;
+import javafx.beans.property.SimpleObjectProperty;
+
+import java.util.Random;
+
+public class Capteur implements CapteurAbstrait{
+
+ private int id;
+ private String nom;
+ private ObjectProperty temp = new SimpleObjectProperty<>();
+
+ public Capteur(int id, String nom, int pTemp){
+ this.id = id;
+ this.nom = nom;
+ temp.setValue((double)pTemp);
+ }
+
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getNom() {
+ return nom;
+ }
+
+ public void setNom(String nom) {
+ this.nom = nom;
+ }
+
+ public ObjectProperty getTemp() {
+ return temp;
+ }
+
+ public void setTemp(int pTemp) {
+ this.temp.set((double)pTemp);
+ }
+
+ @Override
+ public ObjectProperty genTemp() {
+ Random random = new Random();
+ this.setTemp(random.nextInt(30));
+ return this.getTemp();
+ }
+}
diff --git a/src/model/CapteurAbstrait.java b/src/model/CapteurAbstrait.java
new file mode 100644
index 0000000..e2d33fb
--- /dev/null
+++ b/src/model/CapteurAbstrait.java
@@ -0,0 +1,7 @@
+package model;
+
+import javafx.beans.property.ObjectProperty;
+
+public interface CapteurAbstrait {
+ public ObjectProperty genTemp();
+}
diff --git a/src/model/CapteurVirtuel.java b/src/model/CapteurVirtuel.java
new file mode 100644
index 0000000..4ec8758
--- /dev/null
+++ b/src/model/CapteurVirtuel.java
@@ -0,0 +1,34 @@
+package model;
+
+import javafx.beans.property.ObjectProperty;
+import javafx.beans.property.SimpleObjectProperty;
+
+import java.util.List;
+
+public class CapteurVirtuel implements CapteurAbstrait{
+
+ private List capteurs;
+
+ public CapteurVirtuel(List cs){
+ this.capteurs = cs;
+ }
+ public void addCapteur(CapteurAbstrait c){
+ capteurs.add(c);
+ }
+
+ public void removeCapteur(CapteurAbstrait c){
+ capteurs.remove(c);
+ }
+
+ @Override
+ public ObjectProperty genTemp() {
+ ObjectProperty avg = new SimpleObjectProperty<>();
+ avg.setValue((double) 0);
+
+ for (CapteurAbstrait c: capteurs) {
+ avg.setValue(c.genTemp() + avg.getValue());
+ }
+ avg.set(avg.getValue()/capteurs.size());
+ return avg.getValue();
+ }
+}
diff --git a/src/view/CapteurView.java b/src/view/CapteurView.java
new file mode 100644
index 0000000..da8e647
--- /dev/null
+++ b/src/view/CapteurView.java
@@ -0,0 +1,30 @@
+package view;
+
+import javafx.application.Platform;
+import javafx.beans.InvalidationListener;
+import javafx.fxml.FXML;
+import javafx.scene.control.Button;
+import javafx.stage.Stage;
+import model.Capteur;
+import javafx.scene.input.MouseEvent;
+import javafx.event.EventHandler;
+
+import java.io.IOException;
+
+
+public abstract class CapteurView extends FXMLView {
+ @FXML
+ Button myBtn;
+
+ protected Capteur capteur;
+
+ public CapteurView(Capteur capteur,String url, String title) throws IOException {
+ super(url,title);
+ this.setCapteur(capteur);
+ }
+
+ public void setCapteur(Capteur capteur) {
+ this.capteur = capteur;
+ }
+
+}
diff --git a/src/view/FXMLView.java b/src/view/FXMLView.java
new file mode 100644
index 0000000..ef1d7e7
--- /dev/null
+++ b/src/view/FXMLView.java
@@ -0,0 +1,21 @@
+package view;
+
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Group;
+import javafx.scene.Parent;
+import javafx.scene.Scene;
+import javafx.stage.Stage;
+
+import java.io.IOException;
+
+public class FXMLView extends Stage {
+
+ public FXMLView(String url, String title) throws IOException {
+ FXMLLoader fxmlLoader = new FXMLLoader(this.getClass().getClassLoader().getResource(url));
+ fxmlLoader.setController(this);
+ Parent root = fxmlLoader.load();
+ Scene scene = new Scene(root);
+ setScene(scene);
+ show();
+ }
+}
diff --git a/src/view/ImageCtrlView.java b/src/view/ImageCtrlView.java
new file mode 100644
index 0000000..9ba9195
--- /dev/null
+++ b/src/view/ImageCtrlView.java
@@ -0,0 +1,61 @@
+package view;
+
+import javafx.application.Platform;
+import javafx.beans.Observable;
+import javafx.fxml.FXML;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Parent;
+import javafx.scene.Scene;
+import javafx.scene.control.Label;
+import javafx.scene.image.Image;
+import javafx.scene.image.ImageView;
+import javafx.stage.Stage;
+import model.Capteur;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+public class ImageCtrlView extends CapteurView{
+ private final static String fxmlfile = "view/Image.fxml";
+ Class> clazz = this.getClass();
+ InputStream input;
+
+ protected Capteur capteur;
+ @FXML
+ ImageView imageview;
+
+ public ImageCtrlView(Capteur capteur, String url, String title) throws IOException {
+ super(capteur,url,title);
+ this.capteur = capteur;
+ myBtn.setOnAction(e -> Platform.exit());
+ changeImage();
+ }
+
+ private void changeImage() throws IOException {
+ if (this.capteur.getTemp().getValue() > 25){
+ input = clazz.getResourceAsStream("/images/sun.png");
+ imageview.setImage(new Image(input));
+ } else if (this.capteur.getTemp().getValue() > 10) {
+ input = clazz.getResourceAsStream("/images/suncloud.png");
+ imageview.setImage(new Image(input));
+ }
+ else{
+ input = clazz.getResourceAsStream("/images/snow.png");
+ imageview.setImage(new Image(input));
+ }
+ imageview.setFitHeight(100);
+ imageview.setFitWidth(100);
+ }
+
+ private void quit(){
+ Platform.exit();
+ }
+
+ public void initialize() {
+ /*try {
+ changeImage();
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }*/
+ }
+}
diff --git a/src/view/ThermostatView.java b/src/view/ThermostatView.java
new file mode 100644
index 0000000..fe2f525
--- /dev/null
+++ b/src/view/ThermostatView.java
@@ -0,0 +1,38 @@
+package view;
+
+import javafx.application.Platform;
+import javafx.beans.Observable;
+import javafx.fxml.FXML;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Parent;
+import javafx.scene.Scene;
+import javafx.scene.control.Spinner;
+import javafx.scene.control.SpinnerValueFactory;
+import javafx.stage.Stage;
+import model.Capteur;
+
+import java.io.IOException;
+
+public class ThermostatView extends CapteurView{
+ private final static String fxmlfile = "view/Thermostat.fxml";
+
+ @FXML
+ Spinner spin;
+
+ protected Capteur capteur;
+
+ public ThermostatView(Capteur capteur, String url, String title) throws IOException {
+ super(capteur,url,title);
+ this.capteur = capteur;
+ this.spin.setValueFactory(new SpinnerValueFactory.DoubleSpinnerValueFactory(0d,100d));
+ this.spin.getValueFactory().valueProperty().bindBidirectional(this.capteur.getTemp());
+ myBtn.setOnAction(e -> Platform.exit());
+ }
+
+ public void initialize() {
+ //SpinnerValueFactory valueFactory = new SpinnerValueFactory.IntegerSpinnerValueFactory(capteur.getTemp(), capteur.getTemp(), capteur.getTemp());
+ //spin.setValueFactory(valueFactory);
+
+ }
+
+}