labfy-investigation/include/views/create_relation_dialog.h
2026-07-22 08:59:57 +02:00

160 lines
4.4 KiB
C

/******************************************************************************
* @file create_relation_dialog.h
* @brief Dialogue GTK de préparation d'une relation entre deux entités.
******************************************************************************/
#ifndef LABFY_INVESTIGATION_CREATE_RELATION_DIALOG_H
#define LABFY_INVESTIGATION_CREATE_RELATION_DIALOG_H
#include <gtk/gtk.h>
G_BEGIN_DECLS
/**
* @brief Résultat opaque produit par le dialogue.
*/
typedef struct CreateRelationDialogResult CreateRelationDialogResult;
/**
* @brief Codes d'erreur produits par CreateRelationDialog.
*/
typedef enum
{
CREATE_RELATION_DIALOG_ERROR_INVALID_ARGUMENT,
CREATE_RELATION_DIALOG_ERROR_EMPTY_TARGETS,
CREATE_RELATION_DIALOG_ERROR_MEMORY,
CREATE_RELATION_DIALOG_ERROR_INVALID_DATA
} CreateRelationDialogError;
/**
* @brief Domaine d'erreur du dialogue.
*/
#define CREATE_RELATION_DIALOG_ERROR \
create_relation_dialog_error_quark()
/**
* @brief Callback appelé après validation ou annulation.
*
* En cas de validation, result appartient au callback et doit être libéré
* avec create_relation_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 (*CreateRelationDialogCallback)(
CreateRelationDialogResult *result,
gpointer user_data
);
/**
* @brief Retourne le domaine d'erreur du dialogue.
*/
GQuark create_relation_dialog_error_quark(void);
/**
* @brief Présente le dialogue de création d'une relation.
*
* entities doit contenir des pointeurs EntityRecord valides. Le dialogue
* copie tous les identifiants et libellés nécessaires et ne conserve aucun
* pointeur vers les modèles fournis.
*
* L'entité source est retirée de la liste des cibles.
*
* Cette fonction ne crée aucune relation et n'accède pas à SQLite.
*
* @param parent Fenêtre GTK parente.
* @param source_entity_identifier UUID de l'entité source.
* @param entities Tableau de EntityRecord.
* @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 create_relation_dialog_present(
GtkWindow *parent,
const char *source_entity_identifier,
const GPtrArray *entities,
CreateRelationDialogCallback callback,
gpointer user_data,
GError **error
);
/**
* @brief Valide les valeurs obligatoires d'une relation.
*
* Cette fonction est indépendante de l'affichage et pourra être testée
* sans ouvrir de fenêtre GTK.
*
* @param source_entity_identifier UUID de l'entité source.
* @param target_entity_identifier UUID de l'entité cible.
* @param relation_type Type de relation non vide.
* @param confidence Confiance comprise entre 0 et 100.
* @param error Emplacement facultatif recevant une erreur.
*
* @return TRUE lorsque les valeurs sont valides.
*/
gboolean create_relation_dialog_validate_values(
const char *source_entity_identifier,
const char *target_entity_identifier,
const char *relation_type,
gint confidence,
GError **error
);
/**
* @brief Libère un résultat.
*
* Cette fonction accepte NULL.
*/
void create_relation_dialog_result_free(
CreateRelationDialogResult *result
);
/**
* @brief Retourne l'UUID de l'entité source.
*/
const char *create_relation_dialog_result_get_source_identifier(
const CreateRelationDialogResult *result
);
/**
* @brief Retourne l'UUID de l'entité cible.
*/
const char *create_relation_dialog_result_get_target_identifier(
const CreateRelationDialogResult *result
);
/**
* @brief Retourne le type de relation.
*/
const char *create_relation_dialog_result_get_relation_type(
const CreateRelationDialogResult *result
);
/**
* @brief Retourne le libellé facultatif.
*/
const char *create_relation_dialog_result_get_label(
const CreateRelationDialogResult *result
);
/**
* @brief Retourne la justification facultative.
*/
const char *create_relation_dialog_result_get_justification(
const CreateRelationDialogResult *result
);
/**
* @brief Retourne le niveau de confiance.
*/
gint create_relation_dialog_result_get_confidence(
const CreateRelationDialogResult *result
);
G_END_DECLS
#endif