From 16498486a454f6042b881b77e572f342decf5851 Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Mon, 10 Aug 2020 00:54:08 +0200
Subject: Provided Python bindings for the main menu bar.

---
 plugins/pychrysalide/gui/Makefile.am  |   1 +
 plugins/pychrysalide/gui/core/items.c |  54 +++
 plugins/pychrysalide/gui/menubar.c    | 465 +++++++++++++++++++++++++
 plugins/pychrysalide/gui/menubar.h    |  42 +++
 plugins/pychrysalide/gui/module.c     |   2 +
 src/gui/Makefile.am                   |   1 +
 src/gui/core/core.c                   |   2 +-
 src/gui/editor.c                      |   2 +-
 src/gui/menubar.c                     | 619 ++++++++++++++++++++++++++++++++++
 src/gui/menubar.h                     |  80 +++++
 src/gui/menus/Makefile.am             |   1 -
 src/gui/menus/binary.h                |   2 +-
 src/gui/menus/edition.h               |   2 +-
 src/gui/menus/menubar.c               | 419 -----------------------
 src/gui/menus/menubar.h               |  56 ---
 src/gui/menus/options.h               |   2 +-
 src/gui/menus/project.h               |   2 +-
 src/gui/menus/view.h                  |   2 +-
 18 files changed, 1271 insertions(+), 483 deletions(-)
 create mode 100644 plugins/pychrysalide/gui/menubar.c
 create mode 100644 plugins/pychrysalide/gui/menubar.h
 create mode 100644 src/gui/menubar.c
 create mode 100644 src/gui/menubar.h
 delete mode 100644 src/gui/menus/menubar.c
 delete mode 100644 src/gui/menus/menubar.h

diff --git a/plugins/pychrysalide/gui/Makefile.am b/plugins/pychrysalide/gui/Makefile.am
index 06c9db9..ca6bee5 100644
--- a/plugins/pychrysalide/gui/Makefile.am
+++ b/plugins/pychrysalide/gui/Makefile.am
@@ -4,6 +4,7 @@ noinst_LTLIBRARIES = libpychrysagui.la
 libpychrysagui_la_SOURCES =				\
 	constants.h constants.c				\
 	item.h item.c						\
+	menubar.h menubar.c					\
 	module.h module.c					\
 	panel.h panel.c
 
diff --git a/plugins/pychrysalide/gui/core/items.c b/plugins/pychrysalide/gui/core/items.c
index a54e5f3..ce3eaee 100644
--- a/plugins/pychrysalide/gui/core/items.c
+++ b/plugins/pychrysalide/gui/core/items.c
@@ -66,6 +66,59 @@ static PyObject *py_items_update_project(PyObject *, PyObject *);
 *                                                                             *
 ******************************************************************************/
 
+static PyObject *py_items_find_editor_item_by_key(PyObject *self, PyObject *args)
+{
+    PyObject *result;                       /* Trouvaille à retourner      */
+    const char *key;                        /* Objet des recherches        */
+    int ret;                                /* Bilan de lecture des args.  */
+    GEditorItem *found;                     /* Instance retrouvée ou NULL  */
+
+#define ITEMS_FIND_EDITOR_ITEM_BY_KEY_METHOD PYTHON_METHOD_DEF          \
+(                                                                       \
+    find_editor_item_by_key, "key",                                     \
+    METH_VARARGS, py_items,                                             \
+    "Find the editor component belonging to a given key."               \
+    "\n"                                                                \
+    "The key has to be provided as a simple (short) string, and the"    \
+    " result is a pychrysalide.gui.EditorItem instance or None if no"   \
+    " component is found for the given key."                            \
+)
+
+    ret = PyArg_ParseTuple(args, "s", &key);
+    if (!ret) return NULL;
+
+
+    found = find_editor_item_by_key(key);
+
+    if (found == NULL)
+    {
+        result = Py_None;
+        Py_INCREF(result);
+    }
+    else
+    {
+        result = pygobject_new(G_OBJECT(found));
+        g_object_ref(G_OBJECT(found));
+    }
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : self = classe représentant un binaire.                       *
+*                args = arguments fournis à l'appel.                          *
+*                                                                             *
+*  Description : Lance une actualisation du fait d'un changement de contenu.  *
+*                                                                             *
+*  Retour      : None.                                                        *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
 static PyObject *py_items_change_current_content(PyObject *self, PyObject *args)
 {
     GLoadedContent *content;                /* Instance GLib correspondante*/
@@ -223,6 +276,7 @@ bool populate_gui_core_module_with_items(void)
     PyObject *module;                       /* Module à recompléter        */
 
     static PyMethodDef py_items_methods[] = {
+        ITEMS_FIND_EDITOR_ITEM_BY_KEY_METHOD,
         ITEMS_CHANGE_CURRENT_CONTENT_METHOD,
         ITEMS_CHANGE_CURRENT_VIEW_METHOD,
         ITEMS_UPDATE_CURRENT_VIEW_METHOD,
diff --git a/plugins/pychrysalide/gui/menubar.c b/plugins/pychrysalide/gui/menubar.c
new file mode 100644
index 0000000..0234fba
--- /dev/null
+++ b/plugins/pychrysalide/gui/menubar.c
@@ -0,0 +1,465 @@
+
+/* Chrysalide - Outil d'analyse de fichiers binaires
+ * menubar.c - prototypes pour l'équivalent Python du fichier "gui/menubar.c"
+ *
+ * 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 this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+
+#include "menubar.h"
+
+
+#include <malloc.h>
+#include <pygobject.h>
+
+
+#include <gui/menubar.h>
+
+
+#include "item.h"
+#include "../access.h"
+#include "../helpers.h"
+
+
+
+#define MENU_BAR_DOC                                                            \
+    "MenuBar is an object providing interactions with the main bar of menus.\n" \
+    "\n"                                                                        \
+    "This object is built by the GUI core of Chrysalide and is not aimed to"    \
+    " get created from Python bindings. This singleton is thus a"               \
+    " pychrysalide.gui.EditorItem instance which can be retrieved with"         \
+    " 'menubar' as key."
+
+
+/* Fournit le composant GTK associé au menu "Fichier". */
+static PyObject *py_menu_bar_get_file_menu(PyObject *, void *);
+
+/* Fournit le composant GTK associé au menu "Edition". */
+static PyObject *py_menu_bar_get_edition_menu(PyObject *, void *);
+
+/* Fournit le composant GTK associé au menu "Affichage". */
+static PyObject *py_menu_bar_get_view_menu(PyObject *, void *);
+
+/* Fournit le composant GTK associé au menu "Projet". */
+static PyObject *py_menu_bar_get_project_menu(PyObject *, void *);
+
+/* Fournit le composant GTK associé au menu "Binaire". */
+static PyObject *py_menu_bar_get_binary_menu(PyObject *, void *);
+
+/* Fournit le composant GTK associé au menu "Débogage". */
+static PyObject *py_menu_bar_get_debug_menu(PyObject *, void *);
+
+/* Fournit le composant GTK associé au menu "Options". */
+static PyObject *py_menu_bar_get_options_menu(PyObject *, void *);
+
+/* Fournit le composant GTK associé au menu "Aide". */
+static PyObject *py_menu_bar_get_help_menu(PyObject *, void *);
+
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : self    = objet Python concerné par l'appel.                 *
+*                closure = non utilisé ici.                                   *
+*                                                                             *
+*  Description : Fournit le composant GTK associé au menu "Fichier".          *
+*                                                                             *
+*  Retour      : Instance de composant graphique correspondant au menu visé.  *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static PyObject *py_menu_bar_get_file_menu(PyObject *self, void *closure)
+{
+    PyObject *result;                       /* Valeur à retourner          */
+    GMenuBar *bar;                          /* Elément à consulter         */
+    GtkWidget *menu;                        /* Composant GTK visé          */
+
+#define MENU_BAR_FILE_MENU_ATTRIB PYTHON_GET_DEF_FULL   \
+(                                                       \
+    file_menu, py_menu_bar,                             \
+    "File menu included in the main menubar, as a"      \
+    " Gtk.MenuItem instance."                           \
+)
+
+    bar = G_MENU_BAR(pygobject_get(self));
+
+    menu = g_menu_bar_get_file_menu(bar);
+
+    result = pygobject_new(G_OBJECT(menu));
+    g_object_unref(G_OBJECT(menu));
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : self    = objet Python concerné par l'appel.                 *
+*                closure = non utilisé ici.                                   *
+*                                                                             *
+*  Description : Fournit le composant GTK associé au menu "Edition".          *
+*                                                                             *
+*  Retour      : Instance de composant graphique correspondant au menu visé.  *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static PyObject *py_menu_bar_get_edition_menu(PyObject *self, void *closure)
+{
+    PyObject *result;                       /* Valeur à retourner          */
+    GMenuBar *bar;                          /* Elément à consulter         */
+    GtkWidget *menu;                        /* Composant GTK visé          */
+
+#define MENU_BAR_EDITION_MENU_ATTRIB PYTHON_GET_DEF_FULL    \
+(                                                           \
+    edition_menu, py_menu_bar,                              \
+    "Edition menu included in the main menubar, as a"       \
+    " Gtk.MenuItem instance."                               \
+)
+
+    bar = G_MENU_BAR(pygobject_get(self));
+
+    menu = g_menu_bar_get_edition_menu(bar);
+
+    result = pygobject_new(G_OBJECT(menu));
+    g_object_unref(G_OBJECT(menu));
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : self    = objet Python concerné par l'appel.                 *
+*                closure = non utilisé ici.                                   *
+*                                                                             *
+*  Description : Fournit le composant GTK associé au menu "Affichage".        *
+*                                                                             *
+*  Retour      : Instance de composant graphique correspondant au menu visé.  *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static PyObject *py_menu_bar_get_view_menu(PyObject *self, void *closure)
+{
+    PyObject *result;                       /* Valeur à retourner          */
+    GMenuBar *bar;                          /* Elément à consulter         */
+    GtkWidget *menu;                        /* Composant GTK visé          */
+
+#define MENU_BAR_VIEW_MENU_ATTRIB PYTHON_GET_DEF_FULL   \
+(                                                       \
+    view_menu, py_menu_bar,                             \
+    "View menu included in the main menubar, as a"      \
+    " Gtk.MenuItem instance."                           \
+)
+
+    bar = G_MENU_BAR(pygobject_get(self));
+
+    menu = g_menu_bar_get_view_menu(bar);
+
+    result = pygobject_new(G_OBJECT(menu));
+    g_object_unref(G_OBJECT(menu));
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : self    = objet Python concerné par l'appel.                 *
+*                closure = non utilisé ici.                                   *
+*                                                                             *
+*  Description : Fournit le composant GTK associé au menu "Projet".           *
+*                                                                             *
+*  Retour      : Instance de composant graphique correspondant au menu visé.  *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static PyObject *py_menu_bar_get_project_menu(PyObject *self, void *closure)
+{
+    PyObject *result;                       /* Valeur à retourner          */
+    GMenuBar *bar;                          /* Elément à consulter         */
+    GtkWidget *menu;                        /* Composant GTK visé          */
+
+#define MENU_BAR_PROJECT_MENU_ATTRIB PYTHON_GET_DEF_FULL    \
+(                                                           \
+    project_menu, py_menu_bar,                              \
+    "Project menu included in the main menubar, as a"       \
+    " Gtk.MenuItem instance."                               \
+)
+
+    bar = G_MENU_BAR(pygobject_get(self));
+
+    menu = g_menu_bar_get_project_menu(bar);
+
+    result = pygobject_new(G_OBJECT(menu));
+    g_object_unref(G_OBJECT(menu));
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : self    = objet Python concerné par l'appel.                 *
+*                closure = non utilisé ici.                                   *
+*                                                                             *
+*  Description : Fournit le composant GTK associé au menu "Binaire".          *
+*                                                                             *
+*  Retour      : Instance de composant graphique correspondant au menu visé.  *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static PyObject *py_menu_bar_get_binary_menu(PyObject *self, void *closure)
+{
+    PyObject *result;                       /* Valeur à retourner          */
+    GMenuBar *bar;                          /* Elément à consulter         */
+    GtkWidget *menu;                        /* Composant GTK visé          */
+
+#define MENU_BAR_BINARY_MENU_ATTRIB PYTHON_GET_DEF_FULL \
+(                                                       \
+    binary_menu, py_menu_bar,                           \
+    "Binary menu included in the main menubar, as a"    \
+    " Gtk.MenuItem instance."                           \
+)
+
+    bar = G_MENU_BAR(pygobject_get(self));
+
+    menu = g_menu_bar_get_binary_menu(bar);
+
+    result = pygobject_new(G_OBJECT(menu));
+    g_object_unref(G_OBJECT(menu));
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : self    = objet Python concerné par l'appel.                 *
+*                closure = non utilisé ici.                                   *
+*                                                                             *
+*  Description : Fournit le composant GTK associé au menu "Débogage".         *
+*                                                                             *
+*  Retour      : Instance de composant graphique correspondant au menu visé.  *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static PyObject *py_menu_bar_get_debug_menu(PyObject *self, void *closure)
+{
+    PyObject *result;                       /* Valeur à retourner          */
+    GMenuBar *bar;                          /* Elément à consulter         */
+    GtkWidget *menu;                        /* Composant GTK visé          */
+
+#define MENU_BAR_DEBUG_MENU_ATTRIB PYTHON_GET_DEF_FULL  \
+(                                                       \
+    debug_menu, py_menu_bar,                            \
+    "Debug menu included in the main menubar, as a"     \
+    " Gtk.MenuItem instance."                           \
+)
+
+    bar = G_MENU_BAR(pygobject_get(self));
+
+    menu = g_menu_bar_get_debug_menu(bar);
+
+    result = pygobject_new(G_OBJECT(menu));
+    g_object_unref(G_OBJECT(menu));
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : self    = objet Python concerné par l'appel.                 *
+*                closure = non utilisé ici.                                   *
+*                                                                             *
+*  Description : Fournit le composant GTK associé au menu "Options".          *
+*                                                                             *
+*  Retour      : Instance de composant graphique correspondant au menu visé.  *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static PyObject *py_menu_bar_get_options_menu(PyObject *self, void *closure)
+{
+    PyObject *result;                       /* Valeur à retourner          */
+    GMenuBar *bar;                          /* Elément à consulter         */
+    GtkWidget *menu;                        /* Composant GTK visé          */
+
+#define MENU_BAR_OPTIONS_MENU_ATTRIB PYTHON_GET_DEF_FULL    \
+(                                                           \
+    options_menu, py_menu_bar,                              \
+    "Options menu included in the main menubar, as a"       \
+    " Gtk.MenuItem instance."                               \
+)
+
+    bar = G_MENU_BAR(pygobject_get(self));
+
+    menu = g_menu_bar_get_options_menu(bar);
+
+    result = pygobject_new(G_OBJECT(menu));
+    g_object_unref(G_OBJECT(menu));
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : self    = objet Python concerné par l'appel.                 *
+*                closure = non utilisé ici.                                   *
+*                                                                             *
+*  Description : Fournit le composant GTK associé au menu "Aide".             *
+*                                                                             *
+*  Retour      : Instance de composant graphique correspondant au menu visé.  *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static PyObject *py_menu_bar_get_help_menu(PyObject *self, void *closure)
+{
+    PyObject *result;                       /* Valeur à retourner          */
+    GMenuBar *bar;                          /* Elément à consulter         */
+    GtkWidget *menu;                        /* Composant GTK visé          */
+
+#define MENU_BAR_HELP_MENU_ATTRIB PYTHON_GET_DEF_FULL   \
+(                                                       \
+    help_menu, py_menu_bar,                             \
+    "Help menu included in the main menubar, as a"      \
+    " Gtk.MenuItem instance."                           \
+)
+
+    bar = G_MENU_BAR(pygobject_get(self));
+
+    menu = g_menu_bar_get_help_menu(bar);
+
+    result = pygobject_new(G_OBJECT(menu));
+    g_object_unref(G_OBJECT(menu));
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : -                                                            *
+*                                                                             *
+*  Description : Fournit un accès à une définition de type à diffuser.        *
+*                                                                             *
+*  Retour      : Définition d'objet pour Python.                              *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+PyTypeObject *get_python_menu_bar_type(void)
+{
+    static PyMethodDef py_menu_bar_methods[] = {
+        { NULL }
+    };
+
+    static PyGetSetDef py_menu_bar_getseters[] = {
+        MENU_BAR_FILE_MENU_ATTRIB,
+        MENU_BAR_EDITION_MENU_ATTRIB,
+        MENU_BAR_VIEW_MENU_ATTRIB,
+        MENU_BAR_PROJECT_MENU_ATTRIB,
+        MENU_BAR_BINARY_MENU_ATTRIB,
+        MENU_BAR_DEBUG_MENU_ATTRIB,
+        MENU_BAR_OPTIONS_MENU_ATTRIB,
+        MENU_BAR_HELP_MENU_ATTRIB,
+        { NULL }
+    };
+
+    static PyTypeObject py_menu_bar_type = {
+
+        PyVarObject_HEAD_INIT(NULL, 0)
+
+        .tp_name        = "pychrysalide.gui.MenuBar",
+
+        .tp_flags       = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
+
+        .tp_doc         = MENU_BAR_DOC,
+
+        .tp_methods     = py_menu_bar_methods,
+        .tp_getset      = py_menu_bar_getseters,
+
+        .tp_new         = no_python_constructor_allowed,
+
+    };
+
+    return &py_menu_bar_type;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : module = module dont la définition est à compléter.          *
+*                                                                             *
+*  Description : Prend en charge l'objet 'pychrysalide.gui.MenuBar'.          *
+*                                                                             *
+*  Retour      : Bilan de l'opération.                                        *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+bool ensure_python_menu_bar_is_registered(void)
+{
+    PyTypeObject *type;                     /* Type Python 'MenuBar'       */
+    PyObject *module;                       /* Module à recompléter        */
+    PyObject *dict;                         /* Dictionnaire du module      */
+
+    type = get_python_menu_bar_type();
+
+    if (!PyType_HasFeature(type, Py_TPFLAGS_READY))
+    {
+        module = get_access_to_python_module("pychrysalide.gui");
+
+        dict = PyModule_GetDict(module);
+
+        if (!register_class_for_pygobject(dict, G_TYPE_MENU_BAR, type, get_python_editor_item_type()))
+            return false;
+
+    }
+
+    return true;
+
+}
diff --git a/plugins/pychrysalide/gui/menubar.h b/plugins/pychrysalide/gui/menubar.h
new file mode 100644
index 0000000..9ab7ed0
--- /dev/null
+++ b/plugins/pychrysalide/gui/menubar.h
@@ -0,0 +1,42 @@
+
+/* Chrysalide - Outil d'analyse de fichiers binaires
+ * menubar.h - prototypes pour l'équivalent Python du fichier "gui/menubar.h"
+ *
+ * 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 this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+
+#ifndef _PLUGINS_PYCHRYSALIDE_GUI_MENUBAR_H
+#define _PLUGINS_PYCHRYSALIDE_GUI_MENUBAR_H
+
+
+#include <Python.h>
+#include <stdbool.h>
+
+
+
+/* Fournit un accès à une définition de type à diffuser. */
+PyTypeObject *get_python_menu_bar_type(void);
+
+/* Prend en charge l'objet 'pychrysalide.gui.MenuBar'. */
+bool ensure_python_menu_bar_is_registered(void);
+
+
+
+#endif  /* _PLUGINS_PYCHRYSALIDE_GUI_MENUBAR_H */
diff --git a/plugins/pychrysalide/gui/module.c b/plugins/pychrysalide/gui/module.c
index 66f0f24..1ff7b1b 100644
--- a/plugins/pychrysalide/gui/module.c
+++ b/plugins/pychrysalide/gui/module.c
@@ -30,6 +30,7 @@
 
 
 #include "item.h"
+#include "menubar.h"
 #include "panel.h"
 #include "core/module.h"
 #include "../helpers.h"
@@ -101,6 +102,7 @@ bool populate_gui_module(void)
     result = true;
 
     if (result) result = ensure_python_editor_item_is_registered();
+    if (result) result = ensure_python_menu_bar_is_registered();
     if (result) result = ensure_python_panel_item_is_registered();
 
     if (result) result = populate_gui_core_module();
diff --git a/src/gui/Makefile.am b/src/gui/Makefile.am
index 18bda52..1bd4130 100644
--- a/src/gui/Makefile.am
+++ b/src/gui/Makefile.am
@@ -6,6 +6,7 @@ libgui_la_SOURCES =						\
 	editor.h editor.c					\
 	item-int.h							\
 	item.h item.c						\
+	menubar.h menubar.c					\
 	panel-int.h							\
 	panel.h panel.c						\
 	status.h status.c					\
diff --git a/src/gui/core/core.c b/src/gui/core/core.c
index e6afc9a..5cfa1ed 100644
--- a/src/gui/core/core.c
+++ b/src/gui/core/core.c
@@ -27,7 +27,7 @@
 #include "global.h"
 #include "panels.h"
 #include "theme.h"
-#include "../menus/menubar.h"
+#include "../menubar.h"
 #include "../menus/view.h"
 #include "../panels/welcome.h"
 #include "../../core/params.h"
diff --git a/src/gui/editor.c b/src/gui/editor.c
index ea650d3..01d7264 100644
--- a/src/gui/editor.c
+++ b/src/gui/editor.c
@@ -35,10 +35,10 @@
 
 
 #include "agroup.h"
+#include "menubar.h"
 #include "status.h"
 #include "dialogs/loading.h"
 #include "menus/file.h"
-#include "menus/menubar.h"
 #include "core/core.h"
 #include "core/panels.h"
 #include "core/global.h"
diff --git a/src/gui/menubar.c b/src/gui/menubar.c
new file mode 100644
index 0000000..55ff3fa
--- /dev/null
+++ b/src/gui/menubar.c
@@ -0,0 +1,619 @@
+
+/* Chrysalide - Outil d'analyse de fichiers binaires
+ * menubar.c - gestion des différents menus de la fenêtre principale
+ *
+ * Copyright (C) 2011-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 this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+
+#include "menubar.h"
+
+
+#include <string.h>
+
+
+#include "item-int.h"
+#include "core/global.h"
+#include "menus/binary.h"
+#include "menus/debug.h"
+#include "menus/edition.h"
+#include "menus/file.h"
+#include "menus/help.h"
+#include "menus/options.h"
+#include "menus/plugins.h"
+#include "menus/project.h"
+#include "menus/view.h"
+
+
+
+/* Barre de menus de la fenêtre principale (instance) */
+struct _GMenuBar
+{
+    GEditorItem parent;                     /* A laisser en premier        */
+
+    GtkWidget *support;                     /* Composant principal         */
+
+    GtkWidget *file;                        /* Menu "Fichier"              */
+    GtkWidget *edition;                     /* Menu "Edition"              */
+    GtkWidget *view;                        /* Menu "Affichage"            */
+    GtkWidget *project;                     /* Menu "Projet"               */
+    GtkWidget *binary;                      /* Menu "Binaire"              */
+    GtkWidget *debug;                       /* Menu "Débogage"             */
+    GtkWidget *options;                     /* Menu "Options"              */
+    GtkWidget *plugins;                     /* Menu "Greffons"             */
+    GtkWidget *help;                        /* Menu "Aide"                 */
+
+};
+
+
+/* Barre de menus de la fenêtre principale (classe) */
+struct _GMenuBarClass
+{
+    GEditorItemClass parent;                /* A laisser en premier        */
+
+};
+
+
+/* Initialise la classe de la barre de menus de l'éditeur. */
+static void g_menu_bar_class_init(GMenuBarClass *);
+
+/* Initialise une instance de la barre de menus pour l'éditeur. */
+static void g_menu_bar_init(GMenuBar *);
+
+/* Supprime toutes les références externes. */
+static void g_menu_bar_dispose(GMenuBar *);
+
+/* Procède à la libération totale de la mémoire. */
+static void g_menu_bar_finalize(GMenuBar *);
+
+/* Fournit le nom humain attribué à l'élément réactif. */
+static char *g_menu_bar_get_key(const GMenuBar *);
+
+/* Fournit le composant GTK associé à l'élément réactif. */
+static GtkWidget *g_menu_bar_get_widget(const GMenuBar *);
+
+/* Réagit à un changement d'affichage principal de contenu. */
+static void change_menubar_current_content(GMenuBar *, GLoadedContent *, GLoadedContent *);
+
+/*  Lance une actualisation du fait d'un changement de support. */
+static void change_menubar_current_view(GMenuBar *, GLoadedPanel *, GLoadedPanel *);
+
+/* Met à jour les accès aux menus en fonction de la position. */
+static void track_caret_address_for_menu_bar(GMenuBar *, GLoadedPanel *, const GLineCursor *);
+
+/* Lance une actualisation relative à l'étendue du projet. */
+static void update_menu_bar_for_project(GMenuBar *, GStudyProject *);
+
+
+
+/* Indique le type défini pour la barre de menus de la fenêtre principale. */
+G_DEFINE_TYPE(GMenuBar, g_menu_bar, G_TYPE_EDITOR_ITEM);
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : klass = classe à initialiser.                                *
+*                                                                             *
+*  Description : Initialise la classe de la barre de menus de l'éditeur.      *
+*                                                                             *
+*  Retour      : -                                                            *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static void g_menu_bar_class_init(GMenuBarClass *klass)
+{
+    GObjectClass *object;                   /* Autre version de la classe  */
+    GEditorItemClass *item;               /* Encore une autre vision...  */
+
+    object = G_OBJECT_CLASS(klass);
+
+    object->dispose = (GObjectFinalizeFunc/* ! */)g_menu_bar_dispose;
+    object->finalize = (GObjectFinalizeFunc)g_menu_bar_finalize;
+
+    item = G_EDITOR_ITEM_CLASS(klass);
+
+    item->get_key = (get_item_key_fc)g_menu_bar_get_key;
+    item->get_widget = (get_item_widget_fc)g_menu_bar_get_widget;
+
+    item->change_content = (change_item_content_fc)change_menubar_current_content;
+    item->change_view = (change_item_view_fc)change_menubar_current_view;
+    item->track_cursor = (track_cursor_in_view_fc)track_caret_address_for_menu_bar;
+    item->update_project = (update_project_fc)update_menu_bar_for_project;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : bar = instance à initialiser.                                *
+*                                                                             *
+*  Description : Initialise une instance de la barre de menus pour l'éditeur. *
+*                                                                             *
+*  Retour      : -                                                            *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static void g_menu_bar_init(GMenuBar *bar)
+{
+    bar->support = gtk_menu_bar_new();
+    gtk_widget_show(bar->support);
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : bar = instance d'objet GLib à traiter.                       *
+*                                                                             *
+*  Description : Supprime toutes les références externes.                     *
+*                                                                             *
+*  Retour      : -                                                            *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static void g_menu_bar_dispose(GMenuBar *bar)
+{
+    G_OBJECT_CLASS(g_menu_bar_parent_class)->dispose(G_OBJECT(bar));
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : bar = instance d'objet GLib à traiter.                       *
+*                                                                             *
+*  Description : Procède à la libération totale de la mémoire.                *
+*                                                                             *
+*  Retour      : -                                                            *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static void g_menu_bar_finalize(GMenuBar *bar)
+{
+    G_OBJECT_CLASS(g_menu_bar_parent_class)->finalize(G_OBJECT(bar));
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : ref = espace de référencement global.                        *
+*                                                                             *
+*  Description : Compose la barre de menus principale.                        *
+*                                                                             *
+*  Retour      : Adresse de la structure mise en place.                       *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+GEditorItem *g_menu_bar_new(GObject *ref)
+{
+    GMenuBar *result;                       /* Structure à retourner       */
+
+    result = g_object_new(G_TYPE_MENU_BAR, NULL);
+
+    /* Fichier */
+
+    result->file = build_menu_file();
+    gtk_container_add(GTK_CONTAINER(result->support), result->file);
+
+    /* Edition */
+
+    result->edition = build_menu_edition(ref, result);
+    gtk_container_add(GTK_CONTAINER(result->support), result->edition);
+
+    /* Affichage */
+
+    result->view = build_menu_view(ref, result);
+    gtk_container_add(GTK_CONTAINER(result->support), result->view);
+
+    /* Projet */
+
+    result->project = build_menu_project(ref, result);
+    gtk_container_add(GTK_CONTAINER(result->support), result->project);
+
+    /* Binaire */
+
+    result->binary = build_menu_binary(ref, result);
+    gtk_container_add(GTK_CONTAINER(result->support), result->binary);
+
+    /* Débogage */
+
+    result->debug = build_menu_debug(ref);
+    gtk_container_add(GTK_CONTAINER(result->support), result->debug);
+
+    /* Options */
+
+    result->options = build_menu_options(ref, result);
+    gtk_container_add(GTK_CONTAINER(result->support), result->options);
+
+    /* Greffons */
+
+    result->plugins = build_menu_plugins(ref);
+    gtk_container_add(GTK_CONTAINER(result->support), result->plugins);
+
+    /* Aide */
+
+    result->help = build_menu_help();
+    gtk_container_add(GTK_CONTAINER(result->support), result->help);
+
+    return G_EDITOR_ITEM(result);
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : bar = instance à consulter.                                  *
+*                                                                             *
+*  Description : Fournit le nom humain attribué à l'élément réactif.          *
+*                                                                             *
+*  Retour      : Désignation (courte) de l'élément de l'éditeur.              *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static char *g_menu_bar_get_key(const GMenuBar *bar)
+{
+    char *result;                           /* Description à renvoyer      */
+
+    result = strdup("menubar");
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : bar = instance à consulter.                                  *
+*                                                                             *
+*  Description : Fournit le composant GTK associé à l'élément réactif.        *
+*                                                                             *
+*  Retour      : Instance de composant graphique chargé.                      *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static GtkWidget *g_menu_bar_get_widget(const GMenuBar *bar)
+{
+    GtkWidget *result;                      /* Composant à retourner       */
+
+    result = bar->support;
+
+    if (result != NULL)
+        g_object_ref(G_OBJECT(result));
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : bar = barre de menus à mettre à jour.                        *
+*                old = ancien contenu chargé analysé.                         *
+*                new = nouveau contenu chargé à analyser.                     *
+*                                                                             *
+*  Description : Réagit à un changement d'affichage principal de contenu.     *
+*                                                                             *
+*  Retour      : -                                                            *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static void change_menubar_current_content(GMenuBar *bar, GLoadedContent *old, GLoadedContent *new)
+{
+    GObject *ref;                           /* Espace de référencements    */
+
+    ref = get_global_ref();
+
+    rebuild_menu_view_for_content(bar->view, ref, new);
+
+    update_access_for_content_in_menu_binary(ref, new);
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : bar = barre de menus à mettre à jour.                        *
+*                old = ancienne vue du contenu chargé analysé.                *
+*                new = nouvelle vue du contenu chargé analysé.                *
+*                                                                             *
+*  Description : Lance une actualisation du fait d'un changement de support.  *
+*                                                                             *
+*  Retour      : -                                                            *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static void change_menubar_current_view(GMenuBar *bar, GLoadedPanel *old, GLoadedPanel *new)
+{
+    GObject *ref;                           /* Espace de référencements    */
+
+    ref = get_global_ref();
+
+    update_access_for_view_in_menu_edition(ref, new);
+
+    rebuild_menu_view_for_view(bar->view, ref, new);
+
+    update_access_for_view_in_menu_view(ref, new);
+
+    update_access_for_view_in_menu_binary(ref, new);
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : bar   = barre de menus à actualiser.                         *
+*                panel  = composant d'affichage parcouru.                     *
+*                cursor = nouvel emplacement du curseur courant.              *
+*                                                                             *
+*  Description : Met à jour les accès aux menus en fonction de la position.   *
+*                                                                             *
+*  Retour      : -                                                            *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static void track_caret_address_for_menu_bar(GMenuBar *bar, GLoadedPanel *panel, const GLineCursor *cursor)
+{
+    GObject *ref;                           /* Espace de référencements    */
+
+    ref = get_global_ref();
+
+    update_access_for_cursor_in_menu_edition(ref, panel, cursor);
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : bar     = barre de menus à actualiser.                       *
+*                project = projet visé par la procédure.                      *
+*                                                                             *
+*  Description : Lance une actualisation relative à l'étendue du projet.      *
+*                                                                             *
+*  Retour      : -                                                            *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static void update_menu_bar_for_project(GMenuBar *bar, GStudyProject *project)
+{
+    update_menu_project_for_project(bar->project, project, bar);
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : bar = instance à consulter.                                  *
+*                                                                             *
+*  Description : Fournit le composant GTK associé au menu "Fichier".          *
+*                                                                             *
+*  Retour      : Instance de composant graphique correspondant au menu visé.  *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+GtkWidget *g_menu_bar_get_file_menu(const GMenuBar *bar)
+{
+    GtkWidget *result;                      /* Menu à renvoyer             */
+
+    result = bar->file;
+
+    g_object_ref(G_OBJECT(result));
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : bar = instance à consulter.                                  *
+*                                                                             *
+*  Description : Fournit le composant GTK associé au menu "Edition".          *
+*                                                                             *
+*  Retour      : Instance de composant graphique correspondant au menu visé.  *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+GtkWidget *g_menu_bar_get_edition_menu(const GMenuBar *bar)
+{
+    GtkWidget *result;                      /* Menu à renvoyer             */
+
+    result = bar->edition;
+
+    g_object_ref(G_OBJECT(result));
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : bar = instance à consulter.                                  *
+*                                                                             *
+*  Description : Fournit le composant GTK associé au menu "Affichage".        *
+*                                                                             *
+*  Retour      : Instance de composant graphique correspondant au menu visé.  *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+GtkWidget *g_menu_bar_get_view_menu(const GMenuBar *bar)
+{
+    GtkWidget *result;                      /* Menu à renvoyer             */
+
+    result = bar->view;
+
+    g_object_ref(G_OBJECT(result));
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : bar = instance à consulter.                                  *
+*                                                                             *
+*  Description : Fournit le composant GTK associé au menu "Projet".           *
+*                                                                             *
+*  Retour      : Instance de composant graphique correspondant au menu visé.  *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+GtkWidget *g_menu_bar_get_project_menu(const GMenuBar *bar)
+{
+    GtkWidget *result;                      /* Menu à renvoyer             */
+
+    result = bar->project;
+
+    g_object_ref(G_OBJECT(result));
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : bar = instance à consulter.                                  *
+*                                                                             *
+*  Description : Fournit le composant GTK associé au menu "Binaire".          *
+*                                                                             *
+*  Retour      : Instance de composant graphique correspondant au menu visé.  *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+GtkWidget *g_menu_bar_get_binary_menu(const GMenuBar *bar)
+{
+    GtkWidget *result;                      /* Menu à renvoyer             */
+
+    result = bar->binary;
+
+    g_object_ref(G_OBJECT(result));
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : bar = instance à consulter.                                  *
+*                                                                             *
+*  Description : Fournit le composant GTK associé au menu "Débogage".         *
+*                                                                             *
+*  Retour      : Instance de composant graphique correspondant au menu visé.  *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+GtkWidget *g_menu_bar_get_debug_menu(const GMenuBar *bar)
+{
+    GtkWidget *result;                      /* Menu à renvoyer             */
+
+    result = bar->debug;
+
+    g_object_ref(G_OBJECT(result));
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : bar = instance à consulter.                                  *
+*                                                                             *
+*  Description : Fournit le composant GTK associé au menu "Options".          *
+*                                                                             *
+*  Retour      : Instance de composant graphique correspondant au menu visé.  *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+GtkWidget *g_menu_bar_get_options_menu(const GMenuBar *bar)
+{
+    GtkWidget *result;                      /* Menu à renvoyer             */
+
+    result = bar->options;
+
+    g_object_ref(G_OBJECT(result));
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : bar = instance à consulter.                                  *
+*                                                                             *
+*  Description : Fournit le composant GTK associé au menu "Aide".             *
+*                                                                             *
+*  Retour      : Instance de composant graphique correspondant au menu visé.  *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+GtkWidget *g_menu_bar_get_help_menu(const GMenuBar *bar)
+{
+    GtkWidget *result;                      /* Menu à renvoyer             */
+
+    result = bar->help;
+
+    g_object_ref(G_OBJECT(result));
+
+    return result;
+
+}
diff --git a/src/gui/menubar.h b/src/gui/menubar.h
new file mode 100644
index 0000000..1a1b23c
--- /dev/null
+++ b/src/gui/menubar.h
@@ -0,0 +1,80 @@
+
+/* Chrysalide - Outil d'analyse de fichiers binaires
+ * menubar.h - prototypes pour la gestion des différents menus de la fenêtre principale
+ *
+ * Copyright (C) 2011-2018 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
+ */
+
+
+#ifndef _GUI_MENUBAR_H
+#define _GUI_MENUBAR_H
+
+
+#include "item.h"
+
+
+
+#define G_TYPE_MENU_BAR               g_menu_bar_get_type()
+#define G_MENU_BAR(obj)               (G_TYPE_CHECK_INSTANCE_CAST((obj), g_menu_bar_get_type(), GMenuBar))
+#define G_IS_MENU_BAR(obj)            (G_TYPE_CHECK_INSTANCE_TYPE((obj), g_menu_bar_get_type()))
+#define G_MENU_BAR_CLASS(klass)       (G_TYPE_CHECK_CLASS_CAST((klass), G_TYPE_MENU_BAR, GMenuBarClass))
+#define G_IS_MENU_BAR_CLASS(klass)    (G_TYPE_CHECK_CLASS_TYPE((klass), G_TYPE_MENU_BAR))
+#define G_MENU_BAR_GET_CLASS(obj)     (G_TYPE_INSTANCE_GET_CLASS((obj), G_TYPE_MENU_BAR, GMenuBarClass))
+
+
+/* Barre de menus de la fenêtre principale (instance) */
+typedef struct _GMenuBar GMenuBar;
+
+/* Barre de menus de la fenêtre principale (classe) */
+typedef struct _GMenuBarClass GMenuBarClass;
+
+
+/* Indique le type défini pour la barre de menus de la fenêtre principale. */
+GType g_menu_bar_get_type(void);
+
+/* Compose la barre de menus principale. */
+GEditorItem *g_menu_bar_new(GObject *);
+
+/* Fournit le composant GTK associé au menu "Fichier". */
+GtkWidget *g_menu_bar_get_file_menu(const GMenuBar *);
+
+/* Fournit le composant GTK associé au menu "Edition". */
+GtkWidget *g_menu_bar_get_edition_menu(const GMenuBar *);
+
+/* Fournit le composant GTK associé au menu "Affichage". */
+GtkWidget *g_menu_bar_get_view_menu(const GMenuBar *);
+
+/* Fournit le composant GTK associé au menu "Projet". */
+GtkWidget *g_menu_bar_get_project_menu(const GMenuBar *);
+
+/* Fournit le composant GTK associé au menu "Binaire". */
+GtkWidget *g_menu_bar_get_binary_menu(const GMenuBar *);
+
+/* Fournit le composant GTK associé au menu "Débogage". */
+GtkWidget *g_menu_bar_get_debug_menu(const GMenuBar *);
+
+/* Fournit le composant GTK associé au menu "Options". */
+GtkWidget *g_menu_bar_get_options_menu(const GMenuBar *);
+
+/* Fournit le composant GTK associé au menu "Aide". */
+GtkWidget *g_menu_bar_get_help_menu(const GMenuBar *);
+
+
+
+#endif  /* _GUI_MENUBAR_H */
diff --git a/src/gui/menus/Makefile.am b/src/gui/menus/Makefile.am
index 49214e1..4218374 100644
--- a/src/gui/menus/Makefile.am
+++ b/src/gui/menus/Makefile.am
@@ -7,7 +7,6 @@ libguimenus_la_SOURCES =				\
 	edition.h edition.c					\
 	file.h file.c						\
 	help.h help.c						\
-	menubar.h menubar.c					\
 	options.h options.c					\
 	plugins.h plugins.c					\
 	project.h project.c					\
diff --git a/src/gui/menus/binary.h b/src/gui/menus/binary.h
index ed98b7c..056b918 100644
--- a/src/gui/menus/binary.h
+++ b/src/gui/menus/binary.h
@@ -29,7 +29,7 @@
 #include <gtk/gtk.h>
 
 
-#include "menubar.h"
+#include "../menubar.h"
 #include "../../analysis/loaded.h"
 
 
diff --git a/src/gui/menus/edition.h b/src/gui/menus/edition.h
index 9dd8c27..909d5ec 100644
--- a/src/gui/menus/edition.h
+++ b/src/gui/menus/edition.h
@@ -29,7 +29,7 @@
 #include <gtk/gtk.h>
 
 
-#include "menubar.h"
+#include "../menubar.h"
 #include "../../glibext/gloadedpanel.h"
 
 
diff --git a/src/gui/menus/menubar.c b/src/gui/menus/menubar.c
deleted file mode 100644
index 44761b9..0000000
--- a/src/gui/menus/menubar.c
+++ /dev/null
@@ -1,419 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * menubar.c - gestion des différents menus de la fenêtre principale
- *
- * Copyright (C) 2011-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 this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-
-#include "menubar.h"
-
-
-#include <string.h>
-
-
-#include "binary.h"
-#include "debug.h"
-#include "edition.h"
-#include "file.h"
-#include "help.h"
-#include "options.h"
-#include "plugins.h"
-#include "project.h"
-#include "view.h"
-#include "../item-int.h"
-#include "../core/global.h"
-
-
-
-/* Barre de menus de la fenêtre principale (instance) */
-struct _GMenuBar
-{
-    GEditorItem parent;                     /* A laisser en premier        */
-
-    GtkWidget *support;                     /* Composant principal         */
-
-    GtkWidget *file;                        /* Menu "Fichier"              */
-    GtkWidget *edition;                     /* Menu "Edition"              */
-    GtkWidget *view;                        /* Menu "Affichage"            */
-    GtkWidget *project;                     /* Menu "Projet"               */
-    GtkWidget *binary;                      /* Menu "Binaire"              */
-    GtkWidget *debug;                       /* Menu "Débogage"             */
-    GtkWidget *options;                     /* Menu "Options"              */
-    GtkWidget *plugins;                     /* Menu "Greffons"             */
-    GtkWidget *help;                        /* Menu "Aide"                 */
-
-};
-
-
-/* Barre de menus de la fenêtre principale (classe) */
-struct _GMenuBarClass
-{
-    GEditorItemClass parent;                /* A laisser en premier        */
-
-};
-
-
-/* Initialise la classe de la barre de menus de l'éditeur. */
-static void g_menu_bar_class_init(GMenuBarClass *);
-
-/* Initialise une instance de la barre de menus pour l'éditeur. */
-static void g_menu_bar_init(GMenuBar *);
-
-/* Supprime toutes les références externes. */
-static void g_menu_bar_dispose(GMenuBar *);
-
-/* Procède à la libération totale de la mémoire. */
-static void g_menu_bar_finalize(GMenuBar *);
-
-/* Fournit le nom humain attribué à l'élément réactif. */
-static char *g_menu_bar_get_key(const GMenuBar *);
-
-/* Fournit le composant GTK associé à l'élément réactif. */
-static GtkWidget *g_menu_bar_get_widget(const GMenuBar *);
-
-/* Réagit à un changement d'affichage principal de contenu. */
-static void change_menubar_current_content(GMenuBar *, GLoadedContent *, GLoadedContent *);
-
-/*  Lance une actualisation du fait d'un changement de support. */
-static void change_menubar_current_view(GMenuBar *, GLoadedPanel *, GLoadedPanel *);
-
-/* Met à jour les accès aux menus en fonction de la position. */
-static void track_caret_address_for_menu_bar(GMenuBar *, GLoadedPanel *, const GLineCursor *);
-
-/* Lance une actualisation relative à l'étendue du projet. */
-static void update_menu_bar_for_project(GMenuBar *, GStudyProject *);
-
-
-
-/* Indique le type défini pour la barre de menus de la fenêtre principale. */
-G_DEFINE_TYPE(GMenuBar, g_menu_bar, G_TYPE_EDITOR_ITEM);
-
-
-/******************************************************************************
-*                                                                             *
-*  Paramètres  : klass = classe à initialiser.                                *
-*                                                                             *
-*  Description : Initialise la classe de la barre de menus de l'éditeur.      *
-*                                                                             *
-*  Retour      : -                                                            *
-*                                                                             *
-*  Remarques   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-static void g_menu_bar_class_init(GMenuBarClass *klass)
-{
-    GObjectClass *object;                   /* Autre version de la classe  */
-    GEditorItemClass *item;               /* Encore une autre vision...  */
-
-    object = G_OBJECT_CLASS(klass);
-
-    object->dispose = (GObjectFinalizeFunc/* ! */)g_menu_bar_dispose;
-    object->finalize = (GObjectFinalizeFunc)g_menu_bar_finalize;
-
-    item = G_EDITOR_ITEM_CLASS(klass);
-
-    item->get_key = (get_item_key_fc)g_menu_bar_get_key;
-    item->get_widget = (get_item_widget_fc)g_menu_bar_get_widget;
-
-    item->change_content = (change_item_content_fc)change_menubar_current_content;
-    item->change_view = (change_item_view_fc)change_menubar_current_view;
-    item->track_cursor = (track_cursor_in_view_fc)track_caret_address_for_menu_bar;
-    item->update_project = (update_project_fc)update_menu_bar_for_project;
-
-}
-
-
-/******************************************************************************
-*                                                                             *
-*  Paramètres  : bar = instance à initialiser.                                *
-*                                                                             *
-*  Description : Initialise une instance de la barre de menus pour l'éditeur. *
-*                                                                             *
-*  Retour      : -                                                            *
-*                                                                             *
-*  Remarques   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-static void g_menu_bar_init(GMenuBar *bar)
-{
-    bar->support = gtk_menu_bar_new();
-    gtk_widget_show(bar->support);
-
-}
-
-
-/******************************************************************************
-*                                                                             *
-*  Paramètres  : bar = instance d'objet GLib à traiter.                       *
-*                                                                             *
-*  Description : Supprime toutes les références externes.                     *
-*                                                                             *
-*  Retour      : -                                                            *
-*                                                                             *
-*  Remarques   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-static void g_menu_bar_dispose(GMenuBar *bar)
-{
-    G_OBJECT_CLASS(g_menu_bar_parent_class)->dispose(G_OBJECT(bar));
-
-}
-
-
-/******************************************************************************
-*                                                                             *
-*  Paramètres  : bar = instance d'objet GLib à traiter.                       *
-*                                                                             *
-*  Description : Procède à la libération totale de la mémoire.                *
-*                                                                             *
-*  Retour      : -                                                            *
-*                                                                             *
-*  Remarques   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-static void g_menu_bar_finalize(GMenuBar *bar)
-{
-    G_OBJECT_CLASS(g_menu_bar_parent_class)->finalize(G_OBJECT(bar));
-
-}
-
-
-/******************************************************************************
-*                                                                             *
-*  Paramètres  : ref = espace de référencement global.                        *
-*                                                                             *
-*  Description : Compose la barre de menus principale.                        *
-*                                                                             *
-*  Retour      : Adresse de la structure mise en place.                       *
-*                                                                             *
-*  Remarques   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-GEditorItem *g_menu_bar_new(GObject *ref)
-{
-    GMenuBar *result;                       /* Structure à retourner       */
-
-    result = g_object_new(G_TYPE_MENU_BAR, NULL);
-
-    /* Fichier */
-
-    result->file = build_menu_file();
-    gtk_container_add(GTK_CONTAINER(result->support), result->file);
-
-    /* Edition */
-
-    result->edition = build_menu_edition(ref, result);
-    gtk_container_add(GTK_CONTAINER(result->support), result->edition);
-
-    /* Affichage */
-
-    result->view = build_menu_view(ref, result);
-    gtk_container_add(GTK_CONTAINER(result->support), result->view);
-
-    /* Projet */
-
-    result->project = build_menu_project(ref, result);
-    gtk_container_add(GTK_CONTAINER(result->support), result->project);
-
-    /* Binaire */
-
-    result->binary = build_menu_binary(ref, result);
-    gtk_container_add(GTK_CONTAINER(result->support), result->binary);
-
-    /* Débogage */
-
-    result->debug = build_menu_debug(ref);
-    gtk_container_add(GTK_CONTAINER(result->support), result->debug);
-
-    /* Options */
-
-    result->options = build_menu_options(ref, result);
-    gtk_container_add(GTK_CONTAINER(result->support), result->options);
-
-    /* Greffons */
-
-    result->plugins = build_menu_plugins(ref);
-    gtk_container_add(GTK_CONTAINER(result->support), result->plugins);
-
-    /* Aide */
-
-    result->help = build_menu_help();
-    gtk_container_add(GTK_CONTAINER(result->support), result->help);
-
-    return G_EDITOR_ITEM(result);
-
-}
-
-
-/******************************************************************************
-*                                                                             *
-*  Paramètres  : bar = instance à consulter.                                  *
-*                                                                             *
-*  Description : Fournit le nom humain attribué à l'élément réactif.          *
-*                                                                             *
-*  Retour      : Désignation (courte) de l'élément de l'éditeur.              *
-*                                                                             *
-*  Remarques   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-static char *g_menu_bar_get_key(const GMenuBar *bar)
-{
-    char *result;                           /* Description à renvoyer      */
-
-    result = strdup("menus");
-
-    return result;
-
-}
-
-
-/******************************************************************************
-*                                                                             *
-*  Paramètres  : bar = instance à consulter.                                  *
-*                                                                             *
-*  Description : Fournit le composant GTK associé à l'élément réactif.        *
-*                                                                             *
-*  Retour      : Instance de composant graphique chargé.                      *
-*                                                                             *
-*  Remarques   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-static GtkWidget *g_menu_bar_get_widget(const GMenuBar *bar)
-{
-    GtkWidget *result;                      /* Composant à retourner       */
-
-    result = bar->support;
-
-    if (result != NULL)
-        g_object_ref(G_OBJECT(result));
-
-    return result;
-
-}
-
-
-/******************************************************************************
-*                                                                             *
-*  Paramètres  : bar = barre de menus à mettre à jour.                        *
-*                old = ancien contenu chargé analysé.                         *
-*                new = nouveau contenu chargé à analyser.                     *
-*                                                                             *
-*  Description : Réagit à un changement d'affichage principal de contenu.     *
-*                                                                             *
-*  Retour      : -                                                            *
-*                                                                             *
-*  Remarques   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-static void change_menubar_current_content(GMenuBar *bar, GLoadedContent *old, GLoadedContent *new)
-{
-    GObject *ref;                           /* Espace de référencements    */
-
-    ref = get_global_ref();
-
-    rebuild_menu_view_for_content(bar->view, ref, new);
-
-    update_access_for_content_in_menu_binary(ref, new);
-
-}
-
-
-/******************************************************************************
-*                                                                             *
-*  Paramètres  : bar = barre de menus à mettre à jour.                        *
-*                old = ancienne vue du contenu chargé analysé.                *
-*                new = nouvelle vue du contenu chargé analysé.                *
-*                                                                             *
-*  Description : Lance une actualisation du fait d'un changement de support.  *
-*                                                                             *
-*  Retour      : -                                                            *
-*                                                                             *
-*  Remarques   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-static void change_menubar_current_view(GMenuBar *bar, GLoadedPanel *old, GLoadedPanel *new)
-{
-    GObject *ref;                           /* Espace de référencements    */
-
-    ref = get_global_ref();
-
-    update_access_for_view_in_menu_edition(ref, new);
-
-    rebuild_menu_view_for_view(bar->view, ref, new);
-
-    update_access_for_view_in_menu_view(ref, new);
-
-    update_access_for_view_in_menu_binary(ref, new);
-
-}
-
-
-/******************************************************************************
-*                                                                             *
-*  Paramètres  : bar   = barre de menus à actualiser.                         *
-*                panel  = composant d'affichage parcouru.                     *
-*                cursor = nouvel emplacement du curseur courant.              *
-*                                                                             *
-*  Description : Met à jour les accès aux menus en fonction de la position.   *
-*                                                                             *
-*  Retour      : -                                                            *
-*                                                                             *
-*  Remarques   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-static void track_caret_address_for_menu_bar(GMenuBar *bar, GLoadedPanel *panel, const GLineCursor *cursor)
-{
-    GObject *ref;                           /* Espace de référencements    */
-
-    ref = get_global_ref();
-
-    update_access_for_cursor_in_menu_edition(ref, panel, cursor);
-
-}
-
-
-/******************************************************************************
-*                                                                             *
-*  Paramètres  : bar     = barre de menus à actualiser.                       *
-*                project = projet visé par la procédure.                      *
-*                                                                             *
-*  Description : Lance une actualisation relative à l'étendue du projet.      *
-*                                                                             *
-*  Retour      : -                                                            *
-*                                                                             *
-*  Remarques   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-static void update_menu_bar_for_project(GMenuBar *bar, GStudyProject *project)
-{
-    update_menu_project_for_project(bar->project, project, bar);
-
-}
diff --git a/src/gui/menus/menubar.h b/src/gui/menus/menubar.h
deleted file mode 100644
index 5b77dc6..0000000
--- a/src/gui/menus/menubar.h
+++ /dev/null
@@ -1,56 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * menubar.h - prototypes pour la gestion des différents menus de la fenêtre principale
- *
- * Copyright (C) 2011-2018 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
- */
-
-
-#ifndef _GUI_MENUS_MENUBAR_H
-#define _GUI_MENUS_MENUBAR_H
-
-
-#include "../item.h"
-
-
-
-#define G_TYPE_MENU_BAR               g_menu_bar_get_type()
-#define G_MENU_BAR(obj)               (G_TYPE_CHECK_INSTANCE_CAST((obj), g_menu_bar_get_type(), GMenuBar))
-#define G_IS_MENU_BAR(obj)            (G_TYPE_CHECK_INSTANCE_TYPE((obj), g_menu_bar_get_type()))
-#define G_MENU_BAR_CLASS(klass)       (G_TYPE_CHECK_CLASS_CAST((klass), G_TYPE_MENU_BAR, GMenuBarClass))
-#define G_IS_MENU_BAR_CLASS(klass)    (G_TYPE_CHECK_CLASS_TYPE((klass), G_TYPE_MENU_BAR))
-#define G_MENU_BAR_GET_CLASS(obj)     (G_TYPE_INSTANCE_GET_CLASS((obj), G_TYPE_MENU_BAR, GMenuBarClass))
-
-
-/* Barre de menus de la fenêtre principale (instance) */
-typedef struct _GMenuBar GMenuBar;
-
-/* Barre de menus de la fenêtre principale (classe) */
-typedef struct _GMenuBarClass GMenuBarClass;
-
-
-/* Indique le type défini pour la barre de menus de la fenêtre principale. */
-GType g_menu_bar_get_type(void);
-
-/* Compose la barre de menus principale. */
-GEditorItem *g_menu_bar_new(GObject *);
-
-
-
-#endif  /* _GUI_MENUS_MENUBAR_H */
diff --git a/src/gui/menus/options.h b/src/gui/menus/options.h
index f73d659..7176a09 100644
--- a/src/gui/menus/options.h
+++ b/src/gui/menus/options.h
@@ -29,7 +29,7 @@
 #include <gtk/gtk.h>
 
 
-#include "menubar.h"
+#include "../menubar.h"
 
 
 
diff --git a/src/gui/menus/project.h b/src/gui/menus/project.h
index 5257694..6fddf74 100644
--- a/src/gui/menus/project.h
+++ b/src/gui/menus/project.h
@@ -29,7 +29,7 @@
 #include <gtk/gtk.h>
 
 
-#include "menubar.h"
+#include "../menubar.h"
 #include "../../analysis/project.h"
 
 
diff --git a/src/gui/menus/view.h b/src/gui/menus/view.h
index f230b85..3d4b69f 100644
--- a/src/gui/menus/view.h
+++ b/src/gui/menus/view.h
@@ -29,7 +29,7 @@
 #include <gtk/gtk.h>
 
 
-#include "menubar.h"
+#include "../menubar.h"
 #include "../../glibext/gloadedpanel.h"
 
 
-- 
cgit v0.11.2-87-g4458