/* Chrysalide - Outil d'analyse de fichiers binaires * about.h - boîte de dialogue d'information sur le programme * * Copyright (C) 2015-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 Chrysalide. If not, see . */ #include "about.h" #include #include #include #include #include #include "about-int.h" /* Procède à l'initialisation de la boîte "A propos de". */ static void gtk_app_about_dialog_class_init(GtkAppAboutDialogClass *); /* Procède à l'initialisation de la boîte "A propos de". */ static void gtk_app_about_dialog_init(GtkAppAboutDialog *); /* Supprime toutes les références externes. */ static void gtk_app_about_dialog_dispose(GtkAppAboutDialog *); /* Procède à la libération totale de la mémoire. */ static void gtk_app_about_dialog_finalize(GtkAppAboutDialog *); /* Détermine le type du composant d'affichage générique. */ G_DEFINE_TYPE(GtkAppAboutDialog, gtk_app_about_dialog, GTK_TYPE_WINDOW); /****************************************************************************** * * * Paramètres : class = classe GTK à initialiser. * * * * Description : Procède à l'initialisation de la boîte "A propos de". * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ static void gtk_app_about_dialog_class_init(GtkAppAboutDialogClass *class) { GObjectClass *object; /* Plus haut niveau équivalent */ GtkWidgetClass *widget; /* Classe de haut niveau */ object = G_OBJECT_CLASS(class); object->dispose = (GObjectFinalizeFunc/* ! */)gtk_app_about_dialog_dispose; object->finalize = (GObjectFinalizeFunc)gtk_app_about_dialog_finalize; widget = GTK_WIDGET_CLASS(class); gtk_widget_class_add_binding_action(widget, GDK_KEY_Escape, 0, "window.close", NULL); gtk_widget_class_set_template_from_resource(widget, "/re/chrysalide/framework/gui/dialogs/about.ui"); gtk_widget_class_bind_template_child(widget, GtkAppAboutDialog, revision_0); gtk_widget_class_bind_template_child(widget, GtkAppAboutDialog, revision_1); gtk_widget_class_bind_template_child(widget, GtkAppAboutDialog, revision_2); gtk_widget_class_bind_template_child(widget, GtkAppAboutDialog, revision_3); gtk_widget_class_bind_template_child(widget, GtkAppAboutDialog, revision_4); gtk_widget_class_bind_template_child(widget, GtkAppAboutDialog, revision_5); } /****************************************************************************** * * * Paramètres : dialog = composant GTK à initialiser. * * * * Description : Procède à l'initialisation de la boîte "A propos de". * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ static void gtk_app_about_dialog_init(GtkAppAboutDialog *dialog) { unsigned int revision; /* Numéro de révision */ unsigned int max; /* Nbre. de boucles à effectuer*/ unsigned int i; /* Boucle de parcours */ unsigned int level; /* Unité la plus importante */ char buffer[64]; /* Nom d'image à forger */ gtk_widget_init_template(GTK_WIDGET(dialog)); revision = REVISION; max = log(revision) / log(10); assert(max <= 6); for (i = 0; i <= max; i++) { level = pow(10, max - i); snprintf(buffer, 64, "/org/chrysalide/gui/dialogs/about/revision_%u.png", revision / level); gtk_picture_set_resource(dialog->revisions[i], buffer); revision %= level; } for (; i < 6; i++) gtk_widget_set_visible(GTK_WIDGET(dialog->revisions[i]), FALSE); } /****************************************************************************** * * * Paramètres : dialog = instance d'objet GLib à traiter. * * * * Description : Supprime toutes les références externes. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ static void gtk_app_about_dialog_dispose(GtkAppAboutDialog *dialog) { gtk_widget_dispose_template(GTK_WIDGET(dialog), GTK_TYPE_APP_ABOUT_DIALOG); G_OBJECT_CLASS(gtk_app_about_dialog_parent_class)->dispose(G_OBJECT(dialog)); } /****************************************************************************** * * * Paramètres : dialog = instance d'objet GLib à traiter. * * * * Description : Procède à la libération totale de la mémoire. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ static void gtk_app_about_dialog_finalize(GtkAppAboutDialog *dialog) { G_OBJECT_CLASS(gtk_app_about_dialog_parent_class)->finalize(G_OBJECT(dialog)); } /****************************************************************************** * * * Paramètres : parent = fenêtre parente à surpasser. * * * * Description : Construit la fenêtre d'informations sur le logiciel. * * * * Retour : Adresse de la fenêtre mise en place. * * * * Remarques : - * * * ******************************************************************************/ GtkWindow *gtk_app_about_dialog_new(GtkWindow *parent) { GtkWindow *result; /* Boite de dialogue à renvoyer*/ result = g_object_new(GTK_TYPE_APP_ABOUT_DIALOG, NULL); if (!gtk_app_about_dialog_create(GTK_APP_ABOUT_DIALOG(result), parent)) g_clear_object(&result); return result; } /****************************************************************************** * * * Paramètres : dialog = boîte de dialogue à initialiser pleinement. * * content = contenu binaire à exposer de façon brute. * * * * Description : Met en place la fenêtre d'informations sur le logiciel. * * * * Retour : Bilan de l'opération. * * * * Remarques : - * * * ******************************************************************************/ bool gtk_app_about_dialog_create(GtkAppAboutDialog *dialog, GtkWindow *parent) { bool result; /* Bilan à retourner */ result = true; gtk_window_set_transient_for(GTK_WINDOW(dialog), parent); return result; }