Loop select items in Chooser

If `enableLoopFilterList` is set to `YES`:

- when at top, pressing <Up> selects the last item on bottom
- when at bottom, pressing <Down> selects the first item on top
This commit is contained in:
Zete Lui
2014-08-02 13:20:38 +08:00
committed by Allan Odgaard
parent 2eaa97b1dc
commit 17128edfc1

View File

@@ -11,6 +11,8 @@
@property (nonatomic, weak) NSTableView* tableView;
@end
static NSString* const kUserDefaultsEnableLoopFilterList = @"enableLoopFilterList";
@implementation OakTextFieldMovementDelegate
- (void)moveSelectedRowByOffset:(NSInteger)anOffset extendingSelection:(BOOL)extend sender:(id)sender
{
@@ -18,7 +20,13 @@
{
if(_tableView.allowsMultipleSelection == NO)
extend = NO;
NSInteger row = oak::cap((NSInteger)0, [_tableView selectedRow] + anOffset, [_tableView numberOfRows] - 1);
NSInteger row = [_tableView selectedRow] + anOffset;
NSInteger numberOfRows = [_tableView numberOfRows];
if(abs(anOffset) == 1 && numberOfRows && [[NSUserDefaults standardUserDefaults] boolForKey:kUserDefaultsEnableLoopFilterList])
row = (row + numberOfRows) % numberOfRows;
else row = oak::cap((NSInteger)0, row, numberOfRows - 1);
[_tableView selectRowIndexes:[NSIndexSet indexSetWithIndex:row] byExtendingSelection:extend];
[_tableView scrollRowToVisible:row];