aboutsummaryrefslogtreecommitdiff
path: root/macosx/plugins/DFInput/macsrc/MappingCell.m
diff options
context:
space:
mode:
authorPCSX* teams2010-11-16 14:15:22 +0200
committerGrazvydas Ignotas2010-11-16 14:15:22 +0200
commitef79bbde537d6b9c745a7d86cb9df1d04c35590d (patch)
treeef8d2520dbb9e1e345b41b12c9959f300ca8fd10 /macosx/plugins/DFInput/macsrc/MappingCell.m
downloadpcsx_rearmed-ef79bbde537d6b9c745a7d86cb9df1d04c35590d.tar.gz
pcsx_rearmed-ef79bbde537d6b9c745a7d86cb9df1d04c35590d.tar.bz2
pcsx_rearmed-ef79bbde537d6b9c745a7d86cb9df1d04c35590d.zip
pcsxr-1.9.92
Diffstat (limited to 'macosx/plugins/DFInput/macsrc/MappingCell.m')
-rw-r--r--macosx/plugins/DFInput/macsrc/MappingCell.m89
1 files changed, 89 insertions, 0 deletions
diff --git a/macosx/plugins/DFInput/macsrc/MappingCell.m b/macosx/plugins/DFInput/macsrc/MappingCell.m
new file mode 100644
index 0000000..0fb43bd
--- /dev/null
+++ b/macosx/plugins/DFInput/macsrc/MappingCell.m
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2010, Wei Mingzhi <whistler@openoffice.org>.
+ * 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"
+#import "cfg.h"
+
+@implementation MappingCell
+
+- (id)initTextCell:(NSString *)aString {
+ self = [super initTextCell:aString];
+ [self setEditable:NO];
+ return self;
+}
+
+- (void)selectWithFrame:(NSRect)aRect inView:(NSView *)controlView editor:(NSText *)textObj delegate:(id)anObject start:(int)selStart length:(int)selLength
+{
+ [super selectWithFrame:aRect inView:controlView editor:textObj delegate:anObject start:selStart length:selLength];
+
+ int whichPad = [ControllerList currentController];
+ NSTableView *tableView = (NSTableView *)[self controlView];
+ int i, changed = 0, row;
+ 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]];
+
+ InitAxisPos(whichPad);
+
+ /* 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) {
+ changed = ReadDKeyEvent(whichPad, [ControllerList getButtonOfRow:row]);
+ } else {
+ row -= DKEY_TOTAL;
+ changed = ReadAnalogEvent(whichPad, row / 4, row % 4);
+ }
+
+ if (changed) break;
+ }
+
+ [NSApp endModalSession:session];
+
+ /* move selection to the next list element */
+ [self endEditing:textObj];
+ if (changed == 1) {
+ int nextRow = [tableView selectedRow] + 1;
+ if (nextRow >= [tableView numberOfRows]) {
+ [tableView deselectAll:self];
+ return;
+ }
+ [tableView selectRow:nextRow byExtendingSelection:NO];
+
+ /* 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