From ef90ffc686eb0dc1aa1567c6ceaff3843970a597 Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Sat, 15 Feb 2020 14:27:35 +0100
Subject: Chosen the default view displayed after a binary loading.

---
 plugins/pychrysalide/analysis/loaded.c | 47 ++++++++++++++++++++++++++++++++++
 src/analysis/binary.c                  | 28 ++++++++++++++++++++
 src/analysis/loaded-int.h              |  4 +++
 src/analysis/loaded.c                  | 26 +++++++++++++++++++
 src/analysis/loaded.h                  |  3 +++
 src/gui/editor.c                       |  2 +-
 6 files changed, 109 insertions(+), 1 deletion(-)

diff --git a/plugins/pychrysalide/analysis/loaded.c b/plugins/pychrysalide/analysis/loaded.c
index a5486a6..4a762ef 100644
--- a/plugins/pychrysalide/analysis/loaded.c
+++ b/plugins/pychrysalide/analysis/loaded.c
@@ -54,6 +54,9 @@ static PyObject *py_loaded_content_detect_obfuscators(PyObject *, PyObject *);
 /* Détermine le nombre de vues disponibles pour un contenu. */
 static PyObject *py_loaded_content_count_views(PyObject *, PyObject *);
 
+/* Met en place la vue initiale pour un contenu chargé. */
+static PyObject *py_loaded_content_build_default_view(PyObject *, PyObject *);
+
 /* Fournit le contenu représenté de l'élément chargé. */
 static PyObject *py_loaded_content_get_content(PyObject *, void *);
 
@@ -264,6 +267,49 @@ static PyObject *py_loaded_content_count_views(PyObject *self, PyObject *args)
 
 /******************************************************************************
 *                                                                             *
+*  Paramètres  : self = contenu chargé à manipuler.                           *
+*                args = non utilisé ici.                                      *
+*                                                                             *
+*  Description : Met en place la vue initiale pour un contenu chargé.         *
+*                                                                             *
+*  Retour      : Composant graphique nouveau.                                 *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static PyObject *py_loaded_content_build_default_view(PyObject *self, PyObject *args)
+{
+    PyObject *result;                       /* Instance à retourner        */
+    GLoadedContent *content;                /* Version GLib de l'élément   */
+    GtkWidget *view;                        /* Composant GTK à transposer  */
+
+#define LOADED_CONTENT_BUILD_DEFAULT_VIEW_METHOD PYTHON_METHOD_DEF              \
+(                                                                               \
+    build_default_view, "$self",                                                \
+    METH_NOARGS, py_loaded_content,                                             \
+    "Build a new widget for the default graphical view of the loaded content."  \
+    "\n"                                                                        \
+    "This method is aimed to only be called from the GUI internals."            \
+    " It provides the first view displayed in the main Chrysalide window"       \
+    " after a binary loading."                                                  \
+)
+
+    content = G_LOADED_CONTENT(pygobject_get(self));
+
+    view = g_loaded_content_build_default_view(content);
+
+    result = new_pygobject_widget(view);
+
+    g_object_unref(G_OBJECT(view));
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
 *  Paramètres  : self    = objet Python concerné par l'appel.                 *
 *                closure = non utilisé ici.                                   *
 *                                                                             *
@@ -327,6 +373,7 @@ PyTypeObject *get_python_loaded_content_type(void)
             METH_NOARGS,
             "count_views($self, /)\n--\n\nCompute the quantity of available views."
         },
+        LOADED_CONTENT_BUILD_DEFAULT_VIEW_METHOD,
         { NULL }
     };
 
diff --git a/src/analysis/binary.c b/src/analysis/binary.c
index b3d6bba..e875679 100644
--- a/src/analysis/binary.c
+++ b/src/analysis/binary.c
@@ -183,6 +183,9 @@ static unsigned int g_loaded_binary_count_views(const GLoadedBinary *);
 /* Fournit le nom d'une vue donnée d'un contenu chargé. */
 static const char *g_loaded_binary_get_view_name(const GLoadedBinary *, unsigned int);
 
+/* Met en place la vue initiale pour un contenu binaire. */
+static GtkWidget *g_loaded_binary_build_default_view(GLoadedBinary *);
+
 /* Met en place la vue demandée pour un contenu binaire. */
 static GtkWidget *g_loaded_binary_build_view(GLoadedBinary *, unsigned int);
 
@@ -303,6 +306,7 @@ static void g_loaded_binary_interface_init(GLoadedContentInterface *iface)
 
     iface->count_views = (count_loaded_views_fc)g_loaded_binary_count_views;
     iface->get_view_name = (get_loaded_view_name_fc)g_loaded_binary_get_view_name;
+    iface->build_def_view = (build_loaded_def_view_fc)g_loaded_binary_build_default_view;
     iface->build_view = (build_loaded_view_fc)g_loaded_binary_build_view;
     iface->get_view_index = (get_loaded_view_index_fc)g_loaded_binary_get_view_index;
 
@@ -1918,6 +1922,30 @@ static const char *g_loaded_binary_get_view_name(const GLoadedBinary *binary, un
 *  Paramètres  : binary = contenu chargé à consulter.                         *
 *                index  = indice de la vue ciblée.                            *
 *                                                                             *
+*  Description : Met en place la vue initiale pour un contenu binaire.        *
+*                                                                             *
+*  Retour      : Composant graphique nouveau.                                 *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static GtkWidget *g_loaded_binary_build_default_view(GLoadedBinary *binary)
+{
+    GtkWidget *result;                      /* Support à retourner         */
+
+    result = g_loaded_binary_build_view(binary, BVW_BLOCK);
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : binary = contenu chargé à consulter.                         *
+*                index  = indice de la vue ciblée.                            *
+*                                                                             *
 *  Description : Met en place la vue demandée pour un contenu binaire.        *
 *                                                                             *
 *  Retour      : Composant graphique nouveau.                                 *
diff --git a/src/analysis/loaded-int.h b/src/analysis/loaded-int.h
index 6584822..0aacc3f 100644
--- a/src/analysis/loaded-int.h
+++ b/src/analysis/loaded-int.h
@@ -54,6 +54,9 @@ typedef unsigned int (* count_loaded_views_fc) (const GLoadedContent *);
 /* Fournit le nom d'une vue donnée d'un contenu chargé. */
 typedef const char * (* get_loaded_view_name_fc) (const GLoadedContent *, unsigned int);
 
+/* Met en place la vue initiale pour un contenu chargé. */
+typedef GtkWidget * (* build_loaded_def_view_fc) (GLoadedContent *);
+
 /* Met en place la vue demandée pour un contenu chargé. */
 typedef GtkWidget * (* build_loaded_view_fc) (GLoadedContent *, unsigned int);
 
@@ -83,6 +86,7 @@ struct _GLoadedContentIface
 
     count_loaded_views_fc count_views;      /* Compteur de vues            */
     get_loaded_view_name_fc get_view_name;  /* Désignation d'une vue donnée*/
+    build_loaded_def_view_fc build_def_view;/* Mise en place initiale      */
     build_loaded_view_fc build_view;        /* Mise en place de vues       */
     get_loaded_view_index_fc get_view_index;/* Récupération d'indice de vue*/
 
diff --git a/src/analysis/loaded.c b/src/analysis/loaded.c
index 2f8f3fb..79a311f 100644
--- a/src/analysis/loaded.c
+++ b/src/analysis/loaded.c
@@ -465,6 +465,32 @@ const char *g_loaded_content_get_view_name(const GLoadedContent *content, unsign
 /******************************************************************************
 *                                                                             *
 *  Paramètres  : content = contenu chargé à consulter.                        *
+*                                                                             *
+*  Description : Met en place la vue initiale pour un contenu chargé.         *
+*                                                                             *
+*  Retour      : Composant graphique nouveau.                                 *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+GtkWidget *g_loaded_content_build_default_view(GLoadedContent *content)
+{
+    GtkWidget *result;                      /* Support à retourner         */
+    GLoadedContentIface *iface;             /* Interface utilisée          */
+
+    iface = G_LOADED_CONTENT_GET_IFACE(content);
+
+    result = iface->build_def_view(content);
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : content = contenu chargé à consulter.                        *
 *                index   = indice de la vue ciblée.                           *
 *                                                                             *
 *  Description : Met en place la vue demandée pour un contenu chargé.         *
diff --git a/src/analysis/loaded.h b/src/analysis/loaded.h
index c6c22b4..9df647b 100644
--- a/src/analysis/loaded.h
+++ b/src/analysis/loaded.h
@@ -93,6 +93,9 @@ unsigned int g_loaded_content_count_views(const GLoadedContent *);
 /* Fournit le nom d'une vue donnée d'un contenu chargé. */
 const char *g_loaded_content_get_view_name(const GLoadedContent *, unsigned int);
 
+/* Met en place la vue initiale pour un contenu chargé. */
+GtkWidget *g_loaded_content_build_default_view(GLoadedContent *);
+
 /* Met en place la vue demandée pour un contenu chargé. */
 GtkWidget *g_loaded_content_build_view(GLoadedContent *, unsigned int);
 
diff --git a/src/gui/editor.c b/src/gui/editor.c
index 69eb2a6..f45acbd 100644
--- a/src/gui/editor.c
+++ b/src/gui/editor.c
@@ -927,7 +927,7 @@ static void on_editor_loaded_content_added(GStudyProject *project, GLoadedConten
     const char *lname;                      /* Description du binaire      */
     GPanelItem *panel;                      /* Nouveau panneau à integrer  */
 
-    selected = g_loaded_content_build_view(content, 0);
+    selected = g_loaded_content_build_default_view(content);
 
     name = g_loaded_content_describe(content, false);
     lname = g_loaded_content_describe(content, true);
-- 
cgit v0.11.2-87-g4458