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

3.8 KiB

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

MainWindow
├── Sidebar
├── Workspace
└── StatusLabel

Le module Sidebar appartient à la couche widgets.

Le module ne contient aucune logique métier.


Fichiers concernés

include/widgets/sidebar.h
src/widgets/sidebar.c

include/views/main_window.h
src/views/main_window.c

Interface publique attendue

Sidebar *sidebar_new(void);

GtkWidget *sidebar_get_widget(
    const Sidebar *sidebar
);

void sidebar_free(Sidebar *sidebar);

Interface graphique attendue

┌───────────────────────┬──────────────────────────────────────┐
│ 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

feat(widget): create navigation sidebar