diff --git a/simple-pathfinding/src/main/java/fr/uha/gasser/pathfinding/model/Cell.java b/simple-pathfinding/src/main/java/fr/uha/gasser/pathfinding/model/Cell.java index 33c9d89..ef674b2 100644 --- a/simple-pathfinding/src/main/java/fr/uha/gasser/pathfinding/model/Cell.java +++ b/simple-pathfinding/src/main/java/fr/uha/gasser/pathfinding/model/Cell.java @@ -7,27 +7,18 @@ public class Cell { private final Point pos; private final JLabel content; - private boolean selected; private boolean wall; - public Cell(Point pos, JLabel content) { + Cell(Point pos, JLabel content) { this.pos = pos; this.content = content; } - public boolean isSelected() { - return selected; - } - - public void setSelected(boolean selected) { - this.selected = selected; - } - public boolean isWall() { return wall; } - public void setWall(boolean wall) { + void setWall(boolean wall) { this.wall = wall; } diff --git a/simple-pathfinding/src/main/java/fr/uha/gasser/pathfinding/model/Grid.java b/simple-pathfinding/src/main/java/fr/uha/gasser/pathfinding/model/Grid.java index cfe2eb9..2b72b03 100644 --- a/simple-pathfinding/src/main/java/fr/uha/gasser/pathfinding/model/Grid.java +++ b/simple-pathfinding/src/main/java/fr/uha/gasser/pathfinding/model/Grid.java @@ -56,10 +56,10 @@ public class Grid implements Iterable { content.revalidate(); } - public void setWall(Point loc) { + public void setWall(Point loc, boolean wall) { final Cell c = cells.get(loc.x + size.width * loc.y); - c.setWall(true); - c.getContent().setBackground(Color.BLACK); + c.setWall(wall); + c.getContent().setBackground(wall ? Color.BLACK : null); c.getContent().revalidate(); } @@ -67,7 +67,6 @@ public class Grid implements Iterable { for (Cell cell : cells) { cell.getContent().setBackground(null); cell.setWall(false); - cell.setSelected(false); } } @@ -75,4 +74,5 @@ public class Grid implements Iterable { public Iterator iterator() { return cells.iterator(); } + } diff --git a/simple-pathfinding/src/main/java/fr/uha/gasser/pathfinding/ui/App.java b/simple-pathfinding/src/main/java/fr/uha/gasser/pathfinding/ui/App.java index 9d40c78..3083003 100644 --- a/simple-pathfinding/src/main/java/fr/uha/gasser/pathfinding/ui/App.java +++ b/simple-pathfinding/src/main/java/fr/uha/gasser/pathfinding/ui/App.java @@ -24,6 +24,7 @@ public class App extends JFrame { private Node startNode; private Node endNode; private JPanel gridPane; + private boolean wallPlacing = false; private App() throws HeadlessException { super("Pathfinding"); @@ -34,6 +35,7 @@ public class App extends JFrame { } private void setupInterface() { + setDefaultCloseOperation(EXIT_ON_CLOSE); gridPane = new JPanel(); gridPane.setLayout(new GridLayout(ROWS, COLS)); for (Cell c : grid) { @@ -45,7 +47,9 @@ public class App extends JFrame { public void mousePressed(MouseEvent e) { final JLabel at = (JLabel) gridPane.getComponentAt(e.getPoint()); final Point loc = grid.get(at).getPos(); - if (startNode == null) { + if (wallPlacing) { + doPlaceWall(loc); + } else if (startNode == null) { grid.setColor(loc, Color.RED); startNode = new Node(loc); } else if (endNode == null) { @@ -56,6 +60,9 @@ public class App extends JFrame { }); final JMenuBar menuBar = new JMenuBar(); + final JMenuItem placeWallItem = new JMenuItem("Place wall"); + menuBar.add(placeWallItem); + placeWallItem.addActionListener(actionEvent -> setWallPlacing(placeWallItem)); final JMenuItem runItem = new JMenuItem("Run"); menuBar.add(runItem); runItem.addActionListener(actionEvent -> doSearch()); @@ -70,6 +77,24 @@ public class App extends JFrame { getContentPane().add(gridPane); } + private void setWallPlacing(JMenuItem placeWallItem) { + // Invert selection state + placeWallItem.setSelected(!placeWallItem.isSelected()); + final boolean selected = placeWallItem.isSelected(); + if (selected) { + placeWallItem.setBackground(Color.BLUE); + } else { + placeWallItem.setBackground(null); + } + this.wallPlacing = selected; + } + + private void doPlaceWall(Point loc) { + final boolean wall = grid.get(loc).isWall(); + // Toggle "wall" state + grid.setWall(loc, !wall); + } + private void doReset() { pathfinder = null; startNode = null;