Skip to content

Instantly share code, notes, and snippets.

@vojto
Created October 21, 2011 14:32
Show Gist options
  • Select an option

  • Save vojto/1303989 to your computer and use it in GitHub Desktop.

Select an option

Save vojto/1303989 to your computer and use it in GitHub Desktop.
- (void)keyDown:(NSEvent *)theEvent {
unsigned short key = [theEvent keyCode];
BOOL up;
if (key == 38) up = NO;
else if (key == 40) up = YES;
else return [super keyDown:theEvent];
BOOL down = !up;
NSInteger index = [self selectedRow];
NSInteger total = [self numberOfRows];
NSInteger desiredChange;
if (down) desiredChange = 1;
if (up) desiredChange = -1;
NSInteger desired = index + desiredChange;
if (index < 0) index = 0;
else if (index > total) index = total;
while (desired >= 0 && desired <= total) {
if ([[self delegate] outlineView:self shouldSelectItem:[self itemAtRow:desired]]) break;
desired += desiredChange;
}
[self selectRowIndexes:[NSIndexSet indexSetWithIndex:desired] byExtendingSelection:NO];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment