aboutsummaryrefslogtreecommitdiffstats
path: root/TableDocument.m
diff options
context:
space:
mode:
authorabhibeckert <abhi@abhibeckert.com>2008-09-06 06:31:40 +0000
committerabhibeckert <abhi@abhibeckert.com>2008-09-06 06:31:40 +0000
commitfb4490a4b59be5ea57fb156dad74c1ba97ca2d23 (patch)
treed4bd5a6ffbc866e192e701b316de3635cff4f080 /TableDocument.m
parentbc8c9304e0153a5f888426f3d91fd3baee90714d (diff)
downloadsequelpro-fb4490a4b59be5ea57fb156dad74c1ba97ca2d23.tar.gz
sequelpro-fb4490a4b59be5ea57fb156dad74c1ba97ca2d23.tar.bz2
sequelpro-fb4490a4b59be5ea57fb156dad74c1ba97ca2d23.zip
implemneted favourite remove button in connect panel
switched from NSArray to NSMutableArray for favourite storage now using KVO to be notified when to save favourites to NSUserDefaults no-longer block the user from having two favourites with identical data
Diffstat (limited to 'TableDocument.m')
-rw-r--r--TableDocument.m40
1 files changed, 16 insertions, 24 deletions
diff --git a/TableDocument.m b/TableDocument.m
index fc31049b..d109c0e0 100644
--- a/TableDocument.m
+++ b/TableDocument.m
@@ -35,6 +35,7 @@
#import <Growl/Growl.h>
NSString *TableDocumentFavoritesControllerSelectionIndexDidChange = @"TableDocumentFavoritesControllerSelectionIndexDidChange";
+NSString *TableDocumentFavoritesControllerFavoritesDidChange = @"TableDocumentFavoritesControllerFavoritesDidChange";
@implementation TableDocument
@@ -54,6 +55,9 @@ NSString *TableDocumentFavoritesControllerSelectionIndexDidChange = @"TableDocum
{
// register selection did change handler for favorites controller (used in connect sheet)
[favoritesController addObserver:self forKeyPath:@"selectionIndex" options:NSKeyValueChangeInsertion context:TableDocumentFavoritesControllerSelectionIndexDidChange];
+
+ // register value change handler for favourites, so we can save them to preferences
+ [self addObserver:self forKeyPath:@"favorites" options:0 context:TableDocumentFavoritesControllerFavoritesDidChange];
// register double click for the favorites view (double click favorite to connect)
[connectFavoritesTableView setTarget:self];
@@ -69,10 +73,15 @@ NSString *TableDocumentFavoritesControllerSelectionIndexDidChange = @"TableDocum
{
if (context == TableDocumentFavoritesControllerSelectionIndexDidChange) {
[self chooseFavorite:self];
+ return;
}
- else {
- [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
- }
+
+ if (context == TableDocumentFavoritesControllerFavoritesDidChange) {
+ [prefs setObject:[self favorites] forKey:@"favorites"];
+ return;
+ }
+
+ [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
@@ -275,16 +284,16 @@ reused when user hits the close button of the variablseSheet or of the createTab
selectedFavorite = [[favoritesButton titleOfSelectedItem] retain];
}
-- (NSArray *)favorites
+- (NSMutableArray *)favorites
{
// if no favorites, load from user defaults
if (!favorites) {
- favorites = [[NSArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"favorites"]];
+ favorites = [[NSMutableArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"favorites"]];
}
// if no favorites in user defaults, load empty ones
if (!favorites) {
- favorites = [[NSArray array] retain];
+ favorites = [[NSMutableArray array] retain];
}
return favorites;
@@ -325,12 +334,6 @@ reused when user hits the close button of the variablseSheet or of the createTab
[self addToFavoritesHost:[hostField stringValue] socket:[socketField stringValue] user:[userField stringValue] password:[passwordField stringValue] port:[portField stringValue] database:[databaseField stringValue] useSSH:false sshHost:@"" sshUser:@"" sshPassword:@"" sshPort:@""];
}
-- (void)connectSheetRemoveFromFavorites:(id)sender
-{
- NSBeep();
- NSLog(@"Remove from favourites is not yet implemented.");
-}
-
/**
* add actual connection to favorites
*/
@@ -343,8 +346,6 @@ reused when user hits the close button of the variablseSheet or of the createTab
sshPassword:(NSString *)sshPassword // no-longer in use
sshPort:(NSString *)sshPort // no-longer in use
{
- NSEnumerator *enumerator = [favorites objectEnumerator];
- id favorite;
NSString *favoriteName = [NSString stringWithFormat:@"%@@%@", user, host];
if (![database isEqualToString:@""])
favoriteName = [NSString stringWithFormat:@"%@ %@", database, favoriteName];
@@ -354,28 +355,19 @@ reused when user hits the close button of the variablseSheet or of the createTab
NSRunAlertPanel(NSLocalizedString(@"Error", @"error"), NSLocalizedString(@"Please enter at least a host or socket.", @"message of panel when host/socket are missing"), NSLocalizedString(@"OK", @"OK button"), nil, nil);
return;
}
-
- // test if favorite name isn't used by another favorite
- while (favorite = [enumerator nextObject]) {
- if ([[favorite objectForKey:@"name"] isEqualToString:favoriteName]) {
- NSRunAlertPanel(NSLocalizedString(@"Error", @"error"), [NSString stringWithFormat:NSLocalizedString(@"Favorite %@ has already been saved!\nOpen Preferences to change the names of the favorites.", @"message of panel when favorite name has already been used"), favoriteName], NSLocalizedString(@"OK", @"OK button"), nil, nil);
- return;
- }
- }
[self willChangeValueForKey:@"favorites"];
// write favorites and password
NSDictionary *newFavorite = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:favoriteName, host, socket, user, port, database, nil]
forKeys:[NSArray arrayWithObjects:@"name", @"host", @"socket", @"user", @"port", @"database", nil]];
- favorites = [[favorites arrayByAddingObject:newFavorite] retain];
+ [favorites addObject:newFavorite];
if (![password isEqualToString:@""]) {
[keyChainInstance addPassword:password
forName:[NSString stringWithFormat:@"Sequel Pro : %@", favoriteName]
account:[NSString stringWithFormat:@"%@@%@/%@", user, host, database]];
}
- [prefs setObject:favorites forKey:@"favorites"];
// select new favorite
selectedFavorite = [favoriteName retain];