217 lines
3.9 KiB
Markdown
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
|
|
```
|