Version: 0.8.0
Bibliothèque: Slint
Date: 23 novembre 2025
L'interface graphique doit permettre Γ l'utilisateur de:
- Charger une image de nonogramme
- Visualiser la grille dΓ©tectΓ©e
- Lancer la rΓ©solution avec diffΓ©rents solveurs
- Voir les dΓ©ductions en temps rΓ©el
- Sauvegarder le rΓ©sultat
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Nonogram Solver [_][β‘][X]β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β βββββββββββββββββββ βββββββββββββββββββββββββββββββββββββ β
β β β β β β
β β β β β β
β β Image β β RΓ©sultat β β
β β d'entrΓ©e β β (avec dΓ©ductions) β β
β β β β β β
β β β β β β
β βββββββββββββββββββ βββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β ParamΓ¨tres β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Fichier image: [/path/to/image.png] [Parcourir...] β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Solveur: β Basique β AvancΓ© β Ultime β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β DΓ©tection automatique β ParamΓ¨tres manuels β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Progression β β
β β ββββββββββββββββββββββββββββββββββββββββ 42% β β
β β Phase 2/3: ParallΓ©lisation - 17 dΓ©ductions trouvΓ©es β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β [Charger] [RΓ©soudre] [Sauvegarder] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Fonction: Affiche l'image d'entrΓ©e
PropriΓ©tΓ©s:
- Taille: 400x400 px
- Aspect ratio: prΓ©servΓ©
- Zoom: auto-fit
Fonction: Affiche l'image avec les dΓ©ductions marquΓ©es en rouge
PropriΓ©tΓ©s:
- Taille: 400x400 px
- Aspect ratio: prΓ©servΓ©
- Mise Γ jour en temps rΓ©el pendant la rΓ©solution
Fichier image: [/path/to/image.png] [Parcourir...]
Fonction: Permet de sΓ©lectionner l'image d'entrΓ©e
Comportement:
- Bouton "Parcourir..." ouvre un dialogue de sΓ©lection de fichier
- Formats supportΓ©s: PNG, JPEG, BMP, GIF, TIFF, WebP
- Affiche le chemin complet
Solveur: β Basique β AvancΓ© β Ultime
Options:
- Basique: Line solving uniquement
- AvancΓ©: Line solving + analyse croisΓ©e + heuristiques
- Ultime: Tout + parallΓ©lisation + backtracking
DΓ©faut: Ultime
β DΓ©tection automatique β ParamΓ¨tres manuels
DΓ©tection automatique (par dΓ©faut):
- DΓ©tecte automatiquement la taille des cellules et les marges
- Pas de configuration nΓ©cessaire
Paramètres manuels:
- Affiche des champs supplΓ©mentaires:
Taille de cellule: [100] px Marge gauche: [50] px Marge haute: [50] px
ββββββββββββββββββββββββββββββββββββββββ 42%
Phase 2/3: ParallΓ©lisation - 17 dΓ©ductions trouvΓ©es
Fonction: Affiche la progression de la rΓ©solution
Informations:
- Pourcentage de cases rΓ©solues
- Phase actuelle (1: Avancé, 2: Parallèle, 3: Backtracking)
- Nombre de dΓ©ductions trouvΓ©es
[Charger] [RΓ©soudre] [Sauvegarder]
Charger:
- Charge l'image sΓ©lectionnΓ©e
- Affiche l'image dans la zone gauche
- Active le bouton "RΓ©soudre"
RΓ©soudre:
- Lance la rΓ©solution avec le solveur sΓ©lectionnΓ©
- DΓ©sactive pendant la rΓ©solution
- Affiche la progression en temps rΓ©el
Sauvegarder:
- Ouvre un dialogue de sauvegarde
- Sauvegarde l'image de rΓ©sultat
- DΓ©sactivΓ© si pas de rΓ©sultat
Utilise le style natif de la plateforme (Slint Fluent/Material/Cupertino)
Couleurs personnalisΓ©es:
- DΓ©ductions:
#FF0000(rouge) - Progression:
#0078D4(bleu Windows) - Succès:
#10893E(vert) - Erreur:
#D13438(rouge foncΓ©)
Police: Système (Segoe UI sur Windows, Roboto sur Linux, SF Pro sur macOS)
Tailles:
- Titre: 20px
- Texte normal: 14px
- Texte secondaire: 12px
- Utilisateur clique sur "Parcourir..."
- SΓ©lectionne une image
- Clique sur "Charger"
- L'image s'affiche Γ gauche
- Clique sur "Résoudre" (avec paramètres par défaut)
- La rΓ©solution se lance
- La progression s'affiche en temps rΓ©el
- Le rΓ©sultat s'affiche Γ droite
- Clique sur "Sauvegarder"
- SΓ©lectionne l'emplacement de sauvegarde
- TerminΓ© !
Temps estimΓ©: 30 secondes
1-4. Comme scénario 1 5. Désactive "Détection automatique" 6. Ajuste les paramètres manuels 7. Sélectionne "Avancé" comme solveur 8-11. Comme scénario 1
L'interface s'adapte Γ la taille de la fenΓͺtre:
- Minimum: 800x600 px
- RecommandΓ©: 1000x700 px
- Maximum: IllimitΓ©
Comportement:
- Les images se redimensionnent proportionnellement
- Les boutons restent visibles
- Le texte ne se tronque pas
Support des lecteurs d'Γ©cran:
- Tous les boutons ont des labels
- Les images ont des descriptions alt
- La progression est annoncΓ©e
Navigation au clavier:
- Tab: Passer au champ suivant
- Espace/EntrΓ©e: Activer le bouton
- Flèches: Changer les options radio
- β Chargement d'image
- β DΓ©tection automatique
- β RΓ©solution avec solveur basique
- β RΓ©solution avec solveur avancΓ©
- β RΓ©solution avec solveur ultime
- β Sauvegarde du rΓ©sultat
- β ParamΓ¨tres manuels
- β Progression en temps rΓ©el
- β Navigation au clavier
- β Lecteur d'Γ©cran (Windows Narrator)
- β Contraste des couleurs
src/
βββ main.rs # Point d'entrΓ©e (CLI + GUI)
βββ gui/
β βββ mod.rs # Module GUI
β βββ app.slint # Interface Slint
β βββ logic.rs # Logique GUI (callbacks)
βββ solver/ # Modules existants
βββ grid/
βββ image_parser/
βββ image_generator/
import { Button, VerticalBox, HorizontalBox, Image, LineEdit, CheckBox, RadioButton, ProgressIndicator } from "std-widgets.slint";
export component MainWindow inherits Window {
title: "Nonogram Solver";
preferred-width: 1000px;
preferred-height: 700px;
// PropriΓ©tΓ©s
in-out property <image> input-image;
in-out property <image> result-image;
in-out property <string> file-path: "";
in-out property <int> solver-mode: 2; // 0: basique, 1: avancΓ©, 2: ultime
in-out property <bool> auto-detect: true;
in-out property <int> progress: 0;
in-out property <string> status: "";
// Callbacks
callback load-image();
callback solve();
callback save-result();
callback browse-file();
VerticalBox {
// Images
HorizontalBox {
// Image d'entrΓ©e
Rectangle {
border-width: 1px;
border-color: #ccc;
Image {
source: input-image;
width: 400px;
height: 400px;
image-fit: contain;
}
}
// Image de rΓ©sultat
Rectangle {
border-width: 1px;
border-color: #ccc;
Image {
source: result-image;
width: 400px;
height: 400px;
image-fit: contain;
}
}
}
// Paramètres
GroupBox {
title: "Paramètres";
VerticalBox {
// SΓ©lection de fichier
HorizontalBox {
Text { text: "Fichier image:"; }
LineEdit {
text: file-path;
read-only: true;
}
Button {
text: "Parcourir...";
clicked => { browse-file(); }
}
}
// Choix du solveur
HorizontalBox {
Text { text: "Solveur:"; }
RadioButton { text: "Basique"; checked: solver-mode == 0; }
RadioButton { text: "AvancΓ©"; checked: solver-mode == 1; }
RadioButton { text: "Ultime"; checked: solver-mode == 2; }
}
// DΓ©tection automatique
CheckBox {
text: "DΓ©tection automatique";
checked: auto-detect;
}
}
}
// Progression
GroupBox {
title: "Progression";
VerticalBox {
ProgressIndicator {
progress: progress;
}
Text {
text: status;
}
}
}
// Boutons
HorizontalBox {
Button {
text: "Charger";
clicked => { load-image(); }
}
Button {
text: "RΓ©soudre";
clicked => { solve(); }
}
Button {
text: "Sauvegarder";
clicked => { save-result(); }
}
}
}
}Les callbacks Slint seront implΓ©mentΓ©s en Rust:
app.on_browse_file(move || {
// Ouvrir dialogue de sΓ©lection de fichier
});
app.on_load_image(move || {
// Charger l'image et l'afficher
});
app.on_solve(move || {
// Lancer la résolution en arrière-plan
// Mettre Γ jour la progression
});
app.on_save_result(move || {
// Ouvrir dialogue de sauvegarde
});La rΓ©solution sera lancΓ©e dans un thread sΓ©parΓ© pour ne pas bloquer l'interface:
std::thread::spawn(move || {
// RΓ©solution
// Mise Γ jour de la progression via channels
});- β Audit des bibliothΓ¨ques GUI
- β SΓ©lection de Slint
- β Conception de l'interface
- βοΈ ImplΓ©mentation
- βοΈ Tests
- βοΈ Documentation et dΓ©ploiement