labfy-investigation/docs/tickets/closed/TICKET-019.md
2026-07-14 18:44:43 +02:00

208 lines
3.9 KiB
Markdown

# Ticket #019
## Titre
Afficher une icône selon le type de nœud dans l'arborescence.
---
## Objectif
Améliorer la lisibilité de `InvestigationTreeView` en affichant une icône
devant chaque dossier ou fichier.
Les icônes doivent être déterminées uniquement dans la couche graphique.
---
## Architecture
```text
InvestigationNode
InvestigationTreeView
GtkImage + GtkLabel
```
Le Core fournit :
- le nom ;
- le chemin ;
- le type.
La vue choisit l'icône à afficher.
---
## Responsabilités
### InvestigationTreeView
Le module doit :
- afficher une icône devant chaque nœud ;
- utiliser une icône de dossier pour les répertoires ;
- utiliser une icône générique pour les fichiers inconnus ;
- choisir certaines icônes spécialisées selon l'extension ;
- conserver le nom du nœud à côté de l'icône ;
- rester compatible avec `GtkTreeExpander`.
---
## Fichiers concernés
```text
src/widgets/investigation_tree_view.c
```
Éventuellement :
```text
include/widgets/investigation_tree_view.h
```
uniquement si la documentation doit être précisée.
Aucune modification du Core.
---
## Extensions reconnues
Première version minimale :
```text
.sqlite .db
.jpg .jpeg .png .webp
.pdf
.txt .md .log
.csv
.zip .tar .gz .xz
.mp4 .mkv .avi .mov
```
Les extensions inconnues utilisent une icône de fichier générique.
La comparaison doit être insensible à la casse.
---
## Icônes GTK attendues
Utiliser les noms d'icônes du thème système, par exemple :
```text
folder-symbolic
text-x-generic-symbolic
application-pdf-symbolic
image-x-generic-symbolic
video-x-generic-symbolic
package-x-generic-symbolic
x-office-spreadsheet-symbolic
folder-database-symbolic
```
Si une icône spécialisée n'est pas disponible dans le thème, GTK doit
retomber proprement sur une icône générique.
---
## Structure visuelle d'une ligne
```text
GtkTreeExpander
└── GtkBox horizontal
├── GtkImage
└── GtkLabel
```
Le label continue d'afficher le nom du nœud.
---
## Fonctions privées suggérées
```c
static const char *investigation_tree_view_get_icon_name(
const InvestigationNode *node
);
```
Cette fonction doit :
- retourner `folder-symbolic` pour un dossier ;
- inspecter l'extension pour un fichier ;
- retourner une icône générique si aucune extension ne correspond.
---
## Hors périmètre
Ce ticket ne doit pas :
- charger des miniatures ;
- analyser le contenu réel des fichiers ;
- lire les types MIME ;
- modifier le Core ;
- ouvrir les fichiers ;
- colorer les lignes ;
- ajouter des badges ;
- ajouter un menu contextuel.
---
## Contraintes techniques
- GTK4 uniquement ;
- utiliser `GtkImage` ;
- utiliser les icônes du thème système ;
- aucun fichier d'icône embarqué ;
- aucun état global ;
- aucune lecture directe du système de fichiers ;
- compilation sans warning ;
- aucun `Gtk-CRITICAL`.
---
## Critères d'acceptation
- [ ] Le projet compile sans warning.
- [ ] `make test` reste valide.
- [ ] Les dossiers affichent une icône de dossier.
- [ ] Les fichiers génériques affichent une icône de fichier.
- [ ] Les PDF ont une icône dédiée.
- [ ] Les images ont une icône dédiée.
- [ ] Les vidéos ont une icône dédiée.
- [ ] Les archives ont une icône dédiée.
- [ ] Les bases SQLite ont une icône dédiée.
- [ ] Le nom du nœud reste visible.
- [ ] Le développement et le repli fonctionnent toujours.
- [ ] La sélection fonctionne toujours.
- [ ] Aucun code Core n'est modifié.
- [ ] Aucun `Gtk-CRITICAL`.
---
## Tests manuels
1. Ouvrir une enquête contenant plusieurs types de fichiers.
2. Vérifier l'icône des dossiers.
3. Vérifier une image.
4. Vérifier un PDF.
5. Vérifier une base SQLite.
6. Vérifier une archive.
7. Vérifier un fichier inconnu.
8. Développer et replier plusieurs branches.
9. Sélectionner plusieurs nœuds.
10. Lancer `make test`.
---
## Commit attendu
```text
feat(gui): add icons to investigation tree
```