Skip to content
Snippets Groups Projects
Commit 0781c167 authored by Guyslain's avatar Guyslain
Browse files

Amélioration du l'interaction avec les cases, on peut changer l'état de...

Amélioration du l'interaction avec les cases, on peut changer l'état de plusieurs cases d'un mouvement de souris.
parent 1fe84ba0
Branches ImprovedMouseInteraction
Tags ModifGUI
No related merge requests found
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));
}
}
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);
}
}
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) {};
}
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));
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment