From 3090f311c3406d9c157630bc9744b9b14aa42311 Mon Sep 17 00:00:00 2001 From: Joe Wreschnig Date: Thu, 28 Feb 2013 15:49:40 +0100 Subject: [PATCH] Reset target settings in UI when switching target types. --- English.lproj/MainMenu.xib | 50 +-------- TargetController.h | 4 +- TargetController.m | 217 +++++++++++++++++++------------------ 3 files changed, 115 insertions(+), 156 deletions(-) diff --git a/English.lproj/MainMenu.xib b/English.lproj/MainMenu.xib index 7ba1177..ac82d63 100644 --- a/English.lproj/MainMenu.xib +++ b/English.lproj/MainMenu.xib @@ -454,7 +454,7 @@ {200, 298} - + YES NO YES @@ -586,7 +586,7 @@ {202, 300} - + 133650 @@ -650,7 +650,6 @@ {{227, 55}, {180, 24}} - _NS:9 YES @@ -716,7 +715,6 @@ {{20, 16}, {201, 236}} - NO 7 1 @@ -1392,10 +1390,9 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA TargetController - + 268 {82, 32} - _NS:9 YES @@ -1697,22 +1694,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 696 - - - radioKey - - - - 690 - - - - radioNoAction - - - - 691 - radioButtons @@ -1761,14 +1742,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 714 - - - radioConfig - - - - 715 - radioChanged: @@ -2657,7 +2630,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA KeyInputTextView - NSTextView + NSTextField TargetController NSWindow @@ -2717,9 +2690,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA NSSegmentedControl NSSegmentedControl NSMatrix - NSButtonCell - NSButtonCell - NSButtonCell NSSegmentedControl NSTextField @@ -2752,18 +2722,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA radioButtons NSMatrix - - radioConfig - NSButtonCell - - - radioKey - NSButtonCell - - - radioNoAction - NSButtonCell - scrollDirSelect NSSegmentedControl diff --git a/TargetController.h b/TargetController.h index 589023b..4606784 100644 --- a/TargetController.h +++ b/TargetController.h @@ -14,7 +14,6 @@ @interface TargetController : NSObject { IBOutlet KeyInputTextView* keyInput; - IBOutlet NSButtonCell *radioNoAction, *radioKey, *radioConfig; IBOutlet NSMatrix* radioButtons; IBOutlet NSSegmentedControl* mouseDirSelect; IBOutlet NSSegmentedControl* mouseBtnSelect; @@ -30,7 +29,6 @@ -(void) load; -(void) commit; -(void) reset; --(Target*) state; -(void) refreshConfigsPreservingSelection: (BOOL) preserve; -(IBAction)configChosen:(id)sender; -(IBAction)radioChanged:(id)sender; @@ -39,6 +37,6 @@ -(IBAction)sdirChanged:(id)sender; -(void) focusKey; -@property(readwrite) BOOL enabled; +@property (assign) BOOL enabled; @end diff --git a/TargetController.m b/TargetController.m index 14f81a9..0119980 100644 --- a/TargetController.m +++ b/TargetController.m @@ -22,191 +22,194 @@ @implementation TargetController --(void) keyChanged { - [radioButtons setState: 1 atRow: 1 column: 0 ]; +- (void)keyChanged { + [radioButtons setState:1 atRow:1 column:0 ]; [self commit]; } --(IBAction)radioChanged:(id)sender { - [[[NSApplication sharedApplication] mainWindow] makeFirstResponder: sender]; + +- (IBAction)radioChanged:(id)sender { + NSInteger row, col; + [radioButtons getRow:&row column:&col ofCell:sender]; + [[NSApplication sharedApplication].mainWindow makeFirstResponder:sender]; + + if (row != 1) + keyInput.vk = -1; + + if (row != 2) + [configPopup selectItemAtIndex:-1]; + else if (!configPopup.selectedItem) + [configPopup selectItemAtIndex:0]; + + if (row != 3) + mouseDirSelect.selectedSegment = -1; + else if (mouseDirSelect.selectedSegment == -1) + mouseDirSelect.selectedSegment = 0; + + if (row != 4) + mouseBtnSelect.selectedSegment = -1; + else if (mouseBtnSelect.selectedSegment == -1) + mouseBtnSelect.selectedSegment = 0; + + if (row != 5) + scrollDirSelect.selectedSegment = -1; + else if (scrollDirSelect.selectedSegment == -1) + scrollDirSelect.selectedSegment = 0; + [self commit]; } --(IBAction)mdirChanged:(id)sender { - [radioButtons setState: 1 atRow: 3 column: 0]; - [[[NSApplication sharedApplication] mainWindow] makeFirstResponder: sender]; + +- (IBAction)mdirChanged:(id)sender { + [radioButtons setState:1 atRow:3 column:0]; + [[NSApplication sharedApplication].mainWindow makeFirstResponder:sender]; [self commit]; } --(IBAction)mbtnChanged:(id)sender { - [radioButtons setState: 1 atRow: 4 column: 0]; - [[[NSApplication sharedApplication] mainWindow] makeFirstResponder: sender]; + +- (IBAction)mbtnChanged:(id)sender { + [radioButtons setState:1 atRow:4 column:0]; + [[NSApplication sharedApplication].mainWindow makeFirstResponder:sender]; [self commit]; } --(IBAction)sdirChanged:(id)sender { - [radioButtons setState: 1 atRow: 5 column: 0]; - [[[NSApplication sharedApplication] mainWindow] makeFirstResponder: sender]; + +- (IBAction)sdirChanged:(id)sender { + [radioButtons setState:1 atRow:5 column:0]; + [[NSApplication sharedApplication].mainWindow makeFirstResponder:sender]; [self commit]; } - --(Target*) state { - switch([radioButtons selectedRow]) { - case 0: // none - return NULL; - case 1: // key - if(keyInput.hasKey) { +- (Target *)makeTarget { + switch (radioButtons.selectedRow) { + case 0: + return nil; + case 1: + if (keyInput.hasKey) { TargetKeyboard* k = [[TargetKeyboard alloc] init]; - [k setVk: [keyInput vk]]; + k.vk = keyInput.vk; return k; - } + } else { + return nil; + } break; - case 2: - { - TargetConfig* c = [[TargetConfig alloc] init]; - [c setConfig: [configsController configs][[configPopup indexOfSelectedItem]]]; + case 2: { + TargetConfig *c = [[TargetConfig alloc] init]; + if (!configPopup.selectedItem) + [configPopup selectItemAtIndex:0]; + c.config = configsController.configs[configPopup.indexOfSelectedItem]; return c; } case 3: { - // mouse X/Y TargetMouseMove *mm = [[TargetMouseMove alloc] init]; - [mm setDir: [mouseDirSelect selectedSegment]]; + mm.dir = mouseDirSelect.selectedSegment; return mm; } case 4: { - // mouse button TargetMouseBtn *mb = [[TargetMouseBtn alloc] init]; - if ([mouseBtnSelect selectedSegment] == 0) { - [mb setWhich: kCGMouseButtonLeft]; - } - else { - [mb setWhich: kCGMouseButtonRight]; - } + mb.which = mouseBtnSelect.selectedSegment == 0 ? kCGMouseButtonLeft : kCGMouseButtonRight; return mb; } case 5: { - // scroll TargetMouseScroll *ms = [[TargetMouseScroll alloc] init]; - if ([scrollDirSelect selectedSegment] == 0) { - [ms setHowMuch: -1]; - } - else { - [ms setHowMuch: 1]; - } + ms.howMuch = scrollDirSelect.selectedSegment ? 1 : -1; return ms; } case 6: { - // toggle mouse scope TargetToggleMouseScope *tms = [[TargetToggleMouseScope alloc] init]; return tms; } + default: + return nil; } - return NULL; } -(void)configChosen:(id)sender { - [radioButtons setState: 1 atRow: 2 column: 0]; + [radioButtons setState:1 atRow:2 column:0]; [self commit]; } --(void) commit { - JSAction *action = [joystickController selectedAction]; - if (action) { - configsController.currentConfig[action] = self.state; - } +- (void)commit { + configsController.currentConfig[joystickController.selectedAction] = [self makeTarget]; } --(void) reset { +- (void)reset { [keyInput clear]; - [radioButtons setState: 1 atRow: 0 column: 0]; - [mouseDirSelect setSelectedSegment: 0]; - [mouseBtnSelect setSelectedSegment: 0]; - [scrollDirSelect setSelectedSegment: 0]; - [self refreshConfigsPreservingSelection: NO]; + [radioButtons setState:1 atRow:0 column:0]; + [self refreshConfigsPreservingSelection:NO]; } --(void) setEnabled: (BOOL) enabled { - [radioButtons setEnabled: enabled]; - [keyInput setEnabled: enabled]; - [configPopup setEnabled: enabled]; - [mouseDirSelect setEnabled: enabled]; - [mouseBtnSelect setEnabled: enabled]; - [scrollDirSelect setEnabled: enabled]; -} --(BOOL) enabled { +- (BOOL)enabled { return [radioButtons isEnabled]; } +- (void)setEnabled:(BOOL)enabled { + [radioButtons setEnabled:enabled]; + [keyInput setEnabled:enabled]; + [configPopup setEnabled:enabled]; + [mouseDirSelect setEnabled:enabled]; + [mouseBtnSelect setEnabled:enabled]; + [scrollDirSelect setEnabled:enabled]; +} -(void) load { - id jsaction = [joystickController selectedAction]; + id jsaction = joystickController.selectedAction; currentJsaction = jsaction; if(!jsaction) { - [self setEnabled: NO]; - [title setStringValue: @""]; + self.enabled = NO; + title.stringValue = @""; return; } else { - [self setEnabled: YES]; + self.enabled = YES; } - Target* target = configsController.currentConfig[jsaction]; + Target *target = configsController.currentConfig[jsaction]; id act = jsaction; NSString* actFullName = [act name]; while([act base]) { act = [act base]; - actFullName = [[NSString alloc] initWithFormat: @"%@ > %@", [act name], actFullName]; + actFullName = [[NSString alloc] initWithFormat:@"%@ > %@", [act name], actFullName]; } - [title setStringValue: [[NSString alloc] initWithFormat: @"%@ > %@", [[configsController currentConfig] name], actFullName]]; + title.stringValue = [[NSString alloc] initWithFormat:@"%@ > %@", configsController.currentConfig.name, actFullName]; if(!target) { - // already reset - } else if([target isKindOfClass: [TargetKeyboard class]]) { - [radioButtons setState:1 atRow: 1 column: 0]; - [keyInput setVk: [(TargetKeyboard*)target vk]]; - } else if([target isKindOfClass: [TargetConfig class]]) { - [radioButtons setState:1 atRow: 2 column: 0]; - [configPopup selectItemAtIndex: [[configsController configs] indexOfObject: [(TargetConfig*)target config]]]; + [radioButtons setState:1 atRow:0 column:0]; + } else if([target isKindOfClass:[TargetKeyboard class]]) { + [radioButtons setState:1 atRow:1 column:0]; + keyInput.vk = [(TargetKeyboard*)target vk]; + } else if([target isKindOfClass:[TargetConfig class]]) { + [radioButtons setState:1 atRow:2 column:0]; + [configPopup selectItemAtIndex:[configsController.configs + indexOfObject:[(TargetConfig *)target config]]]; } - else if ([target isKindOfClass: [TargetMouseMove class]]) { - [radioButtons setState:1 atRow: 3 column: 0]; - [mouseDirSelect setSelectedSegment: [(TargetMouseMove *)target dir]]; + else if ([target isKindOfClass:[TargetMouseMove class]]) { + [radioButtons setState:1 atRow:3 column:0]; + [mouseDirSelect setSelectedSegment:[(TargetMouseMove *)target dir]]; } - else if ([target isKindOfClass: [TargetMouseBtn class]]) { - [radioButtons setState: 1 atRow: 4 column: 0]; - if ([(TargetMouseBtn *)target which] == kCGMouseButtonLeft) - [mouseBtnSelect setSelectedSegment: 0]; - else - [mouseBtnSelect setSelectedSegment: 1]; + else if ([target isKindOfClass:[TargetMouseBtn class]]) { + [radioButtons setState:1 atRow:4 column:0]; + mouseBtnSelect.selectedSegment = [(TargetMouseBtn *)target which] == kCGMouseButtonLeft ? 0 : 1; } - else if ([target isKindOfClass: [TargetMouseScroll class]]) { - [radioButtons setState: 1 atRow: 5 column: 0]; - if ([(TargetMouseScroll *)target howMuch] < 0) - [scrollDirSelect setSelectedSegment: 0]; - else - [scrollDirSelect setSelectedSegment: 1]; + else if ([target isKindOfClass:[TargetMouseScroll class]]) { + [radioButtons setState:1 atRow:5 column:0]; + scrollDirSelect.selectedSegment = [(TargetMouseScroll *)target howMuch] > 0; } - else if ([target isKindOfClass: [TargetToggleMouseScope class]]) { - [radioButtons setState: 1 atRow: 6 column: 0]; + else if ([target isKindOfClass:[TargetToggleMouseScope class]]) { + [radioButtons setState:1 atRow:6 column:0]; } else { - [NSException raise:@"Unknown target subclass" format:@"Unknown target subclass"]; + NSLog(@"Unknown target type %@.", target.description); } } -(void) focusKey { Target *currentTarget = configsController.currentConfig[currentJsaction]; if (!currentTarget || [currentTarget isKindOfClass:[TargetKeyboard class]]) - [[[NSApplication sharedApplication] mainWindow] makeFirstResponder: keyInput]; + [[[NSApplication sharedApplication] mainWindow] makeFirstResponder:keyInput]; else [keyInput resignFirstResponder]; } --(void) refreshConfigsPreservingSelection: (BOOL) preserve { +- (void)refreshConfigsPreservingSelection:(BOOL)preserve { int initialIndex = [configPopup indexOfSelectedItem]; - - NSArray* configs = [configsController configs]; [configPopup removeAllItems]; - for(int i=0; i<[configs count]; i++) { - [configPopup addItemWithTitle: [configs[i]name]]; - } - if(preserve) - [configPopup selectItemAtIndex:initialIndex]; - + for (Config *config in configsController.configs) + [configPopup addItemWithTitle:config.name]; + [configPopup selectItemAtIndex:preserve ? initialIndex : -1]; } @end -- 2.20.1