diff options
Diffstat (limited to 'device_test/AppleMikeyPaneController.m')
| -rw-r--r-- | device_test/AppleMikeyPaneController.m | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/device_test/AppleMikeyPaneController.m b/device_test/AppleMikeyPaneController.m new file mode 100644 index 0000000..0760688 --- /dev/null +++ b/device_test/AppleMikeyPaneController.m @@ -0,0 +1,160 @@ +/* + * Copyright (c) 2007 Dave Dribin + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#import "AppleMikeyPaneController.h" +#import "DDHidLib.h" +#include <IOKit/hid/IOHIDUsageTables.h> + +@implementation AppleMikeyPaneController + +- (id) init; +{ + self = [super init]; + if (self == nil) + return nil; + + mEvents = [[NSMutableArray alloc] init]; + + return self; +} + +- (void) awakeFromNib; +{ + NSArray * mikeys = [DDHidAppleMikey allMikeys]; + + [mikeys makeObjectsPerformSelector: @selector(setDelegate:) + withObject: self]; + [self setMikeys: mikeys]; + + if ([mikeys count] > 0) + [self setMikeyIndex: 0]; + else + [self setMikeyIndex: NSNotFound]; +} + +//=========================================================== +// dealloc +//=========================================================== +- (void) dealloc +{ + [mMikeys release]; + [mEvents release]; + + mMikeys = nil; + mEvents = nil; + [super dealloc]; +} + +//=========================================================== +// mikeys +//=========================================================== +- (NSArray *) mikeys +{ + return mMikeys; +} + +- (void) setMikeys: (NSArray *) theMikeys +{ + if (mMikeys != theMikeys) + { + [mMikeys release]; + mMikeys = [theMikeys retain]; + } +} +//=========================================================== +// mikeyIndex +//=========================================================== +- (unsigned) mikeyIndex +{ + return mMikeyIndex; +} + +- (void) setMikeyIndex: (unsigned) theMikeyIndex +{ + if (mCurrentMikey != nil) + { + [mCurrentMikey stopListening]; + mCurrentMikey = nil; + } + mMikeyIndex = theMikeyIndex; + [mMikeysController setSelectionIndex: mMikeyIndex]; + [self willChangeValueForKey: @"events"]; + [mEvents removeAllObjects]; + [self didChangeValueForKey: @"events"]; + if (mMikeyIndex != NSNotFound) + { + mCurrentMikey = [mMikeys objectAtIndex: mMikeyIndex]; + [mCurrentMikey startListening]; + } +} + +//=========================================================== +// events +//=========================================================== +- (NSMutableArray *) events +{ + return mEvents; +} + +- (void) setEvents: (NSMutableArray *) theEvents +{ + if (mEvents != theEvents) + { + [mEvents release]; + mEvents = [theEvents retain]; + } +} +- (void) addEvent: (id)theEvent +{ + [[self events] addObject: theEvent]; +} +- (void) removeEvent: (id)theEvent +{ + [[self events] removeObject: theEvent]; +} + +@end + +@implementation AppleMikeyPaneController (DDHidAppleMikeyDelegate) + +- (void) ddhidAppleMikey:(DDHidAppleMikey *)mikey press:(unsigned int)usageId upOrDown:(BOOL)upOrDown +{ + NSString *usage = nil; + if(usageId==kHIDUsage_GD_SystemMenuDown) { + usage = @"MenuDown"; + } + else if(usageId == kHIDUsage_GD_SystemMenuUp) { + usage = @"MenuUp"; + } + + if(!usage) + return; + + NSMutableDictionary * row = [mMikeysEventsController newObject]; + [row setObject: upOrDown ? @"Down" : @"Up" forKey: @"event"]; + [row setObject:usage forKey: @"description"]; + [mMikeysEventsController addObject: row]; +} + +@end |
