diff options
Diffstat (limited to 'src/gtkext')
-rw-r--r-- | src/gtkext/Makefile.am | 7 | ||||
-rw-r--r-- | src/gtkext/easygtk.c | 2 | ||||
-rw-r--r-- | src/gtkext/gtkbinview-int.h | 82 | ||||
-rw-r--r-- | src/gtkext/gtkbinview.c | 433 | ||||
-rw-r--r-- | src/gtkext/gtkbinview.h | 88 | ||||
-rw-r--r-- | src/gtkext/gtkdockitem.c | 315 | ||||
-rw-r--r-- | src/gtkext/gtkdockitem.h | 106 | ||||
-rw-r--r-- | src/gtkext/gtkdockpanel.c | 778 | ||||
-rw-r--r-- | src/gtkext/gtkdockpanel.h | 97 | ||||
-rw-r--r-- | src/gtkext/gtkgraphview.c | 6 | ||||
-rw-r--r-- | src/gtkext/gtksourceview.c | 2 | ||||
-rw-r--r-- | src/gtkext/gtkviewpanel.c | 2 | ||||
-rw-r--r-- | src/gtkext/gtkviewpanel.h | 2 |
13 files changed, 9 insertions, 1911 deletions
diff --git a/src/gtkext/Makefile.am b/src/gtkext/Makefile.am index 67d1a49..f590693 100644 --- a/src/gtkext/Makefile.am +++ b/src/gtkext/Makefile.am @@ -6,13 +6,9 @@ noinst_LTLIBRARIES = libgtkext.la libgtkext_la_SOURCES = \ easygtk.h easygtk.c \ gtkextstatusbar.h gtkextstatusbar.c \ - gtkbinview-int.h \ - gtkbinview.h gtkbinview.c \ gtkblockview.h gtkblockview.c \ gtkbufferview-int.h \ gtkbufferview.h gtkbufferview.c \ - gtkdockitem.h gtkdockitem.c \ - gtkdockpanel.h gtkdockpanel.c \ gtkdockstation.h gtkdockstation.c \ gtkgraphview.h gtkgraphview.c \ gtklinkrenderer.h gtklinkrenderer.c \ @@ -36,4 +32,5 @@ iodamarshal.h: iodamarshal.list glib-genmarshal --header $< > $@ iodamarshal.c: iodamarshal.list - glib-genmarshal --body $< > $@ + echo "#include <$(subst .c,.h,$@)>" > $@ + glib-genmarshal --body $< >> $@ diff --git a/src/gtkext/easygtk.c b/src/gtkext/easygtk.c index 510c74f..cdf3689 100644 --- a/src/gtkext/easygtk.c +++ b/src/gtkext/easygtk.c @@ -492,7 +492,7 @@ GtkWidget *qck_create_combobox(GObject *object, const char *name, GCallback hand { GtkWidget *result; /* Résultat à renvoyer */ - result = gtk_combo_box_new_text(); + result = gtk_combo_box_text_new(); if (G_IS_OBJECT(object) && name != NULL) { diff --git a/src/gtkext/gtkbinview-int.h b/src/gtkext/gtkbinview-int.h deleted file mode 100644 index 7091e15..0000000 --- a/src/gtkext/gtkbinview-int.h +++ /dev/null @@ -1,82 +0,0 @@ - -/* OpenIDA - Outil d'analyse de fichiers binaires - * gtkbinview-int.h - définitions internes propre à l'affichage d'un ou plusieurs morceaux de code - * - * Copyright (C) 2009-2012 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 <http://www.gnu.org/licenses/>. - */ - - -#ifndef _GTKEXT_GTKBINVIEW_INT_H -#define _GTKEXT_GTKBINVIEW_INT_H - - -#include "gtkbinview.h" -#include "gtkviewpanel-int.h" - - -#include <stdbool.h> -#include <gtk/gtkfixed.h> - - - -/* Définit les lignes à associer à la représentation. */ -typedef void (* set_rendering_lines_fc) (GtkBinView *, GRenderingLine *, GRenderingLine *); - -/* Réagit à la sélection externe d'une adresse. */ -typedef void (* define_main_address_fc) (GtkBinView *, vmpa_t); - -/* Indique la position d'affichage d'une adresse donnée. */ -//typedef bool (* get_addr_coordinates_fc) (const GtkBinView *, vmpa_t, gint *, gint *); - - -struct _GtkBinView -{ - GtkViewPanel parent; /* A laisser en premier */ - - GLoadedBinary *binary; /* Contenu binaire affiché */ - - GRenderingLine *lines; /* Contenu à représenter */ - GRenderingLine *last; /* Dernière ligne associée */ - - set_rendering_lines_fc set_lines; /* Association des lignes */ - define_main_address_fc define_address; /* Sélection externe d'adresse */ - get_addr_coordinates_fc get_coordinates;/* Conversion adresse <-> pos. */ - -}; - -struct _GtkBinViewClass -{ - GtkViewPanelClass parent; /* A laisser en premier */ - - /* Signaux */ - - void (* lines_set) (GtkBinView *); - -}; - - - -/* Calcule la surface pleine utilisable pour la vue. */ -void gtk_bin_view_compute_allocation(GtkBinView *, GtkAllocation *); - -/* S'assure que la valeur de défilement actuelle est valable. */ -void gtk_bin_view_reclamp_adjustment(GtkAdjustment *, gboolean *); - - - -#endif /* _GTKEXT_GTKBINVIEW_INT_H */ diff --git a/src/gtkext/gtkbinview.c b/src/gtkext/gtkbinview.c deleted file mode 100644 index 2fe88ad..0000000 --- a/src/gtkext/gtkbinview.c +++ /dev/null @@ -1,433 +0,0 @@ - -/* OpenIDA - Outil d'analyse de fichiers binaires - * gtkbinview.c - affichage d'un ou de plusieurs morceaux de code - * - * Copyright (C) 2008-2010 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 <http://www.gnu.org/licenses/>. - */ - - -#include "gtkbinview.h" - - -#include "gtkbinview-int.h" - - - -/* Acquitement d'une fin d'attachement */ -typedef struct _bv_loading_ack -{ - bool lines_set; /* Construction complète */ - GMutex *mutex; /* Accès à la variable */ - GCond *cond; /* Attente de changement */ - -} bv_loading_ack; - - -/* Prend acte de l'association d'un binaire chargé. */ -static void gtk_bin_view_attach_binary(GtkBinView *, GLoadedBinary *); - -/* Prend note de la fin d'une construction d'une visualisation. */ -static void ack_loaded_lines_for_bin_view(GtkBinView *, bv_loading_ack *); - - - - - - -/* Détermine le type du composant d'affichage des morceaux. */ -G_DEFINE_TYPE(GtkBinView, gtk_binview, GTK_TYPE_VIEW_PANEL) - - - - - - -/****************************************************************************** -* * -* 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) -{ - g_signal_new("lines-set", - GTK_TYPE_BIN_VIEW, - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET(GtkBinViewClass, lines_set), - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); - -} - - -/****************************************************************************** -* * -* Paramètres : view = composant GTK à initialiser. * -* * -* Description : Procède à l'initialisation de l'afficheur de morceaux. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void gtk_binview_init(GtkBinView *view) -{ - GtkViewPanel *panel; /* Instance parente */ - - panel = GTK_VIEW_PANEL(view); - - panel->attach = (attach_binary_fc)gtk_bin_view_attach_binary; - -} - - -/****************************************************************************** -* * -* 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 : view = composant GTK à mettre à jour. * -* binary = binaire associé à intégrer. * -* * -* Description : Prend acte de l'association d'un binaire chargé. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void gtk_bin_view_attach_binary(GtkBinView *view, GLoadedBinary *binary) -{ - bv_loading_ack ack; /* Informations d'acquitement */ - - ack.lines_set = false; - ack.mutex = g_mutex_new(); - ack.cond = g_cond_new(); - - g_signal_connect(view, "lines-set", G_CALLBACK(ack_loaded_lines_for_bin_view), &ack); - - /* - gtk_bin_view_set_rendering_lines(view, binary, - g_loaded_binary_get_lines(binary), NULL); - */ - - /* Attente de la fin de construction */ - g_mutex_lock(ack.mutex); - while (!ack.lines_set) - g_cond_wait(ack.cond, ack.mutex); - g_mutex_unlock(ack.mutex); - - g_signal_handlers_disconnect_by_func(view, G_CALLBACK(ack_loaded_lines_for_bin_view), &ack); - - g_mutex_free(ack.mutex); - g_cond_free(ack.cond); - -} - - -/****************************************************************************** -* * -* Paramètres : view = composant d'affichage prêt à utilisation. * -* ack = paramètres nécessaires à l'acquitement. * -* * -* Description : Prend note de la fin d'une construction d'une visualisation. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void ack_loaded_lines_for_bin_view(GtkBinView *view, bv_loading_ack *ack) -{ - g_mutex_lock(ack->mutex); - - ack->lines_set = true; - - g_cond_signal(ack->cond); - g_mutex_unlock(ack->mutex); - -} - - - - - - - - -/****************************************************************************** -* * -* Paramètres : view = composant GTK à mettre à jour. * -* show = état de l'affichage auquel parvenir. * -* * -* Description : Définit si une bordure est à afficher. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -void gtk_bin_view_show_border(GtkBinView *view, bool show) -{ - /* FIXME : à déplacer vers GtkViewPanel */ - GTK_VIEW_PANEL(view)->show_border = show; - -} - - - - -/****************************************************************************** -* * -* Paramètres : view = composant GTK à mettre à jour. * -* binary = contenu binaire dont les lignes sont issues. * -* lines = informations à intégrer. * -* last = dernière ligne à intégrer ou NULL pour toutes. * -* * -* Description : Définit les lignes à associer à la représentation. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -void gtk_bin_view_set_rendering_lines(GtkBinView *view, GLoadedBinary *binary, GRenderingLine *lines, GRenderingLine *last) -{ - view->binary = binary; - - view->lines = lines; - view->last = last; - - view->set_lines(view, lines, last); - -} - - -/****************************************************************************** -* * -* Paramètres : view = composant GTK à consulter. * -* * -* Description : Fournit la liste des lignes associées à la représentation. * -* * -* Retour : Ligne de représentation. * -* * -* Remarques : - * -* * -******************************************************************************/ - -GRenderingLine *gtk_bin_view_get_lines(const GtkBinView *view) -{ - return view->lines; - -} - - -/****************************************************************************** -* * -* Paramètres : view = composant GTK à consulter. * -* * -* Description : Fournit la dernière ligne associée à la représentation. * -* * -* Retour : Ligne de représentation. * -* * -* Remarques : - * -* * -******************************************************************************/ - -GRenderingLine *gtk_bin_view_get_last_line(const GtkBinView *view) -{ - return view->last; /* FIXME last == 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 : view = composant GTK à manipuler. * -* addr = adresse à rechercher. * -* * -* Description : Indique si la vue contient une addrese donnée. * -* * -* Retour : true si l'adresse est présente, false sinon. * -* * -* Remarques : - * -* * -******************************************************************************/ - -bool gtk_bin_view_contain_address(const GtkBinView *view, vmpa_t addr) -{ - gint dummy_x; /* Abscisse pour l'appel */ - gint dummy_y; /* Ordonnée pour l'appel */ - - return view->get_coordinates(view, addr, &dummy_x, &dummy_y); - -} - - -/****************************************************************************** -* * -* Paramètres : view = composant GTK à manipuler. * -* addr = adresse à présenter à l'écran. * -* * -* Description : S'assure qu'une adresse donnée est visible à l'écran. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -void gtk_bin_view_scroll_to_address(GtkBinView *view, vmpa_t addr) -{ - /* FIXME */ -#if 0 - gint x; /* Abscisse à garantir */ - gint y; /* Ordonnée à garantir */ - GtkAdjustment *adj; /* Défilement à mettre à jour */ - - if (view->define_address != NULL) - view->define_address(view, addr); - - if (view->get_coordinates(view, addr, &x, &y)) - { - adj = view->hadjustment; - - if (x > (adj->upper - adj->page_size)) - x = adj->upper - adj->page_size; - - gtk_adjustment_set_value(adj, x); - - adj = view->vadjustment; - - if (y > (adj->upper - adj->page_size)) - y = adj->upper - adj->page_size; - - gtk_adjustment_set_value(adj, y); - - } -#endif -} diff --git a/src/gtkext/gtkbinview.h b/src/gtkext/gtkbinview.h deleted file mode 100644 index 165f423..0000000 --- a/src/gtkext/gtkbinview.h +++ /dev/null @@ -1,88 +0,0 @@ - -/* OpenIDA - Outil d'analyse de fichiers binaires - * gtkbinview.h - prototypes pour l'affichage d'un ou de plusieurs morceaux de code - * - * Copyright (C) 2008-2010 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 <http://www.gnu.org/licenses/>. - */ - - -#ifndef _GTK_BINVIEW_H -#define _GTK_BINVIEW_H - - -#include <gtk/gtkwidget.h> - - -#include "../analysis/binary.h" - - - -#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); - -/* Définit si une bordure est à afficher. */ -void gtk_bin_view_show_border(GtkBinView *, bool); - - - -/* Définit les lignes à associer à la représentation. */ -void gtk_bin_view_set_rendering_lines(GtkBinView *, GLoadedBinary *, GRenderingLine *, GRenderingLine *); - -/* Fournit la liste des lignes associées à la représentation. */ -GRenderingLine *gtk_bin_view_get_lines(const GtkBinView *); - -/* Fournit la dernière ligne associée à la représentation. */ -GRenderingLine *gtk_bin_view_get_last_line(const GtkBinView *); - - - - - -/* 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); - - - -/* Indique si la vue contient une addrese donnée. */ -bool gtk_bin_view_contain_address(const GtkBinView *, vmpa_t); - -/* S'assure qu'une adresse donnée est visible à l'écran. */ -void gtk_bin_view_scroll_to_address(GtkBinView *, vmpa_t); - - - -#endif /* _GTK_BINVIEW_H */ diff --git a/src/gtkext/gtkdockitem.c b/src/gtkext/gtkdockitem.c deleted file mode 100644 index 692ed17..0000000 --- a/src/gtkext/gtkdockitem.c +++ /dev/null @@ -1,315 +0,0 @@ - -/* OpenIDA - Outil d'analyse de fichiers binaires - * gtkdockitem.c - mémorisation des propriétés d'un panneau dockable - * - * Copyright (C) 2009 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 <http://www.gnu.org/licenses/>. - */ - - -#include "gtkdockitem.h" - - -#include "iodamarshal.h" - - - -/* Procède à l'initialisation d'un panneau dockable. */ -static void g_dock_item_class_init(GDockItemClass *); - -/* Supprime toutes les références externes. */ -static void g_dock_item_class_dispose(GDockItem *); - -/* Procède à la libération totale de la mémoire. */ -static void g_dock_item_class_finalize(GDockItem *); - - - -/* Détermine le type d'un panneau dockable. */ -G_DEFINE_TYPE(GDockItem, g_dock_item, G_TYPE_OBJECT) - - -/****************************************************************************** -* * -* Paramètres : klass = classe GTK à initialiser. * -* * -* Description : Procède à l'initialisation d'un panneau dockable. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void g_dock_item_class_init(GDockItemClass *klass) -{ - GObjectClass *object; /* Autre version de la classe */ - - object = G_OBJECT_CLASS(klass); - - object->dispose = g_dock_item_class_dispose; - object->finalize = g_dock_item_class_finalize; - - g_signal_new("content-changed", - G_TYPE_DOCK_ITEM, - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET(GDockItemClass, content_changed), - NULL, NULL, - g_cclosure_user_marshal_VOID__OBJECT_OBJECT, - G_TYPE_NONE, 2, GTK_TYPE_WIDGET, GTK_TYPE_WIDGET); - -} - - -/****************************************************************************** -* * -* Paramètres : ditem = instance d'objet GLib à traiter. * -* * -* Description : Supprime toutes les références externes. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void g_dock_item_class_dispose(GDockItem *ditem) -{ - gpointer obj_class; /* Classe parente */ - - gtk_widget_unref(ditem->panel); - - obj_class = g_type_class_peek_parent(G_DOCK_ITEM_GET_CLASS(ditem)); - - G_OBJECT_CLASS(obj_class)->dispose(G_OBJECT(ditem)); - -} - - -/****************************************************************************** -* * -* Paramètres : ditem = instance d'objet GLib à traiter. * -* * -* Description : Procède à la libération totale de la mémoire. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void g_dock_item_class_finalize(GDockItem *ditem) -{ - gpointer obj_class; /* Classe parente */ - - g_free(ditem->name); - g_free(ditem->desc); - - obj_class = g_type_class_peek_parent(G_DOCK_ITEM_GET_CLASS(ditem)); - - G_OBJECT_CLASS(obj_class)->finalize(G_OBJECT(ditem)); - -} - - -/****************************************************************************** -* * -* Paramètres : ditem = composant GTK à initialiser. * -* * -* Description : Procède à l'initialisation d'un panneau dockable. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void g_dock_item_init(GDockItem *ditem) -{ - - ditem->name = NULL; - - -} - - -/****************************************************************************** -* * -* Paramètres : name = nouveau nom à prendre en compte. * -* panel = nouveau panneau à prendre en compte. * -* * -* Description : Crée une nouvelle mémorisation de panneau dockable. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -GDockItem *g_dock_item_new(const gchar *name, GtkWidget *panel) -{ - GDockItem *result; /* Composant à retourner */ - - result = g_object_new(G_TYPE_DOCK_ITEM, NULL); - - g_dock_item_set_name(result, name); - g_dock_item_set_panel(result, panel); - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : ditem = composant GTK à modifier. * -* name = nouveau nom à prendre en compte. * -* * -* Description : Change le nom du panneau dockable pour son onglet. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -void g_dock_item_set_name(GDockItem *ditem, const gchar *name) -{ - if (ditem->name != NULL) - g_free(ditem->name); - - ditem->name = g_strdup(name); - -} - - -/****************************************************************************** -* * -* Paramètres : ditem = composant GTK à modifier. * -* * -* Description : Fournit le nom du panneau dockable pour son onglet. * -* * -* Retour : Etiquette à faire apparaître sur un onglet. * -* * -* Remarques : - * -* * -******************************************************************************/ - -const gchar *g_dock_item_get_name(GDockItem *ditem) -{ - return ditem->name; - -} - - -/****************************************************************************** -* * -* Paramètres : ditem = composant GTK à modifier. * -* desc = nouvelle description à prendre en compte. * -* * -* Description : Change la description du panneau dockable pour son titre. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -void g_dock_item_set_desc(GDockItem *ditem, const gchar *desc) -{ - if (ditem->desc != NULL) - g_free(ditem->desc); - - ditem->desc = g_strdup(desc); - -} - - -/****************************************************************************** -* * -* Paramètres : ditem = composant GTK à modifier. * -* * -* Description : Fournit la description du panneau dockable pour son titre. * -* * -* Retour : Etiquette à faire apparaître sur un onglet. * -* * -* Remarques : - * -* * -******************************************************************************/ - -const gchar *g_dock_item_get_desc(GDockItem *ditem) -{ - const char *result; /* CHaîne à renvoyer */ - - result = ditem->desc; - - if (result == NULL) - result = g_dock_item_get_name(ditem); - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : ditem = composant GTK à modifier. * -* panel = nouveau panneau à prendre en compte. * -* * -* Description : Change le panneau dockable associé à l'élément. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -void g_dock_item_set_panel(GDockItem *ditem, GtkWidget *panel) -{ - GtkWidget *old; /* Ancien panneau remplacé */ - - old = ditem->panel; - - ditem->panel = panel; - gtk_widget_ref(panel); - - if (old != NULL) - { - g_signal_emit_by_name(ditem, "content-changed", old, panel); - gtk_widget_unref(old); - } - -} - - -/****************************************************************************** -* * -* Paramètres : ditem = composant GTK à modifier. * -* * -* Description : Fournit le panneau dockable associé à l'élément. * -* * -* Retour : Panneau actuellement associé. * -* * -* Remarques : - * -* * -******************************************************************************/ - -GtkWidget *g_dock_item_get_panel(GDockItem *ditem) -{ - return ditem->panel; - -} diff --git a/src/gtkext/gtkdockitem.h b/src/gtkext/gtkdockitem.h deleted file mode 100644 index 7525b9a..0000000 --- a/src/gtkext/gtkdockitem.h +++ /dev/null @@ -1,106 +0,0 @@ - -/* OpenIDA - Outil d'analyse de fichiers binaires - * gtkdockitem.h - prototypes pour la mémorisation des propriétés d'un panneau dockable - * - * Copyright (C) 2009-2012 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 <http://www.gnu.org/licenses/>. - */ - - -#ifndef _GTKEXT_GTKDOCKITEM_H -#define _GTKEXT_GTKDOCKITEM_H - - -#include <gtk/gtk.h> - - -G_BEGIN_DECLS - - -#define G_TYPE_DOCK_ITEM g_dock_item_get_type() -#define G_DOCK_ITEM(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), g_dock_item_get_type(), GDockItem)) -#define G_IS_DOCK_ITEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), g_dock_item_get_type())) -#define G_DOCK_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), G_TYPE_DOCK_ITEM, GDockItemClass)) -#define G_IS_DOCK_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), G_TYPE_DOCK_ITEM)) -#define G_DOCK_ITEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), G_TYPE_DOCK_ITEM, GDockItemClass)) - - - - - - - - -typedef struct _GDockItem GDockItem; -typedef struct _GDockItemClass GDockItemClass; - - - - -struct _GDockItem -{ - GObject parent; /* A laisser en premier */ - - gchar *name; /* Nom court pour titre */ - gchar *desc; /* Nom long pour onglet */ - - GtkWidget *panel; /* Pnneau construit associé */ - -}; - -struct _GDockItemClass -{ - GObjectClass parent; /* A laisser en premier */ - - /* Signaux */ - - void (* content_changed) (GDockItem *, GtkWidget *, GtkWidget *); - -}; - - -/* Détermine le type d'un panneau dockable. */ -GType g_dock_item_get_type(void); - -/* Crée une nouvelle mémorisation de panneau dockable. */ -GDockItem *g_dock_item_new(const gchar *, GtkWidget *); - -/* Change le nom du panneau dockable pour son onglet. */ -void g_dock_item_set_name(GDockItem *, const gchar *); - -/* Fournit le nom du panneau dockable pour son onglet. */ -const gchar *g_dock_item_get_name(GDockItem *); - -/* Change la description du panneau dockable pour son titre. */ -void g_dock_item_set_desc(GDockItem *, const gchar *); - -/* Fournit la description du panneau dockable pour son titre. */ -const gchar *g_dock_item_get_desc(GDockItem *); - -/* Change le panneau dockable associé à l'élément. */ -void g_dock_item_set_panel(GDockItem *, GtkWidget *); - -/* Fournit le panneau dockable associé à l'élément. */ -GtkWidget *g_dock_item_get_panel(GDockItem *); - - - -G_END_DECLS - - - -#endif /* _GTKEXT_GTKDOCKITEM_H */ diff --git a/src/gtkext/gtkdockpanel.c b/src/gtkext/gtkdockpanel.c deleted file mode 100644 index 4b9668b..0000000 --- a/src/gtkext/gtkdockpanel.c +++ /dev/null @@ -1,778 +0,0 @@ - -/* OpenIDA - Outil d'analyse de fichiers binaires - * gtkdockpanel.c - manipulation et affichage de panneaux dockables - * - * Copyright (C) 2009-2012 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 <http://www.gnu.org/licenses/>. - */ - - -#include "gtkdockpanel.h" - - -#include <malloc.h> -#include <string.h> - - -#include "iodamarshal.h" - - - -/* Valide ou non le terme d'un "Drag and drop". */ -static gboolean gtk_dock_panel_drag_drop_cb(GtkDockPanel *, GdkDragContext *, gint, gint, guint, gpointer); - -/* Procède au "Drag and drop" effectif. */ -static void gtk_dock_panel_drag_data_received_cb(GtkDockPanel *, GdkDragContext *, gint, gint, GtkSelectionData *, guint, guint, gpointer); - -/* Accompagne le déplacement sur une cible de "Drag and drop". */ -static gboolean gtk_dock_panel_drag_motion_cb(GtkDockPanel *, GdkDragContext *, gint, gint, guint, gpointer); - -/* Note la fin des visites sur une cible de "Drag and drop". */ -static void gtk_dock_panel_drag_leave_cb(GtkDockPanel *, GdkDragContext *, guint, gpointer); - -/* Procède au démarrage d'un "Drag and drop". */ -static void gtk_dock_panel_drag_begin_cb(GtkDockPanel *, GdkDragContext *, gpointer); - -/* Procède à l'envoi depuis la source à la destination. */ -static void gtk_dock_panel_drag_data_get_cb(GtkDockPanel *, GdkDragContext *, GtkSelectionData *, guint, guint, gpointer ); - -/* Marque l'arrêt d'un "Drag and drop". */ -static void gtk_dock_panel_drag_end_cb(GtkDockPanel *, GdkDragContext *, gpointer); - -/* Nettoie les traces d'un "Drag and drop". */ -//static void gtk_dock_panel_drag_data_delete_cb(GtkDockPanel *, GdkDragContext *, gpointer); - -/* Ajoute un paquet d'informations à la station dockable. */ -static void _gtk_dock_panel_add_item(GtkDockPanel *, GDockItem *, gint); - -/* Remplace le panneau d'un membre actuellement affiché. */ -static void on_dock_item_content_changed(GDockItem *, GtkWidget *, GtkWidget *, GtkDockPanel *); - -/* Supprime un paquet d'informations à la station dockable. */ -static void _gtk_dock_panel_remove_item(GtkDockPanel *, GDockItem *, GtkWidget *); - -/* Met à jour le titre du support de panneaux dockables. */ -static gboolean gtk_dock_panel_update_title(GtkNotebook *, gpointer *, guint, gpointer); - - - -/******************************************************************************/ -#define _BYTE 8 -#define _WORD 16 -#define _DWORD 32 - - -/******************************************************************************/ -/* Define a list of data types called "targets" that a destination widget will - * accept. The string type is arbitrary, and negotiated between DnD widgets by - * the developer. An enum or GQuark can serve as the integer target id. */ -enum { - TARGET_INT32, - TARGET_STRING, - TARGET_DOCKITEM, - TARGET_ROOTWIN -}; - -/* datatype (string), restrictions on DnD (GtkTargetFlags), datatype (int) */ -static GtkTargetEntry target_list[] = { - { "INTEGER", 0, TARGET_INT32 }, - { "STRING", 0, TARGET_STRING }, - { "OpenIDA/dock-item", 0, TARGET_DOCKITEM }, - { "application/x-rootwindow-drop", 0, TARGET_ROOTWIN } -}; - -static guint n_targets = G_N_ELEMENTS (target_list); - - - - - - - -/* Détermine le type du composant d'affichage des morceaux. */ -G_DEFINE_TYPE(GtkDockPanel, gtk_dock_panel, GTK_TYPE_VBOX) - - - - -/****************************************************************************** -* * -* Paramètres : class = classe GTK à initialiser. * -* * -* Description : Procède à l'initialisation de l'afficheur de morceaux. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void gtk_dock_panel_class_init(GtkDockPanelClass *class) -{ - g_signal_new("switch-item", - GTK_TYPE_DOCK_PANEL, - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET(GtkDockPanelClass, switch_item), - NULL, NULL, - g_cclosure_user_marshal_VOID__OBJECT, - G_TYPE_NONE, 1, G_TYPE_DOCK_ITEM); - -} - - -/****************************************************************************** -* * -* Paramètres : dpanel = composant GTK à initialiser. * -* * -* Description : Procède à l'initialisation de la station dockable. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void gtk_dock_panel_init(GtkDockPanel *dpanel) -{ - - GtkWidget *eventbox1; - GtkWidget *hbox1; - GtkWidget *button1; - GtkWidget *image1; - GtkWidget *button2; - GtkWidget *image2; - - - - eventbox1 = gtk_event_box_new (); - gtk_widget_show (eventbox1); - gtk_box_pack_start (GTK_BOX (dpanel), eventbox1, FALSE, TRUE, 0); - - hbox1 = gtk_hbox_new (FALSE, 0); - gtk_widget_show (hbox1); - gtk_container_add (GTK_CONTAINER (eventbox1), hbox1); - - dpanel->title = GTK_LABEL(gtk_label_new(("<b>titre</b>"))); - gtk_widget_show(GTK_WIDGET(dpanel->title)); - gtk_box_pack_start(GTK_BOX (hbox1), GTK_WIDGET(dpanel->title), TRUE, TRUE, 0); - gtk_label_set_use_markup(GTK_LABEL(dpanel->title), TRUE); - gtk_misc_set_alignment(GTK_MISC(dpanel->title), 0, 0.5); - - button1 = gtk_button_new (); - gtk_widget_show (button1); - gtk_box_pack_start (GTK_BOX (hbox1), button1, FALSE, FALSE, 0); - gtk_button_set_relief (GTK_BUTTON (button1), GTK_RELIEF_NONE); - - image1 = gtk_image_new_from_stock ("gtk-media-play", GTK_ICON_SIZE_MENU); - gtk_widget_show (image1); - gtk_container_add (GTK_CONTAINER (button1), image1); - gtk_widget_set_size_request (image1, 10, 10); - - button2 = gtk_button_new (); - gtk_widget_show (button2); - gtk_box_pack_start (GTK_BOX (hbox1), button2, FALSE, FALSE, 0); - gtk_button_set_relief (GTK_BUTTON (button2), GTK_RELIEF_NONE); - - image2 = gtk_image_new_from_stock ("gtk-close", GTK_ICON_SIZE_MENU); - gtk_widget_show (image2); - gtk_container_add (GTK_CONTAINER (button2), image2); - gtk_widget_set_size_request (image2, 10, 10); - - dpanel->notebook = gtk_notebook_new (); - gtk_widget_show (dpanel->notebook); - gtk_box_pack_start (GTK_BOX (dpanel), dpanel->notebook, TRUE, TRUE, 0); - gtk_notebook_set_show_border (GTK_NOTEBOOK (dpanel->notebook), FALSE); - gtk_notebook_set_tab_pos (GTK_NOTEBOOK (dpanel->notebook), GTK_POS_BOTTOM); - gtk_notebook_set_scrollable (GTK_NOTEBOOK (dpanel->notebook), TRUE); - - - - - /* Make the "well label" a DnD destination. */ - gtk_drag_dest_set - ( - GTK_WIDGET(dpanel), /* widget that will accept a drop */ - GTK_DEST_DEFAULT_MOTION /* default actions for dest on DnD */ - | GTK_DEST_DEFAULT_HIGHLIGHT, - target_list, /* lists of target to support */ - n_targets, /* size of list */ - GDK_ACTION_COPY /* what to do with data after dropped */ - ); - - /* Make the "coin button" a DnD source. */ - /* Why doesn't GtkLabel work here? */ - gtk_drag_source_set - ( - GTK_WIDGET(dpanel), /* widget will be drag-able */ - GDK_BUTTON1_MASK, /* modifier that will start a drag */ - target_list, /* lists of target to support */ - n_targets, /* size of list */ - GDK_ACTION_COPY /* what to do with data after dropped */ - ); - - - /* Côté destination */ - g_signal_connect(dpanel, "drag-drop", G_CALLBACK(gtk_dock_panel_drag_drop_cb), NULL); - g_signal_connect(dpanel, "drag-data-received", G_CALLBACK(gtk_dock_panel_drag_data_received_cb), NULL); - g_signal_connect(dpanel, "drag-motion", G_CALLBACK(gtk_dock_panel_drag_motion_cb), NULL); - g_signal_connect(dpanel, "drag-leave", G_CALLBACK(gtk_dock_panel_drag_leave_cb), NULL); - - /* Côté source */ - g_signal_connect(dpanel, "drag-begin", G_CALLBACK(gtk_dock_panel_drag_begin_cb), NULL); - g_signal_connect(dpanel, "drag-data-get", G_CALLBACK(gtk_dock_panel_drag_data_get_cb), NULL); - g_signal_connect(dpanel, "drag-end", G_CALLBACK(gtk_dock_panel_drag_end_cb), NULL); - //g_signal_connect(dpanel, "drag-data-delete", G_CALLBACK(gtk_dock_panel_drag_data_delete_cb), NULL); - - - g_signal_connect(dpanel->notebook, "switch-page", G_CALLBACK(gtk_dock_panel_update_title), dpanel); - - - - - -#if 0 - /* Make the "well label" a DnD destination. */ - gtk_drag_dest_set - ( - dpanel->dropwin, /* widget that will accept a drop */ - GTK_DEST_DEFAULT_MOTION /* default actions for dest on DnD */ - | GTK_DEST_DEFAULT_HIGHLIGHT, - target_list, /* lists of target to support */ - n_targets, /* size of list */ - GDK_ACTION_COPY /* what to do with data after dropped */ - ); -#endif - -} - - -/****************************************************************************** -* * -* Paramètres : - * -* * -* Description : Crée un nouveau composant pour station dockable. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -GtkWidget *gtk_dock_panel_new(void) -{ - return g_object_new(GTK_TYPE_DOCK_PANEL, NULL); - -} - - -/****************************************************************************** -* * -* Paramètres : dpanel = composant à l'origine de la manoeuvre. * -* context = contexte de l'opération de "Drag and drop". * -* x = abscisse du pointeur relaché. * -* y = ordonnée du pointeur relaché. * -* time = date de l'opération. * -* data = adresse non utilisée ici. * -* * -* Description : Valide ou non le terme d'un "Drag and drop". * -* * -* Retour : TRUE si l'opération peut continuer, FALSE sinon. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static gboolean gtk_dock_panel_drag_drop_cb(GtkDockPanel *dpanel, GdkDragContext *context, gint x, gint y, guint time, gpointer data) -{ - gboolean result; /* Ordre à retourner */ - GdkAtom target; /* Type d'élément à déplacer */ - - result = (context->targets != NULL); - - printf(" ## DRAG DROP ## %p\n", dpanel); - - if (context->targets != NULL) - { - target = GDK_POINTER_TO_ATOM(g_list_nth_data(context->targets, TARGET_DOCKITEM)); - gtk_drag_get_data(GTK_WIDGET(dpanel), context, target, time); - } - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : dpanel = composant à l'origine de la manoeuvre. * -* context = contexte de l'opération de "Drag and drop". * -* x = abscisse du pointeur relaché. * -* y = ordonnée du pointeur relaché. * -* selection = réceptacle pour la transmission. * -* target = type de données demandé. * -* time = date de l'opération. * -* data = adresse non utilisée ici. * -* * -* Description : Procède au "Drag and drop" effectif. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void gtk_dock_panel_drag_data_received_cb(GtkDockPanel *dpanel, GdkDragContext *context, gint x, gint y, GtkSelectionData *selection, guint target, guint time, gpointer data) -{ - GDockItem *ditem; /* Elément transféré */ - gboolean success; /* Bilan de l'opération */ - - success = FALSE; - - if (selection != NULL && selection->length >= 0) - switch (target) - { - case TARGET_DOCKITEM: - success = (selection->length == sizeof(GDockItem *)); - - printf(" ## DRAG DATA RCV ## %p\n", dpanel); - - printf(" -- source :: %p\n", gtk_drag_get_source_widget(context)); - printf(" -- dest :: %p\n", dpanel); - - if (success) - { - ditem = G_DOCK_ITEM(*((GDockItem **)selection->data)); - - printf(" :: get ? %p - %d\n", ditem, G_IS_DOCK_ITEM(ditem)); - - gtk_dock_panel_remove_item(gtk_drag_get_source_widget(context), ditem); - gtk_dock_panel_add_item(dpanel, ditem); - - } - - break; - - } - - gtk_drag_finish(context, success, context->action == GDK_ACTION_MOVE, time); - -} - - -/****************************************************************************** -* * -* Paramètres : dpanel = composant à l'origine de la manoeuvre. * -* context = contexte de l'opération de "Drag and drop". * -* x = abscisse du pointeur relaché. * -* y = ordonnée du pointeur relaché. * -* time = date de l'opération. * -* data = adresse non utilisée ici. * -* * -* Description : Accompagne le déplacement sur une cible de "Drag and drop". * -* * -* Retour : TRUE pour continuer la propagation, FALSE sinon. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static gboolean gtk_dock_panel_drag_motion_cb(GtkDockPanel *dpanel, GdkDragContext *context, gint x, gint y, guint time, gpointer data) -{ - gint new_x; /* Abscisse de la fenêtre */ - gint new_y; /* Ordonnée de la fenêtre */ - GtkRequisition req; /* Taille actuelle du panneau */ - -#if 0 - if (!gtk_widget_get_visible(dpanel->dropwin)) - { - gdk_window_get_origin(GTK_WIDGET(dpanel)->window, &new_x, &new_y); - - new_x += GTK_WIDGET(dpanel)->allocation.x + (GTK_WIDGET(dpanel)->allocation.width - 89) / 2; - new_y += GTK_WIDGET(dpanel)->allocation.y + (GTK_WIDGET(dpanel)->allocation.height - 89) / 2; - - gtk_widget_set_uposition(dpanel->dropwin, new_x, new_y); - - gtk_widget_show(dpanel->dropwin); - - } -#endif - return FALSE; - -} - - -/****************************************************************************** -* * -* Paramètres : dpanel = composant à l'origine de la manoeuvre. * -* context = contexte de l'opération de "Drag and drop". * -* x = abscisse du pointeur relaché. * -* y = ordonnée du pointeur relaché. * -* time = date de l'opération. * -* data = adresse non utilisée ici. * -* * -* Description : Note la fin des visites sur une cible de "Drag and drop". * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void gtk_dock_panel_drag_leave_cb(GtkDockPanel *dpanel, GdkDragContext *context, guint time, gpointer data) -{ - //gtk_widget_hide(dpanel->dropwin); - -} - - -/****************************************************************************** -* * -* Paramètres : dpanel = composant à l'origine de la manoeuvre. * -* context = contexte de l'opération de "Drag and drop". * -* data = adresse non utilisée ici. * -* * -* Description : Procède au démarrage d'un "Drag and drop". * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void gtk_dock_panel_drag_begin_cb(GtkDockPanel *dpanel, GdkDragContext *context, gpointer data) -{ - printf(" ## DRAG BEGIN ## %p\n", dpanel); - -} - - -/****************************************************************************** -* * -* Paramètres : dpanel = composant à l'origine de la manoeuvre. * -* context = contexte de l'opération de "Drag and drop". * -* selection = réceptacle pour la transmission. * -* target = type de données demandé. * -* time = date de l'opération. * -* data = adresse non utilisée ici. * -* * -* Description : Procède à l'envoi depuis la source à la destination. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void gtk_dock_panel_drag_data_get_cb(GtkDockPanel *dpanel, GdkDragContext *context, GtkSelectionData *selection, guint target, guint time, gpointer data) -{ - gint current; /* Indice de l'onglet courant */ - GDockItem *ditem; /* Elément à transférer */ - - switch (target) - { - case TARGET_DOCKITEM: - - printf(" ## DRAG GET DATA ## %p\n", dpanel); - - current = gtk_notebook_get_current_page(dpanel->notebook); - - ditem = G_DOCK_ITEM(g_list_nth_data(dpanel->ditems, current)); - - printf(" %d nth item is %p\n", current, ditem); - - printf(" :: set ? %p - %d\n", ditem, G_IS_DOCK_ITEM(ditem)); - - gtk_selection_data_set(selection, selection->target, - 32, (guchar *)&ditem, sizeof(GDockItem *)); - - break; - - } - -} - - -/****************************************************************************** -* * -* Paramètres : dpanel = composant à l'origine de la manoeuvre. * -* context = contexte de l'opération de "Drag and drop". * -* data = adresse non utilisée ici. * -* * -* Description : Marque l'arrêt d'un "Drag and drop". * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void gtk_dock_panel_drag_end_cb(GtkDockPanel *dpanel, GdkDragContext *context, gpointer data) -{ - printf(" ## DRAG END ## %p\n", dpanel); - -} - - -/****************************************************************************** -* * -* Paramètres : dpanel = composant dont le contenu est à parcourir. * -* name = désignation humaine du membre à retrouver. * -* * -* Description : Retrouve un membre du panneau d'après son nom. * -* * -* Retour : Membre trouvé ou NULL si aucun. * -* * -* Remarques : - * -* * -******************************************************************************/ - -GDockItem *gtk_dock_panel_item_from_name(GtkDockPanel *dpanel, const char *name) -{ - GDockItem *result; /* Trouvaille à remonter */ - GList *iter; /* Boucle de parcours */ - const char *tmp; /* Autre nom à consulter */ - - result = NULL; - - for (iter = dpanel->ditems; iter != NULL && result == NULL; iter = g_list_next(iter)) - { - tmp = g_dock_item_get_name(G_DOCK_ITEM(iter->data)); - - if (strcmp(name, tmp) == 0) - result = G_DOCK_ITEM(iter->data); - - } - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : dpanel = composant GTK à compléter. * -* ditem = nouvel élément à intégrer. * -* * -* Description : Ajoute un paquet d'informations à la station dockable. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -void gtk_dock_panel_add_item(GtkDockPanel *dpanel, GDockItem *ditem) -{ - _gtk_dock_panel_add_item(dpanel, ditem, -1); - -} - - -/****************************************************************************** -* * -* Paramètres : dpanel = composant GTK à compléter. * -* ditem = nouvel élément à intégrer. * -* position = point d'insertion (-1 pour la fin). * -* * -* Description : Ajoute un paquet d'informations à la station dockable. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void _gtk_dock_panel_add_item(GtkDockPanel *dpanel, GDockItem *ditem, gint position) -{ - GtkWidget *label; /* Etiquette d'onglet */ - - dpanel->ditems = g_list_insert(dpanel->ditems, ditem, position); - - printf("[add %p to %p] list len :: %u\n", ditem, dpanel, g_list_length(dpanel->ditems)); - - label = gtk_label_new(g_dock_item_get_name(ditem)); - gtk_widget_show(label); - - gtk_notebook_insert_page(dpanel->notebook, g_dock_item_get_panel(ditem), label, position); - - gtk_notebook_set_show_tabs(dpanel->notebook, g_list_length(dpanel->ditems) > 1); - - g_signal_connect(ditem, "content-changed", G_CALLBACK(on_dock_item_content_changed), dpanel); - -} - - -/****************************************************************************** -* * -* Paramètres : ditem = composant GTK déjà mis à jour. * -* old = ancien panneau retiré. * -* new = nouveau panneau présenté. * -* dpanel = composant GTK à mettre à jour. * -* * -* Description : Remplace le panneau d'un membre actuellement affiché. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void on_dock_item_content_changed(GDockItem *ditem, GtkWidget *old, GtkWidget *new, GtkDockPanel *dpanel) -{ - gint position; /* Position de l'onglet à maj */ - - position = gtk_notebook_page_num(dpanel->notebook, old); - - g_signal_handlers_disconnect_by_func(dpanel->notebook, G_CALLBACK(gtk_dock_panel_update_title), dpanel); - - //g_object_ref(G_OBJECT(ditem)); - - _gtk_dock_panel_remove_item(dpanel, ditem, old); - _gtk_dock_panel_add_item(dpanel, ditem, position); - - //g_object_unref(G_OBJECT(ditem)); - - gtk_notebook_set_current_page(dpanel->notebook, position); - - g_signal_connect(dpanel->notebook, "switch-page", G_CALLBACK(gtk_dock_panel_update_title), dpanel); - - -} - - -/****************************************************************************** -* * -* Paramètres : dpanel = composant GTK à mettre à jour. * -* ditem = nouvel élément à sortir. * -* * -* Description : Supprime un paquet d'informations à la station dockable. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -void gtk_dock_panel_remove_item(GtkDockPanel *dpanel, GDockItem *ditem) -{ - gint pos; /* Position de l'élément visé */ - - g_signal_handlers_disconnect_by_func(ditem, G_CALLBACK(on_dock_item_content_changed), dpanel); - - pos = g_list_index(dpanel->ditems, ditem); - - dpanel->ditems = g_list_remove(dpanel->ditems, ditem); - - printf("[rem %p from %p] list len :: %u\n", ditem, dpanel, g_list_length(dpanel->ditems)); - - gtk_widget_ref(g_dock_item_get_panel(ditem)); - gtk_container_remove(GTK_CONTAINER(dpanel->notebook), g_dock_item_get_panel(ditem)); - - //gtk_notebook_remove_page(dpanel->notebook, pos); - - g_object_unref(G_OBJECT(ditem)); - - gtk_notebook_set_show_tabs(dpanel->notebook, g_list_length(dpanel->ditems) > 1); - -} - - -/****************************************************************************** -* * -* Paramètres : dpanel = composant GTK à mettre à jour. * -* ditem = nouvel élément à sortir. * -* panel = panneau GTK de l'élément à supprimer. * -* * -* Description : Supprime un paquet d'informations à la station dockable. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void _gtk_dock_panel_remove_item(GtkDockPanel *dpanel, GDockItem *ditem, GtkWidget *panel) -{ - gint pos; /* Position de l'élément visé */ - - g_signal_handlers_disconnect_by_func(ditem, G_CALLBACK(on_dock_item_content_changed), dpanel); - - pos = g_list_index(dpanel->ditems, ditem); - - dpanel->ditems = g_list_remove(dpanel->ditems, ditem); - - printf("[rem %p from %p] list len :: %u\n", ditem, dpanel, g_list_length(dpanel->ditems)); - - gtk_widget_ref(panel); - gtk_container_remove(GTK_CONTAINER(dpanel->notebook), panel); - - //gtk_notebook_remove_page(dpanel->notebook, pos); - - gtk_notebook_set_show_tabs(dpanel->notebook, g_list_length(dpanel->ditems) > 1); - -} - - -/****************************************************************************** -* * -* Paramètres : notebook = support à l'origine de la mise à jour. * -* page = onglet mis en avant. * -* index = indice de l'onglet actuellement actif. * -* data = adresse du conteneur supérieur. * -* * -* Description : Met à jour le titre du support de panneaux dockables. * -* * -* Retour : TRUE ? * -* * -* Remarques : - * -* * -******************************************************************************/ - -static gboolean gtk_dock_panel_update_title(GtkNotebook *notebook, gpointer *page, guint index, gpointer data) -{ - GDockItem *ditem; /* Elément nouvellement actif */ - const gchar *desc; /* Description à afficher */ - char *str; /* Valeur finale reconstituée */ - - - //printf("[%p] list len :: %u / %u\n", data, index, g_list_length(GTK_DOCK_PANEL(data)->ditems)); - - if (index >= g_list_length(GTK_DOCK_PANEL(data)->ditems)) return FALSE; - - //printf(" >> ditem = %p\n", g_list_nth_data(GTK_DOCK_PANEL(data)->ditems, index)); - - //printf(" >> index :: %u vs %d\n", index, gtk_notebook_get_current_page(GTK_DOCK_PANEL(data)->notebook)); - - ditem = G_DOCK_ITEM(g_list_nth_data(GTK_DOCK_PANEL(data)->ditems, index)); - - desc = g_dock_item_get_desc(ditem); - - str = calloc(strlen("<b>") + strlen(desc) + strlen("</b>") + 1, sizeof(char)); - - strcpy(str, "<b>"); - strcat(str, desc); - strcat(str, "</b>"); - - gtk_label_set_markup(GTK_DOCK_PANEL(data)->title, str); - - free(str); - - g_signal_emit_by_name(GTK_DOCK_PANEL(data), "switch-item", ditem); - - return TRUE; - -} diff --git a/src/gtkext/gtkdockpanel.h b/src/gtkext/gtkdockpanel.h deleted file mode 100644 index 9609710..0000000 --- a/src/gtkext/gtkdockpanel.h +++ /dev/null @@ -1,97 +0,0 @@ - -/* OpenIDA - Outil d'analyse de fichiers binaires - * gtkdockpanel.h - prototypes pour la manipulation et l'affichage de panneaux dockables - * - * Copyright (C) 2009-2012 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 <http://www.gnu.org/licenses/>. - */ - - -#ifndef _GTKEXT_GTKDOCKPANEL_H -#define _GTKEXT_GTKDOCKPANEL_H - - -#include <gtk/gtk.h> - - -#include "gtkdockitem.h" - - - -G_BEGIN_DECLS - - - -#define GTK_TYPE_DOCK_PANEL (gtk_dock_panel_get_type()) -#define GTK_DOCK_PANEL(obj) G_TYPE_CHECK_INSTANCE_CAST(obj, gtk_dock_panel_get_type (), GtkDockPanel) -#define GTK_DOCK_PANEL_CLASS(klass) G_TYPE_CHECK_CLASS_CAST(klass, gtk_dock_panel_get_type(), GtkDockPanelClass) -#define GTK_IS_DOCK_PANEL(obj) G_TYPE_CHECK_INSTANCE_TYPE(obj, gtk_dock_panel_get_type()) - - -typedef struct _GtkDockPanel GtkDockPanel; -typedef struct _GtkDockPanelClass GtkDockPanelClass; - - -#include <stdbool.h> - - -struct _GtkDockPanel -{ - GtkVBox vbox; /* Présence obligatoire en 1er */ - - GtkLabel *title; /* Title du support principal */ - - GtkNotebook *notebook; /* Support à onglets */ - GList *ditems; /* Panneaux intégrés */ - - GtkWidget *dropwin; /* Destination des Drag'n Drop */ - -}; - -struct _GtkDockPanelClass -{ - GtkVBoxClass parent_class; /* Présence obligatoire en 1er */ - - /* Signaux */ - - void (* switch_item) (GtkDockPanel *, GDockItem *); - -}; - - -/* Détermine le type du composant d'affichage des morceaux. */ -GType gtk_dock_panel_get_type(void); - -/* Crée un nouveau composant pour station dockable. */ -GtkWidget *gtk_dock_panel_new(void); - -/* Retrouve un membre du panneau d'après son nom. */ -GDockItem *gtk_dock_panel_item_from_name(GtkDockPanel *, const char *); - -/* Ajoute un paquet d'informations à la station dockable. */ -void gtk_dock_panel_add_item(GtkDockPanel *, GDockItem *); - -/* Supprime un paquet d'informations à la station dockable. */ -void gtk_dock_panel_remove_item(GtkDockPanel *, GDockItem *); - - - -G_END_DECLS - - - -#endif /* _GTKEXT_GTKDOCKPANEL_H */ diff --git a/src/gtkext/gtkgraphview.c b/src/gtkext/gtkgraphview.c index 6ce6060..9fa9135 100644 --- a/src/gtkext/gtkgraphview.c +++ b/src/gtkext/gtkgraphview.c @@ -569,7 +569,7 @@ static GtkViewPanel **gtk_graph_view_load_nodes(GtkGraphView *view, GLoadedBinar result = (GtkViewPanel **)realloc(result, ++(*count) * sizeof(GtkViewPanel *)); result[*count - 1] = GTK_VIEW_PANEL(gtk_block_view_new()); - gtk_widget_show(result[*count - 1]); + gtk_widget_show(GTK_WIDGET(result[*count - 1])); gtk_view_panel_attach_binary(result[*count - 1], binary, addr, code); gtk_view_panel_show_border(result[*count - 1], true); @@ -591,7 +591,7 @@ static GtkViewPanel **gtk_graph_view_load_nodes(GtkGraphView *view, GLoadedBinar result = (GtkViewPanel **)realloc(result, ++(*count) * sizeof(GtkViewPanel *)); result[*count - 1] = GTK_VIEW_PANEL(gtk_block_view_new()); - gtk_widget_show(result[*count - 1]); + gtk_widget_show(GTK_WIDGET(result[*count - 1])); gtk_view_panel_attach_binary(result[*count - 1], binary, addr, code); gtk_view_panel_show_border(result[*count - 1], true); @@ -612,7 +612,7 @@ static GtkViewPanel **gtk_graph_view_load_nodes(GtkGraphView *view, GLoadedBinar result = (GtkViewPanel **)realloc(result, ++(*count) * sizeof(GtkViewPanel *)); result[*count - 1] = GTK_VIEW_PANEL(gtk_block_view_new()); - gtk_widget_show(result[*count - 1]); + gtk_widget_show(GTK_WIDGET(result[*count - 1])); gtk_view_panel_attach_binary(result[*count - 1], binary, addr, code); gtk_view_panel_show_border(result[*count - 1], true); diff --git a/src/gtkext/gtksourceview.c b/src/gtkext/gtksourceview.c index 4d8af09..3559ece 100644 --- a/src/gtkext/gtksourceview.c +++ b/src/gtkext/gtksourceview.c @@ -123,7 +123,7 @@ GtkWidget *gtk_source_view_new(void) { GtkSourceView *result; /* Composant à retourner */ - result = gtk_type_new(GTK_TYPE_SOURCE_VIEW); + result = g_object_new(GTK_TYPE_SOURCE_VIEW, NULL); return GTK_WIDGET(result); diff --git a/src/gtkext/gtkviewpanel.c b/src/gtkext/gtkviewpanel.c index 2935458..3ccc0ff 100644 --- a/src/gtkext/gtkviewpanel.c +++ b/src/gtkext/gtkviewpanel.c @@ -511,7 +511,7 @@ bool gtk_view_panel_contain_address(const GtkViewPanel *panel, vmpa_t addr) * * ******************************************************************************/ -void gtk_view_panel_scroll_to_address(const GtkViewPanel *panel, vmpa_t addr) +void gtk_view_panel_scroll_to_address(GtkViewPanel *panel, vmpa_t addr) { gint x; /* Abscisse à garantir */ gint y; /* Ordonnée à garantir */ diff --git a/src/gtkext/gtkviewpanel.h b/src/gtkext/gtkviewpanel.h index f1dd2b7..7b883be 100644 --- a/src/gtkext/gtkviewpanel.h +++ b/src/gtkext/gtkviewpanel.h @@ -75,7 +75,7 @@ GLoadedBinary *gtk_view_panel_get_binary(const GtkViewPanel *); bool gtk_view_panel_contain_address(const GtkViewPanel *, vmpa_t); /* S'assure qu'une adresse donnée est visible à l'écran. */ -void gtk_view_panel_scroll_to_address(const GtkViewPanel *, vmpa_t); +void gtk_view_panel_scroll_to_address(GtkViewPanel *, vmpa_t); |