151 lines
3.8 KiB
Markdown
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
|
|
```
|