From ef90ffc686eb0dc1aa1567c6ceaff3843970a597 Mon Sep 17 00:00:00 2001 From: Cyrille Bagard 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