Créer une vue graphique en lecture seule du graphe d’enquête #62
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Créer une vue graphique en lecture seule du graphe d’enquête
Contexte
Le chargement asynchrone du graphe d’enquête est désormais intégré à l’application.
Applicationpossède leInvestigationGraphModel,MainWindowrelaie son affichage etWorkspacel’emprunte. Lorsque le chargement réussit, leWorkspaceaffiche actuellement un résumé temporaire indiquant le nombre d’entités et de relations.Le modèle métier expose déjà les entités et les relations à travers une API publique triée. Il ne contient volontairement aucune donnée de positionnement ou de rendu graphique.
La prochaine étape consiste à remplacer ce résumé par une première représentation visuelle du graphe, strictement en lecture seule.
Objectif
Créer un widget GTK nommé
InvestigationGraphView, basé surGtkDrawingAreaet Cairo, capable d’afficher les entités et les relations d’unInvestigationGraphModel.Cette première version doit fournir une visualisation stable et lisible sans modifier les données métier et sans introduire encore d’interactions utilisateur.
Architecture attendue
Responsabilités
InvestigationGraphModelreste exclusivement un modèle métier.InvestigationGraphViewemprunte le graphe et ne le libère jamais.Workspacecrée et possèdeInvestigationGraphView.Workspacetransmet le graphe chargé à la vue.Applicationreste l’unique propriétaire duInvestigationGraphModel.Nouveaux fichiers
Un module interne de calcul de disposition peut être ajouté si cela permet de tester la géométrie sans dépendre d’un serveur d’affichage :
Ce module ne doit contenir aucune logique métier ni aucune dépendance à SQLite.
API minimale proposée
Rendu attendu
Entités
Chaque entité est représentée par un nœud contenant au minimum :
Le libellé principal utilise cet ordre de priorité :
labellorsqu’il est renseigné ;value;Les textes trop longs doivent être tronqués visuellement sans modifier les données d’origine.
Relations
Chaque relation est représentée par une liaison orientée entre son entité source et son entité cible.
Le rendu doit comporter :
Les relations doivent être dessinées avant les nœuds afin que les nœuds restent lisibles au premier plan.
Disposition initiale
La disposition doit être :
Une disposition circulaire simple, basée sur la liste triée des entités, est suffisante pour cette première version.
Les cas suivants doivent être gérés explicitement :
Intégration dans Workspace
Le
Workspacedoit conserver ses quatre états actuels :Modifications attendues :
InvestigationGraphViewdansworkspace_new();investigation_graph_view_set_graph();investigation_graph_view_clear()lors d’un chargement, d’une erreur ou d’un retour à l’état vide ;La sélection d’un nœud de l’arborescence ou d’une preuve peut toujours remplacer temporairement la page du graphe. Lorsque cette sélection est annulée, le
Workspacedoit restaurer la vue graphique si le graphe est prêt.Gestion de la mémoire
Applicationpossède et libère leInvestigationGraphModel.MainWindowne possède pas le graphe.Workspacene possède pas le graphe.InvestigationGraphViewne possède pas le graphe.InvestigationGraphView.Application.investigation_graph_model_list_entities()etinvestigation_graph_model_list_relations()doivent être libérés par la vue, sans libérer leurs éléments empruntés.Gestion des erreurs
La vue ne doit jamais fermer l’application en cas d’erreur de préparation du rendu.
En cas d’échec lors de la lecture du graphe ou de la création de la disposition :
Hors périmètre
Cette première version n’inclut pas :
Ces fonctions feront l’objet de tickets séparés.
Critères d’acceptation
InvestigationGraphViewest un module opaque indépendant duWorkspace.GtkDrawingAreaet Cairo.InvestigationGraphModel.Workspaceaffiche la vue lorsque son état estREADY.LOADING,ERRORetEMPTYcontinuent de fonctionner.make clean && makeréussit avec-Werror -Wpedantic.make testréussit.git diff --checkne signale aucune erreur.Plan d’implémentation conseillé
InvestigationGraphView.GtkDrawingAreaet un callback de dessin vide.Workspace.Validation manuelle