labfy-investigation/include/widgets/workspace.h
2026-07-21 12:24:41 +02:00

161 lines
3.9 KiB
C

/******************************************************************************
* @file workspace.h
* @brief Interface publique de la zone principale de travail.
******************************************************************************/
#ifndef LABFY_INVESTIGATION_WORKSPACE_H
#define LABFY_INVESTIGATION_WORKSPACE_H
#include "core/investigation_node.h"
#include "models/evidence_record.h"
#include <gtk/gtk.h>
/**
* @brief Représentation opaque du graphe d'enquête.
*/
typedef struct InvestigationGraphModel InvestigationGraphModel;
/**
* @brief Représentation opaque de la zone de travail.
*/
typedef struct Workspace Workspace;
/**
* @brief Callback appelé lors d'une demande de vérification d'une preuve.
*
* @param evidence_identifier UUID de la preuve affichée.
* @param user_data Données empruntées fournies par l'appelant.
*/
typedef void (*WorkspaceVerifyEvidenceCallback)(
const char *evidence_identifier,
gpointer user_data
);
/**
* @brief Crée une nouvelle zone de travail.
*
* @return Une nouvelle zone de travail, ou NULL en cas d'échec.
*/
Workspace *workspace_new(void);
/**
* @brief Retourne le widget GTK racine de la zone de travail.
*
* Le widget retourné appartient au module Workspace.
*
* @param workspace Zone de travail à consulter.
*
* @return Widget racine, ou NULL.
*/
GtkWidget *workspace_get_widget(
const Workspace *workspace
);
/**
* @brief Affiche les informations d'un nœud sélectionné.
*
* Le Workspace emprunte le nœud.
* Passer NULL restaure l'état principal courant.
*
* @param workspace Zone de travail.
* @param node Nœud emprunté, ou NULL.
*/
void workspace_set_selected_node(
Workspace *workspace,
const InvestigationNode *node
);
/**
* @brief Affiche la fiche détaillée d'une preuve.
*
* Les textes sont copiés dans les widgets. Le Workspace ne conserve pas le
* pointeur EvidenceRecord.
*
* Passer NULL restaure l'état principal courant.
*
* @param workspace Zone de travail.
* @param evidence_record Preuve empruntée, ou NULL.
*/
void workspace_set_selected_evidence(
Workspace *workspace,
const EvidenceRecord *evidence_record
);
/**
* @brief Définit le callback de vérification de la preuve affichée.
*
* Le Workspace emprunte callback et user_data.
*
* @param workspace Zone de travail.
* @param callback Callback à utiliser, ou NULL.
* @param user_data Données empruntées du callback.
*/
void workspace_set_verify_evidence_callback(
Workspace *workspace,
WorkspaceVerifyEvidenceCallback callback,
gpointer user_data
);
/**
* @brief Affiche l'état de chargement du graphe.
*
* L'ancien graphe emprunté est détaché.
*
* @param workspace Zone de travail.
*/
void workspace_set_graph_loading(
Workspace *workspace
);
/**
* @brief Affiche le résumé du graphe chargé.
*
* Le Workspace emprunte graph_model et ne le libère jamais.
* Passer NULL équivaut à workspace_clear_graph().
*
* @param workspace Zone de travail.
* @param graph_model Graphe emprunté.
*/
void workspace_set_graph(
Workspace *workspace,
const InvestigationGraphModel *graph_model
);
/**
* @brief Affiche une erreur de chargement du graphe.
*
* Le texte du message est immédiatement copié par GTK.
*
* @param workspace Zone de travail.
* @param message Détail de l'erreur, ou NULL.
*/
void workspace_set_graph_error(
Workspace *workspace,
const char *message
);
/**
* @brief Détache le graphe et restaure l'état sans enquête.
*
* Le graphe précédemment emprunté n'est jamais libéré par le Workspace.
*
* @param workspace Zone de travail.
*/
void workspace_clear_graph(
Workspace *workspace
);
/**
* @brief Libère la structure Workspace.
*
* Cette fonction accepte NULL. Elle ne libère jamais le graphe emprunté.
*
* @param workspace Zone de travail à libérer.
*/
void workspace_free(
Workspace *workspace
);
#endif