From debc98eb182d845e4ab803c1cd1d84908da745d3 Mon Sep 17 00:00:00 2001 From: rowanbeentje Date: Wed, 31 Aug 2011 01:23:29 +0000 Subject: - Clean up undo manager handling - Implement an undo manager per tab (strictly speaking, per connection 'document'), addressing Issue #1109. --- Source/SPBundleEditorController.m | 1 + Source/SPCustomQuery.m | 7 +++++++ Source/SPDatabaseDocument.h | 2 ++ Source/SPDatabaseDocument.m | 12 ++++++++++++ Source/SPSSHTunnel.m | 2 +- Source/SPWindow.m | 14 ++++++++++++++ 6 files changed, 37 insertions(+), 1 deletion(-) (limited to 'Source') diff --git a/Source/SPBundleEditorController.m b/Source/SPBundleEditorController.m index ba053236..8736375a 100644 --- a/Source/SPBundleEditorController.m +++ b/Source/SPBundleEditorController.m @@ -109,6 +109,7 @@ if (commandBundleTree) [commandBundleTree release], commandBundleTree = nil; if (sortDescriptor) [sortDescriptor release], sortDescriptor = nil; if (bundlePath) [bundlePath release], bundlePath = nil; + if (esUndoManager) [esUndoManager release], esUndoManager = nil; [super dealloc]; } diff --git a/Source/SPCustomQuery.m b/Source/SPCustomQuery.m index c26ca28f..80b69358 100644 --- a/Source/SPCustomQuery.m +++ b/Source/SPCustomQuery.m @@ -2769,6 +2769,13 @@ } +#ifndef SP_REFACTOR +- (NSUndoManager *)undoManagerForTextView:(NSTextView *)aTextView +{ + return [tableDocumentInstance undoManager]; +} +#endif + #pragma mark - #pragma mark SplitView delegate methods diff --git a/Source/SPDatabaseDocument.h b/Source/SPDatabaseDocument.h index 31c3d636..a0d02bb6 100644 --- a/Source/SPDatabaseDocument.h +++ b/Source/SPDatabaseDocument.h @@ -170,6 +170,7 @@ SPDatabaseData, SPTablesList, SPTableStructure, SPTableContent, SPTableData, SPS #ifndef SP_REFACTOR /* ivars */ NSUserDefaults *prefs; NSMutableArray *nibObjectsToRelease; + NSUndoManager *undoManager; #endif NSMenu *selectEncodingMenu; @@ -378,6 +379,7 @@ SPDatabaseData, SPTablesList, SPTableStructure, SPTableContent, SPTableData, SPS - (NSURL *)fileURL; - (NSString *)displayName; #ifndef SP_REFACTOR /* method decls */ +- (NSUndoManager *)undoManager; // Notification center methods - (void)willPerformQuery:(NSNotification *)notification; diff --git a/Source/SPDatabaseDocument.m b/Source/SPDatabaseDocument.m index d9e9b671..18bc6407 100644 --- a/Source/SPDatabaseDocument.m +++ b/Source/SPDatabaseDocument.m @@ -176,6 +176,7 @@ static NSString *SPCreateSyntx = @"SPCreateSyntax"; [printWebView setFrameLoadDelegate:self]; prefs = [NSUserDefaults standardUserDefaults]; + undoManager = [[NSUndoManager alloc] init]; #endif queryEditorInitString = nil; @@ -4128,6 +4129,15 @@ static NSString *SPCreateSyntx = @"SPCreateSyntax"; } return [[[self fileURL] path] lastPathComponent]; } + +#ifndef SP_REFACTOR +- (NSUndoManager *)undoManager +{ + return undoManager; +} +#endif + + #ifndef SP_REFACTOR /* state saving and setting */ #pragma mark - #pragma mark State saving and setting @@ -5629,11 +5639,13 @@ static NSString *SPCreateSyntx = @"SPCreateSyntax"; for (id retainedObject in nibObjectsToRelease) [retainedObject release]; [nibObjectsToRelease release]; + #endif [allDatabases release]; [allSystemDatabases release]; #ifndef SP_REFACTOR /* dealloc ivars */ + [undoManager release]; [printWebView release]; #endif [taskProgressWindow close]; diff --git a/Source/SPSSHTunnel.m b/Source/SPSSHTunnel.m index d0464d59..04e21e5f 100644 --- a/Source/SPSSHTunnel.m +++ b/Source/SPSSHTunnel.m @@ -644,7 +644,7 @@ if (requestedResponse) { NSString *thePassword = [NSString stringWithString:[sshPasswordField stringValue]]; [sshPasswordField setStringValue:@""]; - if ([delegate respondsToSelector:@selector(setUndoManager:)] && [delegate undoManager]) { + if ([delegate respondsToSelector:@selector(undoManager)] && [delegate undoManager]) { [[delegate undoManager] removeAllActionsWithTarget:sshPasswordField]; } else if ([[parentWindow windowController] document] && [[[parentWindow windowController] document] undoManager]) { [[[[parentWindow windowController] document] undoManager] removeAllActionsWithTarget:sshPasswordField]; diff --git a/Source/SPWindow.m b/Source/SPWindow.m index 414d043a..2f5cf56e 100644 --- a/Source/SPWindow.m +++ b/Source/SPWindow.m @@ -115,5 +115,19 @@ [super sendEvent:theEvent]; } +/** + * If this window is controlled by an SPWindowController, and thus supports being asked + * for the frontmost SPTableDocument, request the undoController for that table + * document. This allows undo to be individual per tab rather than shared across the + * window. + */ +- (NSUndoManager *)undoManager +{ + if ([[self windowController] respondsToSelector:@selector(selectedTableDocument)]) { + NSLog(@"Test: %@", [[[[self windowController] selectedTableDocument] undoManager] description]); + return [[[self windowController] selectedTableDocument] undoManager]; + } + return [super undoManager]; +} @end -- cgit v1.2.3