/* Chrysalide - Outil d'analyse de fichiers binaires * framework.c - fichier d'entrée du programme * * Copyright (C) 2024 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 this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include "framework.h" /* --------------------- DEFINITION D'APPLICATION PERSONNALISEE --------------------- */ /* Définition de l'application principale graphique (instance) */ struct _GtkChrysalideFramework { GtkApplication parent; /* A laisser en premier */ GtkApplicationWindow *main_window; /* Fenêtre principale */ }; /* Définition de l'application principale graphique (classe) */ struct _GtkChrysalideFrameworkClass { GtkApplicationClass parent; /* A laisser en premier */ }; /* Initialise la classe des applications majeures de Chrysalide. */ static void gtk_chrysalide_framework_class_init(GtkChrysalideFrameworkClass *); /* Initialise une application principale pour Chrysalide. */ static void gtk_chrysalide_framework_init(GtkChrysalideFramework *); /* Supprime toutes les références externes. */ static void gtk_chrysalide_framework_dispose(GtkChrysalideFramework *); /* Procède à la libération totale de la mémoire. */ static void gtk_chrysalide_framework_finalize(GtkChrysalideFramework *); /* --------------------- IMPLEMENTATION DES FONCTIONS DE CLASSE --------------------- */ /* Réagit à l'activation de l'application. */ static void gtk_chrysalide_framework_activate(GApplication *); /* ---------------------------------------------------------------------------------- */ /* DEFINITION D'APPLICATION PERSONNALISEE */ /* ---------------------------------------------------------------------------------- */ /* Indique le type défini pour une application principale graphique de Chrysalide. */ G_DEFINE_TYPE(GtkChrysalideFramework, gtk_chrysalide_framework, GTK_TYPE_APPLICATION); /****************************************************************************** * * * Paramètres : klass = classe à initialiser. * * * * Description : Initialise la classe des applications majeures de Chrysalide.* * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ static void gtk_chrysalide_framework_class_init(GtkChrysalideFrameworkClass *klass) { GObjectClass *object; /* Autre version de la classe */ GApplicationClass *app; /* Version parente de la classe*/ object = G_OBJECT_CLASS(klass); object->dispose = (GObjectFinalizeFunc/* ! */)gtk_chrysalide_framework_dispose; object->finalize = (GObjectFinalizeFunc)gtk_chrysalide_framework_finalize; app = G_APPLICATION_CLASS(klass); app->activate = gtk_chrysalide_framework_activate; } /****************************************************************************** * * * Paramètres : app = instance à initialiser. * * * * Description : Initialise une application principale pour Chrysalide. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ static void gtk_chrysalide_framework_init(GtkChrysalideFramework *app) { app->main_window = NULL; } /****************************************************************************** * * * Paramètres : app = instance d'objet GLib à traiter. * * * * Description : Supprime toutes les références externes. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ static void gtk_chrysalide_framework_dispose(GtkChrysalideFramework *app) { g_clear_object(&app->main_window); G_OBJECT_CLASS(gtk_chrysalide_framework_parent_class)->dispose(G_OBJECT(app)); } /****************************************************************************** * * * Paramètres : app = instance d'objet GLib à traiter. * * * * Description : Procède à la libération totale de la mémoire. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ static void gtk_chrysalide_framework_finalize(GtkChrysalideFramework *app) { G_OBJECT_CLASS(gtk_chrysalide_framework_parent_class)->finalize(G_OBJECT(app)); } /****************************************************************************** * * * Paramètres : - * * * * Description : Crée une nouvelle application principale pour Chrysalide. * * * * Retour : Mécanismes mis en place. * * * * Remarques : - * * * ******************************************************************************/ GtkChrysalideFramework *gtk_chrysalide_framework_new(void) { GtkChrysalideFramework *result; /* Instance à retourner */ result = g_object_new(GTK_TYPE_CHRYSALIDE_FRAMEWORK, "application-id", "re.chrysalide.framework", "flags", G_APPLICATION_DEFAULT_FLAGS, NULL); return result; } /* ---------------------------------------------------------------------------------- */ /* IMPLEMENTATION DES FONCTIONS DE CLASSE */ /* ---------------------------------------------------------------------------------- */ /****************************************************************************** * * * Paramètres : app = application concernée par l'événement. * * * * Description : Réagit à l'activation de l'application. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ static void gtk_chrysalide_framework_activate(GApplication *app) { GtkChrysalideFramework *real_app; /* Version réelle de l'instance*/ GtkWindow *window; /* Fenêtre mise en place */ real_app = GTK_CHRYSALIDE_FRAMEWORK(app); window = GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(app))); real_app->main_window = GTK_APPLICATION_WINDOW(window); g_object_ref(G_OBJECT(window)); gtk_window_set_title(window, "Chrysalide"); gtk_window_set_default_size(window, 400, 300); gtk_window_present(window); } /* ---------------------------------------------------------------------------------- */ /* POINT D'ENTREE PRINCIPAL D'EXECUTION */ /* ---------------------------------------------------------------------------------- */ /****************************************************************************** * * * Paramètres : argc = nombre d'arguments dans la ligne de commande. * * argv = arguments de la ligne de commande. * * * * Description : Point d'entrée du programme. * * * * Retour : EXIT_SUCCESS si le prgm s'est déroulé sans encombres. * * * * Remarques : - * * * ******************************************************************************/ int main(int argc, char **argv) { int result; /* Bilan de l'exécution */ GtkChrysalideFramework *app; /* Gestion d'application GTK */ app = gtk_chrysalide_framework_new(); result = g_application_run(G_APPLICATION(app), argc, argv); g_object_unref(G_OBJECT(app)); return result; }