#import "WiiToMidiController.h" @implementation WiiToMidiController -(void) awakeFromNib { // Populate the MIDI Channel picklist with values 1-16 [midiChannel removeAllItems]; int i; for (i = 1; i <= 16; i++) { [midiChannel addItemWithTitle:[NSString stringWithFormat:@"%i",i]]; } } -(id) init { _midiDevices = [[MidiDevice getAllMidiDevices] retain]; if (0 == [_midiDevices count]) { // No MIDI devices. Blarg im ded! [[NSAlert alertWithMessageText:@"No MIDI endpoints available" defaultButton:nil alternateButton:nil otherButton:nil informativeTextWithFormat:@"Enable some MIDI devices in Audio MIDI Setup and relaunch WiiToMidi."] runModal]; [NSApp terminate:self]; } wiiMidiDelegate = [[WiiMidiDelegate alloc] init]; [wiiMidiDelegate setObserver:self]; [self midiChannelChanged:midiChannel]; [self midiDeviceChanged:midiDevice]; [wiiMidiDelegate setMidiChannel:[midiChannel indexOfSelectedItem]]; _wiiDiscoveryAgent = [WiiRemoteDiscoveryAgent getInstance]; [_wiiDiscoveryAgent registerDelegate:wiiMidiDelegate]; return self; } -(void)wiiRemoteDisconnected:(id)delegate { [wiimoteMessage setStringValue:[NSString stringWithFormat:@"Press 1 and 2 buttons to connect Wiimote"]]; [_wiiDiscoveryAgent registerDelegate:wiiMidiDelegate]; } - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender { return NSTerminateNow; } -(void) midiChannelChanged:(NSPopUpButton*) button { [wiiMidiDelegate setMidiChannel:[midiChannel indexOfSelectedItem]]; } -(NSMutableArray*) midiDevices { return _midiDevices; } -(IBAction) midiDeviceChanged:(NSPopUpButton*) button { [wiiMidiDelegate setMidiDestination:[ [[self midiDevices] objectAtIndex:[button indexOfSelectedItem]] midiEndpoint]]; } -(void) windowWillClose:(NSNotification*)notification { // Closed windows shouldn't connect with wiimotes. [_wiiDiscoveryAgent unregisterDelegate:wiiMidiDelegate]; } -(void) stateChanged:(id)sender wiiRemoteConnected:(bool)connected learnMode:(bool)learnMode learnSubMode:(int)learnSubMode sensitivity:(int)sensitivity smoothing:(int)smoothing { NSString* message; NSString* learnModeStr; if (connected) { message = @"Wiimote connected"; } else { message = @"Press 1 and 2 buttons to connect Wiimote"; [_wiiDiscoveryAgent registerDelegate:wiiMidiDelegate]; } if (learnMode) { if (learnSubMode == SUBMODE_ACC) learnModeStr = @"On (Acceleration)"; else if (learnSubMode == SUBMODE_VEL) learnModeStr = @"On (Velocity)"; else if (learnSubMode == SUBMODE_POS) learnModeStr = @"On (Positional)"; else if (learnSubMode == SUBMODE_ORI) learnModeStr = @"On (Orientation)"; else if (learnSubMode == SUBMODE_JOY) learnModeStr = @"On (Joystick)"; else learnModeStr = @"On (Unknown)"; // If you ever see this string, it's a bug } else learnModeStr = @"Off"; [wiimoteMessage setStringValue:message]; [_learnModeTF setStringValue:learnModeStr]; [_smoothingTF setStringValue:[NSString stringWithFormat:@"%i", smoothing]]; [_sensitivityTF setStringValue:[NSString stringWithFormat:@"%i", sensitivity]]; } @end