summaryrefslogtreecommitdiff
path: root/gui/DebugMemory.c
diff options
context:
space:
mode:
authorSND\ckain_cp <SND\ckain_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2013-07-31 10:20:19 +0000
committerSND\ckain_cp <SND\ckain_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2013-07-31 10:20:19 +0000
commitbd17a3b75328f8b8a5a99b106fa93883cd37c590 (patch)
treec4f261d25b5cfd75f27ba3f3e828ef351c6d3158 /gui/DebugMemory.c
parentd663bbeb7c6958388d515c196bc73956b574ffbb (diff)
downloadpcsxr-bd17a3b75328f8b8a5a99b106fa93883cd37c590.tar.gz
GTK: memory dump window usability fix: copy values when cells are clicked.
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@86320 e17a0e51-4ae3-4d35-97c3-1a29b211df97
Diffstat (limited to 'gui/DebugMemory.c')
-rwxr-xr-xgui/DebugMemory.c60
1 files changed, 49 insertions, 11 deletions
diff --git a/gui/DebugMemory.c b/gui/DebugMemory.c
index 9aac8a98..3c7939ab 100755
--- a/gui/DebugMemory.c
+++ b/gui/DebugMemory.c
@@ -25,6 +25,7 @@
static GtkBuilder *builder;
static GtkWidget *MemViewDlg = NULL;
static u32 MemViewAddress = 0;
+static u8 MemViewValue = 0;
/* Copy value of MemViewAddress as text of entry_address */
static void sync_update_address_text() {
@@ -32,7 +33,7 @@ static void sync_update_address_text() {
GtkWidget *widget;
sprintf(buftext, "%.8X", MemViewAddress | 0x80000000);
- widget = gtk_builder_get_object(builder, "entry_address");
+ widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_address"));
gtk_entry_set_text(GTK_ENTRY(widget), buftext);
}
@@ -59,7 +60,7 @@ static void UpdateMemViewDlg() {
if (end > 0x1fffff) end = 0x1fffff;
- widget = gtk_builder_get_object(builder, "GtkCList_MemView");
+ widget = GTK_WIDGET(gtk_builder_get_object(builder, "GtkCList_MemView"));
buftext[16] = '\0';
@@ -104,13 +105,45 @@ static void MemView_Next() {
static void MemView_Go() {
GtkWidget *widget;
- widget = gtk_builder_get_object(builder, "entry_address");
+ widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_address"));
sscanf(gtk_entry_get_text(GTK_ENTRY(widget)), "%x", &MemViewAddress);
UpdateMemViewDlg();
}
+static void MemView_RowActivated(
+ GtkTreeView *tree_view,
+ GtkTreePath *path,
+ GtkTreeViewColumn *column,
+ gpointer user_data)
+{
+ GtkTreeIter iter;
+ GtkTreeModel *mdl = gtk_tree_view_get_model(tree_view);
+
+ if (gtk_tree_model_get_iter(mdl, &iter, path)) {
+ const char *title = gtk_tree_view_column_get_title(column);
+ char *value, *address;
+ s8 index;
+ if (title[1] != '\0') {
+ index=1;
+ } else if (title[0] > 0x40) {
+ index=title[0]-0x36;
+ } else {
+ index=title[0]-0x2F;
+ }
+ gtk_tree_model_get(mdl, &iter, 0, &address, index, &value, -1);
+ sscanf(value, "%x", &MemViewValue);
+ sscanf(address, "%x", &MemViewAddress);
+ MemViewAddress &= ~0xF;
+ MemViewAddress |= (index-1u);
+ sync_update_address_text();
+
+ g_free(address);
+ g_free(value);
+ }
+}
+
static void MemView_Dump() {
GtkWidget *dlg;
GtkWidget *box, *table, *label, *start_edit, *length_edit;
@@ -192,7 +225,7 @@ static void MemView_Dump() {
static void MemView_Patch() {
GtkWidget *dlg;
GtkWidget *box, *table, *label, *addr_edit, *val_edit;
- char buf[10];
+ char buf[12];
dlg = gtk_dialog_new_with_buttons(_("Memory Patch"), GTK_WINDOW(MemViewDlg),
GTK_DIALOG_MODAL, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
@@ -218,6 +251,8 @@ static void MemView_Patch() {
gtk_widget_show(label);
val_edit = gtk_entry_new();
+ sprintf(buf, "%.2X", MemViewValue);
+ gtk_entry_set_text(GTK_ENTRY(val_edit), buf);
gtk_table_attach(GTK_TABLE(table), val_edit, 1, 2, 1, 2, 0, 0, 5, 5);
gtk_widget_show(val_edit);
@@ -278,12 +313,12 @@ void RunDebugMemoryDialog() {
return;
}
- MemViewDlg = gtk_builder_get_object(builder, "MemViewDlg");
+ MemViewDlg = GTK_WIDGET(gtk_builder_get_object(builder, "MemViewDlg"));
gtk_window_set_title(GTK_WINDOW(MemViewDlg), _("Memory Viewer"));
gtk_widget_show (MemViewDlg);
- widget = gtk_builder_get_object(builder, "GtkCList_MemView");
+ widget = GTK_WIDGET(gtk_builder_get_object(builder, "GtkCList_MemView"));
renderer = gtk_cell_renderer_text_new();
column = gtk_tree_view_column_new_with_attributes(_("Address"),
@@ -317,23 +352,26 @@ void RunDebugMemoryDialog() {
UpdateMemViewDlg();
- widget = gtk_builder_get_object(builder, "btn_dump");
+ g_signal_connect_data(G_OBJECT(widget), "row-activated",
+ G_CALLBACK(MemView_RowActivated), builder, NULL, G_CONNECT_AFTER);
+
+ widget = GTK_WIDGET(gtk_builder_get_object(builder, "btn_dump"));
g_signal_connect_data(G_OBJECT(widget), "clicked",
G_CALLBACK(MemView_Dump), builder, NULL, G_CONNECT_AFTER);
- widget = gtk_builder_get_object(builder, "btn_patch");
+ widget = GTK_WIDGET(gtk_builder_get_object(builder, "btn_patch"));
g_signal_connect_data(G_OBJECT(widget), "clicked",
G_CALLBACK(MemView_Patch), builder, NULL, G_CONNECT_AFTER);
- widget = gtk_builder_get_object(builder, "btn_go");
+ widget = GTK_WIDGET(gtk_builder_get_object(builder, "btn_go"));
g_signal_connect_data(G_OBJECT(widget), "clicked",
G_CALLBACK(MemView_Go), builder, NULL, G_CONNECT_AFTER);
- widget = gtk_builder_get_object(builder, "btn_prev");
+ widget = GTK_WIDGET(gtk_builder_get_object(builder, "btn_prev"));
g_signal_connect_data(G_OBJECT(widget), "clicked",
G_CALLBACK(MemView_Prev), builder, NULL, G_CONNECT_AFTER);
- widget = gtk_builder_get_object(builder, "btn_next");
+ widget = GTK_WIDGET(gtk_builder_get_object(builder, "btn_next"));
g_signal_connect_data(G_OBJECT(widget), "clicked",
G_CALLBACK(MemView_Next), builder, NULL, G_CONNECT_AFTER);