package gui.menu; import java.util.Random; import java.util.concurrent.CancellationException; import gui.SudokuRenderer; import imgui.ImGui; import sudoku.solver.Solver; import sudoku.structure.MultiDoku; public class SudokuView extends BaseView { private final SudokuRenderer sudokuRenderer; private Thread resolveThread; private final MultiDoku doku; public SudokuView(StateMachine stateMachine, MultiDoku doku) { super(stateMachine); this.doku = doku; this.sudokuRenderer = new SudokuRenderer(doku); } private void stopResolve() { if (resolveThread != null && resolveThread.isAlive()) { resolveThread.interrupt(); resolveThread = null; } } private void renderCancelButton() { boolean wantsToStop = false; if (resolveThread != null && resolveThread.isAlive()) { // ImGui.endDisabled(); if (ImGui.button("Annuler")) { // we can't stop the Thread right now wantsToStop = true; } } if (resolveThread != null && !resolveThread.isAlive()) { resolveThread.start(); } if (wantsToStop) stopResolve(); } private void renderSolveButton() { if (resolveThread != null) ImGui.beginDisabled(); boolean beginSolve = false; if (ImGui.button("Résoudre")) { beginSolve = true; } if (resolveThread != null) ImGui.endDisabled(); if (beginSolve) { resolveThread = new Thread(() -> { try { Random rand = new Random(); Solver.solveRandom(doku, rand); Thread.sleep(200); } catch (CancellationException | InterruptedException e) { System.out.println("The user is bored !"); } stopResolve(); }); } } @Override public void render() { sudokuRenderer.render(); renderSolveButton(); renderCancelButton(); renderReturnButton(); } @Override public void closeMenu() { super.closeMenu(); stopResolve(); } }