diff options
Diffstat (limited to 'src/osd/modules/debugger/osx/debugosxdisassemblyviewer.m')
-rw-r--r-- | src/osd/modules/debugger/osx/debugosxdisassemblyviewer.m | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/src/osd/modules/debugger/osx/debugosxdisassemblyviewer.m b/src/osd/modules/debugger/osx/debugosxdisassemblyviewer.m new file mode 100644 index 00000000000..3a965fe1404 --- /dev/null +++ b/src/osd/modules/debugger/osx/debugosxdisassemblyviewer.m @@ -0,0 +1,138 @@ +// license:BSD-3-Clause +// copyright-holders:Vas Crabb +//============================================================ +// +// debugosxdisassemblyviewer.m - MacOS X Cocoa debug window handling +// +// Copyright (c) 1996-2015, Nicola Salmoria and the MAME Team. +// Visit http://mamedev.org for licensing and usage restrictions. +// +//============================================================ + +#import "debugosxdisassemblyviewer.h" + +#import "debugosxdebugview.h" +#import "debugosxdisassemblyview.h" + +#include "debug/debugcpu.h" + + +@implementation MAMEDisassemblyViewer + +- (id)initWithMachine:(running_machine &)m console:(MAMEDebugConsole *)c { + NSScrollView *dasmScroll; + NSView *expressionContainer; + NSPopUpButton *actionButton, *subviewButton; + NSRect contentBounds, expressionFrame; + + if (!(self = [super initWithMachine:m title:@"Disassembly" console:c])) + return nil; + contentBounds = [[window contentView] bounds]; + + // create the expression field + expressionField = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 0, 100, 19)]; + [expressionField setAutoresizingMask:(NSViewWidthSizable | NSViewMaxXMargin | NSViewMinYMargin)]; + [expressionField setFont:[[MAMEDebugView class] defaultFont]]; + [expressionField setFocusRingType:NSFocusRingTypeNone]; + [expressionField setTarget:self]; + [expressionField setAction:@selector(doExpression:)]; + [expressionField setDelegate:self]; + expressionFrame = [expressionField frame]; + expressionFrame.size.width = (contentBounds.size.width - expressionFrame.size.height) / 2; + [expressionField setFrameSize:expressionFrame.size]; + + // create the subview popup + subviewButton = [[NSPopUpButton alloc] initWithFrame:NSOffsetRect(expressionFrame, + expressionFrame.size.width, + 0)]; + [subviewButton setAutoresizingMask:(NSViewWidthSizable | NSViewMinXMargin | NSViewMinYMargin)]; + [subviewButton setBezelStyle:NSShadowlessSquareBezelStyle]; + [subviewButton setFocusRingType:NSFocusRingTypeNone]; + [subviewButton setFont:[[MAMEDebugView class] defaultFont]]; + [subviewButton setTarget:self]; + [subviewButton setAction:@selector(changeSubview:)]; + [[subviewButton cell] setArrowPosition:NSPopUpArrowAtBottom]; + + // create a container for the expression field and subview popup + expressionFrame = NSMakeRect(expressionFrame.size.height, + contentBounds.size.height - expressionFrame.size.height, + contentBounds.size.width - expressionFrame.size.height, + expressionFrame.size.height); + expressionContainer = [[NSView alloc] initWithFrame:expressionFrame]; + [expressionContainer setAutoresizingMask:(NSViewWidthSizable | NSViewMinYMargin)]; + [expressionContainer addSubview:expressionField]; + [expressionField release]; + [expressionContainer addSubview:subviewButton]; + [subviewButton release]; + [[window contentView] addSubview:expressionContainer]; + [expressionContainer release]; + + // create the disassembly view + dasmView = [[MAMEDisassemblyView alloc] initWithFrame:NSMakeRect(0, 0, 100, 100) + machine:*machine + useConsole:NO]; + [dasmView insertSubviewItemsInMenu:[subviewButton menu] atIndex:0]; + dasmScroll = [[NSScrollView alloc] initWithFrame:NSMakeRect(0, + 0, + contentBounds.size.width, + expressionFrame.origin.y)]; + [dasmScroll setDrawsBackground:YES]; + [dasmScroll setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)]; + [dasmScroll setHasHorizontalScroller:YES]; + [dasmScroll setHasVerticalScroller:YES]; + [dasmScroll setAutohidesScrollers:YES]; + [dasmScroll setBorderType:NSNoBorder]; + [dasmScroll setDocumentView:dasmView]; + [dasmView release]; + [[window contentView] addSubview:dasmScroll]; + [dasmScroll release]; + + // create the action popup + actionButton = [[self class] newActionButtonWithFrame:NSMakeRect(0, + expressionFrame.origin.y, + expressionFrame.size.height, + expressionFrame.size.height)]; + [actionButton setAutoresizingMask:(NSViewMaxXMargin | NSViewMinYMargin)]; + [dasmView insertActionItemsInMenu:[actionButton menu] atIndex:1]; + [[window contentView] addSubview:actionButton]; + [actionButton release]; + + // set default state + [dasmView selectSubviewForCPU:debug_cpu_get_visible_cpu(*machine)]; + [dasmView setExpression:@"curpc"]; + [expressionField setStringValue:@"curpc"]; + [expressionField selectText:self]; + [subviewButton selectItemAtIndex:[subviewButton indexOfItemWithTag:[dasmView selectedSubviewIndex]]]; + [window makeFirstResponder:expressionField]; + [window setTitle:[NSString stringWithFormat:@"Disassembly: %@", [dasmView selectedSubviewName]]]; + + // calculate the optimal size for everything + { + NSSize desired = [NSScrollView frameSizeForContentSize:[dasmView maximumFrameSize] + hasHorizontalScroller:YES + hasVerticalScroller:YES + borderType:[dasmScroll borderType]]; + [self cascadeWindowWithDesiredSize:desired forView:dasmScroll]; + } + + // don't forget the result + return self; +} + + +- (void)dealloc { + [super dealloc]; +} + + +- (id <MAMEDebugViewExpressionSupport>)documentView { + return dasmView; +} + + +- (IBAction)changeSubview:(id)sender { + [dasmView selectSubviewAtIndex:[[sender selectedItem] tag]]; + [window setTitle:[NSString stringWithFormat:@"Disassembly: %@", [dasmView selectedSubviewName]]]; +} + +@end |