diff options
Diffstat (limited to 'Source/SPGeneralPreferencePane.m')
-rw-r--r-- | Source/SPGeneralPreferencePane.m | 131 |
1 files changed, 28 insertions, 103 deletions
diff --git a/Source/SPGeneralPreferencePane.m b/Source/SPGeneralPreferencePane.m index f24dec54..67c43881 100644 --- a/Source/SPGeneralPreferencePane.m +++ b/Source/SPGeneralPreferencePane.m @@ -24,51 +24,21 @@ // More info at <http://code.google.com/p/sequel-pro/> #import "SPGeneralPreferencePane.h" -#import "SPFavoritesController.h" -#import "SPTreeNode.h" -#import "SPFavoriteNode.h" -#import "SPGroupNode.h" - -static NSString *SPDatabaseImage = @"database-small"; - -@interface SPGeneralPreferencePane () - -- (NSArray *)_constructMenuItemsForNode:(SPTreeNode *)node atLevel:(NSUInteger)level; - -@end @implementation SPGeneralPreferencePane #pragma mark - -#pragma mark Initialisation - -- (void)awakeFromNib -{ - // Generic folder image for use in the outline view's groups - folderImage = [[[NSWorkspace sharedWorkspace] iconForFileType:NSFileTypeForHFSTypeCode(kGenericFolderIcon)] retain]; - - [folderImage setSize:NSMakeSize(16, 16)]; -} - -#pragma mark - #pragma mark IB action methods /** * Updates the default favorite. */ - (IBAction)updateDefaultFavorite:(id)sender -{ - for (NSMenuItem *item in [defaultFavoritePopup itemArray]) - { - [item setState:NSOffState]; - } - - [sender setState:NSOnState]; - [defaultFavoritePopup setTitle:[sender title]]; - +{ [prefs setBool:([defaultFavoritePopup indexOfSelectedItem] == 0) forKey:SPSelectLastFavoriteUsed]; - - [prefs setInteger:[sender tag] forKey:SPDefaultFavorite]; + + // Minus 2 from index to account for the "Last Used" and separator items + [prefs setInteger:([defaultFavoritePopup indexOfSelectedItem] - 2) forKey:SPDefaultFavorite]; } #pragma mark - @@ -81,79 +51,43 @@ static NSString *SPDatabaseImage = @"database-small"; { [defaultFavoritePopup removeAllItems]; + // Use the last used favorite [defaultFavoritePopup addItemWithTitle:NSLocalizedString(@"Last Used", @"Last Used entry in favorites menu")]; [[defaultFavoritePopup menu] addItem:[NSMenuItem separatorItem]]; // Add all favorites to the menu - for (SPTreeNode *node in [[[[[SPFavoritesController sharedFavoritesController] favoritesTree] childNodes] objectAtIndex:0] childNodes]) + for (NSString *favorite in [[favoritesController arrangedObjects] valueForKeyPath:@"name"]) { - NSArray *items = [self _constructMenuItemsForNode:node atLevel:0]; + NSMenuItem *favoriteMenuItem = [[NSMenuItem alloc] initWithTitle:favorite action:NULL keyEquivalent:@""]; + + [[defaultFavoritePopup menu] addItem:favoriteMenuItem]; - for (NSMenuItem *item in items) - { - [[defaultFavoritePopup menu] addItem:item]; - } + [favoriteMenuItem release]; } - // Select the default favorite from prefs - [defaultFavoritePopup selectItemWithTag:[prefs boolForKey:SPSelectLastFavoriteUsed] ? 0 : [prefs integerForKey:SPDefaultFavorite]]; + // Add item to switch to edit favorites pane + [[defaultFavoritePopup menu] addItem:[NSMenuItem separatorItem]]; + + NSMenuItem *editMenuItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"Edit Favorites…", @"edit favorites menu item") action:@selector(displayFavoritePreferences:) keyEquivalent:@""]; + + [editMenuItem setTarget:[[[self view] window] delegate]]; + + [[defaultFavoritePopup menu] addItem:editMenuItem]; + + [editMenuItem release]; + + // Select the default favorite from prefs + [self updateDefaultFavoritePopupSelection]; } -#pragma mark - -#pragma mark Private API - /** - * Builds a menu item and sub-menu (if required) of the supplied tree node. - * - * @param node The node to build the menu item for - * - * @return The menu item + * Resets the default favorite popup button selection based on the user's preferences. */ -- (NSArray *)_constructMenuItemsForNode:(SPTreeNode *)node atLevel:(NSUInteger)level -{ - NSMutableArray *items = [NSMutableArray array]; - - if ([node isGroup]) { - - level++; - - SPGroupNode *groupNode = (SPGroupNode *)[node representedObject]; - - NSMenuItem *groupItem = [[NSMenuItem alloc] initWithTitle:[groupNode nodeName] action:NULL keyEquivalent:@""]; - - NSUInteger groupLevel = (level - 1); - - [groupItem setEnabled:NO]; - [groupItem setImage:folderImage]; - [groupItem setIndentationLevel:groupLevel]; - - [items addObject:groupItem]; - - [groupItem release]; - - for (SPTreeNode *childNode in [node childNodes]) - { - NSArray *innerItems = [self _constructMenuItemsForNode:childNode atLevel:level]; - - [items addObjectsFromArray:innerItems]; - } - } - else { - NSDictionary *favorite = [(SPFavoriteNode *)[node representedObject] nodeFavorite]; - - NSMenuItem *menuItem = [[NSMenuItem alloc] initWithTitle:[favorite objectForKey:SPFavoriteNameKey] action:@selector(updateDefaultFavorite:) keyEquivalent:@""]; - - [menuItem setTag:[[favorite objectForKey:SPFavoriteIDKey] integerValue]]; - [menuItem setImage:[NSImage imageNamed:SPDatabaseImage]]; - [menuItem setIndentationLevel:level]; - [menuItem setTarget:self]; - - [items addObject:menuItem]; - - [menuItem release]; - } +- (void)updateDefaultFavoritePopupSelection +{ + NSUInteger index = [prefs integerForKey:SPDefaultFavorite]; - return items; + [defaultFavoritePopup selectItemAtIndex:(![prefs boolForKey:SPSelectLastFavoriteUsed] && index > 0 && index < [[defaultFavoritePopup itemArray] count]) ? index + 2 : 0]; } #pragma mark - @@ -189,13 +123,4 @@ static NSString *SPDatabaseImage = @"database-small"; return NO; } -#pragma mark - - -- (void)dealloc -{ - [folderImage release], folderImage = nil; - - [super dealloc]; -} - @end |