diff options
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 |
commit | b6d7d31d499b6ed5b31b6318bd63264c17bb1b2a (patch) | |
tree | 3985a258c1c161e89b88022f3a30268178190324 /src/osd/modules/debugger | |
parent | c36c1572ec7d2e1830804884d75824e83bd883d5 (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.h | 1 | ||||
-rw-r--r-- | src/osd/modules/debugger/osx/debugconsole.mm | 8 | ||||
-rw-r--r-- | src/osd/modules/debugger/osx/debugview.h | 5 | ||||
-rw-r--r-- | src/osd/modules/debugger/osx/debugview.mm | 65 | ||||
-rw-r--r-- | src/osd/modules/debugger/osx/disassemblyview.h | 3 | ||||
-rw-r--r-- | src/osd/modules/debugger/osx/disassemblyview.mm | 16 | ||||
-rw-r--r-- | src/osd/modules/debugger/osx/disassemblyviewer.h | 1 | ||||
-rw-r--r-- | src/osd/modules/debugger/osx/disassemblyviewer.mm | 11 | ||||
-rw-r--r-- | src/osd/modules/debugger/osx/memoryview.mm | 6 | ||||
-rw-r--r-- | src/osd/modules/debugger/osx/memoryviewer.mm | 4 |
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]; } |