summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2015-02-19 02:47:41 +1100
committer Vas Crabb <vas@vastheman.com>2015-02-19 02:47:41 +1100
commit9770a7aa9c514b96a90c3bb8449dee4712e1e838 (patch)
tree4b2d755bf2b2e899d76a20d0719f5d8a0c63533c
parentc46847b551a099861677f677cf60013e3165ba41 (diff)
Allow copying visible portion of debug view to OS clipboard
-rw-r--r--src/osd/modules/debugger/osx/debugview.h4
-rw-r--r--src/osd/modules/debugger/osx/debugview.m67
-rw-r--r--src/osd/modules/debugger/osx/disassemblyview.m94
-rw-r--r--src/osd/modules/debugger/osx/memoryview.m16
4 files changed, 126 insertions, 55 deletions
diff --git a/src/osd/modules/debugger/osx/debugview.h b/src/osd/modules/debugger/osx/debugview.h
index a95d81a85c6..1a58975cc79 100644
--- a/src/osd/modules/debugger/osx/debugview.h
+++ b/src/osd/modules/debugger/osx/debugview.h
@@ -48,9 +48,13 @@
- (BOOL)cursorVisible;
- (debug_view_xy)cursorPosition;
+- (IBAction)copyVisible:(id)sender;
+
- (void)windowDidBecomeKey:(NSNotification *)notification;
- (void)windowDidResignKey:(NSNotification *)notification;
+- (void)addContextMenuItemsToMenu:(NSMenu *)menu;
+
@end
diff --git a/src/osd/modules/debugger/osx/debugview.m b/src/osd/modules/debugger/osx/debugview.m
index cc5ad4f24aa..2e90e8b0598 100644
--- a/src/osd/modules/debugger/osx/debugview.m
+++ b/src/osd/modules/debugger/osx/debugview.m
@@ -224,6 +224,11 @@ static void debugwin_view_update(debug_view &view, void *osdprivate)
[self setFont:[[self class] defaultFont]];
+ NSMenu *contextMenu = [[NSMenu allocWithZone:[NSMenu menuZone]] initWithTitle:@"Context"];
+ [self addContextMenuItemsToMenu:contextMenu];
+ [self setMenu:contextMenu];
+ [contextMenu release];
+
return self;
}
@@ -301,6 +306,58 @@ static void debugwin_view_update(debug_view &view, void *osdprivate)
}
+- (IBAction)copyVisible:(id)sender {
+ debug_view_xy const size = view->visible_size();
+ debug_view_char const *data = view->viewdata();
+ if (!data)
+ {
+ NSBeep();
+ return;
+ }
+
+ for (UINT32 row = 0; row < size.y; row++, data += size.x)
+ {
+ int attr = -1;
+ NSUInteger start = [text length], length = 0;
+ for (UINT32 col = 0; col < size.x; col++)
+ {
+ [[text mutableString] appendFormat:@"%c", data[col].byte];
+ if ((start < length) && (attr != (data[col].attrib & ~DCA_SELECTED)))
+ {
+ NSRange const run = NSMakeRange(start, length - start);
+ [text addAttribute:NSForegroundColorAttributeName
+ value:[self foregroundForAttribute:attr]
+ range:run];
+ [text addAttribute:NSBackgroundColorAttributeName
+ value:[self backgroundForAttribute:attr]
+ range:run];
+ start = length;
+ }
+ attr = data[col].attrib & ~DCA_SELECTED;
+ length = [text length];
+ }
+ if (start < length)
+ {
+ NSRange const run = NSMakeRange(start, length - start);
+ [text addAttribute:NSForegroundColorAttributeName
+ value:[self foregroundForAttribute:attr]
+ range:run];
+ [text addAttribute:NSBackgroundColorAttributeName
+ value:[self backgroundForAttribute:attr]
+ range:run];
+ }
+ [[text mutableString] appendString:@"\n"];
+ }
+
+ NSRange const run = NSMakeRange(0, [text length]);
+ [text addAttribute:NSFontAttributeName value:font range:run];
+ NSPasteboard *const board = [NSPasteboard generalPasteboard];
+ [board declareTypes:[NSArray arrayWithObject:NSRTFPboardType] owner:nil];
+ [board setData:[text RTFFromRange:run documentAttributes:nil] forType:NSRTFPboardType];
+ [text deleteCharactersInRange:run];
+}
+
+
- (void)windowDidBecomeKey:(NSNotification *)notification {
NSWindow *win = [notification object];
if ((win == [self window]) && ([win firstResponder] == self) && view->cursor_supported())
@@ -315,6 +372,16 @@ static void debugwin_view_update(debug_view &view, void *osdprivate)
}
+- (void)addContextMenuItemsToMenu:(NSMenu *)menu {
+ NSMenuItem *item;
+
+ item = [menu addItemWithTitle:@"Copy Visible"
+ action:@selector(copyVisible:)
+ keyEquivalent:@""];
+ [item setTarget:self];
+}
+
+
- (BOOL)acceptsFirstResponder {
return view->cursor_supported();
}
diff --git a/src/osd/modules/debugger/osx/disassemblyview.m b/src/osd/modules/debugger/osx/disassemblyview.m
index 12c3f540675..317f2e99b77 100644
--- a/src/osd/modules/debugger/osx/disassemblyview.m
+++ b/src/osd/modules/debugger/osx/disassemblyview.m
@@ -16,56 +16,9 @@
@implementation MAMEDisassemblyView
-- (void)createContextMenu {
- NSMenu *contextMenu = [[NSMenu allocWithZone:[NSMenu menuZone]] initWithTitle:@"Disassembly"];
- NSMenuItem *item;
-
- item = [contextMenu addItemWithTitle:@"Toggle Breakpoint"
- action:@selector(debugToggleBreakpoint:)
- keyEquivalent:[NSString stringWithFormat:@"%C", (short)NSF9FunctionKey]];
- [item setKeyEquivalentModifierMask:0];
-
- item = [contextMenu addItemWithTitle:@"Disable Breakpoint"
- action:@selector(debugToggleBreakpointEnable:)
- keyEquivalent:[NSString stringWithFormat:@"%C", (short)NSF9FunctionKey]];
- [item setKeyEquivalentModifierMask:NSShiftKeyMask];
-
- [contextMenu addItem:[NSMenuItem separatorItem]];
-
- item = [contextMenu addItemWithTitle:@"Run to Cursor"
- action:@selector(debugRunToCursor:)
- keyEquivalent:[NSString stringWithFormat:@"%C", (short)NSF4FunctionKey]];
- [item setKeyEquivalentModifierMask:0];
-
- [contextMenu addItem:[NSMenuItem separatorItem]];
-
- item = [contextMenu addItemWithTitle:@"Raw Opcodes"
- action:@selector(showRightColumn:)
- keyEquivalent:@"r"];
- [item setTarget:self];
- [item setTag:DASM_RIGHTCOL_RAW];
-
- item = [contextMenu addItemWithTitle:@"Encrypted Opcodes"
- action:@selector(showRightColumn:)
- keyEquivalent:@"e"];
- [item setTarget:self];
- [item setTag:DASM_RIGHTCOL_ENCRYPTED];
-
- item = [contextMenu addItemWithTitle:@"Comments"
- action:@selector(showRightColumn:)
- keyEquivalent:@"n"];
- [item setTarget:self];
- [item setTag:DASM_RIGHTCOL_COMMENTS];
-
- [self setMenu:contextMenu];
- [contextMenu release];
-}
-
-
- (id)initWithFrame:(NSRect)f machine:(running_machine &)m {
if (!(self = [super initWithFrame:f type:DVT_DISASSEMBLY machine:m]))
return nil;
- [self createContextMenu];
return self;
}
@@ -106,6 +59,53 @@
}
+- (void)addContextMenuItemsToMenu:(NSMenu *)menu {
+ NSMenuItem *item;
+
+ [super addContextMenuItemsToMenu:menu];
+
+ if ([menu numberOfItems] > 0)
+ [menu addItem:[NSMenuItem separatorItem]];
+
+ item = [menu addItemWithTitle:@"Toggle Breakpoint"
+ action:@selector(debugToggleBreakpoint:)
+ keyEquivalent:[NSString stringWithFormat:@"%C", (short)NSF9FunctionKey]];
+ [item setKeyEquivalentModifierMask:0];
+
+ item = [menu addItemWithTitle:@"Disable Breakpoint"
+ action:@selector(debugToggleBreakpointEnable:)
+ keyEquivalent:[NSString stringWithFormat:@"%C", (short)NSF9FunctionKey]];
+ [item setKeyEquivalentModifierMask:NSShiftKeyMask];
+
+ [menu addItem:[NSMenuItem separatorItem]];
+
+ item = [menu addItemWithTitle:@"Run to Cursor"
+ action:@selector(debugRunToCursor:)
+ keyEquivalent:[NSString stringWithFormat:@"%C", (short)NSF4FunctionKey]];
+ [item setKeyEquivalentModifierMask:0];
+
+ [menu addItem:[NSMenuItem separatorItem]];
+
+ item = [menu addItemWithTitle:@"Raw Opcodes"
+ action:@selector(showRightColumn:)
+ keyEquivalent:@"r"];
+ [item setTarget:self];
+ [item setTag:DASM_RIGHTCOL_RAW];
+
+ item = [menu addItemWithTitle:@"Encrypted Opcodes"
+ action:@selector(showRightColumn:)
+ keyEquivalent:@"e"];
+ [item setTarget:self];
+ [item setTag:DASM_RIGHTCOL_ENCRYPTED];
+
+ item = [menu addItemWithTitle:@"Comments"
+ action:@selector(showRightColumn:)
+ keyEquivalent:@"n"];
+ [item setTarget:self];
+ [item setTag:DASM_RIGHTCOL_COMMENTS];
+}
+
+
- (NSString *)selectedSubviewName {
const debug_view_source *source = view->source();
if (source != NULL)
diff --git a/src/osd/modules/debugger/osx/memoryview.m b/src/osd/modules/debugger/osx/memoryview.m
index ff6e827f22e..4ac5e28559b 100644
--- a/src/osd/modules/debugger/osx/memoryview.m
+++ b/src/osd/modules/debugger/osx/memoryview.m
@@ -18,16 +18,8 @@
@implementation MAMEMemoryView
- (id)initWithFrame:(NSRect)f machine:(running_machine &)m {
- NSMenu *contextMenu;
-
if (!(self = [super initWithFrame:f type:DVT_MEMORY machine:m]))
return nil;
-
- contextMenu = [[NSMenu allocWithZone:[NSMenu menuZone]] initWithTitle:@"Memory"];
- [self insertActionItemsInMenu:contextMenu atIndex:0];
- [self setMenu:contextMenu];
- [contextMenu release];
-
return self;
}
@@ -71,6 +63,14 @@
}
+- (void)addContextMenuItemsToMenu:(NSMenu *)menu {
+ [super addContextMenuItemsToMenu:menu];
+ if ([menu numberOfItems] > 0)
+ [menu addItem:[NSMenuItem separatorItem]];
+ [self insertActionItemsInMenu:menu atIndex:[menu numberOfItems]];
+}
+
+
- (NSString *)selectedSubviewName {
debug_view_source const *source = view->source();
if (source != NULL)