diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2024-05-05 18:41:12 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2024-05-05 18:41:12 (GMT) |
commit | 279191e1e01875b65237d0a1bc38dbc729f262fa (patch) | |
tree | ef9e1272f109ebe442659d0ab2fe9533f1111f4f /src/framework.c | |
parent | e97dda4a993713aea7452a604086c9e4f0ebdd7e (diff) |
Create a proper (empty) application using GTK 4.
Diffstat (limited to 'src/framework.c')
-rw-r--r-- | src/framework.c | 268 |
1 files changed, 268 insertions, 0 deletions
diff --git a/src/framework.c b/src/framework.c new file mode 100644 index 0000000..47e93a0 --- /dev/null +++ b/src/framework.c @@ -0,0 +1,268 @@ + +/* 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 <gtk/gtk.h> + + +#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; + +} |