5 KiB
Ticket #011
Titre
Connecter le modèle d'arborescence à la Sidebar.
Objectif
Relier l'enquête sélectionnée au panneau latéral.
Après la sélection d'un dossier, l'application doit :
- créer l'objet
Investigation; - construire son
InvestigationTreeModel; - transmettre le modèle à la
Sidebar; - afficher temporairement le nom du nœud racine dans le panneau latéral.
Ce ticket valide la communication entre le Core et l'interface graphique.
Architecture
FolderDialog
│
▼
Application
│
├── Investigation
│
└── InvestigationTreeModel
│
▼
Sidebar
Le module Application reste responsable de la coordination.
La Sidebar ne parcourt jamais directement le système de fichiers.
Responsabilités
Application
Le module Application doit :
- recevoir le dossier sélectionné ;
- créer l'objet
Investigation; - construire le modèle avec
InvestigationTreeBuilder; - conserver le modèle pendant toute la durée de l'enquête ;
- transmettre le modèle à
MainWindow; - libérer l'ancien modèle avant d'en ouvrir un nouveau ;
- libérer le modèle à la fermeture de l'application.
MainWindow
Le module MainWindow doit :
- recevoir un modèle d'arborescence ;
- le transmettre au composant
Sidebar.
Sidebar
Le module Sidebar doit :
- recevoir un
InvestigationTreeModelen lecture seule ; - lire le nœud racine ;
- afficher temporairement son nom dans le titre du panneau ;
- ne jamais détruire le modèle reçu.
Principe de propriété
Application est propriétaire de :
Investigation
InvestigationTreeModel
MainWindow
La Sidebar reçoit uniquement une référence non propriétaire vers le modèle.
Elle ne doit jamais appeler :
investigation_tree_model_free(tree_model);
Le modèle est libéré uniquement par Application.
Fichiers concernés
src/core/application.c
include/views/main_window.h
src/views/main_window.c
include/widgets/sidebar.h
src/widgets/sidebar.c
Aucun nouveau module n'est nécessaire.
Interfaces publiques à ajouter
MainWindow
void main_window_set_tree_model(
MainWindow *main_window,
const InvestigationTreeModel *tree_model
);
Sidebar
void sidebar_set_tree_model(
Sidebar *sidebar,
const InvestigationTreeModel *tree_model
);
Comportement attendu
Avant l'ouverture d'une enquête, la Sidebar affiche :
Dossier d'enquête
Après la sélection du dossier :
Template
ou le nom réel du dossier racine sélectionné.
À ce stade, les enfants ne sont pas encore affichés.
Hors périmètre
Ce ticket ne doit pas :
- afficher les enfants du nœud racine ;
- utiliser
GtkTreeListModel; - créer un explorateur de fichiers complet ;
- permettre de sélectionner un nœud ;
- ouvrir un fichier ;
- rafraîchir automatiquement le modèle ;
- modifier le système de fichiers ;
- communiquer avec SQLite.
Gestion des erreurs
Si la construction du modèle échoue :
- l'application ne doit pas planter ;
- l'ancien modèle doit rester valide jusqu'à son remplacement explicite ;
- un message d'erreur doit être affiché dans le terminal ;
- la
Sidebarne doit recevoir aucun pointeur invalide.
Si une nouvelle enquête est ouverte avec succès :
- créer la nouvelle enquête ;
- construire le nouveau modèle ;
- seulement ensuite libérer l'ancienne enquête et l'ancien modèle ;
- installer les nouveaux objets.
Cette séquence évite de perdre l'enquête actuellement ouverte en cas d'échec.
Contraintes techniques
- C17 ;
- aucun état global ;
- aucune lecture du système de fichiers dans
Sidebar; - aucun transfert de propriété vers
Sidebar; - documentation Doxygen ;
- compilation sans warning ;
- absence de
Gtk-CRITICAL; - respect des conventions de nommage.
Critères d'acceptation
- Le projet compile sans warning.
make testreste valide.- La sélection d'un dossier construit un modèle.
Applicationconserve le modèle.MainWindowtransmet le modèle àSidebar.- La
Sidebaraffiche le nom du nœud racine. - L'ouverture successive de deux dossiers fonctionne.
- L'ancien modèle est correctement libéré.
- Une erreur de construction ne provoque pas de crash.
- La fermeture de l'application libère le modèle.
- Aucun code de parcours du disque n'apparaît dans
Sidebar. - Aucun enfant n'est encore affiché.
Tests manuels
- Lancer l'application.
- Sélectionner le dossier
Template. - Vérifier que la
SidebarafficheTemplate. - Fermer l'application.
- Vérifier l'absence de warning critique.
- Ouvrir successivement deux dossiers différents.
- Vérifier que le titre de la
Sidebarest mis à jour. - Vérifier que
make testreste entièrement valide.
Commit attendu
feat(gui): connect investigation model to sidebar