From 4741eb869e0b12b043f9ca4be7c115ac03791552 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Hor=C3=A1=C4=8Dek?= Date: Fri, 22 Feb 2013 18:22:16 +0100 Subject: [PATCH] add Mac OS X "Scope" menu with empty action --- interface/CMakeLists.txt | 2 +- interface/src/InterfaceMacOSX.h | 6 ++++ interface/src/InterfaceMacOSX.mm | 55 ++++++++++++++++++++++++++++++++ interface/src/main.cpp | 12 ++++++- 4 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 interface/src/InterfaceMacOSX.h create mode 100644 interface/src/InterfaceMacOSX.mm diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt index 0685aca6cd..d3bb79281b 100644 --- a/interface/CMakeLists.txt +++ b/interface/CMakeLists.txt @@ -21,7 +21,7 @@ endif (APPLE) configure_file(InterfaceConfig.h.in ${PROJECT_BINARY_DIR}/includes/InterfaceConfig.h) # grab the implementation and header files from src dir -file(GLOB INTERFACE_SRCS src/*.cpp src/*.h) +file(GLOB INTERFACE_SRCS src/*.mm src/*.cpp src/*.h) if (APPLE) # set how the icon shows up in the Info.plist file diff --git a/interface/src/InterfaceMacOSX.h b/interface/src/InterfaceMacOSX.h new file mode 100644 index 0000000000..1416d637a4 --- /dev/null +++ b/interface/src/InterfaceMacOSX.h @@ -0,0 +1,6 @@ +#ifndef __interface__InterfaceMacOSX +#define __interface__InterfaceMacOSX + +void initMacOSXMenu(); + +#endif diff --git a/interface/src/InterfaceMacOSX.mm b/interface/src/InterfaceMacOSX.mm new file mode 100644 index 0000000000..c834067324 --- /dev/null +++ b/interface/src/InterfaceMacOSX.mm @@ -0,0 +1,55 @@ +#import +#import + +@interface InterfaceMainMenuTarget : NSObject + +@property (strong, nonatomic) NSMenuItem *scopeAudioMenuItem; +@property (strong, nonatomic) NSMenuItem *scopeNoneMenuItem; + +@end + +@implementation InterfaceMainMenuTarget + +- (void)scopeAudioAction { + NSLog(@"scopeAudioAction"); +} + +- (void)scopeNoneAction { + NSLog(@"scopeNoneAction"); +} + +@end + +static InterfaceMainMenuTarget *sharedInterfaceMainMenuTarget = nil; + +void initMacOSXMenu() { + @autoreleasepool { + if (NSApp) { + if (!sharedInterfaceMainMenuTarget) { + sharedInterfaceMainMenuTarget = [[InterfaceMainMenuTarget alloc] init]; + } + + NSMenu *mainMenu = [NSApp mainMenu]; + + NSMenuItem *scopeMenuItem = [mainMenu insertItemWithTitle:@"Scope" + action:nil + keyEquivalent:@"" + atIndex:3]; + + NSMenu *scopeMenu = [[[NSMenu alloc] init] initWithTitle:@"Scope"]; + [scopeMenuItem setSubmenu:scopeMenu]; + sharedInterfaceMainMenuTarget.scopeAudioMenuItem = [scopeMenu addItemWithTitle:@"Audio" + action:@selector(scopeAudioAction) + keyEquivalent:@""]; + [sharedInterfaceMainMenuTarget.scopeAudioMenuItem setTarget:sharedInterfaceMainMenuTarget]; + [sharedInterfaceMainMenuTarget.scopeAudioMenuItem setState:NSOnState]; + + sharedInterfaceMainMenuTarget.scopeNoneMenuItem = [scopeMenu addItemWithTitle:@"None" + action:@selector(scopeNoneAction) + keyEquivalent:@""]; + [sharedInterfaceMainMenuTarget.scopeNoneMenuItem setTarget:sharedInterfaceMainMenuTarget]; + + [NSApp setMainMenu:mainMenu]; + } + } +} diff --git a/interface/src/main.cpp b/interface/src/main.cpp index 0f96ceb951..e20ef1a23d 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -44,6 +44,12 @@ #include "Oscilloscope.h" #include "UDPSocket.h" +#ifdef __APPLE__ + +#include "InterfaceMacOSX.h" + +#endif + using namespace std; int audio_on = 1; // Whether to turn on the audio support @@ -966,7 +972,11 @@ int main(int argc, char** argv) printf( "Init() complete.\n" ); glutTimerFunc(1000, Timer, 0); - + +#ifdef __APPLE__ + initMacOSXMenu(); +#endif + glutMainLoop(); pthread_join(networkReceiveThread, NULL);