labfy-investigation/docs/tickets/closed/TICKET-005.md
grayTerminal-sh 2bd29e6208 arbo
2026-07-13 13:57:25 +02:00

151 lines
3.8 KiB
Markdown

# Ticket #005
## Titre
Créer le panneau de navigation latéral (`Sidebar`).
---
## Objectif
Créer la structure principale de l'interface avec :
- un panneau latéral à gauche ;
- une zone de travail à droite ;
- une séparation redimensionnable entre les deux zones.
Le panneau latéral servira plus tard à afficher l'arborescence du dossier d'enquête.
---
## Responsabilités
Le module `Sidebar` doit :
- créer un panneau GTK réutilisable ;
- posséder une largeur initiale raisonnable ;
- afficher temporairement un titre ;
- exposer son widget racine en lecture seule.
Le module `MainWindow` doit :
- intégrer le panneau latéral ;
- conserver la zone de travail principale ;
- permettre le redimensionnement des deux zones.
---
## Hors périmètre
Ce ticket ne doit pas :
- afficher l'arborescence réelle des fichiers ;
- lire le contenu d'un dossier ;
- surveiller les changements du système de fichiers ;
- créer ou supprimer des fichiers ;
- ajouter le bouton permettant de masquer le panneau ;
- communiquer avec SQLite.
---
## Architecture
```text
MainWindow
├── Sidebar
├── Workspace
└── StatusLabel
```
Le module `Sidebar` appartient à la couche `widgets`.
Le module ne contient aucune logique métier.
---
## Fichiers concernés
```text
include/widgets/sidebar.h
src/widgets/sidebar.c
include/views/main_window.h
src/views/main_window.c
```
---
## Interface publique attendue
```c
Sidebar *sidebar_new(void);
GtkWidget *sidebar_get_widget(
const Sidebar *sidebar
);
void sidebar_free(Sidebar *sidebar);
```
---
## Interface graphique attendue
```text
┌───────────────────────┬──────────────────────────────────────┐
│ Dossier d'enquête │ │
│ │ │
│ │ │
│ │ Zone de travail │
│ │ │
│ │ │
├───────────────────────┴──────────────────────────────────────┤
│ Aucune enquête ouverte │
└──────────────────────────────────────────────────────────────┘
```
La séparation entre le panneau gauche et la zone centrale doit pouvoir être déplacée horizontalement.
---
## Contraintes techniques
- utiliser GTK4 ;
- utiliser un `GtkPaned` horizontal dans `MainWindow` ;
- ne pas utiliser de variable globale ;
- conserver une structure `Sidebar` opaque ;
- respecter les conventions de nommage du projet ;
- compiler en C17 sans warning.
---
## Critères d'acceptation
- [ ] Le projet compile sans warning.
- [ ] Le panneau latéral apparaît à gauche.
- [ ] La zone de travail apparaît à droite.
- [ ] La séparation peut être déplacée avec la souris.
- [ ] Le panneau est créé par le module `Sidebar`.
- [ ] `MainWindow` ne construit pas directement le contenu interne du panneau.
- [ ] Aucun état global.
- [ ] Les fonctions publiques sont documentées avec Doxygen.
- [ ] La fermeture de l'application ne provoque aucune erreur GTK.
---
## Tests
- lancer l'application ;
- sélectionner un dossier ;
- déplacer la séparation ;
- agrandir et réduire la fenêtre ;
- fermer l'application ;
- vérifier l'absence de warning ou de message critique.
---
## Commit attendu
```text
feat(widget): create navigation sidebar
```