aboutsummaryrefslogtreecommitdiffstats
path: root/device_test/AppleMikeyPaneController.m
diff options
context:
space:
mode:
Diffstat (limited to 'device_test/AppleMikeyPaneController.m')
-rw-r--r--device_test/AppleMikeyPaneController.m160
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