summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2015-02-19 00:42:26 +1100
committer Vas Crabb <vas@vastheman.com>2015-02-19 00:42:26 +1100
commitfc66643879c606d6cfb44ed6c2e4feffe3b6856d (patch)
tree5766d524428bd16279e286cad021b3b9a8e0c94a
parent69c1475dbf5e302377a3986747771824701ffe4c (diff)
Add preliminary device detail windows
-rw-r--r--src/osd/modules/debugger/osx/debugconsole.h1
-rw-r--r--src/osd/modules/debugger/osx/debugconsole.m11
-rw-r--r--src/osd/modules/debugger/osx/debugview.m1
-rw-r--r--src/osd/modules/debugger/osx/deviceinfoviewer.h30
-rw-r--r--src/osd/modules/debugger/osx/deviceinfoviewer.m195
-rw-r--r--src/osd/modules/debugger/osx/devicesviewer.h2
-rw-r--r--src/osd/modules/debugger/osx/devicesviewer.m9
-rw-r--r--src/osd/sdl/sdl.mak1
8 files changed, 249 insertions, 1 deletions
diff --git a/src/osd/modules/debugger/osx/debugconsole.h b/src/osd/modules/debugger/osx/debugconsole.h
index 8bfeb521529..4cae426ce9e 100644
--- a/src/osd/modules/debugger/osx/debugconsole.h
+++ b/src/osd/modules/debugger/osx/debugconsole.h
@@ -49,6 +49,7 @@
- (void)debugNewMemoryWindowForSpace:(address_space *)space device:(device_t *)device expression:(NSString *)expression;
- (void)debugNewDisassemblyWindowForSpace:(address_space *)space device:(device_t *)device expression:(NSString *)expression;
+- (void)debugNewInfoWindowForDevice:(device_t &)device;
- (void)showDebugger:(NSNotification *)notification;
- (void)auxiliaryWindowWillClose:(NSNotification *)notification;
diff --git a/src/osd/modules/debugger/osx/debugconsole.m b/src/osd/modules/debugger/osx/debugconsole.m
index 3266026cf27..130699b0ab5 100644
--- a/src/osd/modules/debugger/osx/debugconsole.m
+++ b/src/osd/modules/debugger/osx/debugconsole.m
@@ -14,6 +14,7 @@
#import "debugcommandhistory.h"
#import "consoleview.h"
#import "debugview.h"
+#import "deviceinfoviewer.h"
#import "devicesviewer.h"
#import "disassemblyview.h"
#import "disassemblyviewer.h"
@@ -350,6 +351,16 @@
}
+- (void)debugNewInfoWindowForDevice:(device_t &)device {
+ MAMEDeviceInfoViewer *win = [[MAMEDeviceInfoViewer alloc] initWithDevice:device
+ machine:*machine
+ console:self];
+ [auxiliaryWindows addObject:win];
+ [win release];
+ [win activate];
+}
+
+
- (void)showDebugger:(NSNotification *)notification {
device_t *device = (device_t * )[[[notification userInfo] objectForKey:@"MAMEDebugDevice"] pointerValue];
if (&device->machine() == machine)
diff --git a/src/osd/modules/debugger/osx/debugview.m b/src/osd/modules/debugger/osx/debugview.m
index 7e79909ef3b..52c34077546 100644
--- a/src/osd/modules/debugger/osx/debugview.m
+++ b/src/osd/modules/debugger/osx/debugview.m
@@ -456,6 +456,7 @@ static void debugwin_view_update(debug_view &view, void *osdprivate)
- (void)mouseDragged:(NSEvent *)event {
+ [self autoscroll:event];
NSPoint const location = [self convertPoint:[event locationInWindow] fromView:nil];
NSUInteger const modifiers = [event modifierFlags];
if (view->cursor_supported()
diff --git a/src/osd/modules/debugger/osx/deviceinfoviewer.h b/src/osd/modules/debugger/osx/deviceinfoviewer.h
new file mode 100644
index 00000000000..41243a954de
--- /dev/null
+++ b/src/osd/modules/debugger/osx/deviceinfoviewer.h
@@ -0,0 +1,30 @@
+// license:BSD-3-Clause
+// copyright-holders:Vas Crabb
+//============================================================
+//
+// deviceinfoviewer.h - 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 "debugosx.h"
+
+#import "debugwindowhandler.h"
+
+#include "emu.h"
+
+#import <Cocoa/Cocoa.h>
+
+
+@class MAMEDebugConsole, MAMEDeviceWrapper;
+
+@interface MAMEDeviceInfoViewer : MAMEAuxiliaryDebugWindowHandler
+{
+ device_t *device;
+}
+
+- (id)initWithDevice:(device_t &)d machine:(running_machine &)m console:(MAMEDebugConsole *)c;
+
+@end
diff --git a/src/osd/modules/debugger/osx/deviceinfoviewer.m b/src/osd/modules/debugger/osx/deviceinfoviewer.m
new file mode 100644
index 00000000000..eb729091021
--- /dev/null
+++ b/src/osd/modules/debugger/osx/deviceinfoviewer.m
@@ -0,0 +1,195 @@
+// license:BSD-3-Clause
+// copyright-holders:Vas Crabb
+//============================================================
+//
+// deviceinfoviewer.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 "deviceinfoviewer.h"
+
+
+@implementation MAMEDeviceInfoViewer
+
+- (NSTextField *)makeLabel:(NSString *)text {
+ NSTextField *const result = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 0, 100, 14)];
+ [result setAutoresizingMask:NSViewMinYMargin];
+ [[result cell] setControlSize:NSSmallControlSize];
+ [result setEditable:NO];
+ [result setSelectable:NO];
+ [result setBezeled:NO];
+ [result setBordered:NO];
+ [result setDrawsBackground:NO];
+ [result setAlignment:NSRightTextAlignment];
+ [result setFont:[NSFont systemFontOfSize:[NSFont systemFontSizeForControlSize:NSSmallControlSize]]];
+ [result setStringValue:text];
+ [result sizeToFit];
+ return result;
+}
+
+
+- (NSTextField *)makeField:(NSString *)text {
+ NSTextField *const result = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 0, 100, 14)];
+ [result setAutoresizingMask:(NSViewWidthSizable | NSViewMinYMargin)];
+ [[result cell] setControlSize:NSSmallControlSize];
+ [result setEditable:NO];
+ [result setSelectable:YES];
+ [result setBezeled:NO];
+ [result setBordered:NO];
+ [result setDrawsBackground:NO];
+ [result setAlignment:NSLeftTextAlignment];
+ [result setFont:[NSFont systemFontOfSize:[NSFont systemFontSizeForControlSize:NSSmallControlSize]]];
+ [result setStringValue:text];
+ [result sizeToFit];
+ return result;
+}
+
+
+- (NSBox *)makeBox:(NSString *)t toFit:(NSView *)v {
+ NSBox *const result = [[NSBox alloc] initWithFrame:NSMakeRect(0, 0, [v frame].size.width - 34, 32)];
+ [result setAutoresizingMask:(NSViewWidthSizable | NSViewMinYMargin)];
+ [result setTitle:t];
+ [result setBoxType:NSBoxPrimary];
+ [result setBorderType:NSLineBorder];
+ [result setContentViewMargins:NSMakeSize(0, 0)];
+ [result setAutoresizesSubviews:YES];
+ return result;
+}
+
+
+- (void)addLabel:(NSString *)l withWidth:(CGFloat)w andField:(NSString *)f toView:(NSView *)v {
+ NSTextField *const label = [self makeLabel:l];
+ NSTextField *const field = [self makeField:f];
+ CGFloat const height = MAX([label frame].size.height, [field frame].size.height);
+ NSSize space = [v bounds].size;
+ space.width = MAX(space.width, [field frame].size.width + w + 52);
+ space.height += height + 8;
+ [label setFrame:NSMakeRect(25, 20, w, height)];
+ [field setFrame:NSMakeRect(w + 27, 20, space.width - w - 52, height)];
+ [v setFrameSize:space];
+ [v addSubview:label];
+ [v addSubview:field];
+ [label release];
+ [field release];
+}
+
+
+- (void)addField:(NSString *)f toBox:(NSBox *)b {
+ NSTextField *const field = [self makeField:f];
+ NSSize space = [b frame].size;
+ space.width = MAX(space.width, [field frame].size.width + 32);
+ space.height += [field frame].size.height + 8;
+ [field setFrame:NSMakeRect(15, 14, space.width - 32, [field frame].size.height)];
+ [b setFrameSize:space];
+ [[b contentView] addSubview:field];
+ [field release];
+}
+
+
+- (void)addBox:(NSBox *)b toView:(NSView *)v {
+ [b setFrameOrigin:NSMakePoint(17, 16)];
+ NSSize space = [v frame].size;
+ space.width = MAX(space.width, [b frame].size.width + 34);
+ space.height += [b frame].size.height + 4;
+ [v setFrameSize:space];
+ [v addSubview:b];
+}
+
+
+- (id)initWithDevice:(device_t &)d machine:(running_machine &)m console:(MAMEDebugConsole *)c {
+ NSView *contentView;
+ NSScrollView *contentScroll;
+
+ if (!(self = [super initWithMachine:m
+ title:[NSString stringWithFormat:@"Device %s", d.tag()]
+ console:c]))
+ {
+ return nil;
+ }
+ device = &d;
+
+ // Create a view to hold everything
+ contentView = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 320, 32)];
+ [contentView setAutoresizingMask:(NSViewMaxXMargin | NSViewMinYMargin)];
+ [contentView setAutoresizesSubviews:YES];
+
+ // add the stuff that's always present
+ [self addLabel:@"Tag:"
+ withWidth:100
+ andField:[NSString stringWithUTF8String:device->tag()]
+ toView:contentView];
+ [self addLabel:@"Name:"
+ withWidth:100
+ andField:[NSString stringWithUTF8String:device->name()]
+ toView:contentView];
+ [self addLabel:@"Shortname:"
+ withWidth:100
+ andField:[NSString stringWithUTF8String:device->shortname()]
+ toView:contentView];
+
+ // add interfaces if present
+ device_interface *interface = device->first_interface();
+ if (interface != NULL)
+ {
+ NSBox *const interfacesBox = [self makeBox:@"Interfaces" toFit:contentView];
+ while (interface != NULL)
+ {
+ [self addField:[NSString stringWithUTF8String:interface->interface_type()]
+ toBox:interfacesBox];
+ interface = interface->interface_next();
+ }
+ [self addBox:interfacesBox toView:contentView];
+ [interfacesBox release];
+ }
+
+ // add memory maps if present
+ device_memory_interface *memory;
+ if (device->interface(memory))
+ {
+ NSBox *memoryBox = nil;
+ for (address_spacenum i = AS_0; i < ADDRESS_SPACES; i++)
+ {
+ if (memory->has_space(i))
+ {
+ if (memoryBox == nil)
+ memoryBox = [self makeBox:@"Memory maps" toFit:contentView];
+ [self addField:[NSString stringWithUTF8String:memory->space_config(i)->name()]
+ toBox:memoryBox];
+ }
+ }
+ if (memoryBox != nil)
+ {
+ [self addBox:memoryBox toView:contentView];
+ [memoryBox release];
+ }
+ }
+
+ // create a scroll view for holding everything
+ NSSize desired = [NSScrollView frameSizeForContentSize:[contentView frame].size
+ hasHorizontalScroller:YES
+ hasVerticalScroller:YES
+ borderType:NSNoBorder];
+ [window setContentSize:desired];
+ contentScroll = [[NSScrollView alloc] initWithFrame:[[window contentView] bounds]];
+ [contentScroll setDrawsBackground:NO];
+ [contentScroll setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)];
+ [contentScroll setHasHorizontalScroller:YES];
+ [contentScroll setHasVerticalScroller:YES];
+ [contentScroll setAutohidesScrollers:YES];
+ [contentScroll setBorderType:NSNoBorder];
+ [contentScroll setDocumentView:contentView];
+ [contentView release];
+ [[window contentView] addSubview:contentScroll];
+ [contentScroll release];
+
+ // calculate the optimal size for everything
+ [self cascadeWindowWithDesiredSize:NSMakeSize(320, 240) forView:contentScroll];
+
+ // don't forget the result
+ return self;
+}
+
+@end \ No newline at end of file
diff --git a/src/osd/modules/debugger/osx/devicesviewer.h b/src/osd/modules/debugger/osx/devicesviewer.h
index 3737a497163..24a2a2dc415 100644
--- a/src/osd/modules/debugger/osx/devicesviewer.h
+++ b/src/osd/modules/debugger/osx/devicesviewer.h
@@ -28,4 +28,6 @@
- (id)initWithMachine:(running_machine &)m console:(MAMEDebugConsole *)c;
+- (IBAction)showDeviceDetail:(id)sender;
+
@end
diff --git a/src/osd/modules/debugger/osx/devicesviewer.m b/src/osd/modules/debugger/osx/devicesviewer.m
index 29910c57c40..5cf2d33eedd 100644
--- a/src/osd/modules/debugger/osx/devicesviewer.m
+++ b/src/osd/modules/debugger/osx/devicesviewer.m
@@ -11,6 +11,8 @@
#import "devicesviewer.h"
+#import "debugconsole.h"
+
@interface MAMEDeviceWrapper : NSObject
{
@@ -138,9 +140,9 @@
[nameColumn release];
[devicesView setOutlineTableColumn:tagColumn];
[devicesView setAutoresizesOutlineColumn:YES];
+ [devicesView setDoubleAction:@selector(showDeviceDetail:)];
[devicesView setDataSource:self];
devicesScroll = [[NSScrollView alloc] initWithFrame:[[window contentView] bounds]];
- [devicesScroll setDrawsBackground:YES];
[devicesScroll setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)];
[devicesScroll setHasHorizontalScroller:YES];
[devicesScroll setHasVerticalScroller:YES];
@@ -175,6 +177,11 @@
}
+- (IBAction)showDeviceDetail:(id)sender {
+ [console debugNewInfoWindowForDevice:[(MAMEDeviceWrapper *)[sender itemAtRow:[sender clickedRow]] device]];
+}
+
+
- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item {
return [(MAMEDeviceWrapper *)item children] > 0;
}
diff --git a/src/osd/sdl/sdl.mak b/src/osd/sdl/sdl.mak
index 3843880da61..760b66f9f7e 100644
--- a/src/osd/sdl/sdl.mak
+++ b/src/osd/sdl/sdl.mak
@@ -295,6 +295,7 @@ DEBUGOBJS = \
$(OSDOBJ)/modules/debugger/osx/debugconsole.o \
$(OSDOBJ)/modules/debugger/osx/debugview.o \
$(OSDOBJ)/modules/debugger/osx/debugwindowhandler.o \
+ $(OSDOBJ)/modules/debugger/osx/deviceinfoviewer.o \
$(OSDOBJ)/modules/debugger/osx/devicesviewer.o \
$(OSDOBJ)/modules/debugger/osx/disassemblyview.o \
$(OSDOBJ)/modules/debugger/osx/disassemblyviewer.o \