gui: select from file
All checks were successful
Linux arm64 / Build (push) Successful in 42s

This commit is contained in:
2025-01-29 14:14:54 +01:00
parent 074131b69c
commit c4a9bf6354
2 changed files with 43 additions and 3 deletions

View File

@@ -2,6 +2,8 @@ package gui;
import common.Signal; import common.Signal;
import imgui.ImGui; import imgui.ImGui;
import imgui.extension.imguifiledialog.ImGuiFileDialog;
import imgui.extension.imguifiledialog.flag.ImGuiFileDialogFlags;
import imgui.type.ImInt; import imgui.type.ImInt;
import sudoku.structure.Difficulty; import sudoku.structure.Difficulty;
import sudoku.structure.MultiDoku; import sudoku.structure.MultiDoku;
@@ -48,6 +50,25 @@ public class SudokuSelector {
this.onSelect.emit(); this.onSelect.emit();
} }
public void renderFileDialog() {
if (ImGuiFileDialog.display("browse-sudoku", ImGuiFileDialogFlags.None)) {
if (ImGuiFileDialog.isOk()) {
var selection = ImGuiFileDialog.getSelection();
for (var entry : selection.entrySet()) {
try {
String filePath = entry.getValue();
this.doku = SudokuFactory.fromfile(filePath);
if (this.doku != null)
this.onSelect.emit();
} catch (Exception e) {
e.printStackTrace();
}
}
}
ImGuiFileDialog.close();
}
}
public void render() { public void render() {
ImGui.combo("Type de Sudoku", sudokuType, sudokuTypes); ImGui.combo("Type de Sudoku", sudokuType, sudokuTypes);
ImGui.combo("Difficulté", difficulty, difficulties); ImGui.combo("Difficulté", difficulty, difficulties);
@@ -88,6 +109,10 @@ public class SudokuSelector {
default: default:
break; break;
} }
if (ImGui.button("À partir d'un fichier")) {
ImGuiFileDialog.openDialog("browse-sudoku", "Choisissez un fichier", ".json", ".");
}
renderFileDialog();
} }
public MultiDoku getDoku() { public MultiDoku getDoku() {

View File

@@ -1,5 +1,8 @@
package sudoku.structure; package sudoku.structure;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@@ -10,6 +13,7 @@ import sudoku.constraint.BlockConstraint;
import sudoku.constraint.ColumnConstraint; import sudoku.constraint.ColumnConstraint;
import sudoku.constraint.IConstraint; import sudoku.constraint.IConstraint;
import sudoku.constraint.LineConstraint; import sudoku.constraint.LineConstraint;
import sudoku.io.SudokuSerializer;
import sudoku.solver.Solver; import sudoku.solver.Solver;
public class SudokuFactory { public class SudokuFactory {
@@ -148,7 +152,7 @@ public class SudokuFactory {
} }
return false; return false;
} }
/** /**
* Créée un Sudoku vide dont les Blocks sont de taille widthBlock par heightBlock. * Créée un Sudoku vide dont les Blocks sont de taille widthBlock par heightBlock.
@@ -246,4 +250,15 @@ public class SudokuFactory {
} }
doku.setFilledCellsImmutable(); doku.setFilledCellsImmutable();
} }
public static MultiDoku fromfile(String filePath) {
try {
String content = Files.readString(Paths.get(filePath));
MultiDoku doku = SudokuSerializer.deserializeSudoku(content);
return doku;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
} }