summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/modules/debugger
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2017-07-21 01:17:52 +1000
committer Vas Crabb <vas@vastheman.com>2017-07-21 01:17:52 +1000
commitb6d7d31d499b6ed5b31b6318bd63264c17bb1b2a (patch)
tree3985a258c1c161e89b88022f3a30268178190324 /src/osd/modules/debugger
parentc36c1572ec7d2e1830804884d75824e83bd883d5 (diff)
* Save/restore more Cocoa debugger state
* Fix some Cocoa debugger desync issues - Scroll to selection on gaining focus by keyboard (e.g. tab) only - Fixes jump on clicking a memory or disasm view that you've scrolled
Diffstat (limited to 'src/osd/modules/debugger')
-rw-r--r--src/osd/modules/debugger/osx/debugconsole.h1
-rw-r--r--src/osd/modules/debugger/osx/debugconsole.mm8
-rw-r--r--src/osd/modules/debugger/osx/debugview.h5
-rw-r--r--src/osd/modules/debugger/osx/debugview.mm65
-rw-r--r--src/osd/modules/debugger/osx/disassemblyview.h3
-rw-r--r--src/osd/modules/debugger/osx/disassemblyview.mm16
-rw-r--r--src/osd/modules/debugger/osx/disassemblyviewer.h1
-rw-r--r--src/osd/modules/debugger/osx/disassemblyviewer.mm11
-rw-r--r--src/osd/modules/debugger/osx/memoryview.mm6
-rw-r--r--src/osd/modules/debugger/osx/memoryviewer.mm4
10 files changed, 111 insertions, 9 deletions
diff --git a/src/osd/modules/debugger/osx/debugconsole.h b/src/osd/modules/debugger/osx/debugconsole.h
index 8c5d87f8526..3c6ceb7395e 100644
--- a/src/osd/modules/debugger/osx/debugconsole.h
+++ b/src/osd/modules/debugger/osx/debugconsole.h
@@ -53,6 +53,7 @@
- (void)loadConfiguration:(util::xml::data_node const *)parentnode;
- (void)saveConfigurationToNode:(util::xml::data_node *)node;
+- (void)restoreConfigurationFromNode:(util::xml::data_node const *)node;
- (BOOL)control:(NSControl *)control textShouldBeginEditing:(NSText *)fieldEditor;
- (BOOL)control:(NSControl *)control textView:(NSTextView *)textView doCommandBySelector:(SEL)command;
diff --git a/src/osd/modules/debugger/osx/debugconsole.mm b/src/osd/modules/debugger/osx/debugconsole.mm
index aa93745dec6..ac17b10bdac 100644
--- a/src/osd/modules/debugger/osx/debugconsole.mm
+++ b/src/osd/modules/debugger/osx/debugconsole.mm
@@ -426,9 +426,17 @@
- (void)saveConfigurationToNode:(util::xml::data_node *)node {
[super saveConfigurationToNode:node];
node->set_attribute_int("type", MAME_DEBUGGER_WINDOW_TYPE_CONSOLE);
+ [dasmView saveConfigurationToNode:node];
}
+- (void)restoreConfigurationFromNode:(util::xml::data_node const *)node {
+ [super restoreConfigurationFromNode:node];
+ [dasmView restoreConfigurationFromNode:node];
+}
+
+
+
- (BOOL)control:(NSControl *)control textShouldBeginEditing:(NSText *)fieldEditor {
if (control == commandField)
[history edit];
diff --git a/src/osd/modules/debugger/osx/debugview.h b/src/osd/modules/debugger/osx/debugview.h
index f3a8880c3a6..774a2898705 100644
--- a/src/osd/modules/debugger/osx/debugview.h
+++ b/src/osd/modules/debugger/osx/debugview.h
@@ -20,7 +20,7 @@
debug_view *view;
BOOL wholeLineScroll;
- int32_t totalWidth, totalHeight, originTop;
+ int32_t totalWidth, totalHeight, originTop;
NSFont *font;
CGFloat fontWidth, fontHeight, fontAscent;
@@ -56,6 +56,9 @@
- (void)addContextMenuItemsToMenu:(NSMenu *)menu;
+- (void)saveConfigurationToNode:(util::xml::data_node *)node;
+- (void)restoreConfigurationFromNode:(util::xml::data_node const *)node;
+
@end
diff --git a/src/osd/modules/debugger/osx/debugview.mm b/src/osd/modules/debugger/osx/debugview.mm
index 722dc933cf4..ed03d7e728c 100644
--- a/src/osd/modules/debugger/osx/debugview.mm
+++ b/src/osd/modules/debugger/osx/debugview.mm
@@ -14,6 +14,8 @@
#include "modules/lib/osdobj_common.h"
+#include "util/xmlfile.h"
+
#include <string.h>
@@ -484,6 +486,54 @@ static void debugwin_view_update(debug_view &view, void *osdprivate)
}
+- (void)saveConfigurationToNode:(util::xml::data_node *)node {
+ if (view->cursor_supported())
+ {
+ util::xml::data_node *const selection = node->add_child("selection", nullptr);
+ if (selection)
+ {
+ debug_view_xy const pos = view->cursor_position();
+ selection->set_attribute_int("visible", view->cursor_visible() ? 1 : 0);
+ selection->set_attribute_int("start_x", pos.x);
+ selection->set_attribute_int("start_y", pos.y);
+ }
+ }
+
+ util::xml::data_node *const scroll = node->add_child("scroll", nullptr);
+ if (scroll)
+ {
+ NSRect const visible = [self visibleRect];
+ scroll->set_attribute_float("position_x", visible.origin.x);
+ scroll->set_attribute_float("position_y", visible.origin.y);
+ }
+}
+
+
+- (void)restoreConfigurationFromNode:(util::xml::data_node const *)node {
+ if (view->cursor_supported())
+ {
+ util::xml::data_node const *const selection = node->get_child("selection");
+ if (selection)
+ {
+ debug_view_xy pos = view->cursor_position();
+ view->set_cursor_visible(0 != selection->get_attribute_int("visible", view->cursor_visible() ? 1 : 0));
+ pos.x = selection->get_attribute_int("start_x", pos.x);
+ pos.y = selection->get_attribute_int("start_y", pos.y);
+ view->set_cursor_position(pos);
+ }
+ }
+
+ util::xml::data_node const *const scroll = node->get_child("scroll");
+ if (scroll)
+ {
+ NSRect visible = [self visibleRect];
+ visible.origin.x = scroll->get_attribute_float("position_x", visible.origin.x);
+ visible.origin.y = scroll->get_attribute_float("position_y", visible.origin.y);
+ [self scrollRectToVisible:visible];
+ }
+}
+
+
- (BOOL)acceptsFirstResponder {
return view->cursor_supported();
}
@@ -492,13 +542,7 @@ static void debugwin_view_update(debug_view &view, void *osdprivate)
- (BOOL)becomeFirstResponder {
if (view->cursor_supported())
{
- debug_view_xy pos;
view->set_cursor_visible(true);
- pos = view->cursor_position();
- [self scrollRectToVisible:NSMakeRect((pos.x * fontWidth) + [textContainer lineFragmentPadding],
- pos.y * fontHeight,
- fontWidth,
- fontHeight)]; // FIXME: metrics
[self setNeedsDisplay:YES];
return [super becomeFirstResponder];
}
@@ -799,6 +843,15 @@ static void debugwin_view_update(debug_view &view, void *osdprivate)
}
+- (void)keyUp:(NSEvent *)event {
+ debug_view_xy const pos = view->cursor_position();
+ [self scrollRectToVisible:NSMakeRect((pos.x * fontWidth) + [textContainer lineFragmentPadding],
+ pos.y * fontHeight,
+ fontWidth,
+ fontHeight)]; // FIXME: metrics
+}
+
+
- (void)insertTab:(id)sender {
if ([[self window] firstResponder] == self)
[[self window] selectNextKeyView:self];
diff --git a/src/osd/modules/debugger/osx/disassemblyview.h b/src/osd/modules/debugger/osx/disassemblyview.h
index e841c39b182..c3b5a522d05 100644
--- a/src/osd/modules/debugger/osx/disassemblyview.h
+++ b/src/osd/modules/debugger/osx/disassemblyview.h
@@ -40,4 +40,7 @@
- (void)insertActionItemsInMenu:(NSMenu *)menu atIndex:(NSInteger)index;
- (void)insertSubviewItemsInMenu:(NSMenu *)menu atIndex:(NSInteger)index;
+- (void)saveConfigurationToNode:(util::xml::data_node *)node;
+- (void)restoreConfigurationFromNode:(util::xml::data_node const *)node;
+
@end
diff --git a/src/osd/modules/debugger/osx/disassemblyview.mm b/src/osd/modules/debugger/osx/disassemblyview.mm
index c1b00b0f553..99bdc485147 100644
--- a/src/osd/modules/debugger/osx/disassemblyview.mm
+++ b/src/osd/modules/debugger/osx/disassemblyview.mm
@@ -11,6 +11,8 @@
#include "debug/debugvw.h"
+#include "util/xmlfile.h"
+
@implementation MAMEDisassemblyView
@@ -265,4 +267,18 @@
[menu insertItem:[NSMenuItem separatorItem] atIndex:index++];
}
+
+- (void)saveConfigurationToNode:(util::xml::data_node *)node {
+ [super saveConfigurationToNode:node];
+ debug_view_disasm *const dasmView = downcast<debug_view_disasm *>(view);
+ node->set_attribute_int("rightbar", dasmView->right_column());
+}
+
+
+- (void)restoreConfigurationFromNode:(util::xml::data_node const *)node {
+ [super restoreConfigurationFromNode:node];
+ debug_view_disasm *const dasmView = downcast<debug_view_disasm *>(view);
+ dasmView->set_right_column((disasm_right_column)node->get_attribute_int("rightbar", dasmView->right_column()));
+}
+
@end
diff --git a/src/osd/modules/debugger/osx/disassemblyviewer.h b/src/osd/modules/debugger/osx/disassemblyviewer.h
index ce8682d3ce6..bdda89a36b4 100644
--- a/src/osd/modules/debugger/osx/disassemblyviewer.h
+++ b/src/osd/modules/debugger/osx/disassemblyviewer.h
@@ -34,5 +34,6 @@
- (IBAction)changeSubview:(id)sender;
- (void)saveConfigurationToNode:(util::xml::data_node *)node;
+- (void)restoreConfigurationFromNode:(util::xml::data_node const *)node;
@end
diff --git a/src/osd/modules/debugger/osx/disassemblyviewer.mm b/src/osd/modules/debugger/osx/disassemblyviewer.mm
index 11c947e66d1..55dceb92729 100644
--- a/src/osd/modules/debugger/osx/disassemblyviewer.mm
+++ b/src/osd/modules/debugger/osx/disassemblyviewer.mm
@@ -232,6 +232,17 @@
- (void)saveConfigurationToNode:(util::xml::data_node *)node {
[super saveConfigurationToNode:node];
node->set_attribute_int("type", MAME_DEBUGGER_WINDOW_TYPE_DISASSEMBLY_VIEWER);
+ node->set_attribute_int("cpu", [dasmView selectedSubviewIndex]);
+ [dasmView saveConfigurationToNode:node];
+}
+
+
+- (void)restoreConfigurationFromNode:(util::xml::data_node const *)node {
+ [super restoreConfigurationFromNode:node];
+ int const region = node->get_attribute_int("cpu", [dasmView selectedSubviewIndex]);
+ [dasmView selectSubviewAtIndex:region];
+ [subviewButton selectItemAtIndex:[subviewButton indexOfItemWithTag:[dasmView selectedSubviewIndex]]];
+ [dasmView restoreConfigurationFromNode:node];
}
diff --git a/src/osd/modules/debugger/osx/memoryview.mm b/src/osd/modules/debugger/osx/memoryview.mm
index 0f99f2ad7fa..b2c512d094b 100644
--- a/src/osd/modules/debugger/osx/memoryview.mm
+++ b/src/osd/modules/debugger/osx/memoryview.mm
@@ -201,20 +201,22 @@
- (void)saveConfigurationToNode:(util::xml::data_node *)node {
+ [super saveConfigurationToNode:node];
debug_view_memory *const memView = downcast<debug_view_memory *>(view);
- node->set_attribute_int("memoryregion", [self selectedSubviewIndex]);
node->set_attribute_int("reverse", memView->reverse() ? 1 : 0);
node->set_attribute_int("addressmode", memView->physical() ? 1 : 0);
node->set_attribute_int("dataformat", memView->get_data_format());
+ node->set_attribute_int("rowchunks", memView->chunks_per_row());
}
- (void)restoreConfigurationFromNode:(util::xml::data_node const *)node {
+ [super restoreConfigurationFromNode:node];
debug_view_memory *const memView = downcast<debug_view_memory *>(view);
- [self selectSubviewAtIndex:node->get_attribute_int("memoryregion", [self selectedSubviewIndex])];
memView->set_reverse(0 != node->get_attribute_int("reverse", memView->reverse() ? 1 : 0));
memView->set_physical(0 != node->get_attribute_int("addressmode", memView->physical() ? 1 : 0));
memView->set_data_format(node->get_attribute_int("dataformat", memView->get_data_format()));
+ memView->set_chunks_per_row(node->get_attribute_int("rowchunks", memView->chunks_per_row()));
}
diff --git a/src/osd/modules/debugger/osx/memoryviewer.mm b/src/osd/modules/debugger/osx/memoryviewer.mm
index ec498bc59cd..0248cc87dbe 100644
--- a/src/osd/modules/debugger/osx/memoryviewer.mm
+++ b/src/osd/modules/debugger/osx/memoryviewer.mm
@@ -179,12 +179,16 @@
- (void)saveConfigurationToNode:(util::xml::data_node *)node {
[super saveConfigurationToNode:node];
node->set_attribute_int("type", MAME_DEBUGGER_WINDOW_TYPE_MEMORY_VIEWER);
+ node->set_attribute_int("memoryregion", [memoryView selectedSubviewIndex]);
[memoryView saveConfigurationToNode:node];
}
- (void)restoreConfigurationFromNode:(util::xml::data_node const *)node {
[super restoreConfigurationFromNode:node];
+ int const region = node->get_attribute_int("memoryregion", [memoryView selectedSubviewIndex]);
+ [memoryView selectSubviewAtIndex:region];
+ [subviewButton selectItemAtIndex:[subviewButton indexOfItemWithTag:[memoryView selectedSubviewIndex]]];
[memoryView restoreConfigurationFromNode:node];
}