aboutsummaryrefslogtreecommitdiffstats
path: root/Source/SPBundleEditorController.m
diff options
context:
space:
mode:
authorBibiko <bibiko@eva.mpg.de>2010-11-19 10:29:42 +0000
committerBibiko <bibiko@eva.mpg.de>2010-11-19 10:29:42 +0000
commitb5c4f326fb175499d0b837cb325b9eeea676fb4f (patch)
tree2b6509d5f45011920ac87e6e180aa7de56534ea6 /Source/SPBundleEditorController.m
parentad92dcb5b130b6543db0b85c322984f521c9ad0c (diff)
downloadsequelpro-b5c4f326fb175499d0b837cb325b9eeea676fb4f.tar.gz
sequelpro-b5c4f326fb175499d0b837cb325b9eeea676fb4f.tar.bz2
sequelpro-b5c4f326fb175499d0b837cb325b9eeea676fb4f.zip
• Bundle Editor
- fixed saving and duplicating Bundles if Bundle contains other files/folder - fixed adding a new Bundle - added gui tooltips • SPTooltip - if no location was passed and first responder isn't a textView show the tooltip at the mouse location • CopyTable - show tooltip invoked by a Bundle command always at mouse location • Content / Custom Query Table - suppress tooltip of cell content if another tooltip (mainly displayed by a Bundle) is visible [shoudl be improved since iterating through the window list isn't so good]
Diffstat (limited to 'Source/SPBundleEditorController.m')
-rw-r--r--Source/SPBundleEditorController.m77
1 files changed, 63 insertions, 14 deletions
diff --git a/Source/SPBundleEditorController.m b/Source/SPBundleEditorController.m
index deb8e0be..574836e2 100644
--- a/Source/SPBundleEditorController.m
+++ b/Source/SPBundleEditorController.m
@@ -325,16 +325,56 @@
// Store pending changes in Query
[[self window] makeFirstResponder:nameTextField];
- // Duplicate a selected favorite if sender == self
+ // Duplicate a selected Bundle if sender == self
if (sender == self) {
NSDictionary *currentDict = [commandBundleArray objectAtIndex:[commandsTableView selectedRow]];
bundle = [NSMutableDictionary dictionaryWithDictionary:currentDict];
- [bundle setObject:[NSString stringWithFormat:@"%@_Copy", [bundle objectForKey:@"bundleName"]] forKey:@"bundleName"];
+
+ NSString *bundleFileName = [bundle objectForKey:@"bundleName"];
+ NSString *newFileName = [NSString stringWithFormat:@"%@_Copy", [bundle objectForKey:@"bundleName"]];
+ NSString *possibleExisitingBundleFilePath = [NSString stringWithFormat:@"%@/%@.%@", bundlePath, bundleFileName, SPUserBundleFileExtension];
+ NSString *newBundleFilePath = [NSString stringWithFormat:@"%@/%@.%@", bundlePath, newFileName, SPUserBundleFileExtension];
+
+ BOOL isDir;
+ BOOL copyingWasSuccessful = YES;
+ // Copy possible existing bundle with content
+ if([[NSFileManager defaultManager] fileExistsAtPath:possibleExisitingBundleFilePath isDirectory:&isDir] && isDir) {
+ if(![[NSFileManager defaultManager] copyItemAtPath:possibleExisitingBundleFilePath toPath:newBundleFilePath error:nil])
+ copyingWasSuccessful = NO;
+ }
+ if(!copyingWasSuccessful) {
+ // try again with new name
+ newFileName = [NSString stringWithFormat:@"%@_%ld", newFileName, (NSUInteger)(random() % 35000)];
+ newBundleFilePath = [NSString stringWithFormat:@"%@/%@.%@", bundlePath, newFileName, SPUserBundleFileExtension];
+ if([[NSFileManager defaultManager] fileExistsAtPath:possibleExisitingBundleFilePath isDirectory:&isDir] && isDir) {
+ if([[NSFileManager defaultManager] copyItemAtPath:possibleExisitingBundleFilePath toPath:newBundleFilePath error:nil])
+ copyingWasSuccessful = YES;
+ }
+ }
+ if(!copyingWasSuccessful) {
+
+ [commandsTableView reloadData];
+
+ NSAlert *alert = [NSAlert alertWithMessageText:NSLocalizedString(@"Error", @"error")
+ defaultButton:NSLocalizedString(@"OK", @"OK button")
+ alternateButton:nil
+ otherButton:nil
+ informativeTextWithFormat:NSLocalizedString(@"Error while duplicating Bundle content.", @"error while duplicating Bundle content")];
+
+ [alert setAlertStyle:NSCriticalAlertStyle];
+ [alert runModal];
+
+ return;
+
+ }
+
+ [bundle setObject:newFileName forKey:@"bundleName"];
+
}
- // Add a new favorite
+ // Add a new Bundle
else {
- bundle = [NSMutableDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"New Bundle", @"New Name", @"", nil]
- forKeys:[NSArray arrayWithObjects:@"bundleName", @"name", @"command", nil]];
+ bundle = [NSMutableDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"New Bundle", @"New Name", @"", SPBundleScopeInputField, [NSNumber numberWithInt:1], nil]
+ forKeys:[NSArray arrayWithObjects:@"bundleName", SPBundleFileNameKey, SPBundleFileCommandKey, SPBundleFileScopeKey, SPBundleScopeInputField, nil]];
}
if ([commandsTableView numberOfSelectedRows] > 0) {
insertIndex = [[commandsTableView selectedRowIndexes] lastIndex]+1;
@@ -354,6 +394,7 @@
[removeButton setEnabled:([commandsTableView numberOfSelectedRows] > 0)];
[[self window] makeFirstResponder:commandsTableView];
+ [self scopeButtonChanged:nil];
if([commandsTableView numberOfSelectedRows] > 0)
[commandsTableView editColumn:0 row:insertIndex withEvent:nil select:YES];
}
@@ -487,14 +528,7 @@
NSInteger idx = 0;
for(id item in commandBundleArray) {
if([allNames objectForKey:[item objectForKey:@"bundleName"]]) {
- NSInteger i = 0;
- NSString *newName = [NSString stringWithFormat:@"%@_%ld", [item objectForKey:@"bundleName"], i++];
- while([allNames objectForKey:newName]) {
- newName = [NSString stringWithFormat:@"%@_%ld", [item objectForKey:@"bundleName"], i++];
- if(i>100) {
- return NO;
- }
- }
+ NSString *newName = [NSString stringWithFormat:@"%@_%ld", [item objectForKey:@"bundleName"], (NSUInteger)(random() % 35000)];
[[commandBundleArray objectAtIndex:idx] setObject:newName forKey:@"bundleName"];
} else {
[allNames setObject:@"" forKey:[item objectForKey:@"bundleName"]];
@@ -648,7 +682,22 @@
}
} else if([contextInfo isEqualToString:@"saveBundle"]) {
if (returnCode == NSOKButton) {
- if(![self saveBundle:[commandBundleArray objectAtIndex:[commandsTableView selectedRow]] atPath:[sheet filename]]) {
+
+ id aBundle = [commandBundleArray objectAtIndex:[commandsTableView selectedRow]];
+
+ NSString *bundleFileName = [aBundle objectForKey:@"bundleName"];
+ NSString *possibleExisitingBundleFilePath = [NSString stringWithFormat:@"%@/%@.%@", bundlePath, bundleFileName, SPUserBundleFileExtension];
+
+ NSString *savePath = [sheet filename];
+
+ BOOL isDir;
+ BOOL copyingWasSuccessful = YES;
+ // Copy possible existing bundle with content
+ if([[NSFileManager defaultManager] fileExistsAtPath:possibleExisitingBundleFilePath isDirectory:&isDir] && isDir) {
+ if(![[NSFileManager defaultManager] copyItemAtPath:possibleExisitingBundleFilePath toPath:savePath error:nil])
+ copyingWasSuccessful = NO;
+ }
+ if(!copyingWasSuccessful || ![self saveBundle:aBundle atPath:savePath]) {
NSAlert *alert = [NSAlert alertWithMessageText:NSLocalizedString(@"Error while saving the Bundle.", @"error while saving a Bundle")
defaultButton:NSLocalizedString(@"OK", @"OK button")
alternateButton:nil