summaryrefslogtreecommitdiff
path: root/src/gui/status.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2015-12-16 17:20:06 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2015-12-16 17:20:06 (GMT)
commit7c40b70d6c1e1e13dadf876c8dda60b525616d47 (patch)
tree743d0b1981a13fb2de0d2eaacc4f644cf84204c0 /src/gui/status.c
parent4d313d845a60e908b9e2723cc1fe2bdbbdded315 (diff)
Built a new improved status bar for instructions information.
Diffstat (limited to 'src/gui/status.c')
-rw-r--r--src/gui/status.c163
1 files changed, 9 insertions, 154 deletions
diff --git a/src/gui/status.c b/src/gui/status.c
index 41cad1a..f466193 100644
--- a/src/gui/status.c
+++ b/src/gui/status.c
@@ -36,7 +36,7 @@
#include "../common/extstr.h"
#include "../gtkext/gtkbufferview.h"
#include "../gtkext/gtkblockview.h"
-#include "../gtkext/gtkextstatusbar.h"
+#include "../gtkext/gtkstatusstack.h"
@@ -136,7 +136,7 @@ static void g_status_info_init(GStatusInfo *bar)
item->name = "status";
- item->widget = gtk_extended_status_bar_new();
+ item->widget = gtk_status_stack_new();
gtk_widget_show(item->widget);
}
@@ -271,89 +271,12 @@ static void track_caret_address_on_buffer_views(GtkBufferView *view, const vmpa2
{
GEditorItem *item; /* Autre version de l'élément */
GLoadedBinary *binary; /* Binaire courant */
- GExeFormat *format; /* Format du fichier binaire */
- GArchProcessor *proc; /* Architecture du binaire */
- MemoryDataSize msize; /* Taille par défaut */
- char *msg; /* Message à transmettre */
- VMPA_BUFFER(conv); /* Zone de conversion */
-
- vmpa_t rel; /* Adresse relative à un symb. */
- const char *label; /* Désignation d'un symbole */
item = G_EDITOR_ITEM(info);
binary = g_editor_item_get_current_binary(item);
- proc = g_loaded_binary_get_processor(binary);
- msize = g_arch_processor_get_memory_size(proc);
- g_object_unref(G_OBJECT(proc));
-
- /* Réinitiation seule si il n'y a plus d'adresse... */
-
- if (addr == NULL)
- {
- if (info->msg_id > 0)
- gtk_extended_status_bar_remove(GTK_EXT_STATUS_BAR(item->widget), info->msg_id);
-
- return;
-
- }
-
- /* Adresse brute */
-
- msize = g_arch_processor_get_memory_size(proc);
-
- msg = strdup(_("Location phys:"));
-
- vmpa2_phys_to_string(addr, msize, conv, NULL);
- msg = stradd(msg, conv);
-
- msg = stradd(msg, " virt:");
-
- vmpa2_virt_to_string(addr, msize, conv, NULL);
- msg = stradd(msg, conv);
-
-
-
-#if 0
-
- /* Relation avec les symboles */
-
- binary = G_LOADED_BINARY(g_object_get_data(item->ref, "current_binary"));
- format = g_loaded_binary_get_format(binary);
-
- rel = addr;
-
- if (g_binary_format_resolve_relative_routine(G_BIN_FORMAT(format), &label, &rel))
- {
- msg = stradd(msg, _(" at "));
- msg = stradd(msg, label);
- msg = stradd(msg, _("+"));
-
- snprintf(tmp, VMPA_MAX_SIZE, VMPA_FMT, rel);
- msg = stradd(msg, tmp);
-
- }
-
-#endif
-
-
- /* Impression */
-
- if (info->msg_id > 0)
- gtk_extended_status_bar_remove(GTK_EXT_STATUS_BAR(item->widget), info->msg_id);
-
- info->msg_id = gtk_extended_status_bar_push(GTK_EXT_STATUS_BAR(item->widget), msg, FALSE);
-
-
- printf("---- moved to 0x%08llx\n", addr);
-
- printf(" MSG '%s'\n", msg);
-
- //update_menu_project_for_project(bar->project, project, bar);
-
-
- free(msg);
+ focus_address_in_status_info(info, binary, addr);
}
@@ -374,85 +297,17 @@ static void track_caret_address_on_buffer_views(GtkBufferView *view, const vmpa2
static void focus_address_in_status_info(GStatusInfo *info, GLoadedBinary *binary, const vmpa2t *addr)
{
- GExeFormat *format; /* Format associé au binaire */
GArchProcessor *proc; /* Architecture du binaire */
- MemoryDataSize msize; /* Taille du bus d'adresses */
- char *msg; /* Message à transmettre */
- VMPA_BUFFER(tmp); /* Traduction d'adresses */
- GBinSymbol *symbol; /* Symbole présent à l'adresse */
- phys_t diff; /* Décallage de l'adresse */
- const char *label; /* Description d'un symbole */
- GBinPortion *portions; /* Portions binaires existantes*/
- GBinPortion *portion; /* Zone mémoire d'appartenance */
- size_t len; /* Caractère à faire basculer */
-
- format = g_loaded_binary_get_format(binary);
+ GArchInstruction *instr; /* Instruction présente */
+ GEditorItem *item; /* Autre version de l'élément */
proc = g_loaded_binary_get_processor(binary);
- msize = g_arch_processor_get_memory_size(proc);
- g_object_unref(G_OBJECT(proc));
-
- msg = strdup(_("Localisation:"));
-
- /* Adresses de base */
-
- msg = stradd(msg, " phys:");
- vmpa2_phys_to_string(addr, msize, tmp, NULL);
- msg = stradd(msg, tmp);
-
- msg = stradd(msg, " virt:");
- vmpa2_virt_to_string(addr, msize, tmp, NULL);
- msg = stradd(msg, tmp);
-
- /* Symbole présent ? */
-
- if (g_binary_format_resolve_symbol(G_BIN_FORMAT(format), addr, &symbol, &diff))
- {
- label = g_binary_symbol_get_label(symbol);
-
- if (label != NULL)
- {
- msg = stradd(msg, _(" at "));
- msg = stradd(msg, label);
- msg = stradd(msg, _("+"));
- snprintf(tmp, VMPA_MAX_SIZE, "0x%x", diff);
- msg = stradd(msg, tmp);
+ instr = g_arch_processor_find_instr_by_address(proc, addr);
- }
-
- g_object_unref(G_OBJECT(symbol));
-
- }
-
- /* Zone d'appartenance */
-
- portions = g_exe_format_get_portions(format);
-
- portion = g_binary_portion_find_at_addr(portions, addr, (GdkRectangle []) { });
-
- label = g_binary_portion_get_desc(portion);
-
- msg = stradd(msg, _(" ("));
-
- /**
- * Pas très propre : on bascule de majuscule en minuscule ici...
- * FIXME ?
- */
-
- len = strlen(msg);
- msg = stradd(msg, label);
- msg[len] = tolower(msg[len]);
-
- msg = stradd(msg, _(")"));
-
- /* Impression */
-
- if (info->msg_id > 0)
- gtk_extended_status_bar_remove(GTK_EXT_STATUS_BAR(G_EDITOR_ITEM(info)->widget), info->msg_id);
-
- info->msg_id = gtk_extended_status_bar_push(GTK_EXT_STATUS_BAR(G_EDITOR_ITEM(info)->widget), msg, FALSE);
+ item = G_EDITOR_ITEM(info);
+ gtk_status_stack_update_current_instruction(GTK_STATUS_STACK(item->widget), binary, instr);
- free(msg);
+ g_object_unref(G_OBJECT(proc));
}