From 54a10a2ea1224330a22bded2066ff34b2499425d Mon Sep 17 00:00:00 2001
From: Yvan Serikoff <yvan.serikoff.etu@univ-lille.fr>
Date: Fri, 4 Oct 2024 10:26:36 +0200
Subject: [PATCH] fin TP4

---
 .../fr/univlille/iut/r304/thermo/Main.java    | 10 +-
 .../iut/r304/thermo/model/Thermostat.java     | 18 ++--
 .../iut/r304/thermo/view/SliderView.java      | 97 +++++++++++++++++++
 .../iut/r304/thermo/view/TextView.java        | 88 +++++++++++++++--
 .../univlille/iut/r304/utils/Observable.java  |  2 +-
 5 files changed, 193 insertions(+), 22 deletions(-)
 create mode 100644 src/main/java/fr/univlille/iut/r304/thermo/view/SliderView.java

diff --git a/src/main/java/fr/univlille/iut/r304/thermo/Main.java b/src/main/java/fr/univlille/iut/r304/thermo/Main.java
index 9ab0f10..d920feb 100644
--- a/src/main/java/fr/univlille/iut/r304/thermo/Main.java
+++ b/src/main/java/fr/univlille/iut/r304/thermo/Main.java
@@ -1,20 +1,28 @@
 package fr.univlille.iut.r304.thermo;
 
 import fr.univlille.iut.r304.thermo.model.Thermostat;
+import fr.univlille.iut.r304.thermo.view.SliderView;
 import fr.univlille.iut.r304.thermo.view.TextView;
 import javafx.application.Application;
+
 import javafx.stage.Stage;
 
+
+import java.awt.*;
+
 public class Main extends Application {
 
+	Thermostat thermo = new Thermostat();
+
 	public static void main(String[] args) {
 		launch(args);
 	}
 
+
 	@Override
 	public void start(Stage primaryStage) throws Exception {
-		Thermostat thermo = new Thermostat();
 		new TextView(thermo);
+		new SliderView(thermo);
 	}
 
 }
diff --git a/src/main/java/fr/univlille/iut/r304/thermo/model/Thermostat.java b/src/main/java/fr/univlille/iut/r304/thermo/model/Thermostat.java
index 9d86f76..e83cdbc 100644
--- a/src/main/java/fr/univlille/iut/r304/thermo/model/Thermostat.java
+++ b/src/main/java/fr/univlille/iut/r304/thermo/model/Thermostat.java
@@ -1,29 +1,27 @@
 package fr.univlille.iut.r304.thermo.model;
+import fr.univlille.iut.r304.utils.*;
 
-public class Thermostat implements ITemperature {
+public class Thermostat extends ConnectableProperty implements ITemperature{
+
+	private double temperature;
 
 	@Override
 	public void setTemperature(double d) {
-		// TODO Auto-generated method stub
-		
+		this.temperature = d;
 	}
 
 	@Override
 	public Double getTemperature() {
-		// TODO Auto-generated method stub
-		return null;
+		return this.temperature;
 	}
 
 	@Override
 	public void incrementTemperature() {
-		// TODO Auto-generated method stub
-		
+		this.setTemperature(this.getTemperature() + 1);
 	}
 
 	@Override
 	public void decrementTemperature() {
-		// TODO Auto-generated method stub
-		
+		this.setTemperature(this.getTemperature() - 1);
 	}
-
 }
diff --git a/src/main/java/fr/univlille/iut/r304/thermo/view/SliderView.java b/src/main/java/fr/univlille/iut/r304/thermo/view/SliderView.java
new file mode 100644
index 0000000..a5a86d6
--- /dev/null
+++ b/src/main/java/fr/univlille/iut/r304/thermo/view/SliderView.java
@@ -0,0 +1,97 @@
+package fr.univlille.iut.r304.thermo.view;
+
+import fr.univlille.iut.r304.thermo.model.Thermostat;
+import fr.univlille.iut.r304.utils.ConnectableProperty;
+import fr.univlille.iut.r304.utils.Observable;
+import fr.univlille.iut.r304.utils.Observer;
+import javafx.geometry.Orientation;
+import javafx.geometry.Pos;
+import javafx.scene.Scene;
+import javafx.scene.control.Button;
+import javafx.scene.control.Slider;
+import javafx.scene.control.TextField;
+import javafx.scene.layout.HBox;
+import javafx.scene.layout.VBox;
+import javafx.scene.text.Text;
+import javafx.stage.Stage;
+
+public class SliderView extends Stage implements ITemperatureView, Observer{
+
+    private static final String TITLE = "Thermostat";
+    protected Thermostat model;
+    protected boolean wasUpdated = false;
+    Slider slider = new Slider(0, 100, 0);
+
+    public SliderView(Thermostat model) {
+        this.model = model;
+        model.attach(this);
+
+
+
+        Stage primaryStage = new Stage();
+        VBox root = new VBox();
+        Scene scene = new Scene(root, 300, 200);
+        primaryStage.setScene(scene);
+        primaryStage.setTitle(TITLE);
+
+        Button incrementButton = new Button("+");
+        Button decrementButton = new Button("-");
+
+        slider.setOrientation(Orientation.VERTICAL);
+        slider.setShowTickLabels(true);
+
+
+        slider.valueProperty().addListener((observable, oldValue, newValue) -> {
+            newValue = (int) Math.round(newValue.doubleValue());
+            model.setTemperature(newValue.doubleValue());
+            model.notifyObservers(model.getTemperature());
+        });
+
+        incrementButton.setOnAction(e -> {
+            model.setTemperature(model.getTemperature() + 5);
+            model.notifyObservers(model.getTemperature());
+        });
+
+        decrementButton.setOnAction(e -> {
+            model.setTemperature(model.getTemperature() -5);
+            model.notifyObservers(model.getTemperature());
+        });
+
+        root.getChildren().addAll(incrementButton, slider, decrementButton);
+        root.setAlignment(Pos.CENTER);
+
+        primaryStage.show();
+    }
+
+    @Override
+    public double getDisplayedValue() {
+        return model.getTemperature();
+    }
+
+    @Override
+    public void incrementAction() {
+        model.incrementTemperature();
+    }
+
+    @Override
+    public void decrementAction() {
+        model.decrementTemperature();
+    }
+
+    public void update(Observable o) {
+        if (o instanceof Thermostat) {
+            wasUpdated = true;
+        }
+    }
+
+    public void update(Observable o, Object arg) {
+        if (o instanceof Thermostat) {
+            wasUpdated = true;
+            if (arg instanceof Double) {
+                System.out.println("Temperature : " + arg);
+                slider.setValue((double) arg);
+            }
+        }
+    }
+
+}
diff --git a/src/main/java/fr/univlille/iut/r304/thermo/view/TextView.java b/src/main/java/fr/univlille/iut/r304/thermo/view/TextView.java
index 4faa759..5828a6e 100644
--- a/src/main/java/fr/univlille/iut/r304/thermo/view/TextView.java
+++ b/src/main/java/fr/univlille/iut/r304/thermo/view/TextView.java
@@ -1,32 +1,100 @@
 package fr.univlille.iut.r304.thermo.view;
 
 import fr.univlille.iut.r304.thermo.model.Thermostat;
+import fr.univlille.iut.r304.utils.ConnectableProperty;
+import fr.univlille.iut.r304.utils.Observable;
+import fr.univlille.iut.r304.utils.Observer;
+import javafx.geometry.Pos;
+import javafx.scene.Scene;
+import javafx.scene.control.Button;
+import javafx.scene.control.TextField;
+import javafx.scene.layout.HBox;
+import javafx.scene.layout.VBox;
+import javafx.scene.text.Text;
 import javafx.stage.Stage;
 
-public class TextView extends Stage implements ITemperatureView {
+public class TextView extends Stage implements ITemperatureView, Observer{
+
+	private static final String TITLE = "Thermostat";
+	protected Thermostat model;
+	protected boolean wasUpdated = false;
+	protected TextField temperatureField = new TextField();
 
 	public TextView(Thermostat model) {
-		//simplement pour avoir qqch qui s'affiche à la prise en main du dépôt
-		this.setTitle("Thermostat");
-		this.show();
+		this.model = model;
+		model.attach(this);
+
+		Stage primaryStage = new Stage();
+		VBox root = new VBox();
+		HBox hbox = new HBox();
+		Scene scene = new Scene(root, 300, 200);
+		primaryStage.setScene(scene);
+		primaryStage.setTitle(TITLE);
+
+		Text text = new Text("Température en Celsius");
+		temperatureField.setText(this.getDisplayedValue() + "°C");
+		Button incrementButton = new Button("+");
+		Button decrementButton = new Button("-");
+
+		temperatureField.setOnAction(e -> {
+			try {
+				double newTemp = Double.parseDouble(temperatureField.getText().substring(0, temperatureField.getText().length() - 2));
+				model.setTemperature(newTemp);
+				temperatureField.setText(this.getDisplayedValue() + "°C");
+				model.notifyObservers(model.getTemperature());
+			} catch (NumberFormatException ex) {
+				temperatureField.setText("0°C");
+			}
+		});
+
+		incrementButton.setOnAction(e -> {
+			model.incrementTemperature();
+			temperatureField.setText(this.getDisplayedValue() + "°C");
+			model.notifyObservers(model.getTemperature());
+		});
+
+		decrementButton.setOnAction(e -> {
+			model.decrementTemperature();
+			temperatureField.setText(this.getDisplayedValue() + "°C");
+			model.notifyObservers(model.getTemperature());
+		});
+
+		hbox.getChildren().addAll(decrementButton, temperatureField, incrementButton);
+		hbox.setAlignment(Pos.CENTER);
+		root.getChildren().addAll(text, hbox);
+		root.setAlignment(Pos.CENTER);
+		primaryStage.show();
 	}
 
 	@Override
 	public double getDisplayedValue() {
-		// TODO Auto-generated method stub
-		return 0;
+		return model.getTemperature();
 	}
 
 	@Override
 	public void incrementAction() {
-		// TODO Auto-generated method stub
-		
+		model.incrementTemperature();
 	}
 
 	@Override
 	public void decrementAction() {
-		// TODO Auto-generated method stub
-		
+		model.decrementTemperature();
+	}
+
+	public void update(Observable o) {
+		if (o instanceof Thermostat) {
+			wasUpdated = true;
+		}
+	}
+
+	public void update(Observable o, Object arg) {
+		if (o instanceof Thermostat) {
+			wasUpdated = true;
+			if (arg instanceof Double) {
+				System.out.println("Temperature : " + arg);
+				temperatureField.setText(arg + "°C");
+			}
+		}
 	}
 
 }
diff --git a/src/main/java/fr/univlille/iut/r304/utils/Observable.java b/src/main/java/fr/univlille/iut/r304/utils/Observable.java
index c2445c7..361ccc3 100644
--- a/src/main/java/fr/univlille/iut/r304/utils/Observable.java
+++ b/src/main/java/fr/univlille/iut/r304/utils/Observable.java
@@ -22,7 +22,7 @@ public abstract class Observable {
         }
     }
 
-    protected void notifyObservers(Object data) {
+    public void notifyObservers(Object data) {
         this.updateList();
         for (Observer o : attached) {
             o.update(this, data);
-- 
GitLab