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