labfy-investigation/include/views/evidence_import_dialog.h
2026-07-20 09:35:36 +02:00

176 lines
4.8 KiB
C

/******************************************************************************
* @file evidence_import_dialog.h
* @brief Dialogue GTK de saisie des métadonnées d'une preuve.
******************************************************************************/
#ifndef LABFY_INVESTIGATION_EVIDENCE_IMPORT_DIALOG_H
#define LABFY_INVESTIGATION_EVIDENCE_IMPORT_DIALOG_H
#include <gtk/gtk.h>
G_BEGIN_DECLS
/**
* @brief Résultat opaque produit par le dialogue d'import.
*/
typedef struct EvidenceImportDialogResult EvidenceImportDialogResult;
/**
* @brief Codes d'erreur produits par EvidenceImportDialog.
*/
typedef enum
{
/**
* Un argument public est invalide.
*/
EVIDENCE_IMPORT_DIALOG_ERROR_INVALID_ARGUMENT,
/**
* Aucun type de preuve n'est disponible.
*/
EVIDENCE_IMPORT_DIALOG_ERROR_EMPTY_TYPES,
/**
* Une allocation ou la création du dialogue a échoué.
*/
EVIDENCE_IMPORT_DIALOG_ERROR_MEMORY,
/**
* Les métadonnées saisies sont invalides.
*/
EVIDENCE_IMPORT_DIALOG_ERROR_INVALID_DATA
} EvidenceImportDialogError;
/**
* @brief Domaine d'erreur du dialogue d'import.
*/
#define EVIDENCE_IMPORT_DIALOG_ERROR \
evidence_import_dialog_error_quark()
/**
* @brief Callback appelé après la fermeture du dialogue.
*
* En cas de validation, result est non NULL et appartient au callback.
* Il doit être libéré avec evidence_import_dialog_result_free().
*
* En cas d'annulation, result vaut NULL.
*
* @param result Résultat possédé par le callback, ou NULL.
* @param user_data Données privées fournies lors de l'ouverture.
*/
typedef void (*EvidenceImportDialogCallback)(
EvidenceImportDialogResult *result,
gpointer user_data
);
/**
* @brief Retourne le domaine d'erreur du dialogue.
*
* @return Quark GLib associé à EvidenceImportDialog.
*/
GQuark evidence_import_dialog_error_quark(void);
/**
* @brief Présente le dialogue de saisie des métadonnées.
*
* Le chemin du fichier est affiché en lecture seule.
*
* evidence_types doit contenir des pointeurs EvidenceType valides.
* Le dialogue copie les codes et les libellés dont il a besoin :
* le tableau peut donc être libéré après le retour de cette fonction.
*
* Le type dont le code vaut "document" est sélectionné par défaut
* lorsqu'il est disponible. Sinon, le premier type est sélectionné.
*
* @param parent Fenêtre GTK parente.
* @param file_path Chemin du fichier sélectionné.
* @param evidence_types Tableau de EvidenceType.
* @param callback Fonction appelée après validation ou annulation.
* @param user_data Données privées transmises au callback.
* @param error Emplacement facultatif recevant une erreur immédiate.
*
* @return TRUE si le dialogue a été créé et présenté.
*/
gboolean evidence_import_dialog_present(
GtkWindow *parent,
const char *file_path,
const GPtrArray *evidence_types,
EvidenceImportDialogCallback callback,
gpointer user_data,
GError **error
);
/**
* @brief Valide les valeurs obligatoires d'un import.
*
* Cette fonction ne dépend pas de l'affichage du dialogue et peut être
* testée sans ouvrir de fenêtre GTK.
*
* Le chemin doit désigner un fichier existant.
* Le code du type doit être non vide.
* La date doit être une date ISO 8601 valide comprenant un fuseau horaire.
*
* @param file_path Chemin du fichier à importer.
* @param type_identifier Code métier du type de preuve.
* @param collected_at Date de collecte au format ISO 8601.
* @param error Emplacement facultatif recevant une erreur.
*
* @return TRUE lorsque les valeurs sont valides.
*/
gboolean evidence_import_dialog_validate_values(
const char *file_path,
const char *type_identifier,
const char *collected_at,
GError **error
);
/**
* @brief Libère le résultat produit par le dialogue.
*
* Cette fonction accepte NULL.
*
* @param result Résultat à libérer.
*/
void evidence_import_dialog_result_free(
EvidenceImportDialogResult *result
);
/**
* @brief Retourne le code du type sélectionné.
*
* @return Chaîne empruntée, ou NULL.
*/
const char *evidence_import_dialog_result_get_type_identifier(
const EvidenceImportDialogResult *result
);
/**
* @brief Retourne la date ISO 8601 de collecte.
*
* @return Chaîne empruntée, ou NULL.
*/
const char *evidence_import_dialog_result_get_collected_at(
const EvidenceImportDialogResult *result
);
/**
* @brief Retourne la source renseignée.
*
* @return Chaîne empruntée, ou NULL lorsque la source est vide.
*/
const char *evidence_import_dialog_result_get_source(
const EvidenceImportDialogResult *result
);
/**
* @brief Retourne la description renseignée.
*
* @return Chaîne empruntée, ou NULL lorsque la description est vide.
*/
const char *evidence_import_dialog_result_get_description(
const EvidenceImportDialogResult *result
);
G_END_DECLS
#endif