/* Chrysalide - Outil d'analyse de fichiers binaires * log.c - conservation hors mémoire d'objets choisis * * Copyright (C) 2020-2025 Cyrille Bagard * * This file is part of Chrysalide. * * Chrysalide is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * Chrysalide is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Foobar. If not, see . */ #include "log.h" #include #include #include "log-int.h" /* ---------------------------- ENTREE DE JOURNALISATION ---------------------------- */ /* Liste des propriétés */ typedef enum _LogEntryProperty { PROP_0, /* Réservé */ PROP_ICON_NAME, /* Nom d'image de représentat° */ PROP_MESSAGE, /* Contenu du message diffusé */ N_PROPERTIES } LogEntryProperty; static GParamSpec *_log_entry_properties[N_PROPERTIES] = { NULL, }; /* Initialise la classe des conservations d'objets en place. */ static void g_log_entry_class_init(GLogEntryClass *); /* Initialise une instance de conservation d'objets en place. */ static void g_log_entry_init(GLogEntry *); /* Supprime toutes les références externes. */ static void g_log_entry_dispose(GObject *); /* Procède à la libération totale de la mémoire. */ static void g_log_entry_finalize(GObject *); /* --------------------- IMPLEMENTATION DES FONCTIONS DE CLASSE --------------------- */ /* Fournit la valeur d'une propriété d'instance GObject. */ static void gtk_log_entry_get_property(GObject *, guint, GValue *, GParamSpec *); /* ---------------------------------------------------------------------------------- */ /* ENTREE DE JOURNALISATION */ /* ---------------------------------------------------------------------------------- */ /* Indique le type défini pour une conservation d'objets construits. */ G_DEFINE_TYPE(GLogEntry, g_log_entry, G_TYPE_OBJECT); /****************************************************************************** * * * Paramètres : klass = classe à initialiser. * * * * Description : Initialise la classe des conservations d'objets en place. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ static void g_log_entry_class_init(GLogEntryClass *klass) { GObjectClass *object; /* Autre version de la classe */ object = G_OBJECT_CLASS(klass); object->dispose = g_log_entry_dispose; object->finalize = g_log_entry_finalize; object->get_property = gtk_log_entry_get_property; _log_entry_properties[PROP_ICON_NAME] = g_param_spec_string("icon-name", NULL, NULL, NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); _log_entry_properties[PROP_MESSAGE] = g_param_spec_string("message", NULL, NULL, NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_properties(object, N_PROPERTIES, _log_entry_properties); } /****************************************************************************** * * * Paramètres : entry = instance à initialiser. * * * * Description : Initialise une instance de conservation d'objets en place. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ static void g_log_entry_init(GLogEntry *entry) { entry->type = LMT_COUNT; entry->msg = NULL; } /****************************************************************************** * * * Paramètres : object = instance d'objet GLib à traiter. * * * * Description : Supprime toutes les références externes. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ static void g_log_entry_dispose(GObject *object) { G_OBJECT_CLASS(g_log_entry_parent_class)->dispose(object); } /****************************************************************************** * * * Paramètres : object = instance d'objet GLib à traiter. * * * * Description : Procède à la libération totale de la mémoire. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ static void g_log_entry_finalize(GObject *object) { GLogEntry *entry; /* Version spécialisée */ entry = G_LOG_ENTRY(object); if (entry->msg != NULL) free(entry->msg); G_OBJECT_CLASS(g_log_entry_parent_class)->finalize(object); } /****************************************************************************** * * * Paramètres : type = espèce du message à représenter. * * msg = message à faire apparaître à l'écran. * * * * Description : Crée une conservation pour un élément de journalisation. * * * * Retour : Conservation mise en place. * * * * Remarques : - * * * ******************************************************************************/ GLogEntry *g_log_entry_new(LogMessageType type, const char *msg) { GLogEntry *result; /* Structure à retourner */ result = g_object_new(G_TYPE_LOG_ENTRY, NULL); if (!g_log_entry_create(result, type, msg)) g_clear_object(&result); return result; } /****************************************************************************** * * * Paramètres : entry = instance de conservation à initialiser pleinement. * * type = espèce du message à représenter. * * msg = message à faire apparaître à l'écran. * * * * Description : Met en place une conservation pour élément de journalisation.* * * * Retour : Conservation mise en place. * * * * Remarques : - * * * ******************************************************************************/ bool g_log_entry_create(GLogEntry *entry, LogMessageType type, const char *msg) { bool result; /* Bilan à retourner */ result = true; entry->type = type; entry->msg = strdup(msg); return result; } /* ---------------------------------------------------------------------------------- */ /* IMPLEMENTATION DES FONCTIONS DE CLASSE */ /* ---------------------------------------------------------------------------------- */ /****************************************************************************** * * * Paramètres : object = instance d'objet GLib à mamnipuler. * * prop_id = identifiant de la propriété visée. * * value = valeur à transmettre. [OUT] * * pspec = définition de la propriété. * * * * Description : Fournit la valeur d'une propriété d'instance GObject. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ static void gtk_log_entry_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { GLogEntry *entry; /* Version spécialisée */ entry = G_LOG_ENTRY(object); switch (prop_id) { case PROP_ICON_NAME: switch (entry->type) { case LMT_INFO: g_value_set_string(value, "dialog-information-symbolic"); break; case LMT_PROCESS: g_value_set_string(value, "system-run-symbolic"); break; case LMT_WARNING: case LMT_BAD_BINARY: g_value_set_string(value, "dialog-warning-symbolic"); break; case LMT_ERROR: case LMT_EXT_ERROR: g_value_set_string(value, "computer-fail-symbolic"); break; case LMT_COUNT: g_value_set_string(value, "dialog-question-symbolic"); break; } break; case PROP_MESSAGE: g_value_set_string(value, entry->msg); break; } }