diff --git a/base/cocoa/ResultWindow.h b/base/cocoa/ResultWindow.h index 1cdfb70f..d7582dad 100644 --- a/base/cocoa/ResultWindow.h +++ b/base/cocoa/ResultWindow.h @@ -22,13 +22,22 @@ BOOL _powerMode; BOOL _displayDelta; } +/* Override */ - (NSString *)logoImageName; + +/* Helpers */ +- (NSArray *)getSelected:(BOOL)aDupesOnly; +- (NSArray *)getSelectedPaths:(BOOL)aDupesOnly; +- (void)performPySelection:(NSArray *)aIndexPaths; + /* Actions */ - (IBAction)changeDelta:(id)sender; - (IBAction)copyMarked:(id)sender; - (IBAction)deleteMarked:(id)sender; - (IBAction)expandAll:(id)sender; - (IBAction)moveMarked:(id)sender; +- (IBAction)switchSelected:(id)sender; + /* Notifications */ - (void)jobCompleted:(NSNotification *)aNotification; @end diff --git a/base/cocoa/ResultWindow.m b/base/cocoa/ResultWindow.m index 1aa6cb8a..dd254303 100644 --- a/base/cocoa/ResultWindow.m +++ b/base/cocoa/ResultWindow.m @@ -63,6 +63,44 @@ return @"dg_logo32"; } +/* Helpers */ +- (NSArray *)getSelected:(BOOL)aDupesOnly +{ + if (_powerMode) + aDupesOnly = NO; + NSIndexSet *indexes = [matches selectedRowIndexes]; + NSMutableArray *nodeList = [NSMutableArray array]; + OVNode *node; + int i = [indexes firstIndex]; + while (i != NSNotFound) + { + node = [matches itemAtRow:i]; + if (!aDupesOnly || ([node level] > 1)) + [nodeList addObject:node]; + i = [indexes indexGreaterThanIndex:i]; + } + return nodeList; +} + +- (NSArray *)getSelectedPaths:(BOOL)aDupesOnly +{ + NSMutableArray *r = [NSMutableArray array]; + NSArray *selected = [self getSelected:aDupesOnly]; + NSEnumerator *e = [selected objectEnumerator]; + OVNode *node; + while (node = [e nextObject]) + [r addObject:p2a([node indexPath])]; + return r; +} + +- (void)performPySelection:(NSArray *)aIndexPaths +{ + if (_powerMode) + [py selectPowerMarkerNodePaths:aIndexPaths]; + else + [py selectResultNodePaths:aIndexPaths]; +} + /* Actions */ - (IBAction)changeDelta:(id)sender { @@ -129,6 +167,13 @@ } } +- (IBAction)switchSelected:(id)sender +{ + [self performPySelection:[self getSelectedPaths:YES]]; + [py makeSelectedReference]; + [[NSNotificationCenter defaultCenter] postNotificationName:ResultsChangedNotification object:self]; +} + /* Delegate */ - (void)outlineView:(NSOutlineView *)outlineView didClickTableColumn:(NSTableColumn *)tableColumn