diff options
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/menus/project.c | 94 | ||||
-rw-r--r-- | src/gui/panels/glance.c | 47 | ||||
-rw-r--r-- | src/gui/panels/panel.c | 4 | ||||
-rw-r--r-- | src/gui/panels/welcome.c | 2 |
4 files changed, 124 insertions, 23 deletions
diff --git a/src/gui/menus/project.c b/src/gui/menus/project.c index dbf61bc..19ced97 100644 --- a/src/gui/menus/project.c +++ b/src/gui/menus/project.c @@ -33,10 +33,14 @@ #include "../editem-int.h" #include "../../analysis/binaries/file.h" +#include "../../dialogs/shellcode.h" #include "../../gtkext/easygtk.h" +/* Affiche la boîte d'ajout d'un shellcode au projet courant. */ +static void mcb_project_add_shellcode(GtkMenuItem *, GMenuBar *); + /* Affiche la boîte d'ajout d'un binaire au projet courant. */ static void mcb_project_add_binary_file(GtkMenuItem *, GMenuBar *); @@ -79,6 +83,10 @@ GtkWidget *build_menu_project(GObject *ref, GtkAccelGroup *accgroup, GMenuBar *b deepmenubar = gtk_menu_new(); gtk_menu_item_set_submenu(GTK_MENU_ITEM(submenuitem), deepmenubar); + deepmenuitem = qck_create_menu_item(NULL, NULL, _("Shellcode"), + G_CALLBACK(mcb_project_add_shellcode), bar); + gtk_container_add(GTK_CONTAINER(deepmenubar), deepmenuitem); + deepmenuitem = qck_create_menu_item(NULL, NULL, _("File"), G_CALLBACK(mcb_project_add_binary_file), bar); gtk_container_add(GTK_CONTAINER(deepmenubar), deepmenuitem); @@ -163,6 +171,92 @@ void update_menu_project_for_project(GtkWidget *widget, GStudyProject *project, * Paramètres : menuitem = élément de menu sélectionné. * * bar = barre de menu parente. * * * +* Description : Affiche la boîte d'ajout d'un shellcode au projet courant. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void mcb_project_add_shellcode(GtkMenuItem *menuitem, GMenuBar *bar) +{ + GStudyProject *project; /* Projet courant */ + GtkWindow *parent; /* Respect de la hiérarchie */ + GtkWidget *dialog; /* Boîte à afficher */ + + project = get_current_project(); + parent = GTK_WINDOW(G_EDITOR_ITEM(bar)->ref); + + dialog = NULL; + + run_shellcode_assistant(project, parent); + + //if (run_shellcode_assistant(project, parent)) == GTK_RESPONSE_ACCEPT) + { + + ; + + + } + +#if 0 + GtkWidget *dialog; /* Boîte à afficher */ + char *dir; /* Répertoire courant */ + gchar *filename; /* Nom du fichier à intégrer */ + GLoadedBinary *binary; /* Représentation chargée */ + + dialog = gtk_file_chooser_dialog_new(_("Open a binary file"), + GTK_WINDOW(G_EDITOR_ITEM(bar)->ref), + GTK_FILE_CHOOSER_ACTION_OPEN, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, + NULL); + + if (g_study_project_get_filename(get_current_project()) != NULL) + { + dir = strdup(g_study_project_get_filename(get_current_project())); + dir = dirname(dir); + gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), dir); + free(dir); + } + + if (g_study_project_get_filename(get_current_project()) != NULL) + { + dir = strdup(g_study_project_get_filename(get_current_project())); + dir = dirname(dir); + gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), dir); + free(dir); + } + + if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) + { + filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); + + binary = g_file_binary_new_from_file(filename); + + if (binary != NULL) + { + g_signal_connect(binary, "disassembly-done", + G_CALLBACK(g_study_project_add_loaded_binary), get_current_project()); + g_loaded_binary_analyse(binary); + } + + g_free(filename); + + } + + gtk_widget_destroy(dialog); +#endif +} + + + +/****************************************************************************** +* * +* Paramètres : menuitem = élément de menu sélectionné. * +* bar = barre de menu parente. * +* * * Description : Affiche la boîte d'ajout d'un binaire au projet courant. * * * * Retour : - * diff --git a/src/gui/panels/glance.c b/src/gui/panels/glance.c index d6a744e..b344e69 100644 --- a/src/gui/panels/glance.c +++ b/src/gui/panels/glance.c @@ -97,7 +97,7 @@ static void compute_glance_scale(GGlancePanel *); static void update_glance_panel_for_view_content(GGlancePanel *, GtkViewPanel *); /* Met à jour l'affichage de l'aperçu rapide à présenter. */ -static gboolean redraw_glance_area(GtkWidget *, GdkEventExpose *, GGlancePanel *); +static gboolean redraw_glance_area(GtkWidget *, cairo_t *, GGlancePanel *); /* Assure la gestion des clics de souris sur l'aperçu. */ static gboolean on_button_press_over_glance(GtkWidget *, GdkEventButton *, GGlancePanel *); @@ -166,7 +166,7 @@ static void g_glance_panel_init(GGlancePanel *panel) gtk_widget_set_size_request(base->widget, 300, 300); - g_signal_connect(G_OBJECT(area), "expose_event", + g_signal_connect(G_OBJECT(area), "draw", G_CALLBACK(redraw_glance_area), panel); g_signal_connect(G_OBJECT(area), "size-allocate", G_CALLBACK(on_glance_resize), panel); @@ -221,13 +221,14 @@ GEditorItem *g_glance_panel_new(GObject *ref) static void define_glance_bg(GtkWidget *widget, GGlancePanel *panel) { + /* gtk_widget_modify_bg(widget, GTK_STATE_NORMAL, &widget->style->mid[GTK_STATE_NORMAL]); panel->red = widget->style->mid[GTK_STATE_NORMAL].red / USHRT_MAX; panel->green = widget->style->mid[GTK_STATE_NORMAL].green / USHRT_MAX; panel->blue = widget->style->mid[GTK_STATE_NORMAL].blue / USHRT_MAX; - + */ } @@ -332,7 +333,7 @@ static void on_view_scroll_setup(GtkAdjustment *adj, GGlancePanel *panel) hadj = gtk_scrolled_window_get_hadjustment(panel->support); vadj = gtk_scrolled_window_get_vadjustment(panel->support); - if (hadj->page_size == 0 || vadj->page_size == 0) + if (gtk_adjustment_get_page_size(hadj) == 0 || gtk_adjustment_get_page_size(vadj) == 0) return; compute_glance_scale(panel); @@ -367,13 +368,13 @@ static void on_view_scrolled(GtkAdjustment *adj, GGlancePanel *panel) hadj = gtk_scrolled_window_get_hadjustment(panel->support); vadj = gtk_scrolled_window_get_vadjustment(panel->support); - if (hadj->page_size == 0 || vadj->page_size == 0) + if (gtk_adjustment_get_page_size(hadj) == 0 || gtk_adjustment_get_page_size(vadj) == 0) return; - panel->visible.x = panel->painting.x + hadj->value * panel->scale; - panel->visible.y = panel->painting.y + vadj->value * panel->scale; - panel->visible.width = hadj->page_size * panel->scale; - panel->visible.height = vadj->page_size * panel->scale; + panel->visible.x = panel->painting.x + gtk_adjustment_get_value(hadj) * panel->scale; + panel->visible.y = panel->painting.y + gtk_adjustment_get_value(vadj) * panel->scale; + panel->visible.width = gtk_adjustment_get_page_size(hadj) * panel->scale; + panel->visible.height = gtk_adjustment_get_page_size(vadj) * panel->scale; gtk_widget_queue_draw(G_EDITOR_ITEM(panel)->widget); @@ -427,7 +428,7 @@ static void compute_glance_scale(GGlancePanel *panel) /* Superficies niveau GTK... */ gtk_widget_get_allocation(G_EDITOR_ITEM(panel)->widget, &available); - + /* border = MIN(2, G_EDITOR_ITEM(panel)->widget->style->xthickness); if (border > 0) { @@ -441,7 +442,7 @@ static void compute_glance_scale(GGlancePanel *panel) available.y = border; available.height -= 2 * border; } - + */ /* Calcul des ratios et emplacements */ sx = (1.0 * available.width) / panel->req.width; @@ -514,7 +515,7 @@ static void update_glance_panel_for_view_content(GGlancePanel *panel, GtkViewPan /****************************************************************************** * * * Paramètres : widget = composant GTK à redessiner. * -* event = informations liées à l'événement. * +* cr = contexte graphique liées à l'événement. * * panel = informations liées au panneau associé. * * * * Description : Met à jour l'affichage de l'aperçu rapide à présenter. * @@ -525,11 +526,11 @@ static void update_glance_panel_for_view_content(GGlancePanel *panel, GtkViewPan * * ******************************************************************************/ -static gboolean redraw_glance_area(GtkWidget *widget, GdkEventExpose *event, GGlancePanel *panel) +static gboolean redraw_glance_area(GtkWidget *widget, cairo_t *cr, GGlancePanel *panel) { GtkAllocation available; /* Surface disponible totale */ cairo_t *cairo; /* Gestionnaire de rendu */ - +#if 0 /* Dessin de la bordure */ gtk_widget_get_allocation(widget, &available); @@ -564,7 +565,7 @@ static gboolean redraw_glance_area(GtkWidget *widget, GdkEventExpose *event, GGl cairo_destroy(cairo); } - +#endif return TRUE; } @@ -598,8 +599,8 @@ static gboolean on_button_press_over_glance(GtkWidget *widget, GdkEventButton *e hadj = gtk_scrolled_window_get_hadjustment(panel->support); vadj = gtk_scrolled_window_get_vadjustment(panel->support); - panel->ref_h = hadj->value; - panel->ref_v = vadj->value; + panel->ref_h = gtk_adjustment_get_value(hadj); + panel->ref_v = gtk_adjustment_get_value(vadj); panel->valid = (panel->visible.x <= panel->start_x && panel->start_x < (panel->visible.x + panel->visible.width) @@ -609,8 +610,8 @@ static gboolean on_button_press_over_glance(GtkWidget *widget, GdkEventButton *e if (panel->valid) { cursor = gdk_cursor_new(GDK_FLEUR); - gdk_window_set_cursor(widget->window, cursor); - gdk_cursor_unref(cursor); + gdk_window_set_cursor(gtk_widget_get_window(widget), cursor); + g_object_unref(G_OBJECT(cursor)); } } @@ -639,7 +640,7 @@ static gboolean on_button_release_over_glance(GtkWidget *widget, GdkEventButton if (panel->view != NULL && event->button == 1) { if (panel->valid) - gdk_window_set_cursor(widget->window, NULL); + gdk_window_set_cursor(gtk_widget_get_window(widget), NULL); } @@ -678,10 +679,12 @@ static gboolean on_mouse_motion_over_glance(GtkWidget *widget, GdkEventMotion *e hadj = gtk_scrolled_window_get_hadjustment(panel->support); vadj = gtk_scrolled_window_get_vadjustment(panel->support); - value = CLAMP(panel->ref_h + diff_x, hadj->lower, hadj->upper - hadj->page_size); + value = CLAMP(panel->ref_h + diff_x, gtk_adjustment_get_lower(hadj), + gtk_adjustment_get_upper(hadj) - gtk_adjustment_get_page_size(hadj)); gtk_adjustment_set_value(hadj, value); - value = CLAMP(panel->ref_v + diff_y, vadj->lower, vadj->upper - vadj->page_size); + value = CLAMP(panel->ref_v + diff_y, gtk_adjustment_get_lower(vadj), + gtk_adjustment_get_upper(vadj) - gtk_adjustment_get_page_size(vadj)); gtk_adjustment_set_value(vadj, value); } diff --git a/src/gui/panels/panel.c b/src/gui/panels/panel.c index b178443..a883bfa 100644 --- a/src/gui/panels/panel.c +++ b/src/gui/panels/panel.c @@ -41,6 +41,10 @@ +/* Transition vers GTK-3.x claire */ +#define GTK_IS_HPANED(p) gtk_orientable_get_orientation(GTK_ORIENTABLE(p)) == GTK_ORIENTATION_HORIZONTAL + + /* Support de fond pour les composants. */ static GtkWidget *_support; static panel_node *_nodes = NULL; diff --git a/src/gui/panels/welcome.c b/src/gui/panels/welcome.c index 018f12a..8825c52 100644 --- a/src/gui/panels/welcome.c +++ b/src/gui/panels/welcome.c @@ -110,7 +110,7 @@ static void g_welcome_panel_init(GWelcomePanel *panel) GEditorItem *base; /* Version basique d'instance */ support = gtk_handle_box_new(); - gtk_widget_modify_bg(support, GTK_STATE_NORMAL, &support->style->bg[GTK_STATE_NORMAL]); + //gtk_widget_modify_bg(support, GTK_STATE_NORMAL, &support->style->bg[GTK_STATE_NORMAL]); gtk_widget_show(support); align = gtk_alignment_new(0.5f, 0.5f, 0.0f, 0.0f); |