Créer une enquête depuis l’interface GTK #31
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Ticket #030 — Créer une enquête depuis l’interface GTK
Contexte
Le ticket #029 a intégré
InvestigationSessionau cycle de vie de l’application.L’application sait désormais :
Cependant, lorsqu’aucune enquête n’existe encore, l’utilisateur ne peut pas en créer une depuis l’interface.
Le dossier sélectionné est actuellement toujours interprété comme une enquête existante. Si la base suivante est absente :
l’ouverture échoue, ce qui est volontairement sûr.
La création d’une nouvelle enquête doit être une action explicite et séparée de l’ouverture.
Objectif
Ajouter une première fonctionnalité GTK réellement utilisable :
Le flux attendu est :
L’utilisateur ne doit jamais avoir à créer manuellement :
Architecture attendue
Travail à réaliser
1. Créer un module de dialogue dédié
Créer :
Le module doit rester indépendant de SQLite.
Il ne doit pas inclure :
Il ne doit pas appeler :
Son rôle est uniquement de recueillir les informations saisies par l’utilisateur.
2. Définir le callback public
Dans :
déclarer :
Puis :
Le callback reçoit :
En cas d’annulation :
Les chaînes transmises au callback ne restent valides que pendant l’appel.
Le callback doit les copier s’il souhaite les conserver.
3. Concevoir le dialogue GTK
Le dialogue doit contenir au minimum :
Le bouton
Créerdoit être désactivé tant que :Le dialogue peut utiliser :
Ne pas utiliser les anciennes API GTK3 synchrones.
4. Sélectionner le dossier parent
Le bouton :
doit ouvrir un sélecteur de dossier GTK4.
Le dossier choisi représente le parent dans lequel le nouveau dossier d’enquête sera créé.
Exemple :
Résultat attendu :
Le dossier parent doit déjà exister.
5. Valider le nom dans le dialogue
Le nom doit être refusé s’il est :
Il doit aussi être refusé s’il contient un séparateur de chemin :
et, pour rester portable :
Exemples invalides :
Les espaces en début et fin doivent être supprimés avant l’envoi au callback.
Utiliser :
sur une copie allouée.
Le dialogue ne doit pas modifier directement le contenu interne de
GtkEntry.6. Ajouter le bouton dans
MainWindowModifier :
Ajouter un bouton visible :
Il peut être placé dans une barre horizontale au-dessus du
GtkPaned.Organisation attendue :
Ajouter dans la structure privée :
7. Ajouter un callback de fenêtre
Définir dans :
un type de callback :
Ajouter :
MainWindowne doit pas créer elle-même l’enquête.Elle ne doit faire que transmettre le clic au contrôleur
Application.8. Conserver les données de callback
Dans la structure privée de
MainWindow, ajouter :Le bouton GTK doit être relié à un callback privé :
Ce callback doit appeler :
uniquement si le callback est défini.
9. Ajouter le contrôleur dans
ApplicationModifier :
Ajouter :
Cette fonction doit ouvrir :
en utilisant :
10. Traiter le résultat du dialogue
Ajouter :
En cas d’annulation :
la fonction doit simplement retourner.
Aucun état existant ne doit être modifié.
11. Créer le projet
Appeler :
puis :
Si la création échoue :
Exemple :
12. Ouvrir immédiatement la nouvelle enquête
Après une création valide, ouvrir :
avec :
La nouvelle enquête doit être utilisable sans redémarrer l’application.
13. Construire son arbre
Récupérer :
Puis construire :
avec :
14. Factoriser l’installation d’une session
Le ticket #029 contient déjà une logique de remplacement dans :
Cette logique ne doit pas être dupliquée.
Créer une fonction privée :
Cette fonction doit :
Elle retourne :
15. Propriété des objets dans la fonction factorisée
Avant l’appel réussi à :
le code appelant possède :
En cas de succès,
Applicationdevient propriétaire des deux objets.En cas d’échec, le code appelant reste propriétaire et doit les libérer.
Cette règle doit être documentée clairement.
16. Adapter l’ouverture existante
Modifier :
pour utiliser également :
Le flux devient :
Cela garantit que l’ouverture et la création utilisent exactement le même mécanisme d’installation.
17. Gérer un échec après création du projet
Si le dossier et la base ont été créés avec succès mais que :
ou :
échouent, ne pas supprimer automatiquement le nouveau projet.
Raison :
Afficher un warning explicite indiquant que le projet a été créé mais n’a pas pu être ouvert.
Exemple :
Le chemin doit être laissé à l’utilisateur pour diagnostic.
18. Mettre à jour le statut pendant la création
Optionnel mais recommandé :
Avant la création :
Après succès :
En cas d’échec, le statut précédent doit être restauré ou conservé.
Ne pas laisser le statut bloqué sur :
si l’opération échoue.
19. Ajouter une fonction de statut générique
Pour éviter que
Applicationmanipule directementGtkLabel, ajouter dans :Implémenter dans :
La fonction doit :
main_window == NULL;status_text == NULL;gtk_label_set_text().Pour
status_text == NULL, afficher :Tests manuels
20. Création valide
Lancer :
Cliquer sur :
Sélectionner :
Saisir par exemple :
Vérifier la création de :
Vérifier la présence de :
Vérifier aussi :
21. Nom vide
Laisser le nom vide.
Le bouton
Créerdoit rester désactivé.Aucun dossier ne doit être créé.
22. Nom composé d’espaces
Saisir uniquement :
Le bouton
Créerdoit rester désactivé ou la validation doit refuser l’opération.Aucun dossier ne doit être créé.
23. Nom contenant un séparateur
Tester :
puis :
La création doit être refusée.
24. Dossier déjà existant
Créer une première fois :
Puis tenter de recréer le même nom dans le même dossier parent.
Vérifier :
25. Annulation du dialogue
Ouvrir le dialogue puis cliquer sur :
Vérifier :
26. Création après ouverture d’une enquête
Lorsque l’action « Nouvelle enquête » est disponible pendant une session active :
Si la création de B échoue, A doit rester active.
Gestion de la mémoire
Dialogue
Le dialogue possède :
Il doit être détruit après :
Application
Applicationpossède après succès :Variables temporaires
Le callback de création possède temporairement :
Tous les chemins d’échec doivent libérer les ressources qu’ils possèdent encore.
Critères d’acceptation
Nouvelle enquêteest visible./et\sont refusés.Créern’est actif que lorsque les données sont valides.investigation_project_create().investigation_session_open().Application.Database.makeréussit sans warning.make testréussit.git diff --checkne retourne aucune erreur.Audit attendu
Le dialogue ne doit contenir aucune dépendance métier :
Résultat attendu :
Vérifier la factorisation :
Vérifier que les deux flux l’utilisent :
Vérifier l’absence de SQLite dans
Application:Résultat attendu :
Hors périmètre
Ce ticket ne doit pas ajouter :
Fichiers principalement concernés
Le fichier suivant ne devrait pas nécessiter de modification :
Le
Makefilede production détecte automatiquement le nouveau fichier.cavec :Aucune nouvelle cible de test n’est obligatoire pour ce ticket GTK.
Résultat attendu
À la fin du ticket, l’utilisateur doit pouvoir lancer l’application sans disposer d’une enquête préalable.
Il doit pouvoir :
Cette fonctionnalité constitue la première opération complète utilisable depuis GTK.
Commit attendu
Avant le commit :
Préparer les fichiers :
Contrôler :
Créer le commit :
Puis pousser après validation complète :