From 8f1e49332cd81760c98166be9df79a7136f5ca57 Mon Sep 17 00:00:00 2001 From: Cyrille Bagard Date: Tue, 6 Jan 2009 21:45:56 +0000 Subject: Reorganized the code. git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@45 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a --- ChangeLog | 21 +++++ src/Makefile.am | 2 +- src/easygtk.c | 39 ++++++++++ src/easygtk.h | 3 + src/editor.c | 136 ++++++++++++++++++++++++++------ src/gtkbinview.c | 227 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/gtkbinview.h | 69 +++++++++++++++++ src/gtkcodeview.c | 227 ------------------------------------------------------ src/gtkcodeview.h | 69 ----------------- src/pan_symbols.c | 8 +- 10 files changed, 476 insertions(+), 325 deletions(-) create mode 100644 src/gtkbinview.c create mode 100644 src/gtkbinview.h delete mode 100644 src/gtkcodeview.c delete mode 100644 src/gtkcodeview.h diff --git a/ChangeLog b/ChangeLog index ffddf03..e2d0f8a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,24 @@ +2009-01-06 Cyrille Bagard + + * src/easygtk.c: + * src/easygtk.h: + Add a function allowing to [quickly] create radio menu items. + + * src/editor.c: + Update code. + + * src/gtkbinview.c: + * src/gtkbinview.h: + * src/gtkcodeview.c: + * src/gtkcodeview.h: + New/old entries: rename gtkcodeview.[ch] into gtkbinview.[ch]. + + * src/Makefile.am: + Add gtkbinview.[ch] to openida_SOURCES and remove gtkcodeview.[ch]. + + * src/pan_symbols.c: + Update code. + 2008-12-23 Cyrille Bagard * src/arch/x86/instruction.h: diff --git a/src/Makefile.am b/src/Makefile.am index 2dec03f..24c955a 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -6,8 +6,8 @@ openida_SOURCES = \ dlg_sections.h dlg_sections.c \ easygtk.h easygtk.c \ editor.c \ + gtkbinview.h gtkbinview.c \ gtksnippet.h gtksnippet.c \ - gtkcodeview.h gtkcodeview.c \ pan_strings.h pan_strings.c \ pan_symbols.h pan_symbols.c \ project.h project.c \ diff --git a/src/easygtk.c b/src/easygtk.c index d53b19e..04584b5 100644 --- a/src/easygtk.c +++ b/src/easygtk.c @@ -400,6 +400,45 @@ GtkWidget *qck_create_check_menu_item(GObject *object, const char *name, const c /****************************************************************************** * * +* Paramètres : object = espace dédié à l'inscription de références. * +* name = nom à donner au nouveau composant. * +* rgroup = groupe d'apparatenance pour les radios. * +* caption = intitulé du menu à créer. * +* handler = éventuelle fonction de sélection associée. * +* data = données à transmettre avec l'événement si besoin. * +* * +* Description : Crée et enregistre un composant 'GtkRadioMenuItem'. * +* * +* Retour : Simple élément de menu mis en place. * +* * +* Remarques : - * +* * +******************************************************************************/ + +GtkWidget *qck_create_radio_menu_item(GObject *object, const char *name, GSList *rgroup, const char *caption, GCallback handler, gpointer data) +{ + GtkWidget *result; /* Résultat à renvoyer */ + + result = gtk_radio_menu_item_new_with_mnemonic(rgroup, caption); + + if (G_IS_OBJECT(object) && name != NULL) + { + gtk_widget_ref(result); + g_object_set_data_full(object, name, result, (GtkDestroyNotify)gtk_widget_unref); + } + + gtk_widget_show(result); + + if (handler != NULL) + g_signal_connect(result, "toggled", handler, data); + + return result; + +} + + +/****************************************************************************** +* * * Paramètres : - * * * * Description : Crée et enregistre un composant 'GtkSeparatorMenuItem'. * diff --git a/src/easygtk.h b/src/easygtk.h index 5104588..bde6332 100644 --- a/src/easygtk.h +++ b/src/easygtk.h @@ -62,6 +62,9 @@ GtkWidget *qck_create_menu_item(GObject *, const char *, const char *, GCallback /* Crée et enregistre un composant 'GtkCheckMenuItem'. */ GtkWidget *qck_create_check_menu_item(GObject *, const char *, const char *, GCallback, gpointer); +/* Crée et enregistre un composant 'GtkRadioMenuItem'. */ +GtkWidget *qck_create_radio_menu_item(GObject *, const char *, GSList *, const char *, GCallback, gpointer); + /* Crée et enregistre un composant 'GtkSeparatorMenuItem'. */ GtkWidget *qck_create_menu_separator(void); diff --git a/src/editor.c b/src/editor.c index 60ec900..dc9f524 100644 --- a/src/editor.c +++ b/src/editor.c @@ -52,8 +52,8 @@ #include "binary.h" #include "dlg_sections.h" #include "easygtk.h" +#include "gtkbinview.h" #include "gtksnippet.h" -#include "gtkcodeview.h" #include "pan_strings.h" #include "pan_symbols.h" @@ -85,6 +85,11 @@ void mcb_file_save_project_as(GtkMenuItem *, gpointer); void mcb_open_recent_project(GtkMenuItem *, gpointer); +/* Réagit avec le menu "Affichage -> Vue textuelle". */ +void mcb_view_as_text(GtkCheckMenuItem *, gpointer); + +/* Réagit avec le menu "Affichage -> Vue graphique". */ +void mcb_view_as_graph(GtkCheckMenuItem *, gpointer); /* Réagit avec le menu "Affichage -> Adresse virtuelle". */ void mcb_view_vaddress(GtkCheckMenuItem *, gpointer); @@ -400,12 +405,14 @@ GtkWidget *create_editor(void) GtkWidget *menubar; /* Support pour éléments */ GtkWidget *submenuitem; /* Sous-élément de menu */ GtkWidget *submenubar; /* Support pour sous-éléments */ + GSList *rgroup; /* Groupe des boutons radio */ + GtkWidget *vbox1; GtkWidget *vpaned1; GtkWidget *hpaned1; GtkWidget *scrolledwindow2; - GtkWidget *textview2; + GtkWidget *snippet; GtkWidget *fixed1; GtkWidget *label1; GtkWidget *button2; @@ -434,7 +441,7 @@ GtkWidget *create_editor(void) GtkWidget *textview1; GtkWidget *statusbar1; - GtkWidget *codeview; + GtkWidget *binview; GtkWidget *panel; GtkWidget *_panel; @@ -509,6 +516,17 @@ GtkWidget *create_editor(void) menubar = gtk_menu_new(); gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), menubar); + submenuitem = qck_create_radio_menu_item(NULL, NULL, NULL, _("Text view"), G_CALLBACK(mcb_view_as_text), result); + gtk_container_add(GTK_CONTAINER(menubar), submenuitem); + + rgroup = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(submenuitem)); + + submenuitem = qck_create_radio_menu_item(NULL, NULL, rgroup, _("Graph view"), G_CALLBACK(mcb_view_as_graph), result); + gtk_container_add(GTK_CONTAINER(menubar), submenuitem); + + submenuitem = qck_create_menu_separator(); + gtk_container_add(GTK_CONTAINER(menubar), submenuitem); + submenuitem = qck_create_check_menu_item(NULL, NULL, _("Virtual address"), G_CALLBACK(mcb_view_vaddress), result); gtk_container_add(GTK_CONTAINER(menubar), submenuitem); @@ -568,22 +586,43 @@ GtkWidget *create_editor(void) gtk_paned_pack1 (GTK_PANED (hpaned1), scrolledwindow2, FALSE, TRUE); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(scrolledwindow2), GTK_SHADOW_IN); - codeview = gtk_codeview_new(); - g_object_set_data(G_OBJECT(result), "codeview", codeview); - //gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolledwindow2), codeview); - gtk_container_add(GTK_CONTAINER(scrolledwindow2), codeview); - textview2 = gtk_snippet_new(); - gtk_widget_show(codeview); - gtk_snippet_set_sel(GTK_SNIPPET(textview2), 44); + + binview = gtk_binview_new(); + g_object_set_data(G_OBJECT(result), "binview", binview); + //gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolledwindow2), binview); + //gtk_container_add(GTK_CONTAINER(scrolledwindow2), binview); + + + + snippet = gtk_snippet_new(); + gtk_widget_show(binview); + gtk_snippet_set_sel(GTK_SNIPPET(snippet), 44); /* - textview2 = gtk_text_view_new (); + snippet = gtk_text_view_new (); */ - gtk_widget_show (textview2); - /*gtk_container_add (GTK_CONTAINER (scrolledwindow2), textview2);*/ - //gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolledwindow2), textview2); + gtk_widget_show (snippet); + /*gtk_container_add (GTK_CONTAINER (scrolledwindow2), snippet);*/ + //gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolledwindow2), snippet); + + gtk_container_add(GTK_CONTAINER(binview), snippet); + + + + + + //binview = gtk_fixed_new(); + gtk_widget_show(binview); + //g_object_set_data(G_OBJECT(result), "binview", binview); + gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolledwindow2), binview); + //gtk_container_add(GTK_CONTAINER(scrolledwindow2), binview); + + + + + + - gtk_container_add(GTK_CONTAINER(codeview), textview2); fixed1 = gtk_fixed_new (); gtk_widget_show (fixed1); @@ -801,11 +840,11 @@ GtkWidget *create_editor(void) - + /* g_signal_connect ((gpointer) button1, "clicked", G_CALLBACK (on_button1_clicked), textview1); - + */ @@ -817,7 +856,7 @@ GtkWidget *create_editor(void) /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ - fill_snippet(textview2, _panel, panel); + fill_snippet(snippet, _panel, panel); @@ -956,6 +995,55 @@ void mcb_open_recent_project(GtkMenuItem *menuitem, gpointer data) +/****************************************************************************** +* * +* Paramètres : menuitem = élément de menu ayant basculé. * +* data = adresse de l'espace de référencement global. * +* * +* Description : Réagit avec le menu "Affichage -> Vue textuelle". * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void mcb_view_as_text(GtkCheckMenuItem *menuitem, gpointer data) +{ + gboolean active; /* Etat de sélection du menu */ + + active = gtk_check_menu_item_get_active(menuitem); + + printf("View as text ? %d\n", active); + + +} + + +/****************************************************************************** +* * +* Paramètres : menuitem = élément de menu ayant basculé. * +* data = adresse de l'espace de référencement global. * +* * +* Description : Réagit avec le menu "Affichage -> Vue graphique". * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void mcb_view_as_graph(GtkCheckMenuItem *menuitem, gpointer data) +{ + gboolean active; /* Etat de sélection du menu */ + + active = gtk_check_menu_item_get_active(menuitem); + + printf("View as graph ? %d\n", active); + + +} + /****************************************************************************** * * @@ -972,13 +1060,13 @@ void mcb_open_recent_project(GtkMenuItem *menuitem, gpointer data) void mcb_view_vaddress(GtkCheckMenuItem *menuitem, gpointer data) { - GtkCodeview *codeview; /* Zone de code principale */ + GtkBinview *binview; /* Zone de code principale */ gboolean active; /* Etat de sélection du menu */ - codeview = GTK_CODE_VIEW(g_object_get_data(G_OBJECT(data), "codeview")); + binview = GTK_BIN_VIEW(g_object_get_data(G_OBJECT(data), "binview")); active = gtk_check_menu_item_get_active(menuitem); - gtk_codeview_show_vaddress(codeview, active); + gtk_binview_show_vaddress(binview, active); } @@ -998,13 +1086,13 @@ void mcb_view_vaddress(GtkCheckMenuItem *menuitem, gpointer data) void mcb_view_code(GtkCheckMenuItem *menuitem, gpointer data) { - GtkCodeview *codeview; /* Zone de code principale */ + GtkBinview *binview; /* Zone de code principale */ gboolean active; /* Etat de sélection du menu */ - codeview = GTK_CODE_VIEW(g_object_get_data(G_OBJECT(data), "codeview")); + binview = GTK_BIN_VIEW(g_object_get_data(G_OBJECT(data), "binview")); active = gtk_check_menu_item_get_active(menuitem); - gtk_codeview_show_code(codeview, active); + gtk_binview_show_code(binview, active); } diff --git a/src/gtkbinview.c b/src/gtkbinview.c new file mode 100644 index 0000000..5ed6388 --- /dev/null +++ b/src/gtkbinview.c @@ -0,0 +1,227 @@ + +/* OpenIDA - Outil d'analyse de fichiers binaires + * gtkbinview.c - affichage d'un ou de plusieurs morceaux de code + * + * Copyright (C) 2008 Cyrille Bagard + * + * This file is part of OpenIDA. + * + * OpenIDA 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. + * + * OpenIDA 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 Foobar. If not, see . + */ + + +#include "gtkbinview.h" + + +#include "gtksnippet.h" + + + + + +struct _GtkBinview +{ + GtkViewport viewport; + +}; + +struct _GtkBinviewClass +{ + GtkViewportClass parent_class; + +}; + + + + +/* Détermine le type du composant d'affichage des morceaux. */ +G_DEFINE_TYPE(GtkBinview, gtk_binview, GTK_TYPE_VIEWPORT) + + + + + + +/****************************************************************************** +* * +* Paramètres : class = classe GTK à initialiser. * +* * +* Description : Procède à l'initialisation de l'afficheur de morceaux. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void gtk_binview_class_init(GtkBinviewClass *class) +{ + GtkWidgetClass *widget_class; /* Classe de haut niveau */ + GtkViewportClass *viewport_class; /* Classe du niveau supérieur */ + + widget_class = GTK_WIDGET_CLASS(class); + viewport_class = GTK_VIEWPORT_CLASS(class); + +} + + +/****************************************************************************** +* * +* Paramètres : binview = composant GTK à initialiser. * +* * +* Description : Procède à l'initialisation de l'afficheur de morceaux. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void gtk_binview_init(GtkBinview *binview) +{ + + + +} + + +/****************************************************************************** +* * +* Paramètres : - * +* * +* Description : Crée un nouveau composant pour l'affichage de morceaux. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +GtkWidget* gtk_binview_new(void) +{ + return g_object_new(GTK_TYPE_BIN_VIEW, NULL); + +} + + + + + + +/****************************************************************************** +* * +* Paramètres : binview = composant GTK à manipuler. * +* show = état de l'affichage auquel parvenir. * +* * +* Description : Choisit d'afficher les adresses virtuelles ou non. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void gtk_binview_show_vaddress(GtkBinview *binview, gboolean show) +{ + GList *list; /* Ensemble des enfants */ + GList *iter; /* Boucle de parcours */ + + list = gtk_container_get_children(GTK_CONTAINER(binview)); + + for (iter = g_list_first(list); iter != NULL; iter = g_list_next(iter)) + gtk_snippet_show_vaddress(GTK_SNIPPET(iter->data), show); + + g_list_free(list); + +} + + +/****************************************************************************** +* * +* Paramètres : binview = composant GTK à manipuler. * +* show = état de l'affichage auquel parvenir. * +* * +* Description : Choisit d'afficher le code brut ou non. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void gtk_binview_show_code(GtkBinview *binview, gboolean show) +{ + GList *list; /* Ensemble des enfants */ + GList *iter; /* Boucle de parcours */ + + list = gtk_container_get_children(GTK_CONTAINER(binview)); + + for (iter = g_list_first(list); iter != NULL; iter = g_list_next(iter)) + gtk_snippet_show_code(GTK_SNIPPET(iter->data), show); + + g_list_free(list); + +} + + + + + + + +/****************************************************************************** +* * +* Paramètres : binview = composant GTK à manipuler. * +* address = adresse à présenter à l'écran. * +* * +* Description : S'assure qu'une adresse donnée est visible à l'écran. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void gtk_binview_scroll_to_address(GtkBinview *binview, uint64_t address) +{ + GList *list; /* Ensemble des enfants */ + GList *iter; /* Boucle de parcours */ + GtkSnippet *snippet; /* Morceau de code présent */ + gint position; /* Position à garantir */ + GtkAdjustment *vadj; /* Défilement à mettre à jour */ + + list = gtk_container_get_children(GTK_CONTAINER(binview)); + + for (iter = g_list_first(list); iter != NULL; iter = g_list_next(iter)) + { + snippet = GTK_SNIPPET(iter->data); + + if (gtk_snippet_get_address_vposition(snippet, address, &position)) + { + vadj = GTK_VIEWPORT(binview)->vadjustment; + + gtk_adjustment_set_value(vadj, position); + + break; + + } + + } + + g_list_free(list); + +} + + + diff --git a/src/gtkbinview.h b/src/gtkbinview.h new file mode 100644 index 0000000..4fafad1 --- /dev/null +++ b/src/gtkbinview.h @@ -0,0 +1,69 @@ + +/* OpenIDA - Outil d'analyse de fichiers binaires + * gtkbinview.h - prototypes pour l'affichage d'un ou de plusieurs morceaux de code + * + * Copyright (C) 2008 Cyrille Bagard + * + * This file is part of OpenIDA. + * + * OpenIDA 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. + * + * OpenIDA 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 Foobar. If not, see . + */ + + +#ifndef _GTK_BINVIEW_H +#define _GTK_BINVIEW_H + + +#include + + +#include + + + +#define GTK_TYPE_BIN_VIEW (gtk_binview_get_type()) +#define GTK_BIN_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GTK_TYPE_BIN_VIEW, GtkBinview)) +#define GTK_BIN_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GTK_TYPE_BIN_VIEW, GtkBinviewClass)) +#define GTK_IS_BIN_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GTK_TYPE_BIN_VIEW)) +#define GTK_IS_BIN_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GTK_TYPE_BIN_VIEW)) +#define GTK_BIN_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GTK_TYPE_BIN_VIEW, GtkBinviewClass)) + + +typedef struct _GtkBinview GtkBinview; +typedef struct _GtkBinviewClass GtkBinviewClass; + + + +/* Détermine le type du composant d'affichage des morceaux. */ +GType gtk_binview_get_type(void); + +/* Crée un nouveau composant pour l'affichage de morceaux. */ +GtkWidget* gtk_binview_new(void); + + + +/* Choisit d'afficher les adresses virtuelles ou non. */ +void gtk_binview_show_vaddress(GtkBinview *, gboolean); + +/* Choisit d'afficher le code brut ou non. */ +void gtk_binview_show_code(GtkBinview *, gboolean); + + + +/* S'assure qu'une adresse donnée est visible à l'écran. */ +void gtk_binview_scroll_to_address(GtkBinview *, uint64_t); + + + +#endif /* _GTK_BINVIEW_H */ diff --git a/src/gtkcodeview.c b/src/gtkcodeview.c deleted file mode 100644 index 78d3b24..0000000 --- a/src/gtkcodeview.c +++ /dev/null @@ -1,227 +0,0 @@ - -/* OpenIDA - Outil d'analyse de fichiers binaires - * gtkcodeview.c - affichage d'un ou de plusieurs morceaux de code - * - * Copyright (C) 2008 Cyrille Bagard - * - * This file is part of OpenIDA. - * - * OpenIDA 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. - * - * OpenIDA 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 Foobar. If not, see . - */ - - -#include "gtkcodeview.h" - - -#include "gtksnippet.h" - - - - - -struct _GtkCodeview -{ - GtkViewport viewport; - -}; - -struct _GtkCodeviewClass -{ - GtkViewportClass parent_class; - -}; - - - - -/* Détermine le type du composant d'affichage des morceaux. */ -G_DEFINE_TYPE(GtkCodeview, gtk_codeview, GTK_TYPE_VIEWPORT) - - - - - - -/****************************************************************************** -* * -* Paramètres : class = classe GTK à initialiser. * -* * -* Description : Procède à l'initialisation de l'afficheur de morceaux. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void gtk_codeview_class_init(GtkCodeviewClass *class) -{ - GtkWidgetClass *widget_class; /* Classe de haut niveau */ - GtkViewportClass *viewport_class; /* Classe du niveau supérieur */ - - widget_class = GTK_WIDGET_CLASS(class); - viewport_class = GTK_VIEWPORT_CLASS(class); - -} - - -/****************************************************************************** -* * -* Paramètres : codeview = composant GTK à initialiser. * -* * -* Description : Procède à l'initialisation de l'afficheur de morceaux. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void gtk_codeview_init(GtkCodeview *codeview) -{ - - - -} - - -/****************************************************************************** -* * -* Paramètres : - * -* * -* Description : Crée un nouveau composant pour l'affichage de morceaux. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -GtkWidget* gtk_codeview_new(void) -{ - return g_object_new(GTK_TYPE_CODE_VIEW, NULL); - -} - - - - - - -/****************************************************************************** -* * -* Paramètres : codeview = composant GTK à manipuler. * -* show = état de l'affichage auquel parvenir. * -* * -* Description : Choisit d'afficher les adresses virtuelles ou non. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -void gtk_codeview_show_vaddress(GtkCodeview *codeview, gboolean show) -{ - GList *list; /* Ensemble des enfants */ - GList *iter; /* Boucle de parcours */ - - list = gtk_container_get_children(GTK_CONTAINER(codeview)); - - for (iter = g_list_first(list); iter != NULL; iter = g_list_next(iter)) - gtk_snippet_show_vaddress(GTK_SNIPPET(iter->data), show); - - g_list_free(list); - -} - - -/****************************************************************************** -* * -* Paramètres : codeview = composant GTK à manipuler. * -* show = état de l'affichage auquel parvenir. * -* * -* Description : Choisit d'afficher le code brut ou non. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -void gtk_codeview_show_code(GtkCodeview *codeview, gboolean show) -{ - GList *list; /* Ensemble des enfants */ - GList *iter; /* Boucle de parcours */ - - list = gtk_container_get_children(GTK_CONTAINER(codeview)); - - for (iter = g_list_first(list); iter != NULL; iter = g_list_next(iter)) - gtk_snippet_show_code(GTK_SNIPPET(iter->data), show); - - g_list_free(list); - -} - - - - - - - -/****************************************************************************** -* * -* Paramètres : codeview = composant GTK à manipuler. * -* address = adresse à présenter à l'écran. * -* * -* Description : S'assure qu'une adresse donnée est visible à l'écran. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -void gtk_codeview_scroll_to_address(GtkCodeview *codeview, uint64_t address) -{ - GList *list; /* Ensemble des enfants */ - GList *iter; /* Boucle de parcours */ - GtkSnippet *snippet; /* Morceau de code présent */ - gint position; /* Position à garantir */ - GtkAdjustment *vadj; /* Défilement à mettre à jour */ - - list = gtk_container_get_children(GTK_CONTAINER(codeview)); - - for (iter = g_list_first(list); iter != NULL; iter = g_list_next(iter)) - { - snippet = GTK_SNIPPET(iter->data); - - if (gtk_snippet_get_address_vposition(snippet, address, &position)) - { - vadj = GTK_VIEWPORT(codeview)->vadjustment; - - gtk_adjustment_set_value(vadj, position); - - break; - - } - - } - - g_list_free(list); - -} - - - diff --git a/src/gtkcodeview.h b/src/gtkcodeview.h deleted file mode 100644 index d1dd308..0000000 --- a/src/gtkcodeview.h +++ /dev/null @@ -1,69 +0,0 @@ - -/* OpenIDA - Outil d'analyse de fichiers binaires - * gtkcodeview.h - prototypes pour l'affichage d'un ou de plusieurs morceaux de code - * - * Copyright (C) 2008 Cyrille Bagard - * - * This file is part of OpenIDA. - * - * OpenIDA 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. - * - * OpenIDA 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 Foobar. If not, see . - */ - - -#ifndef _GTK_CODEVIEW_H -#define _GTK_CODEVIEW_H - - -#include - - -#include - - - -#define GTK_TYPE_CODE_VIEW (gtk_codeview_get_type()) -#define GTK_CODE_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GTK_TYPE_CODE_VIEW, GtkCodeview)) -#define GTK_CODE_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GTK_TYPE_CODE_VIEW, GtkCodeviewClass)) -#define GTK_IS_CODE_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GTK_TYPE_CODE_VIEW)) -#define GTK_IS_CODE_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GTK_TYPE_CODE_VIEW)) -#define GTK_CODE_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GTK_TYPE_CODE_VIEW, GtkCodeviewClass)) - - -typedef struct _GtkCodeview GtkCodeview; -typedef struct _GtkCodeviewClass GtkCodeviewClass; - - - -/* Détermine le type du composant d'affichage des morceaux. */ -GType gtk_codeview_get_type(void); - -/* Crée un nouveau composant pour l'affichage de morceaux. */ -GtkWidget* gtk_codeview_new(void); - - - -/* Choisit d'afficher les adresses virtuelles ou non. */ -void gtk_codeview_show_vaddress(GtkCodeview *, gboolean); - -/* Choisit d'afficher le code brut ou non. */ -void gtk_codeview_show_code(GtkCodeview *, gboolean); - - - -/* S'assure qu'une adresse donnée est visible à l'écran. */ -void gtk_codeview_scroll_to_address(GtkCodeview *, uint64_t); - - - -#endif /* _GTK_CODEVIEW_H */ diff --git a/src/pan_symbols.c b/src/pan_symbols.c index cef099e..adc8056 100644 --- a/src/pan_symbols.c +++ b/src/pan_symbols.c @@ -29,7 +29,7 @@ #include -#include "gtkcodeview.h" +#include "gtkbinview.h" @@ -128,7 +128,7 @@ void change_symbols_selection(GtkTreeSelection *selection, gpointer data) GtkTreeModel *model; gchar *string; /* Chaîne sélectionnée */ uint64_t address; /* Adresse à rejoindre */ - GtkCodeview *codeview; /* Affichage à faire défiler */ + GtkBinview *binview; /* Affichage à faire défiler */ if (gtk_tree_selection_get_selected(selection, &model, &iter)) { @@ -136,9 +136,9 @@ void change_symbols_selection(GtkTreeSelection *selection, gpointer data) address = strtoll(string, NULL, 16); g_free(string); - codeview = GTK_CODE_VIEW(g_object_get_data(G_OBJECT(data), "codeview")); + binview = GTK_BIN_VIEW(g_object_get_data(G_OBJECT(data), "binview")); - gtk_codeview_scroll_to_address(codeview, address); + gtk_binview_scroll_to_address(binview, address); } -- cgit v0.11.2-87-g4458