Créer le panneau de navigation latéral (Sidebar). #5

Closed
opened 2026-07-18 08:21:41 +02:00 by fy59 · 0 comments
Owner

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
## 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 - [x] Le projet compile sans warning. - [x] Le panneau latéral apparaît à gauche. - [x] La zone de travail apparaît à droite. - [x] La séparation peut être déplacée avec la souris. - [x] Le panneau est créé par le module `Sidebar`. - [x] `MainWindow` ne construit pas directement le contenu interne du panneau. - [x] Aucun état global. - [x] Les fonctions publiques sont documentées avec Doxygen. - [x] 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 ```
fy59 closed this issue 2026-07-18 08:21:45 +02:00
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: fy59/labfy-investigation#5
No description provided.