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