summaryrefslogtreecommitdiff
path: root/macosx/Source/HotkeyController.m
diff options
context:
space:
mode:
authorSND\MaddTheSane_cp <SND\MaddTheSane_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2014-07-20 05:09:43 +0000
committerSND\MaddTheSane_cp <SND\MaddTheSane_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2014-07-20 05:09:43 +0000
commitd6942932d64a02aa92b1e04e91f6126f33fdb05e (patch)
tree7cad698308e39abc2b0e1c71674c610ec3ce74dd /macosx/Source/HotkeyController.m
parentb8d0d24d56dbc0ee64f4ec9a72ab917604d8109d (diff)
downloadpcsxr-d6942932d64a02aa92b1e04e91f6126f33fdb05e.tar.gz
OS X: Move source files to their own folder.
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@90999 e17a0e51-4ae3-4d35-97c3-1a29b211df97
Diffstat (limited to 'macosx/Source/HotkeyController.m')
-rw-r--r--macosx/Source/HotkeyController.m211
1 files changed, 211 insertions, 0 deletions
diff --git a/macosx/Source/HotkeyController.m b/macosx/Source/HotkeyController.m
new file mode 100644
index 00000000..58ec0fdd
--- /dev/null
+++ b/macosx/Source/HotkeyController.m
@@ -0,0 +1,211 @@
+/**
+ * HotkeyController.m
+ * Pcsxr
+ *
+ * Created by Nicolas Pepin-Perreault on 12-12-10.
+ *
+ * Adapted from the Cocoa port of DeSMuMe
+ */
+
+#import "HotkeyController.h"
+
+#define INPUT_HOLD_TIME 0.1
+
+@interface HotkeyController ()
+@property (strong) NSButton *lastConfigButton;
+@property (strong) NSMutableDictionary *hotkeysList;
+@property (strong) NSDictionary *keyNameTable;
+@property (strong) NSMutableDictionary *hotkeyOutlets;
+@end
+
+@implementation HotkeyController
+
+@synthesize FastForward;
+@synthesize FrameLimit;
+@synthesize LoadState;
+@synthesize NextState;
+@synthesize PrevState;
+@synthesize SaveState;
+
+- (void)initialize
+{
+ self.lastConfigButton = nil;
+ self.configInput = 0;
+ self.hotkeysList = [[NSMutableDictionary alloc] initWithCapacity:16];
+ self.keyNameTable = [[NSDictionary alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"KeyNames" ofType:@"plist"]];
+ self.hotkeyOutlets = [[NSMutableDictionary alloc] initWithCapacity:8];
+
+ [self mapOutletToIdentifier:FastForward forIdentifier:@"FastForward"];
+ [self mapOutletToIdentifier:SaveState forIdentifier:@"SaveState"];
+ [self mapOutletToIdentifier:LoadState forIdentifier:@"LoadState"];
+ [self mapOutletToIdentifier:NextState forIdentifier:@"NextState"];
+ [self mapOutletToIdentifier:PrevState forIdentifier:@"PrevState"];
+ [self mapOutletToIdentifier:FrameLimit forIdentifier:@"FrameLimit"];
+}
+
+- (void)dealloc
+{
+ [[NSNotificationCenter defaultCenter] removeObserver:self];
+}
+
+- (void)mapOutletToIdentifier:(id)outlet forIdentifier:(NSString*)identifier1
+{
+ (self.hotkeyOutlets)[identifier1] = outlet;
+ [self setHotkeyDisplay:identifier1];
+}
+
+- (void)setHotkeyDisplay:(NSString*)keyIdent
+{
+ NSString *label = [self parseMappingDisplayString:keyIdent];
+ NSTextField *displayField = (self.hotkeyOutlets)[keyIdent];
+
+ if(displayField) {
+ [displayField setStringValue:label];
+ }
+}
+
+- (void)mouseDown:(NSEvent *)theEvent
+{
+ BOOL isHandled = [self handleMouseDown:theEvent];
+ if (!isHandled)
+ {
+ [super mouseDown:theEvent];
+ }
+}
+
+- (void)mouseDragged:(NSEvent *)theEvent
+{
+ [self mouseDown:theEvent];
+}
+
+- (void)rightMouseDown:(NSEvent *)theEvent
+{
+ BOOL isHandled = [self handleMouseDown:theEvent];
+ if (!isHandled)
+ {
+ [super rightMouseDown:theEvent];
+ }
+}
+
+- (void)rightMouseDragged:(NSEvent *)theEvent
+{
+ [self rightMouseDown:theEvent];
+}
+
+- (void)otherMouseDown:(NSEvent *)theEvent
+{
+ BOOL isHandled = [self handleMouseDown:theEvent];
+ if (!isHandled)
+ {
+ [super otherMouseDown:theEvent];
+ }
+}
+
+- (void)otherMouseDragged:(NSEvent *)theEvent
+{
+ [self otherMouseDown:theEvent];
+}
+
+- (BOOL) handleMouseDown:(NSEvent *)mouseEvent
+{
+ if (self.configInput != 0)
+ {
+ [self hotkeyCancel];
+ }
+
+ return YES;
+}
+
+- (void)keyDown:(NSEvent *)theEvent
+{
+ NSString *keyCode = [NSString stringWithFormat:@"%d", [theEvent keyCode]];
+ NSString *keyLabel = (NSString *) (self.keyNameTable)[keyCode];
+
+ if (self.configInput != 0)
+ {
+ // Save input
+ NSString *ident = [self.lastConfigButton identifier];
+ [self saveHotkey:ident device:@"NSEventKeyboard" deviceLabel:@"Keyboard" code:keyCode label:keyLabel];
+ [self setHotkeyDisplay:ident];
+ [self hotkeyCancel];
+ }
+}
+
+- (void)saveHotkey:(NSString*)keyIdent device:(NSString*)device deviceLabel:(NSString*)deviceLabel code:(NSString*)keyCode label:(NSString*)keyLabel
+{
+ NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults] ;
+ NSMutableDictionary *tempUserMappings = [NSMutableDictionary dictionaryWithDictionary:[defaults dictionaryForKey:@"HotkeyBindings"]];
+ [tempUserMappings setValue:@{@"device": device,
+ @"deviceName": deviceLabel,
+ @"keyCode": keyCode,
+ @"keyLabel": keyLabel} forKey:keyIdent];
+ [defaults setValue:tempUserMappings forKey:@"HotkeyBindings"];
+}
+
+- (NSString *) parseMappingDisplayString:(NSString *)keyString
+{
+ NSDictionary *userMappings = [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"HotkeyBindings"];
+ NSDictionary *binding = (NSDictionary *)[userMappings valueForKey:keyString];
+
+ NSString *displayString = @"";
+ if(binding) {
+ NSString *deviceLabel = (NSString *)[binding valueForKey:@"deviceName"];
+ NSString *keyLabel = (NSString *)[binding valueForKey:@"keyLabel"];
+
+ displayString = [NSString stringWithString:deviceLabel];
+ displayString = [displayString stringByAppendingString:@": "];
+ displayString = [displayString stringByAppendingString:keyLabel];
+ }
+
+ return displayString;
+}
+
+- (IBAction) hotkeySet:(id)sender
+{
+ NSButton *theButton = (NSButton *)sender;
+
+ if (self.configInput && self.lastConfigButton != theButton)
+ {
+ [self.lastConfigButton setState:NSOffState];
+ }
+
+ if ([theButton state] == NSOnState)
+ {
+ self.lastConfigButton = theButton;
+ [self.hotkeysList removeAllObjects];
+ self.configInput = [theButton tag];
+ }
+ else
+ {
+ [self hotkeyCancel];
+ }
+
+}
+
+- (void) hotkeyCancel
+{
+ if (self.lastConfigButton != nil)
+ {
+ [self.lastConfigButton setState:NSOffState];
+ self.lastConfigButton = nil;
+ }
+
+ self.configInput = 0;
+}
+
+- (BOOL)acceptsFirstResponder
+{
+ return YES;
+}
+
+- (BOOL)becomeFirstResponder
+{
+ return YES;
+}
+
+- (BOOL)resignFirstResponder
+{
+ return YES;
+}
+
+@end