/* Chrysalide - Outil d'analyse de fichiers binaires * panels.c - gestion d'ensemble de tous les panneaux graphiques du framework * * Copyright (C) 2016-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 "panels.h" #include #include "../panels/binary.h" #include "../panels/welcome.h" /* Liste des panneaux disponibles */ static GPanelItem **_panels_list = NULL; static size_t _panels_count = 0; /****************************************************************************** * * * Paramètres : - * * * * Description : Charge les principaux panneaux graphiques du framework. * * * * Retour : Bilan de l'opération. * * * * Remarques : - * * * ******************************************************************************/ bool load_main_panels(void) { bool result; /* Bilan à retourner */ result = true; // TODO register_panel_item(G_TYPE_LOG_PANEL, config); /* Chargement du panneau de rapport au plus tôt */ // TODO panel = g_panel_item_new(G_TYPE_LOG_PANEL, NULL); register_panel_item(g_binary_panel_new()); register_panel_item(g_welcome_panel_new()); return result; } /****************************************************************************** * * * Paramètres : - * * * * Description : Décharge tous les panneaux graphiques du framework. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ void unload_all_panels(void) { size_t i; /* Boucle de parcours */ for (i = 0; i < _panels_count; i++) unref_object(_panels_list[i]); _panels_list = NULL; _panels_count = 0; } /****************************************************************************** * * * Paramètres : type = type du composant à présenter à l'affichage. * * config = configuration à compléter. * * * * Description : Enregistre un panneau comme partie intégrante de l'éditeur. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ void register_panel_item(/* __steal */ GPanelItem *item) { _panels_list = realloc(_panels_list, ++_panels_count * sizeof(GPanelItem *)); _panels_list[_panels_count - 1] = item; } /****************************************************************************** * * * Paramètres : target = type de définition de panneau recherchée. * * * * Description : Retrouve la définition d'un type de panneau. * * * * Retour : Instance de définition identifiée ou NULL en cas d'échec. * * * * Remarques : - * * * ******************************************************************************/ GPanelItem *find_item_panel_by_type(GType target) { GPanelItem *result; /* Instance à renvoyer */ size_t i; /* Boucle de parcours */ GPanelItem *item; /* Définition de panneau */ result = NULL; for (i = 0; i < _panels_count; i++) { item = _panels_list[i]; if (G_OBJECT_TYPE(item) == target) { result = item; ref_object(result); break; } } return result; } /****************************************************************************** * * * Paramètres : skip = saute le panneau d'accueil lors du parcours ? * * handle = routine à appeler pour chaque panneau. * * data = données fournies pour accompagner cet appel. * * * * Description : Effectue le parcours de tous les panneaux chargés. * * * * Retour : true si le parcours a été total, false sinon. * * * * Remarques : - * * * ******************************************************************************/ bool browse_all_item_panels(bool skip, handle_panel_item_fc handle, void *data) { bool result; /* Résultat à renvoyer */ size_t i; /* Boucle de parcours */ GPanelItem *item; /* Définition de panneau */ result = true; for (i = 0; i < _panels_count; i++) { item = _panels_list[i]; if (skip && G_OBJECT_TYPE(item) == G_TYPE_WELCOME_PANEL) continue; result = handle(item, data); if (!result) break; } return result; }