4.7 KiB
Ticket #014
Titre
Ajouter la sélection d'un nœud dans l'arborescence.
Objectif
Permettre à l'utilisateur de sélectionner un dossier ou un fichier dans
InvestigationTreeView.
Le nœud sélectionné doit être transmis jusqu'au module Application, qui
reste responsable de la coordination entre l'arborescence et le reste de
l'interface.
Ce ticket ne doit encore ouvrir aucun fichier.
Architecture
GtkListView
│
▼
InvestigationTreeView
│
▼
Sidebar
│
▼
MainWindow
│
▼
Application
Le Core reste indépendant de GTK.
Responsabilités
InvestigationTreeView
Le module doit :
- remplacer
GtkNoSelectionparGtkSingleSelection; - détecter les changements de sélection ;
- retrouver le
InvestigationNodemétier correspondant ; - appeler un callback public avec le nœud sélectionné ;
- transmettre
NULLlorsqu'aucun nœud n'est sélectionné.
Sidebar
Le module doit :
- recevoir un callback de sélection ;
- le transmettre à
InvestigationTreeView; - ne contenir aucune logique métier liée à la sélection.
MainWindow
Le module doit :
- recevoir le callback depuis
Application; - le transmettre à
Sidebar.
Application
Le module doit :
- recevoir le nœud sélectionné ;
- afficher temporairement son nom et son type dans le terminal ;
- ne pas modifier ni libérer le nœud reçu.
Principe de propriété
Le nœud sélectionné appartient toujours au
InvestigationTreeModel, lui-même possédé par Application.
Le callback reçoit uniquement une référence non propriétaire :
const InvestigationNode *node;
Le code appelé ne doit jamais faire :
investigation_node_free(node);
La référence reste valide tant que le modèle courant n'est pas remplacé ou détruit.
Interfaces publiques à ajouter
InvestigationTreeView
typedef void (*InvestigationTreeViewSelectionCallback)(
const InvestigationNode *node,
gpointer user_data
);
void investigation_tree_view_set_selection_callback(
InvestigationTreeView *tree_view,
InvestigationTreeViewSelectionCallback callback,
gpointer user_data
);
Sidebar
void sidebar_set_selection_callback(
Sidebar *sidebar,
InvestigationTreeViewSelectionCallback callback,
gpointer user_data
);
MainWindow
void main_window_set_tree_selection_callback(
MainWindow *main_window,
InvestigationTreeViewSelectionCallback callback,
gpointer user_data
);
Comportement attendu
Lorsque l'utilisateur sélectionne :
Enquete.sqlite
le terminal affiche temporairement :
Nœud sélectionné : Enquete.sqlite
Type : fichier
Pour un dossier :
Nœud sélectionné : 00_BaseDeDonnees
Type : dossier
Lorsqu'aucun élément n'est sélectionné, le callback reçoit NULL.
Hors périmètre
Ce ticket ne doit pas :
- ouvrir un fichier ;
- modifier le Workspace ;
- afficher un aperçu ;
- sélectionner plusieurs nœuds ;
- ajouter un menu contextuel ;
- afficher des icônes ;
- modifier le Core ;
- modifier le système de fichiers.
Contraintes techniques
- GTK4 uniquement ;
- utiliser
GtkSingleSelection; - aucun
GtkTreeView; - aucun état global ;
- callback documenté avec Doxygen ;
- aucune destruction du nœud sélectionné ;
- compilation sans warning ;
- aucun
Gtk-CRITICAL.
Gestion des changements de modèle
Lorsqu'un nouveau modèle est installé :
- la sélection précédente doit être supprimée ;
- aucun callback ne doit conserver une référence vers un nœud de l'ancien modèle ;
- la nouvelle vue doit démarrer sans sélection.
Critères d'acceptation
- Le projet compile sans warning.
make testreste entièrement valide.- Un seul nœud peut être sélectionné.
- La sélection d'un dossier est détectée.
- La sélection d'un fichier est détectée.
- Le bon
InvestigationNodeest transmis au callback. Applicationreçoit l'événement.- Le nom et le type sont affichés dans le terminal.
- Le changement d'enquête efface l'ancienne sélection.
- Aucun module graphique ne libère le nœud.
- Aucun
Gtk-CRITICAL.
Tests manuels
- Lancer l'application.
- Ouvrir le dossier
Template. - Développer
00_BaseDeDonnees. - Sélectionner
Enquete.sqlite. - Vérifier le nom et le type dans le terminal.
- Sélectionner un dossier.
- Vérifier que le type affiché est
dossier. - Ouvrir une autre enquête.
- Vérifier qu'aucune ancienne sélection n'est conservée.
- Lancer
make test.
Commit attendu
feat(gui): add investigation tree selection