From 7560e598bf1136b4e7989124fe2b4665508b67b3 Mon Sep 17 00:00:00 2001 From: Cyrille Bagard Date: Mon, 28 Jan 2019 23:36:19 +0100 Subject: Included interfaces into the Python module gathering all features. --- plugins/pychrysalide/analysis/content.c | 5 ++++- plugins/pychrysalide/analysis/loaded.c | 5 ++++- plugins/pychrysalide/arch/feeder.c | 5 ++++- plugins/pychrysalide/arch/targetableop.c | 5 ++++- plugins/pychrysalide/glibext/linegen.c | 4 +++- plugins/pychrysalide/glibext/loadedpanel.c | 4 +++- plugins/pychrysalide/gtkext/dockable.c | 5 ++++- plugins/pychrysalide/helpers.c | 36 ++++++++++++++++++++++++++++++ plugins/pychrysalide/helpers.h | 3 +++ 9 files changed, 65 insertions(+), 7 deletions(-) diff --git a/plugins/pychrysalide/analysis/content.c b/plugins/pychrysalide/analysis/content.c index fab7dfe..f332167 100644 --- a/plugins/pychrysalide/analysis/content.c +++ b/plugins/pychrysalide/analysis/content.c @@ -37,6 +37,7 @@ #include "../access.h" +#include "../helpers.h" #include "../arch/vmpa.h" @@ -620,7 +621,9 @@ bool ensure_python_binary_content_is_registered(void) module = get_access_to_python_module("pychrysalide.analysis"); dict = PyModule_GetDict(module); - pyg_register_interface(dict, "BinContent", G_TYPE_BIN_CONTENT, type); + + if (!register_interface_for_pygobject(dict, G_TYPE_BIN_CONTENT, type)) + return false; } diff --git a/plugins/pychrysalide/analysis/loaded.c b/plugins/pychrysalide/analysis/loaded.c index dd236ed..9c30261 100644 --- a/plugins/pychrysalide/analysis/loaded.c +++ b/plugins/pychrysalide/analysis/loaded.c @@ -37,6 +37,7 @@ #include "../access.h" +#include "../helpers.h" @@ -321,7 +322,9 @@ bool ensure_python_loaded_content_is_registered(void) module = get_access_to_python_module("pychrysalide.analysis"); dict = PyModule_GetDict(module); - pyg_register_interface(dict, "LoadedContent", G_TYPE_LOADED_CONTENT, type); + + if (!register_interface_for_pygobject(dict, G_TYPE_LOADED_CONTENT, type)) + return false; } diff --git a/plugins/pychrysalide/arch/feeder.c b/plugins/pychrysalide/arch/feeder.c index b50124d..1dd9373 100644 --- a/plugins/pychrysalide/arch/feeder.c +++ b/plugins/pychrysalide/arch/feeder.c @@ -33,6 +33,7 @@ #include "../access.h" +#include "../helpers.h" @@ -104,7 +105,9 @@ bool ensure_python_proxy_feeder_is_registered(void) module = get_access_to_python_module("pychrysalide.arch"); dict = PyModule_GetDict(module); - pyg_register_interface(dict, "ProxyFeeder", G_TYPE_PROXY_FEEDER, type); + + if (!register_interface_for_pygobject(dict, G_TYPE_PROXY_FEEDER, type)) + return false; } diff --git a/plugins/pychrysalide/arch/targetableop.c b/plugins/pychrysalide/arch/targetableop.c index 0fb23e0..52d00e0 100644 --- a/plugins/pychrysalide/arch/targetableop.c +++ b/plugins/pychrysalide/arch/targetableop.c @@ -38,6 +38,7 @@ #include "processor.h" #include "vmpa.h" #include "../access.h" +#include "../helpers.h" #include "../format/format.h" @@ -177,7 +178,9 @@ bool ensure_python_targetable_operand_is_registered(void) module = get_access_to_python_module("pychrysalide.arch"); dict = PyModule_GetDict(module); - pyg_register_interface(dict, "TargetableOperand", G_TYPE_TARGETABLE_OPERAND, type); + + if (!register_interface_for_pygobject(dict, G_TYPE_TARGETABLE_OPERAND, type)) + return false; } diff --git a/plugins/pychrysalide/glibext/linegen.c b/plugins/pychrysalide/glibext/linegen.c index 7b93f7e..c9ad013 100644 --- a/plugins/pychrysalide/glibext/linegen.c +++ b/plugins/pychrysalide/glibext/linegen.c @@ -407,7 +407,9 @@ bool ensure_python_line_generator_is_registered(void) module = get_access_to_python_module("pychrysalide.glibext"); dict = PyModule_GetDict(module); - pyg_register_interface(dict, "LineGenerator", G_TYPE_LINE_GENERATOR, type); + + if (!register_interface_for_pygobject(dict, G_TYPE_LINE_GENERATOR, type)) + return false; } diff --git a/plugins/pychrysalide/glibext/loadedpanel.c b/plugins/pychrysalide/glibext/loadedpanel.c index 949ed1c..d9364c5 100644 --- a/plugins/pychrysalide/glibext/loadedpanel.c +++ b/plugins/pychrysalide/glibext/loadedpanel.c @@ -186,7 +186,9 @@ bool ensure_python_loaded_panel_is_registered(void) module = get_access_to_python_module("pychrysalide.glibext"); dict = PyModule_GetDict(module); - pyg_register_interface(dict, "LoadedPanel", G_TYPE_LOADED_PANEL, type); + + if (!register_interface_for_pygobject(dict, G_TYPE_LOADED_PANEL, type)) + return false; if (!py_loaded_panel_define_constants(type)) return false; diff --git a/plugins/pychrysalide/gtkext/dockable.c b/plugins/pychrysalide/gtkext/dockable.c index f67e0fa..7e5cb81 100644 --- a/plugins/pychrysalide/gtkext/dockable.c +++ b/plugins/pychrysalide/gtkext/dockable.c @@ -32,6 +32,7 @@ #include "../access.h" +#include "../helpers.h" @@ -103,7 +104,9 @@ bool ensure_python_gtk_dockable_is_registered(void) module = get_access_to_python_module("pychrysalide.gtkext"); dict = PyModule_GetDict(module); - pyg_register_interface(dict, "LineGenerator", GTK_TYPE_DOCKABLE, type); + + if (!register_interface_for_pygobject(dict, GTK_TYPE_DOCKABLE, type)) + return false; } diff --git a/plugins/pychrysalide/helpers.c b/plugins/pychrysalide/helpers.c index 2b62e57..d4c56e8 100644 --- a/plugins/pychrysalide/helpers.c +++ b/plugins/pychrysalide/helpers.c @@ -780,6 +780,42 @@ bool _register_class_for_pygobject(PyObject *dict, GType gtype, PyTypeObject *ty * Paramètres : dict = dictionnaire où conserver une référence au type créé.* * gtype = type dans sa version GLib. * * type = type dans sa version Python. * +* * +* Description : Enregistre correctement une interface GObject pour Python. * +* * +* Retour : Bilan de l'opération. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool register_interface_for_pygobject(PyObject *dict, GType gtype, PyTypeObject *type) +{ + bool result; /* Bilan à retourner */ + char *name; /* Désignation de la classe */ + + name = strrchr(type->tp_name, '.'); + assert(name != NULL); + + name++; + + pyg_register_interface(dict, name, gtype, type); + + if (startswith(type->tp_name, "pychrysalide.")) + result = include_python_type_into_features(dict, type); + else + result = true; + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : dict = dictionnaire où conserver une référence au type créé.* +* gtype = type dans sa version GLib. * +* type = type dans sa version Python. * * base = type de base de l'objet. * * * * Description : Enregistre un type Python dérivant d'un type GLib dynamique. * diff --git a/plugins/pychrysalide/helpers.h b/plugins/pychrysalide/helpers.h index f7ebdc3..ffbfe30 100644 --- a/plugins/pychrysalide/helpers.h +++ b/plugins/pychrysalide/helpers.h @@ -104,6 +104,9 @@ bool _register_class_for_pygobject(PyObject *, GType, PyTypeObject *, PyTypeObje #define register_class_for_pygobject(dict, gtype, type, base) \ _register_class_for_pygobject(dict, gtype, type, base, NULL) +/* Enregistre correctement une interface GObject pour Python. */ +bool register_interface_for_pygobject(PyObject *, GType, PyTypeObject *); + /* Enregistre un type Python dérivant d'un type GLib dynamique. */ bool register_class_for_dynamic_pygobject(GType, PyTypeObject *, PyTypeObject *); -- cgit v0.11.2-87-g4458