/* Chrysalide - Outil d'analyse de fichiers binaires * global.c - conservation de variables globales à vocation graphique * * Copyright (C) 2016-2017 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 "global.h" /* Fenêtre principale de l'éditeur */ static GtkWindow *_editor = NULL; /* Barre de statut principale */ static GtkStatusStack *_status = NULL; /* Binaire en cours d'étude ou NULL */ static GLoadedBinary *_current_binary = NULL; G_LOCK_DEFINE_STATIC(_cb_mutex); /* Suivi du panneau d'affichage courant ou NULL */ static GLoadedPanel *_current_view = NULL; G_LOCK_DEFINE_STATIC(_cv_mutex); /* Suivi des changements de position ou NULL */ static GObject *_caret_instance = NULL; G_LOCK_DEFINE_STATIC(_ci_mutex); /****************************************************************************** * * * Paramètres : editor = fenêtre principale à référencer. * * * * Description : Note l'adresse de la fenêtre principale de l'éditeur. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ void set_editor_window(GtkWindow *editor) { _editor = editor; } /****************************************************************************** * * * Paramètres : - * * * * Description : Fournit l'adresse de la fenêtre principale de l'éditeur. * * * * Retour : Fenêtre principale référencée. * * * * Remarques : - * * * ******************************************************************************/ GtkWindow *get_editor_window(void) { return _editor; } /****************************************************************************** * * * Paramètres : status = barre de statut à tenir informée. * * * * Description : Note l'adresse de la barre de statut principale. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ void set_global_status(GtkStatusStack *status) { _status = status; } /****************************************************************************** * * * Paramètres : - * * * * Description : Fournit l'adresse de la barre de statut principale. * * * * Retour : Barre de statut à tenir informée. * * * * Remarques : - * * * ******************************************************************************/ GtkStatusStack *get_global_status(void) { return _status; } /****************************************************************************** * * * Paramètres : binary = instance de binaire chargé. * * * * Description : Définit le binaire actif en cours d'étude. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ void set_current_binary(GLoadedBinary *binary) { G_LOCK(_cb_mutex); if (_current_binary != NULL) g_object_unref(G_OBJECT(_current_binary)); _current_binary = binary; G_UNLOCK(_cb_mutex); } /****************************************************************************** * * * Paramètres : - * * * * Description : Fournit le binaire actif en cours d'étude. * * * * Retour : Instance courante de binaire étudié ou NULL. * * * * Remarques : - * * * ******************************************************************************/ GLoadedBinary *get_current_binary(void) { GLoadedBinary *result; /* Instance à retourner */ G_LOCK(_cb_mutex); result = _current_binary; if (result != NULL) g_object_ref(G_OBJECT(result)); G_UNLOCK(_cb_mutex); return result; } /****************************************************************************** * * * Paramètres : view = représentation courante de binaire. * * * * Description : Définit l'affichage de binaire courant. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ void set_current_view(GLoadedPanel *view) { G_LOCK(_cv_mutex); if (_current_view != NULL) g_object_unref(G_OBJECT(_current_view)); _current_view = view; G_UNLOCK(_cv_mutex); } /****************************************************************************** * * * Paramètres : - * * * * Description : Fournit l'affichage de binaire courant. * * * * Retour : Instance en place ou NULL si aucune. * * * * Remarques : - * * * ******************************************************************************/ GLoadedPanel *get_current_view(void) { GLoadedPanel *result; /* Instance à retourner */ G_LOCK(_cv_mutex); result = _current_view; if (result != NULL) g_object_ref(G_OBJECT(result)); G_UNLOCK(_cv_mutex); return result; } /****************************************************************************** * * * Paramètres : caret = instance graphique à mémoriser. * * * * Description : Définit le support contenant la position active. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ void set_caret_instance(GObject *caret) { G_LOCK(_ci_mutex); if (_caret_instance != NULL) g_object_unref(_caret_instance); _caret_instance = caret; G_UNLOCK(_ci_mutex); } /****************************************************************************** * * * Paramètres : - * * * * Description : Fournit le support contenant la position active. * * * * Retour : Instance en place ou NULL si aucune. * * * * Remarques : - * * * ******************************************************************************/ GObject *get_caret_instance(void) { GObject *result; /* Instance à retourner */ G_LOCK(_ci_mutex); result = _caret_instance; if (result != NULL) g_object_ref(result); G_UNLOCK(_ci_mutex); return result; }