/* Chrysalide - Outil d'analyse de fichiers binaires * named.c - préparation de composants à l'affichage avec leurs noms * * Copyright (C) 2020 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 "named.h" #include #include #include "named-int.h" #include "../glibext/named-int.h" /* ---------------------- PREPARATION VIS A VIS DE L'EXTERIEUR ---------------------- */ /* Procède à l'initialisation de l'afficheur générique. */ static void gtk_built_named_widget_class_init(GtkBuiltNamedWidgetClass *); /* Procède à l'initialisation d'une préparation pour affichage. */ static void gtk_built_named_widget_init(GtkBuiltNamedWidget *); /* Procède à l'initialisation de l'interface de composant nommé. */ static void gtk_built_named_widget_named_interface_init(GNamedWidgetInterface *); /* Supprime toutes les références externes. */ static void gtk_built_named_widget_dispose(GtkBuiltNamedWidget *); /* Procède à la libération totale de la mémoire. */ static void gtk_built_named_widget_finalize(GtkBuiltNamedWidget *); /* -------------------------- INTERFACE DE COMPOSANT NOMME -------------------------- */ /* Fournit le désignation associée à un composant nommé. */ static char *gtk_built_named_widget_get_name(const GtkBuiltNamedWidget *, bool); /* Fournit le composant associé à un composant nommé. */ static GtkWidget *gtk_built_named_widget_get_widget(const GtkBuiltNamedWidget *); /* ---------------------------------------------------------------------------------- */ /* PREPARATION VIS A VIS DE L'EXTERIEUR */ /* ---------------------------------------------------------------------------------- */ /* Détermine le type des préparations de composant pour affichage avec noms. */ G_DEFINE_TYPE_WITH_CODE(GtkBuiltNamedWidget, gtk_built_named_widget, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE(G_TYPE_NAMED_WIDGET, gtk_built_named_widget_named_interface_init)); /****************************************************************************** * * * Paramètres : class = classe GTK à initialiser. * * * * Description : Procède à l'initialisation de l'afficheur générique. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ static void gtk_built_named_widget_class_init(GtkBuiltNamedWidgetClass *class) { GObjectClass *object; /* Plus haut niveau équivalent */ object = G_OBJECT_CLASS(class); object->dispose = (GObjectFinalizeFunc/* ! */)gtk_built_named_widget_dispose; object->finalize = (GObjectFinalizeFunc)gtk_built_named_widget_finalize; } /****************************************************************************** * * * Paramètres : widget = composant GTK à initialiser. * * * * Description : Procède à l'initialisation d'une préparation pour affichage. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ static void gtk_built_named_widget_init(GtkBuiltNamedWidget *widget) { widget->builder = NULL; widget->name = NULL; widget->lname = NULL; } /****************************************************************************** * * * Paramètres : iface = interface GLib à initialiser. * * * * Description : Procède à l'initialisation de l'interface de composant nommé.* * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ static void gtk_built_named_widget_named_interface_init(GNamedWidgetInterface *iface) { iface->get_name = (get_named_widget_name_fc)gtk_built_named_widget_get_name; iface->get_widget = (get_named_widget_widget_fc)gtk_built_named_widget_get_widget; } /****************************************************************************** * * * Paramètres : widget = instance d'objet GLib à traiter. * * * * Description : Supprime toutes les références externes. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ static void gtk_built_named_widget_dispose(GtkBuiltNamedWidget *widget) { g_clear_object(&widget->builder); G_OBJECT_CLASS(gtk_built_named_widget_parent_class)->dispose(G_OBJECT(widget)); } /****************************************************************************** * * * Paramètres : widget = instance d'objet GLib à traiter. * * * * Description : Procède à la libération totale de la mémoire. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ static void gtk_built_named_widget_finalize(GtkBuiltNamedWidget *widget) { if (widget->name != NULL) free(widget->name); if (widget->lname != NULL) free(widget->lname); G_OBJECT_CLASS(gtk_built_named_widget_parent_class)->finalize(G_OBJECT(widget)); } /****************************************************************************** * * * Paramètres : name = nom associé à l'élément. * * lname = description longue du panneau. * * path = chemin vers la description d'un composant graphique. * * * * Description : Crée une préparation pour l'affichage d'un composant nommé. * * * * Retour : Adresse de la structure mise en place. * * * * Remarques : - * * * ******************************************************************************/ GtkBuiltNamedWidget *gtk_built_named_widget_new(const char *name, const char *lname, const char *path) { GtkBuiltNamedWidget *result; /* Instance à retourner */ result = g_object_new(GTK_TYPE_BUILT_NAMED_WIDGET, NULL); result->name = strdup(name); result->lname = strdup(lname); result->builder = gtk_builder_new_from_resource(path); return result; } /****************************************************************************** * * * Paramètres : name = nom associé à l'élément. * * lname = description longue du panneau. * * resid = indentificant d'une ressource pour un composant. * * * * Description : Crée une préparation pour l'affichage d'un composant nommé. * * * * Retour : Adresse de la structure mise en place. * * * * Remarques : - * * * ******************************************************************************/ GtkBuiltNamedWidget *gtk_built_named_widget_new_for_panel(const char *name, const char *lname, const char *resid) { GtkBuiltNamedWidget *result; /* Instance à retourner */ char *path; /* Chemin d'accès à constituer */ asprintf(&path, "/org/chrysalide/gui/panels/%s.ui", resid); result = gtk_built_named_widget_new(name, lname, path); free(path); return result; } /****************************************************************************** * * * Paramètres : widget = préparation de composant à consulter. * * * * Description : Fournit le constructeur facilitant l'affichage. * * * * Retour : Constructeur mis en place. * * * * Remarques : - * * * ******************************************************************************/ GtkBuilder *gtk_built_named_widget_get_builder(const GtkBuiltNamedWidget *widget) { GtkBuilder *result; /* Constructeur à retourner */ result = widget->builder; if (result) g_object_ref(G_OBJECT(result)); return result; } /* ---------------------------------------------------------------------------------- */ /* INTERFACE DE COMPOSANT NOMME */ /* ---------------------------------------------------------------------------------- */ /****************************************************************************** * * * Paramètres : widget = composant nommé à consulter. * * lname = précise s'il s'agit d'une version longue ou non. * * * * Description : Fournit le désignation associée à un composant nommé. * * * * Retour : Description courante. * * * * Remarques : - * * * ******************************************************************************/ static char *gtk_built_named_widget_get_name(const GtkBuiltNamedWidget *widget, bool lname) { char *result; /* Désignation à retourner */ if (lname) result = strdup(widget->lname); else result = strdup(widget->name); return result; } /****************************************************************************** * * * Paramètres : widget = composant nommé à consulter. * * * * Description : Fournit le composant associé à un composant nommé. * * * * Retour : Composant graphique GTK. * * * * Remarques : - * * * ******************************************************************************/ static GtkWidget *gtk_built_named_widget_get_widget(const GtkBuiltNamedWidget *widget) { GtkWidget *result; /* Composant GTK à renvoyer */ result = GTK_WIDGET(gtk_builder_get_object(widget->builder, "box")); g_object_ref(G_OBJECT(result)); if (gtk_widget_get_parent(result)) gtk_widget_unparent(result); return result; }