From 189764a8bf0278b7752cee158f5c6f983a6c3752 Mon Sep 17 00:00:00 2001
From: Nimrod Abramovich <grumpydormin@gmail.com>
Date: Tue, 10 Mar 2020 00:23:29 +0000
Subject: [PATCH] Added row/column mistakes show toggle

---
 bin/coursework/Main.class | Bin 16710 -> 20740 bytes
 src/coursework/Main.java  | 182 ++++++++++++++++++++++++++++++++------
 2 files changed, 153 insertions(+), 29 deletions(-)

diff --git a/bin/coursework/Main.class b/bin/coursework/Main.class
index d732c086f0f50b0b91218527463bd8a5593b2706..ae468b9521fc5d9f39ff9b1a989129e7ce984656 100644
GIT binary patch
literal 20740
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
NnYJ>mXI{l12>_}WRonmo

delta 10071
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
OkYw^^a%I+IkOTmB`v7|Y

diff --git a/src/coursework/Main.java b/src/coursework/Main.java
index 417ce75..09e4417 100644
--- a/src/coursework/Main.java
+++ b/src/coursework/Main.java
@@ -5,6 +5,7 @@ import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileReader;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Stack;
 import java.util.Vector;
@@ -20,6 +21,7 @@ import javafx.scene.control.Alert;
 import javafx.scene.control.Alert.AlertType;
 import javafx.scene.control.Button;
 import javafx.scene.control.ButtonType;
+import javafx.scene.control.CheckBox;
 import javafx.scene.control.Label;
 import javafx.scene.control.TextField;
 import javafx.scene.image.Image;
@@ -44,18 +46,25 @@ import javafx.stage.Stage;
 public class Main extends Application {
 	
 	final static public int N = 6;
+	final private double GRID_PERCENTAGE = 0.75;
 	
 	private Scene scene;
 	private Stage stage;
 	
-	final private double GRID_PERCENTAGE = 0.75;
+	
 	private static Square[] gridSquares = new Square[N*N];
 	private TextField[] gridNumbers = new TextField[N*N];
 	private static Label[][] cageLabels = new Label[N*N][2];
+	private boolean[][] highlightedError = new boolean[N*N][3];
+	private HBox[] gridHBoxes = new HBox[N*N];
+	private List<Cage> gridCages = new ArrayList<Cage>();
+	
 	private boolean isWider;
 	private HBox previousHBox = null;
 	private Square previousSquare = null;
 	private boolean clearing = false;
+	private boolean undoing = false;
+	private boolean showMistakes = false;
 	
 	private Stack<GameState> undoStack = new Stack<GameState>();
 	private Stack<GameState> redoStack = new Stack<GameState>();
@@ -89,18 +98,86 @@ public class Main extends Application {
 		gridPane.add(hbox, j, i);
 		
 		textField.textProperty().addListener((observable, oldValue, newValue) -> {
-			if (!clearing) {
+			if (!clearing && !undoing) {
 				undoStack.push(new GameState(GameState.getCurrentGameState(gridNumbers)));
 				if (undoButton.isDisabled()) {
 					undoButton.setDisable(false);
 				}
 			}
+			checkConstraints(textField, j, i);
 		});
 		
 		square.getRectangle().toFront();
 		return gridPane;
 	}
 	
+	private void checkConstraints(TextField textField, int col, int row) {
+		String value = textField.getText();
+		boolean found = false;
+		for (int i = 0; i < N; i++) {
+			if (!gridNumbers[row*N + i].getText().equals("")) {
+				if (gridNumbers[row*N + i].getText().equals(value) && i != col) {
+					highlightRow(row);
+					found = true;
+					break;
+				}
+			}
+		}
+		if (!found) {
+			clearRow(row);
+		}
+		
+		found = false;
+		for (int i = 0; i < N; i++) {
+			if (!gridNumbers[i*N + col].getText().equals("")) {
+				if (gridNumbers[i*N + col].getText().equals(value) && i != row) {
+					highlightColumn(col);
+					found = true;
+					break;
+				}
+			}
+		}
+		if (!found) {
+			clearColumn(col);
+		}
+		highlightCells();
+	}
+	
+	private void clearRow(int row) {
+		for (int i = 0; i < N; i++) {
+			highlightedError[row*N + i][0] = false;		
+		}
+	}
+	
+	private void clearColumn(int col) {
+		for (int i = 0; i < N; i++) {
+			highlightedError[i*N + col][1] = false;
+		}
+	}
+	
+	private void highlightRow(int row) {
+		for (int i = 0; i < N; i++) {
+			highlightedError[row*N + i][0] = true;
+		}
+	}
+	
+	private void highlightColumn(int col) {
+		for (int i = 0; i < N; i++) {
+			highlightedError[i*N + col][1] = true;
+		}
+	}
+	
+	private void highlightCells() {
+		for (int i = 0; i < N*N; i++) {
+			if ((highlightedError[i][0] || highlightedError[i][1] || highlightedError[i][2]) && showMistakes) {
+				gridHBoxes[i].setStyle("-fx-background-color: rgba(255,0,20,0.4);");
+			}
+			else {
+				gridHBoxes[i].setStyle("-fx-background-color: rgba(255,0,20,0);");
+			}
+		}
+	}
+	
 	private HBox setupGridHBox(Square square, TextField textField, int i, int j) {
 		HBox hbox = new HBox();
 		VBox vbox = new VBox();
@@ -114,7 +191,8 @@ public class Main extends Application {
 		vbox.setAlignment(Pos.CENTER);
 		hbox.getChildren().add(vbox);
 		hbox.setAlignment(Pos.CENTER);
-		hboxClickSquareEvent(hbox, square);
+		gridHBoxes[i*N + j] = hbox;
+		hboxClickSquareEvent(i, j, square);
 
 		return hbox;
 	}
@@ -130,9 +208,10 @@ public class Main extends Application {
 	}
 	
 	private TextField setupGridTextField(double size) {
+		final double PERCENT = 0.7;
 		TextField textField = new TextField();
 		textField.setMinWidth(size/4);
-		textField.setPrefSize(size*0.5, size*0.5);
+		textField.setPrefSize(size*PERCENT, size*PERCENT);
 		textField.setAlignment(Pos.CENTER);
 		textField.setStyle("-fx-focus-color: transparent;");
 		textField.setStyle("-fx-text-box-border: transparent;");
@@ -145,12 +224,18 @@ public class Main extends Application {
 		topHBox.setSpacing(10);
 		
 		Button loadGameFileButton = new Button("Load game - file");
-		Button showMistakesButton = new Button("Show mistakes");
+		CheckBox showMistakesCheck = new CheckBox("Show mistakes");
 		Button loadGameTextInputButton = new Button("Load game - text input");
 		loadGameFileButton.setPrefWidth(200);
 		loadGameTextInputButton.setPrefWidth(loadGameFileButton.getPrefWidth());
 		
-		topHBox.getChildren().addAll(loadGameFileButton, showMistakesButton, loadGameTextInputButton);
+		topHBox.getChildren().addAll(loadGameFileButton, showMistakesCheck, loadGameTextInputButton);
+		
+		showMistakesCheck.selectedProperty().addListener((obs, oldVal, newVal) -> {
+			showMistakes = showMistakesCheck.isSelected();
+			System.out.println(showMistakes + ", " + showMistakesCheck.isSelected());
+			highlightCells();
+		});
 		
 		loadGameFileButton.setOnAction(e -> {
 			try {
@@ -196,8 +281,6 @@ public class Main extends Application {
 	private void updateGameState(GameState gameState) {
 		String[] gameValues = gameState.getGameState();
 		for (int i = 0; i < gridNumbers.length; i++) {
-//			if (!gridNumbers[i].getText().equals("") && gameValues.equals(""))
-//				System.out.println("Current: " + gridNumbers[i].getText() + ", Previous: " + textFields[i].getText());
 			gridNumbers[i].setText(gameValues[i]);
 		}
 	}
@@ -211,24 +294,22 @@ public class Main extends Application {
 		redoButton = new Button("", new ImageView(new Image("file:Images/redo_icon.png")));
 		Button clearButton = new Button("Clear");
 		undoButton.setOnAction(e -> {
-			// undoStack.pop() is the current GameState
-						
+			undoing = true;			
+			
 			redoStack.push(undoStack.pop());
 			updateGameState(undoStack.peek());
 			
-			// 
 			if (!redoStack.empty()) {
 				redoButton.setDisable(false);
 			}
 			if (undoStack.size() == 1) {
 				undoButton.setDisable(true);
 			}
+			undoing = false;
 		});
 		redoButton.setOnAction(e -> {
 			GameState gameState = redoStack.pop();
 			updateGameState(gameState);
-		
-			undoStack.push(gameState);
 			
 			if (!undoStack.empty()) {
 				undoButton.setDisable(false);
@@ -248,13 +329,27 @@ public class Main extends Application {
 		return bottomHBox;
 	}
 	
-	private void hboxClickSquareEvent(HBox hbox, Square square) {
-		hbox.addEventHandler(MouseEvent.MOUSE_CLICKED, e -> {
+	private void hboxClickSquareEvent(int i, int j, Square square) {
+		gridHBoxes[i*N + j].addEventHandler(MouseEvent.MOUSE_CLICKED, e -> {
 			if (previousHBox != null) {
-				previousHBox.setStyle("-fx-border-width:0px;");
+				int previousIndex = getIndexOf(previousHBox);
+				if (highlightedError[previousIndex][0] || highlightedError[previousIndex][1] || highlightedError[previousIndex][2]) {
+					previousHBox.setStyle("-fx-background-color: rgba(255,0,20,0.4); -fx-border-width:0px;");
+				}
+				else {
+					previousHBox.setStyle("-fx-border-width:0px;");
+				}
+			}
+			
+			if (highlightedError[i*N + j][0] || highlightedError[i*N + j][1] || highlightedError[i*N + j][2]) {
+				gridHBoxes[i*N + j].setStyle("-fx-background-color: rgba(255,0,20,0.4); -fx-border-color: #0016CD; -fx-border-width:3px;");
+			}
+			else {
+				gridHBoxes[i*N + j].setStyle("-fx-border-color: #0016CD; -fx-border-width:3px;");
 			}
-			hbox.setStyle("-fx-border-color:red; -fx-border-width:2px;");
-			previousHBox = hbox;
+			
+			
+			previousHBox = gridHBoxes[i*N + j];
 			previousSquare = square;
 			for (TextField textField : gridNumbers) {
 				textField.deselect();
@@ -262,23 +357,52 @@ public class Main extends Application {
 		});
 	}
 	
+	private int getIndexOf(HBox hbox) {
+		for (int i = 0; i < N*N; i++) {
+			if (hbox.equals(gridHBoxes[i])) {
+				return i;
+			}
+		}
+		return -1;
+	}
+	
 	private void clearButtonClickEvent(Button clearButton) {		
 		clearButton.setOnAction(e -> {
-			clearing = true;
-			undoStack.push(new GameState(GameState.getCurrentGameState(gridNumbers)));
-			Alert alert = new Alert(AlertType.CONFIRMATION);
-			alert.setContentText("Are you sure you wish to clear the board?");
-			alert.showAndWait().ifPresent(type -> {
-				if (type == ButtonType.OK) {
-					for (TextField textField : gridNumbers) {
-						textField.setText("");
+			if (!lastOperationClear()) {
+				clearing = true;
+				Alert alert = new Alert(AlertType.CONFIRMATION);
+				alert.setContentText("Are you sure you wish to clear the board?");
+				alert.setTitle("Clearing Board.");
+				alert.showAndWait().ifPresent(type -> {
+					if (type == ButtonType.OK) {
+						for (TextField textField : gridNumbers) {
+							textField.setText("");
+						}
+						undoStack.push(new GameState(GameState.getCurrentGameState(gridNumbers)));
 					}
-				}
-			});;
-			clearing = false;
+				});;
+				clearing = false;
+			}
+			else {
+				Alert alert = new Alert(AlertType.WARNING);
+				alert.setContentText("Nothing to clear on the board.");
+				alert.setTitle("Empty Board");
+				alert.showAndWait();
+			}
 		});
 	}
 	
+	private boolean lastOperationClear() {
+		GameState gameState = undoStack.peek();
+		boolean emptyGrid = true;
+		for (String textFieldValue : gameState.getGameState()) {
+			if (textFieldValue.length() > 0) {
+				emptyGrid = false;
+			}
+		}
+		return emptyGrid;
+	}
+	
 	private void stageWidthResizeEvent(Stage stage, GridPane gridPane) {
 		stage.widthProperty().addListener((obs, oldVal, newVal) -> {
 			if (newVal.doubleValue() < stage.getHeight())  {
-- 
GitLab