labfy-investigation/include/widgets/evidence_category_model.h
2026-07-20 11:57:56 +02:00

128 lines
3.1 KiB
C

/******************************************************************************
* @file evidence_category_model.h
* @brief Modèle GTK regroupant les preuves par catégorie.
******************************************************************************/
#ifndef LABFY_INVESTIGATION_EVIDENCE_CATEGORY_MODEL_H
#define LABFY_INVESTIGATION_EVIDENCE_CATEGORY_MODEL_H
#include <gio/gio.h>
#include <glib.h>
G_BEGIN_DECLS
/**
* @brief Modèle opaque contenant des EvidenceCategoryItem.
*/
typedef struct EvidenceCategoryModel EvidenceCategoryModel;
/**
* @brief Codes d'erreur produits par EvidenceCategoryModel.
*/
typedef enum
{
/**
* Un argument public est invalide.
*/
EVIDENCE_CATEGORY_MODEL_ERROR_INVALID_ARGUMENT,
/**
* Le modèle contient un élément invalide.
*/
EVIDENCE_CATEGORY_MODEL_ERROR_INVALID_ITEM,
/**
* Une catégorie n'a pas pu être créée.
*/
EVIDENCE_CATEGORY_MODEL_ERROR_CATEGORY,
/**
* Une allocation a échoué.
*/
EVIDENCE_CATEGORY_MODEL_ERROR_MEMORY
} EvidenceCategoryModelError;
/**
* @brief Domaine d'erreur du modèle de catégories.
*/
#define EVIDENCE_CATEGORY_MODEL_ERROR \
evidence_category_model_error_quark()
/**
* @brief Retourne le domaine d'erreur du module.
*
* @return Quark associé à EvidenceCategoryModel.
*/
GQuark evidence_category_model_error_quark(void);
/**
* @brief Crée un modèle de catégories vide.
*
* @return Nouveau modèle, ou NULL.
*/
EvidenceCategoryModel *evidence_category_model_new(void);
/**
* @brief Libère le modèle.
*
* Cette fonction accepte NULL.
*
* @param evidence_category_model Modèle à libérer.
*/
void evidence_category_model_free(
EvidenceCategoryModel *evidence_category_model
);
/**
* @brief Retourne le modèle GTK contenant les catégories.
*
* La référence retournée est empruntée.
*
* @return GListModel emprunté, ou NULL.
*/
GListModel *evidence_category_model_get_list_model(
EvidenceCategoryModel *evidence_category_model
);
/**
* @brief Retourne le nombre de catégories.
*
* @return Nombre de catégories, ou 0.
*/
guint evidence_category_model_get_count(
const EvidenceCategoryModel *evidence_category_model
);
/**
* @brief Regroupe les preuves par type métier.
*
* evidence_items doit contenir des EvidenceListItem.
*
* type_labels est une table facultative associant :
*
* - clé : code métier du type ;
* - valeur : libellé utilisateur.
*
* La table est uniquement empruntée pendant l'appel.
* Lorsqu'un libellé est absent, le code métier est utilisé.
*
* Le nouveau contenu est entièrement préparé avant que l'ancien modèle
* soit remplacé.
*
* @param evidence_category_model Modèle à actualiser.
* @param evidence_items Modèle contenant des EvidenceListItem.
* @param type_labels Correspondance code vers libellé, ou NULL.
* @param error Emplacement facultatif recevant une erreur.
*
* @return TRUE en cas de succès.
*/
gboolean evidence_category_model_replace(
EvidenceCategoryModel *evidence_category_model,
GListModel *evidence_items,
GHashTable *type_labels,
GError **error
);
G_END_DECLS
#endif