labfy-investigation/docs/tickets/closed/TICKET-013.md
2026-07-14 09:08:22 +02:00

217 lines
3.9 KiB
Markdown

# Ticket #013
## Titre
Intégrer `InvestigationTreeView` dans la `Sidebar`.
---
## Objectif
Afficher dans la barre latérale l'arborescence complète de l'enquête ouverte.
Le composant `InvestigationTreeView` existe déjà. Ce ticket consiste uniquement à l'intégrer dans `Sidebar` et à lui transmettre le modèle métier reçu.
---
## Architecture
```text
Application
MainWindow
Sidebar
InvestigationTreeView
GtkTreeListModel
```
La `Sidebar` héberge la vue.
Elle ne parcourt jamais directement le système de fichiers.
---
## Responsabilités
### Sidebar
Le module `Sidebar` doit :
- créer un `InvestigationTreeView` ;
- intégrer son widget racine sous le titre ;
- transmettre le `InvestigationTreeModel` au composant ;
- libérer la structure `InvestigationTreeView` lors de sa propre destruction.
### InvestigationTreeView
Le composant conserve ses responsabilités actuelles :
- adapter le modèle métier à GTK4 ;
- afficher les nœuds ;
- gérer l'ouverture et le repli des dossiers.
---
## Principe de propriété
`Sidebar` est propriétaire de :
```text
InvestigationTreeView
```
Elle doit donc appeler :
```c
investigation_tree_view_free(...)
```
lors de sa destruction.
En revanche, ni `Sidebar` ni `InvestigationTreeView` ne possèdent :
```text
InvestigationTreeModel
```
Le modèle reste la propriété de `Application`.
---
## Fichiers concernés
```text
src/widgets/sidebar.c
```
Éventuellement :
```text
include/widgets/sidebar.h
```
uniquement si l'API publique doit être précisée.
Aucun changement du Core n'est nécessaire.
---
## Modifications attendues
La structure privée `Sidebar` doit contenir :
```c
InvestigationTreeView *tree_view;
```
Le constructeur doit :
1. créer le composant ;
2. récupérer son widget racine ;
3. l'ajouter sous le titre ;
4. lui permettre d'occuper l'espace disponible.
La fonction :
```c
sidebar_set_tree_model(...)
```
doit transmettre le modèle à :
```c
investigation_tree_view_set_model(...)
```
Le titre de la `Sidebar` peut continuer à afficher le nom du nœud racine.
---
## Interface graphique attendue
```text
Template
▸ 00_BaseDeDonnees
▸ 01_Preuves_Originales
▸ 02_Preuves_traitees
▸ 03_Chronologie
▸ 04_Entites
...
```
Les dossiers peuvent être développés et repliés.
Les fichiers apparaissent dans les branches développées.
---
## Hors périmètre
Ce ticket ne doit pas :
- permettre la sélection d'un nœud ;
- afficher des icônes ;
- ouvrir un fichier ;
- ajouter un menu contextuel ;
- rafraîchir automatiquement l'arbre ;
- modifier le système de fichiers ;
- communiquer avec SQLite.
---
## Contraintes techniques
- GTK4 uniquement ;
- aucun `GtkTreeView` ;
- aucune lecture directe du disque dans `Sidebar` ;
- aucun transfert de propriété du modèle métier ;
- aucun état global ;
- documentation cohérente ;
- compilation sans warning ;
- aucun `Gtk-CRITICAL`.
---
## Critères d'acceptation
- [ ] Le projet compile sans warning.
- [ ] `make test` reste entièrement valide.
- [ ] La vue est intégrée dans la `Sidebar`.
- [ ] Le titre affiche le nom de l'enquête.
- [ ] Tous les dossiers racine apparaissent.
- [ ] Les branches peuvent être développées et repliées.
- [ ] Les fichiers apparaissent dans les branches.
- [ ] L'ouverture successive de deux enquêtes reconstruit correctement l'affichage.
- [ ] La fermeture ne produit aucun warning critique.
- [ ] Le Core n'est pas modifié.
---
## Tests manuels
1. Lancer l'application.
2. Ouvrir le dossier `Template`.
3. Vérifier l'affichage des dossiers racine.
4. Développer `00_BaseDeDonnees`.
5. Vérifier la présence de `Enquete.sqlite`.
6. Développer plusieurs niveaux.
7. Fermer l'application.
8. Rouvrir avec une autre enquête.
9. Vérifier que l'ancien arbre a disparu.
10. Lancer `make test`.
---
## Commit attendu
```text
feat(gui): integrate investigation tree into sidebar
```