diff options
Diffstat (limited to 'Source/SPConnectionController.m')
-rw-r--r-- | Source/SPConnectionController.m | 114 |
1 files changed, 68 insertions, 46 deletions
diff --git a/Source/SPConnectionController.m b/Source/SPConnectionController.m index ee3bb724..a270a716 100644 --- a/Source/SPConnectionController.m +++ b/Source/SPConnectionController.m @@ -114,13 +114,10 @@ [favoritesTable setDraggingSourceOperationMask:NSDragOperationMove forLocal:YES]; // Sort the favourites to match prefs and select the appropriate row - [self _sortFavorites]; - NSInteger tableRow; - if ([prefs boolForKey:SPSelectLastFavoriteUsed] == YES) { - tableRow = [prefs integerForKey:SPLastFavoriteIndex] + 1; - } else { - tableRow = [prefs integerForKey:SPDefaultFavorite] + 1; - } + if (currentSortItem > -1) [self _sortFavorites]; + + NSInteger tableRow = ([prefs integerForKey:[prefs boolForKey:SPSelectLastFavoriteUsed] ? SPLastFavoriteIndex : SPDefaultFavorite] + 1); + if (tableRow < [favorites count]) { previousType = [[[favorites objectAtIndex:tableRow] objectForKey:@"type"] integerValue]; [self resizeTabViewToConnectionType:[[[favorites objectAtIndex:tableRow] objectForKey:@"type"] integerValue] animating:NO]; @@ -679,9 +676,9 @@ // Perform sorting [self _sortFavorites]; - [[[sender menu] itemAtIndex:previousSortItem] setState:NSOffState]; + if (previousSortItem > -1) [[[sender menu] itemAtIndex:previousSortItem] setState:NSOffState]; + [[[sender menu] itemAtIndex:currentSortItem] setState:NSOnState]; - } /** @@ -891,29 +888,49 @@ } #pragma mark - -#pragma mark Favorites tableview datasource and delegate methods +#pragma mark TableView drag & drop delegate methods -/** - * Returns the number of favorites to display - */ -- (NSInteger) numberOfRowsInTableView:(NSTableView *)aTableView +- (BOOL)tableView:(NSTableView *)aTableView writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard *)pboard { - return [favorites count]; + NSData *archivedData = [NSKeyedArchiver archivedDataWithRootObject:rowIndexes]; + [pboard declareTypes:[NSArray arrayWithObject:favoritesPBoardType] owner:self]; + [pboard setData:archivedData forType:favoritesPBoardType]; + return YES; } -/** - * Returns the favorite names to be displayed in the table - */ -- (id) tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex +- (NSDragOperation)tableView:(NSTableView *)aTableView validateDrop:(id <NSDraggingInfo>)info proposedRow:(NSInteger)row proposedDropOperation:(NSTableViewDropOperation)operation { - return [[favorites objectAtIndex:rowIndex] objectForKey:@"name"]; + if (row == 0) return NSDragOperationNone; + if ([info draggingSource] == aTableView) + { + [aTableView setDropRow:row dropOperation:NSTableViewDropAbove]; + return NSDragOperationMove; + } + return NSDragOperationNone; } -- (BOOL)tableView:(NSTableView *)aTableView acceptDrop:(id < NSDraggingInfo >)info - row:(NSInteger)row dropOperation:(NSTableViewDropOperation)operation +- (BOOL)tableView:(NSTableView *)aTableView acceptDrop:(id <NSDraggingInfo>)info row:(NSInteger)row dropOperation:(NSTableViewDropOperation)operation { BOOL acceptedDrop = NO; - if ((row == 0) || ([info draggingSource] != aTableView)) return acceptedDrop; + + if ((row == 0) || ([info draggingSource] != aTableView)) return acceptedDrop; + + // Disable all automatic sorting + currentSortItem = -1; + reverseFavoritesSort = NO; + + [prefs setInteger:currentSortItem forKey:SPFavoritesSortedBy]; + [prefs setBool:NO forKey:SPFavoritesSortedInReverse]; + + // Remove sort descriptors + [favorites sortUsingDescriptors:[NSArray array]]; + + // Uncheck sort by menu items + for (NSMenuItem *menuItem in [[favoritesSortByMenuItem submenu] itemArray]) + { + [menuItem setState:NSOffState]; + } + NSPasteboard* pboard = [info draggingPasteboard]; NSData* rowData = [pboard dataForType:favoritesPBoardType]; NSIndexSet* rowIndexes = [NSKeyedUnarchiver unarchiveObjectWithData:rowData]; @@ -932,39 +949,45 @@ [favorites insertObject:draggedFavorite atIndex:row]; [aTableView reloadData]; [aTableView selectRowIndexes:[NSIndexSet indexSetWithIndex:row] byExtendingSelection:NO]; - // reset the prefs with the new order + + // reset the prefs with the new order NSMutableArray *reorderedFavorites = [[NSMutableArray alloc] initWithArray:favorites]; [reorderedFavorites removeObjectAtIndex:0]; [prefs setObject:reorderedFavorites forKey:SPFavorites]; + [[[NSApp delegate] preferenceController] updateDefaultFavoritePopup]; - [reorderedFavorites release]; - [self updateFavorites]; - acceptedDrop = YES; + + [reorderedFavorites release]; + + [self updateFavorites]; + + acceptedDrop = YES; + return acceptedDrop; - } -- (BOOL)tableView:(NSTableView *)aTableView writeRowsWithIndexes:(NSIndexSet *)rowIndexes - toPasteboard:(NSPasteboard *)pboard +#pragma mark - +#pragma mark Favorites tableview datasource methods + +/** + * Returns the number of favorites to display + */ +- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView { - NSData *archivedData = [NSKeyedArchiver archivedDataWithRootObject:rowIndexes]; - [pboard declareTypes:[NSArray arrayWithObject:favoritesPBoardType] owner:self]; - [pboard setData:archivedData forType:favoritesPBoardType]; - return YES; + return [favorites count]; } -- (NSDragOperation)tableView:(NSTableView *)aTableView validateDrop:(id < NSDraggingInfo >)info - proposedRow:(NSInteger)row proposedDropOperation:(NSTableViewDropOperation)operation +/** + * Returns the favorite names to be displayed in the table + */ +- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex { - if (row == 0) return NSDragOperationNone; - if ([info draggingSource] == aTableView) - { - [aTableView setDropRow:row dropOperation:NSTableViewDropAbove]; - return NSDragOperationMove; - } - return NSDragOperationNone; + return [[favorites objectAtIndex:rowIndex] objectForKey:@"name"]; } +#pragma mark - +#pragma mark Favorites tableview delegate methods + /** * Loads a favorite, if any are selected. */ @@ -1021,7 +1044,7 @@ #pragma mark - -#pragma mark NSSplitView delegate methods +#pragma mark SplitView delegate methods /** * When the split view is resized, trigger a resize in the hidden table @@ -1032,6 +1055,7 @@ - (CGFloat)splitView:(NSSplitView *)splitView constrainSplitPosition:(CGFloat)proposedPosition ofSubviewAt:(NSInteger)dividerIndex { [databaseConnectionView setPosition:[[[connectionSplitView subviews] objectAtIndex:0] frame].size.width ofDividerAtIndex:0]; + return proposedPosition; } @@ -1131,6 +1155,4 @@ return YES; } - - @end |