From 52a69581b88d01dde56f84e15466d55d7514ca73 Mon Sep 17 00:00:00 2001
From: Guyslain <guyslain.naves@lis-lab.fr>
Date: Fri, 13 Oct 2023 16:44:26 +0200
Subject: [PATCH] =?UTF-8?q?Am=C3=A9lioration=20de=20l'interface=20souris?=
 =?UTF-8?q?=20(clic=20pour=20changer=20l'=C3=A9tat,=20drag=20pour=20le=20c?=
 =?UTF-8?q?opier)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ...useListener.java => DraggingListener.java} |  7 ++--
 src/main/java/view/MatrixPane.java            | 12 +++++--
 src/main/java/view/MouseListener.java         |  1 +
 src/main/java/view/MousePressedListener.java  | 35 +++++++++++++++++++
 src/main/java/view/WaitingMouseListener.java  |  3 +-
 5 files changed, 50 insertions(+), 8 deletions(-)
 rename src/main/java/view/{FillingMouseListener.java => DraggingListener.java} (75%)
 create mode 100644 src/main/java/view/MousePressedListener.java

diff --git a/src/main/java/view/FillingMouseListener.java b/src/main/java/view/DraggingListener.java
similarity index 75%
rename from src/main/java/view/FillingMouseListener.java
rename to src/main/java/view/DraggingListener.java
index a4946eb..52e2e0b 100644
--- a/src/main/java/view/FillingMouseListener.java
+++ b/src/main/java/view/DraggingListener.java
@@ -3,12 +3,12 @@ package view;
 import datastruct.Coordinate;
 import javafx.scene.input.MouseEvent;
 
-public class FillingMouseListener implements MouseListener {
+public class DraggingListener implements MouseListener {
     private final MatrixPane matrix;
     private final Coordinate source;
 
 
-    public FillingMouseListener(MatrixPane matrix, Coordinate source) {
+    public DraggingListener(MatrixPane matrix, Coordinate source) {
         this.matrix = matrix;
         this.source = source;
     }
@@ -29,9 +29,8 @@ public class FillingMouseListener implements MouseListener {
 
     @Override
     public void onMousePressed(MouseEvent event, Coordinate coordinate) {
-        this.matrix.getController().getSimulation().next(coordinate);
         this.matrix.setMouseListener(
-                new FillingMouseListener(this.matrix, coordinate)
+                new MousePressedListener(this.matrix, coordinate)
         );
     }
 
diff --git a/src/main/java/view/MatrixPane.java b/src/main/java/view/MatrixPane.java
index 050f739..2698eb0 100644
--- a/src/main/java/view/MatrixPane.java
+++ b/src/main/java/view/MatrixPane.java
@@ -8,6 +8,8 @@ import javafx.scene.layout.GridPane;
 import javafx.scene.paint.Color;
 import javafx.scene.shape.Rectangle;
 
+import java.util.List;
+
 /**
  * Created by Arnaud Labourel on 22/11/2018.
  */
@@ -62,7 +64,11 @@ public class MatrixPane extends GridPane {
                 event -> this.startFullDrag()
         );
         cellRectangle.addEventHandler(
-                MouseDragEvent.MOUSE_DRAG_RELEASED,
+                MouseEvent.MOUSE_CLICKED,
+                event -> mouseListener.onMouseClicked(event, coord)
+        );
+        cellRectangle.addEventHandler(
+                MouseDragEvent.MOUSE_RELEASED,
                 event -> mouseListener.onMouseReleased(event, coord)
         );
         cellRectangle.addEventHandler(
@@ -78,6 +84,8 @@ public class MatrixPane extends GridPane {
     }
 
     void resetWaitingListener() {
-        this.mouseListener = new WaitingMouseListener(this);
+        setMouseListener(new WaitingMouseListener(this));
     }
+
+
 }
diff --git a/src/main/java/view/MouseListener.java b/src/main/java/view/MouseListener.java
index 775cc91..dfced33 100644
--- a/src/main/java/view/MouseListener.java
+++ b/src/main/java/view/MouseListener.java
@@ -5,6 +5,7 @@ import javafx.scene.input.MouseEvent;
 
 interface MouseListener {
 
+    default void onMouseClicked(MouseEvent event, Coordinate coordinate) {}
     default void onMousePressed(MouseEvent event, Coordinate coordinate) {}
     default void onMouseReleased(MouseEvent event, Coordinate coordinate) {}
     default void onMouseEntered(MouseEvent event, Coordinate coordinate) {};
diff --git a/src/main/java/view/MousePressedListener.java b/src/main/java/view/MousePressedListener.java
new file mode 100644
index 0000000..9664afe
--- /dev/null
+++ b/src/main/java/view/MousePressedListener.java
@@ -0,0 +1,35 @@
+package view;
+
+import datastruct.Coordinate;
+import javafx.scene.input.MouseEvent;
+
+public class MousePressedListener implements MouseListener {
+
+    private final Coordinate pressedCoordinate;
+    private final MatrixPane matrix;
+    public MousePressedListener(MatrixPane matrix, Coordinate coordinate) {
+        this.matrix = matrix;
+        this.pressedCoordinate = coordinate;
+    }
+
+    @Override
+    public void onMouseEntered(MouseEvent event, Coordinate coordinate) {
+        this.matrix.getController().getSimulation().copy(pressedCoordinate,coordinate);
+        this.matrix.setMouseListener(new DraggingListener(this.matrix, pressedCoordinate));
+    }
+
+    @Override
+    public void onMousePressed(MouseEvent event, Coordinate coordinate) {
+        this.matrix.setMouseListener(new MousePressedListener(this.matrix, coordinate));
+    }
+
+    @Override
+    public void onMouseReleased(MouseEvent event, Coordinate coordinate) {
+        if (coordinate.equals(pressedCoordinate)) {
+            this.matrix.getController().getSimulation().next(coordinate);
+        } else {
+            this.matrix.getController().getSimulation().copy(pressedCoordinate,coordinate);
+        }
+        this.matrix.resetWaitingListener();
+    }
+}
diff --git a/src/main/java/view/WaitingMouseListener.java b/src/main/java/view/WaitingMouseListener.java
index 68601de..2505562 100644
--- a/src/main/java/view/WaitingMouseListener.java
+++ b/src/main/java/view/WaitingMouseListener.java
@@ -14,8 +14,7 @@ class WaitingMouseListener implements MouseListener {
 
     @Override
     public void onMousePressed(MouseEvent event, Coordinate coordinate) {
-        this.matrix.getController().getSimulation().next(coordinate);
-        this.matrix.setMouseListener(new FillingMouseListener(this.matrix, coordinate));
+        this.matrix.setMouseListener(new MousePressedListener(this.matrix, coordinate));
     }
 
 
-- 
GitLab