From 0781c1674bf0ab7feb70e38afb6eafd1c40e9ccc Mon Sep 17 00:00:00 2001 From: Guyslain <guyslain.naves@lis-lab.fr> Date: Wed, 4 Oct 2023 12:02:40 +0200 Subject: [PATCH] =?UTF-8?q?Am=C3=A9lioration=20du=20l'interaction=20avec?= =?UTF-8?q?=20les=20cases,=20on=20peut=20changer=20l'=C3=A9tat=20de=20plus?= =?UTF-8?q?ieurs=20cases=20d'un=20mouvement=20de=20souris.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/view/FillingMouseListener.java | 41 ++++++++++++++++++++ src/main/java/view/MatrixPane.java | 37 ++++++++++++++++-- src/main/java/view/MouseListener.java | 13 +++++++ src/main/java/view/WaitingMouseListener.java | 22 +++++++++++ 4 files changed, 110 insertions(+), 3 deletions(-) create mode 100644 src/main/java/view/FillingMouseListener.java create mode 100644 src/main/java/view/MouseListener.java create mode 100644 src/main/java/view/WaitingMouseListener.java diff --git a/src/main/java/view/FillingMouseListener.java b/src/main/java/view/FillingMouseListener.java new file mode 100644 index 0000000..7cd1efd --- /dev/null +++ b/src/main/java/view/FillingMouseListener.java @@ -0,0 +1,41 @@ +package view; + +import javafx.scene.input.MouseEvent; +import model.Cell; +import model.CellState; + +public class FillingMouseListener implements MouseListener { + private final MatrixPane matrix; + private final CellState cellState; + + public FillingMouseListener(MatrixPane matrix, CellState cellState) { + this.matrix = matrix; + this.cellState = cellState; + } + + @Override + public void onMouseReleased(MouseEvent event, Cell cell) { + System.out.println("Filling Release"); + this.matrix.resetWaitingListener(); + } + + @Override + public void onMouseEntered(MouseEvent event, Cell cell) { + System.out.println("Filling Enter"); + if (!event.isPrimaryButtonDown()) { + this.matrix.resetWaitingListener(); + return; + } + while (!cellState.equals(cell.getState())) { + cell.toggleState(); + } + } + + @Override + public void onMousePressed(MouseEvent event, Cell cell) { + System.out.println("Filling Pressed"); + cell.toggleState(); + CellState state = cell.getState(); + this.matrix.setMouseListener(new FillingMouseListener(this.matrix, state)); + } +} diff --git a/src/main/java/view/MatrixPane.java b/src/main/java/view/MatrixPane.java index 03874d3..e5c0713 100644 --- a/src/main/java/view/MatrixPane.java +++ b/src/main/java/view/MatrixPane.java @@ -1,5 +1,6 @@ package view; +import javafx.scene.input.MouseDragEvent; import javafx.scene.input.MouseEvent; import javafx.scene.layout.GridPane; import javafx.scene.shape.Rectangle; @@ -25,7 +26,7 @@ public class MatrixPane extends GridPane{ Rectangle rectangleCell = new Rectangle(CELL_SIZE, CELL_SIZE); addStatePropertyListener(cell, rectangleCell); updateFill(rectangleCell, cell.getState()); - addClickEventHandler(cell, rectangleCell); + addEventHandler(cell, rectangleCell); add(rectangleCell, columnIndex, rowIndex); } @@ -38,7 +39,37 @@ public class MatrixPane extends GridPane{ cellRectangle.setFill(newCellState.color); } - private void addClickEventHandler(Cell cell, Rectangle cellRectangle) { - cellRectangle.addEventHandler(MouseEvent.MOUSE_CLICKED, event -> cell.toggleState()); + private void addEventHandler(Cell cell, Rectangle cellRectangle) { + cellRectangle.addEventHandler( + MouseEvent.MOUSE_PRESSED, + event -> mouseListener.onMousePressed(event, cell) + ); + cellRectangle.addEventHandler( + MouseEvent.DRAG_DETECTED, + event -> { + System.out.println("Full drag start"); + this.startFullDrag(); + } + ); + cellRectangle.addEventHandler( + MouseDragEvent.MOUSE_DRAG_RELEASED, + event -> mouseListener.onMouseReleased(event, cell) + ); + cellRectangle.addEventHandler( + MouseDragEvent.MOUSE_DRAG_ENTERED, + event -> mouseListener.onMouseEntered(event, cell) + ); + } + + private MouseListener mouseListener = new WaitingMouseListener(this); + + void setMouseListener(MouseListener mouseListener) { + System.out.println("Change listener"); + this.mouseListener = mouseListener; + } + + void resetWaitingListener() { + System.out.println("Reset listener"); + this.mouseListener = new WaitingMouseListener(this); } } diff --git a/src/main/java/view/MouseListener.java b/src/main/java/view/MouseListener.java new file mode 100644 index 0000000..d227a11 --- /dev/null +++ b/src/main/java/view/MouseListener.java @@ -0,0 +1,13 @@ +package view; + +import javafx.event.EventType; +import javafx.scene.input.MouseEvent; +import model.Cell; + +interface MouseListener { + + default void onMousePressed(MouseEvent event, Cell cell) {} + default void onMouseReleased(MouseEvent event, Cell cell) {} + default void onMouseEntered(MouseEvent event, Cell cell) {}; + +} diff --git a/src/main/java/view/WaitingMouseListener.java b/src/main/java/view/WaitingMouseListener.java new file mode 100644 index 0000000..39f1f97 --- /dev/null +++ b/src/main/java/view/WaitingMouseListener.java @@ -0,0 +1,22 @@ +package view; + +import javafx.scene.input.MouseEvent; +import model.Cell; +import model.CellState; + +class WaitingMouseListener implements MouseListener { + + + private final MatrixPane matrix; + + WaitingMouseListener(MatrixPane matrix) { + this.matrix = matrix; + } + + @Override + public void onMousePressed(MouseEvent event, Cell cell) { + cell.toggleState(); + CellState cellState = cell.getState(); + matrix.setMouseListener(new FillingMouseListener(this.matrix, cellState)); + } +} -- GitLab