ui/cocoa.m: Add Machine menu with pause and resume menu items

Add Machine menu to the Macintosh interface with pause
and resume menu items. These items can either pause or
resume execution of the guest operating system.

Signed-off-by: John Arbuckle <programmingkidx@gmail.com>
Message-id: 6D7AE6AA-0595-4FAD-AACF-9DFAB87248F0@gmail.com
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
John Arbuckle 2015-06-19 10:53:27 +01:00 committed by Peter Maydell
parent 473a49460d
commit 8524f1c79e
1 changed files with 67 additions and 0 deletions

View File

@ -29,6 +29,7 @@
#include "ui/console.h" #include "ui/console.h"
#include "ui/input.h" #include "ui/input.h"
#include "sysemu/sysemu.h" #include "sysemu/sysemu.h"
#include "qmp-commands.h"
#ifndef MAC_OS_X_VERSION_10_5 #ifndef MAC_OS_X_VERSION_10_5
#define MAC_OS_X_VERSION_10_5 1050 #define MAC_OS_X_VERSION_10_5 1050
@ -65,6 +66,7 @@ static int last_buttons;
int gArgc; int gArgc;
char **gArgv; char **gArgv;
bool stretch_video; bool stretch_video;
NSTextField *pauseLabel;
// keymap conversion // keymap conversion
int keymap[] = int keymap[] =
@ -800,6 +802,10 @@ QemuCocoaView *cocoaView;
- (void)showQEMUTec:(id)sender; - (void)showQEMUTec:(id)sender;
- (void)zoomToFit:(id) sender; - (void)zoomToFit:(id) sender;
- (void)displayConsole:(id)sender; - (void)displayConsole:(id)sender;
- (void)pauseQEMU:(id)sender;
- (void)resumeQEMU:(id)sender;
- (void)displayPause;
- (void)removePause;
@end @end
@implementation QemuCocoaAppController @implementation QemuCocoaAppController
@ -834,6 +840,18 @@ QemuCocoaView *cocoaView;
[normalWindow makeKeyAndOrderFront:self]; [normalWindow makeKeyAndOrderFront:self];
[normalWindow center]; [normalWindow center];
stretch_video = false; stretch_video = false;
/* Used for displaying pause on the screen */
pauseLabel = [NSTextField new];
[pauseLabel setBezeled:YES];
[pauseLabel setDrawsBackground:YES];
[pauseLabel setBackgroundColor: [NSColor whiteColor]];
[pauseLabel setEditable:NO];
[pauseLabel setSelectable:NO];
[pauseLabel setStringValue: @"Paused"];
[pauseLabel setFont: [NSFont fontWithName: @"Helvetica" size: 90]];
[pauseLabel setTextColor: [NSColor blackColor]];
[pauseLabel sizeToFit];
} }
return self; return self;
} }
@ -977,6 +995,44 @@ QemuCocoaView *cocoaView;
{ {
console_select([sender tag]); console_select([sender tag]);
} }
/* Pause the guest */
- (void)pauseQEMU:(id)sender
{
qmp_stop(NULL);
[sender setEnabled: NO];
[[[sender menu] itemWithTitle: @"Resume"] setEnabled: YES];
[self displayPause];
}
/* Resume running the guest operating system */
- (void)resumeQEMU:(id) sender
{
qmp_cont(NULL);
[sender setEnabled: NO];
[[[sender menu] itemWithTitle: @"Pause"] setEnabled: YES];
[self removePause];
}
/* Displays the word pause on the screen */
- (void)displayPause
{
/* Coordinates have to be calculated each time because the window can change its size */
int xCoord, yCoord, width, height;
xCoord = ([normalWindow frame].size.width - [pauseLabel frame].size.width)/2;
yCoord = [normalWindow frame].size.height - [pauseLabel frame].size.height - ([pauseLabel frame].size.height * .5);
width = [pauseLabel frame].size.width;
height = [pauseLabel frame].size.height;
[pauseLabel setFrame: NSMakeRect(xCoord, yCoord, width, height)];
[cocoaView addSubview: pauseLabel];
}
/* Removes the word pause from the screen */
- (void)removePause
{
[pauseLabel removeFromSuperview];
}
@end @end
@ -1036,6 +1092,17 @@ int main (int argc, const char * argv[]) {
[[NSApp mainMenu] addItem:menuItem]; [[NSApp mainMenu] addItem:menuItem];
[NSApp performSelector:@selector(setAppleMenu:) withObject:menu]; // Workaround (this method is private since 10.4+) [NSApp performSelector:@selector(setAppleMenu:) withObject:menu]; // Workaround (this method is private since 10.4+)
// Machine menu
menu = [[NSMenu alloc] initWithTitle: @"Machine"];
[menu setAutoenablesItems: NO];
[menu addItem: [[[NSMenuItem alloc] initWithTitle: @"Pause" action: @selector(pauseQEMU:) keyEquivalent: @""] autorelease]];
menuItem = [[[NSMenuItem alloc] initWithTitle: @"Resume" action: @selector(resumeQEMU:) keyEquivalent: @""] autorelease];
[menu addItem: menuItem];
[menuItem setEnabled: NO];
menuItem = [[[NSMenuItem alloc] initWithTitle: @"Machine" action:nil keyEquivalent:@""] autorelease];
[menuItem setSubmenu:menu];
[[NSApp mainMenu] addItem:menuItem];
// View menu // View menu
menu = [[NSMenu alloc] initWithTitle:@"View"]; menu = [[NSMenu alloc] initWithTitle:@"View"];
[menu addItem: [[[NSMenuItem alloc] initWithTitle:@"Enter Fullscreen" action:@selector(doToggleFullScreen:) keyEquivalent:@"f"] autorelease]]; // Fullscreen [menu addItem: [[[NSMenuItem alloc] initWithTitle:@"Enter Fullscreen" action:@selector(doToggleFullScreen:) keyEquivalent:@"f"] autorelease]]; // Fullscreen