2010-07-29 02:34:36 +02:00
|
|
|
/*
|
2012-10-23 11:24:24 +02:00
|
|
|
* Copyright (c) 2010, Wei Mingzhi <whistler_wmz@users.sf.net>.
|
2010-07-29 02:34:36 +02:00
|
|
|
* All Rights Reserved.
|
|
|
|
*
|
|
|
|
* Based on: HIDInput by Gil Pedersen.
|
|
|
|
* Copyright (c) 2004, Gil Pedersen.
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program; if not, see <http://www.gnu.org/licenses>.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#import "MappingCell.h"
|
|
|
|
#import "ControllerList.h"
|
2013-08-30 04:17:17 +02:00
|
|
|
#include "cfg.h"
|
2010-07-29 02:34:36 +02:00
|
|
|
|
|
|
|
@implementation MappingCell
|
|
|
|
|
|
|
|
- (id)initTextCell:(NSString *)aString {
|
2014-04-08 04:33:19 +02:00
|
|
|
if (self = [super initTextCell:aString]) {
|
|
|
|
[self setEditable:NO];
|
|
|
|
}
|
|
|
|
|
2010-07-29 02:34:36 +02:00
|
|
|
return self;
|
|
|
|
}
|
|
|
|
|
2011-11-09 21:49:54 +01:00
|
|
|
- (void)selectWithFrame:(NSRect)aRect inView:(NSView *)controlView editor:(NSText *)textObj delegate:(id)anObject start:(NSInteger)selStart length:(NSInteger)selLength
|
2010-07-29 02:34:36 +02:00
|
|
|
{
|
|
|
|
[super selectWithFrame:aRect inView:controlView editor:textObj delegate:anObject start:selStart length:selLength];
|
|
|
|
|
2013-08-26 19:38:29 +02:00
|
|
|
int whichPad = [ControllerList currentController];
|
2010-07-29 02:34:36 +02:00
|
|
|
NSTableView *tableView = (NSTableView *)[self controlView];
|
2011-02-19 04:58:03 +01:00
|
|
|
long i, changed = 0, row;
|
2010-07-29 02:34:36 +02:00
|
|
|
NSEvent *endEvent;
|
|
|
|
NSPoint where = {0.0, 0.0};
|
|
|
|
|
|
|
|
/* start a modal session */
|
|
|
|
NSModalSession session = [NSApp beginModalSessionForWindow:[tableView window]];
|
|
|
|
[NSApp runModalSession:session];
|
|
|
|
|
|
|
|
/* delay for a little while to allow user to release the button pressed to activate the element */
|
|
|
|
[NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.15]];
|
|
|
|
|
2010-08-01 13:11:29 +02:00
|
|
|
InitAxisPos(whichPad);
|
|
|
|
|
2010-07-29 02:34:36 +02:00
|
|
|
/* wait for 10 seconds for user to press a key */
|
|
|
|
for (i = 0; i < 10; i++) {
|
|
|
|
[NSApp runModalSession:session];
|
|
|
|
row = [tableView selectedRow];
|
|
|
|
if (row < DKEY_TOTAL) {
|
2011-11-12 23:50:37 +01:00
|
|
|
changed = ReadDKeyEvent(whichPad, [ControllerList buttonOfRow:row]);
|
2010-07-29 02:34:36 +02:00
|
|
|
} else {
|
|
|
|
row -= DKEY_TOTAL;
|
2013-08-26 19:38:29 +02:00
|
|
|
changed = ReadAnalogEvent(whichPad, (int)(row / 4), row % 4);
|
2010-07-29 02:34:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
if (changed) break;
|
|
|
|
}
|
|
|
|
|
|
|
|
[NSApp endModalSession:session];
|
|
|
|
|
|
|
|
/* move selection to the next list element */
|
|
|
|
[self endEditing:textObj];
|
|
|
|
if (changed == 1) {
|
2013-08-26 19:38:29 +02:00
|
|
|
int nextRow = (int)[tableView selectedRow] + 1;
|
2010-07-29 02:34:36 +02:00
|
|
|
if (nextRow >= [tableView numberOfRows]) {
|
|
|
|
[tableView deselectAll:self];
|
|
|
|
return;
|
|
|
|
}
|
2011-11-09 21:49:54 +01:00
|
|
|
[tableView selectRowIndexes:[NSIndexSet indexSetWithIndex:nextRow] byExtendingSelection:NO];
|
2010-07-29 02:34:36 +02:00
|
|
|
|
|
|
|
/* discard any events we have received while waiting for the button press */
|
|
|
|
endEvent = [NSEvent otherEventWithType:NSApplicationDefined location:where
|
|
|
|
modifierFlags:0 timestamp:(NSTimeInterval)0
|
|
|
|
windowNumber:0 context:[NSGraphicsContext currentContext] subtype:0 data1:0 data2:0];
|
|
|
|
[NSApp postEvent:endEvent atStart:NO];
|
|
|
|
[NSApp discardEventsMatchingMask:NSAnyEventMask beforeEvent:endEvent];
|
|
|
|
}
|
|
|
|
[[tableView window] makeFirstResponder:tableView];
|
|
|
|
}
|
|
|
|
|
|
|
|
@end
|