4.8 KiB
Ticket #016
Titre
Structurer le Workspace avec GtkStack.
Objectif
Remplacer la gestion manuelle de visibilité des pages du Workspace par un
GtkStack.
Le Workspace doit pouvoir afficher proprement plusieurs pages internes sans
modifier son API publique actuelle.
Ce ticket prépare l'ajout futur de nouvelles vues :
- aperçu texte ;
- aperçu image ;
- aperçu PDF ;
- chronologie ;
- fiches d'entités ;
- rapports.
Architecture
Workspace
└── GtkStack
├── WelcomePage
└── NodeInformationPage
Plus tard :
Workspace
└── GtkStack
├── WelcomePage
├── NodeInformationPage
├── TextPreviewPage
├── ImagePreviewPage
├── PdfPreviewPage
└── EntityPage
Le Workspace reste responsable de son affichage interne.
Responsabilités
Le module Workspace doit :
- créer un
GtkStackcomme widget racine interne ; - ajouter une page d'accueil ;
- ajouter une page d'informations sur le nœud sélectionné ;
- afficher la page d'accueil lorsqu'aucun nœud n'est sélectionné ;
- afficher la page d'informations lorsqu'un nœud est sélectionné ;
- conserver l'API publique existante.
API publique conservée
Aucune nouvelle fonction publique n'est requise.
L'API reste :
Workspace *workspace_new(void);
GtkWidget *workspace_get_widget(
const Workspace *workspace
);
void workspace_set_selected_node(
Workspace *workspace,
const InvestigationNode *node
);
void workspace_free(
Workspace *workspace
);
Fichiers concernés
src/widgets/workspace.c
Éventuellement :
include/widgets/workspace.h
uniquement pour mettre à jour la documentation.
Aucun autre module ne doit être modifié.
Structure interne attendue
struct Workspace
{
GtkWidget *root_widget;
GtkWidget *stack;
GtkWidget *welcome_page;
GtkWidget *welcome_title_label;
GtkWidget *welcome_status_label;
GtkWidget *welcome_instruction_label;
GtkWidget *node_page;
GtkWidget *node_name_label;
GtkWidget *node_type_label;
GtkWidget *node_parent_label;
GtkWidget *node_children_label;
};
Les noms exacts peuvent varier, mais doivent rester explicites.
Pages attendues
Page d'accueil
Nom interne :
welcome
Contenu :
Labfy Investigation
Aucune enquête ouverte
Sélectionnez ou créez une enquête
Page d'informations
Nom interne :
node-information
Contenu pour un dossier :
00_BaseDeDonnees
Type : dossier
Parent : Template
Enfants : 2
Contenu pour un fichier :
Enquete.sqlite
Type : fichier
Parent : 00_BaseDeDonnees
Comportement attendu
Lorsque :
workspace_set_selected_node(workspace, NULL);
le GtkStack doit afficher :
welcome
Lorsqu'un nœud valide est transmis :
workspace_set_selected_node(workspace, node);
le GtkStack doit afficher :
node-information
Hors périmètre
Ce ticket ne doit pas :
- ouvrir un fichier ;
- afficher son contenu ;
- ajouter une barre de navigation ;
- ajouter une animation personnalisée ;
- afficher plusieurs nœuds simultanément ;
- modifier le Core ;
- communiquer avec SQLite.
Contraintes techniques
- GTK4 uniquement ;
- utiliser
GtkStack; - aucune gestion manuelle de visibilité entre les pages ;
- aucun état global ;
- aucun changement de propriété des nœuds ;
- documentation cohérente ;
- compilation sans warning ;
- aucun
Gtk-CRITICAL.
Gestion de la propriété
Le Workspace possède uniquement sa structure d'encapsulation.
Les widgets sont gérés par l'arbre GTK une fois intégrés dans la fenêtre.
Le nœud reçu reste la propriété du InvestigationTreeModel.
Le Workspace ne doit jamais appeler :
investigation_node_free(node);
Critères d'acceptation
- Le projet compile sans warning.
make testreste entièrement valide.GtkStackest utilisé.- La page d'accueil apparaît sans sélection.
- La page d'informations apparaît après sélection.
- Le passage d'une page à l'autre fonctionne.
- Aucun appel manuel à
gtk_widget_set_visible()n'est utilisé pour changer de page. - L'API publique de
Workspacereste stable. - Aucun autre module n'est modifié.
- Aucun
Gtk-CRITICAL.
Tests manuels
- Lancer l'application.
- Ouvrir une enquête.
- Vérifier que la page d'accueil est affichée sans sélection.
- Sélectionner un dossier.
- Vérifier l'affichage de la page d'informations.
- Sélectionner un fichier.
- Vérifier la mise à jour de la même page.
- Changer d'enquête.
- Vérifier le retour à la page d'accueil.
- Lancer
make test.
Commit attendu
refactor(gui): use GtkStack in workspace