diff options
50 files changed, 1645 insertions, 216 deletions
diff --git a/Source/NSNotificationAdditions.h b/Source/NSNotificationAdditions.h index d1903da5..8722ed4f 100644 --- a/Source/NSNotificationAdditions.h +++ b/Source/NSNotificationAdditions.h @@ -25,11 +25,20 @@ @interface NSNotificationCenter (NSNotificationCenterAdditions) +#ifndef SP_REFACTOR - (void)postNotificationOnMainThread:(NSNotification *)notification; - (void)postNotificationOnMainThread:(NSNotification *)notification waitUntilDone:(BOOL)wait; - (void)postNotificationOnMainThreadWithName:(NSString *)name object:(id)object; - (void)postNotificationOnMainThreadWithName:(NSString *)name object:(id)object userInfo:(NSDictionary *)userInfo; - (void)postNotificationOnMainThreadWithName:(NSString *)name object:(id)object userInfo:(NSDictionary *)userInfo waitUntilDone:(BOOL)wait; +#else +- (void)sequelProPostNotificationOnMainThread:(NSNotification *)notification; +- (void)sequelProPostNotificationOnMainThread:(NSNotification *)notification waitUntilDone:(BOOL)wait; + +- (void)sequelProPostNotificationOnMainThreadWithName:(NSString *)name object:(id)object; +- (void)sequelProPostNotificationOnMainThreadWithName:(NSString *)name object:(id)object userInfo:(NSDictionary *)userInfo; +- (void)sequelProPostNotificationOnMainThreadWithName:(NSString *)name object:(id)object userInfo:(NSDictionary *)userInfo waitUntilDone:(BOOL)wait; +#endif @end diff --git a/Source/NSNotificationAdditions.m b/Source/NSNotificationAdditions.m index ae949347..8b64c1f2 100644 --- a/Source/NSNotificationAdditions.m +++ b/Source/NSNotificationAdditions.m @@ -27,42 +27,84 @@ #import "pthread.h" @interface NSNotificationCenter (NSNotificationCenterAdditions_PrivateAPI) +#ifndef SP_REFACTOR + (void)_postNotification:(NSNotification *)notification; + (void)_postNotificationName:(NSDictionary *)info; + (void)_postNotificationForwarder:(NSDictionary *)info; +#else ++ (void)_sequelProPostNotification:(NSNotification *)notification; ++ (void)_sequelProPostNotificationName:(NSDictionary *)info; ++ (void)_sequelProPostNotificationForwarder:(NSDictionary *)info; +#endif @end @implementation NSNotificationCenter (NSNotificationCenterAdditions) +#ifndef SP_REFACTOR - (void)postNotificationOnMainThread:(NSNotification *)notification +#else +- (void)sequelProPostNotificationOnMainThread:(NSNotification *)notification +#endif { if (pthread_main_np()) return [self postNotification:notification]; +#ifndef SP_REFACTOR [self postNotificationOnMainThread:notification waitUntilDone:NO]; +#else + [self sequelProPostNotificationOnMainThread:notification waitUntilDone:NO]; +#endif } +#ifndef SP_REFACTOR - (void)postNotificationOnMainThread:(NSNotification *)notification waitUntilDone:(BOOL)shouldWaitUntilDone +#else +- (void)sequelProPostNotificationOnMainThread:(NSNotification *)notification waitUntilDone:(BOOL)shouldWaitUntilDone +#endif { if (pthread_main_np()) return [self postNotification:notification]; - + +#ifndef SP_REFACTOR [self performSelectorOnMainThread:@selector(_postNotification:) withObject:notification waitUntilDone:shouldWaitUntilDone]; +#else + [self performSelectorOnMainThread:@selector(_sequelProPostNotification:) withObject:notification waitUntilDone:shouldWaitUntilDone]; +#endif } +#ifndef SP_REFACTOR - (void)postNotificationOnMainThreadWithName:(NSString *)name object:(id)object +#else +- (void)sequelProPostNotificationOnMainThreadWithName:(NSString *)name object:(id)object +#endif { if (pthread_main_np()) return [self postNotificationName:name object:object userInfo:nil]; +#ifndef SP_REFACTOR [self postNotificationOnMainThreadWithName:name object:object userInfo:nil waitUntilDone:NO]; +#else + [self sequelProPostNotificationOnMainThreadWithName:name object:object userInfo:nil waitUntilDone:NO]; +#endif } +#ifndef SP_REFACTOR - (void)postNotificationOnMainThreadWithName:(NSString *)name object:(id)object userInfo:(NSDictionary *)userInfo +#else +- (void)sequelProPostNotificationOnMainThreadWithName:(NSString *)name object:(id)object userInfo:(NSDictionary *)userInfo +#endif { if(pthread_main_np()) return [self postNotificationName:name object:object userInfo:userInfo]; +#ifndef SP_REFACTOR [self postNotificationOnMainThreadWithName:name object:object userInfo:userInfo waitUntilDone:NO]; +#else + [self sequelProPostNotificationOnMainThreadWithName:name object:object userInfo:userInfo waitUntilDone:NO]; +#endif } +#ifndef SP_REFACTOR - (void)postNotificationOnMainThreadWithName:(NSString *)name object:(id)object userInfo:(NSDictionary *)userInfo waitUntilDone:(BOOL)shouldWaitUntilDone +#else +- (void)sequelProPostNotificationOnMainThreadWithName:(NSString *)name object:(id)object userInfo:(NSDictionary *)userInfo waitUntilDone:(BOOL)shouldWaitUntilDone +#endif { if (pthread_main_np()) return [self postNotificationName:name object:object userInfo:userInfo]; @@ -72,7 +114,11 @@ if (object) [info setObject:object forKey:@"object"]; if (userInfo) [info setObject:userInfo forKey:@"userInfo"]; +#ifndef SP_REFACTOR [[self class] performSelectorOnMainThread:@selector(_postNotificationName:) withObject:info waitUntilDone:shouldWaitUntilDone]; +#else + [[self class] performSelectorOnMainThread:@selector(_sequelProPostNotificationName:) withObject:info waitUntilDone:shouldWaitUntilDone]; +#endif [info release]; } @@ -81,12 +127,20 @@ @implementation NSNotificationCenter (NSNotificationCenterAdditions_PrivateAPI) +#ifndef SP_REFACTOR + (void)_postNotification:(NSNotification *)notification +#else ++ (void)_sequelProPostNotification:(NSNotification *)notification +#endif { [[self defaultCenter] postNotification:notification]; } +#ifndef SP_REFACTOR + (void)_postNotificationName:(NSDictionary *)info +#else ++ (void)_sequelProPostNotificationName:(NSDictionary *)info +#endif { NSString *name = [info objectForKey:@"name"]; @@ -97,7 +151,11 @@ [[self defaultCenter] postNotificationName:name object:object userInfo:userInfo]; } +#ifndef SP_REFACTOR + (void)_postNotificationForwarder:(NSDictionary *)info +#else ++ (void)_sequelProPostNotificationForwarder:(NSDictionary *)info +#endif { NSString *name = [info objectForKey:@"name"]; diff --git a/Source/SPBundleCommandTextView.m b/Source/SPBundleCommandTextView.m index 59bebadc..6f91676c 100644 --- a/Source/SPBundleCommandTextView.m +++ b/Source/SPBundleCommandTextView.m @@ -488,7 +488,13 @@ [self saveChangedFontInUserDefaults]; return; } - if([charactersIgnMod isEqualToString:@"["]) // decrease text size by 1; ⌘- and numpad - + if([charactersIgnMod isEqualToString:@"0"]) // return text to standard size; ⌘0 + { + [self makeTextStandardSize]; + [self saveChangedFontInUserDefaults]; + return; + } + if([charactersIgnMod isEqualToString:@"["]) // shift left { [self shiftSelectionLeft]; return; @@ -498,7 +504,7 @@ [self shiftSelectionRight]; return; } - if([charactersIgnMod isEqualToString:@"/"]) // shift right + if([charactersIgnMod isEqualToString:@"/"]) // comment out text { [self commentOut]; return; diff --git a/Source/SPBundleHTMLOutputController.m b/Source/SPBundleHTMLOutputController.m index 1995cfcb..e49cce11 100644 --- a/Source/SPBundleHTMLOutputController.m +++ b/Source/SPBundleHTMLOutputController.m @@ -145,6 +145,11 @@ [webView makeTextSmaller:nil]; return; } + if([charactersIgnMod isEqualToString:@"0"]) // return the text size to the default size + { + [webView makeTextStandardSize:nil]; + return; + } if([theEvent keyCode] == 123) // goBack { if([webView canGoBack]) diff --git a/Source/SPConnectionController.h b/Source/SPConnectionController.h index a5b79d80..2fa28019 100644 --- a/Source/SPConnectionController.h +++ b/Source/SPConnectionController.h @@ -24,17 +24,24 @@ // More info at <http://code.google.com/p/sequel-pro/> #import <MCPKit/MCPKit.h> - #import "SPConnectionControllerDelegateProtocol.h" +#ifndef SP_REFACTOR /* headers */ +#endif + @class SPDatabaseDocument, SPFavoritesController, - SPKeychain, SPSSHTunnel, SPTreeNode, - SPFavoriteNode, - SPFavoritesOutlineView, - BWAnchoredButtonBar; + SPFavoritesOutlineView +#ifndef SP_REFACTOR /* class decl */ + ,SPKeychain, + BWAnchoredButtonBar, + SPFavoriteNode +#endif +; + +#ifndef SP_REFACTOR /* class decl */ @interface NSObject (BWAnchoredButtonBar) @@ -52,11 +59,24 @@ MCPConnection *mySQLConnection; +#ifndef SP_REFACTOR /* ivars */ NSView *databaseConnectionSuperview; NSSplitView *databaseConnectionView; - + SPKeychain *keychain; + NSUserDefaults *prefs; + NSMutableArray *favorites; +#endif + SPSSHTunnel *sshTunnel; + MCPConnection *mySQLConnection; +#ifndef SP_REFACTOR /* ivars */ + BOOL automaticFavoriteSelection; +#endif + BOOL cancellingConnection; + BOOL isConnecting; +#ifndef SP_REFACTOR /* ivars */ // Standard details NSInteger previousType; +#endif NSInteger type; NSString *name; NSString *host; @@ -85,6 +105,7 @@ NSString *connectionKeychainID; NSString *connectionKeychainItemName; +#ifndef SP_REFACTOR /* ivars */ NSString *connectionKeychainItemAccount; NSString *connectionSSHKeychainItemName; NSString *connectionSSHKeychainItemAccount; @@ -143,10 +164,13 @@ BOOL isConnecting; BOOL cancellingConnection; BOOL reverseFavoritesSort; +#endif + BOOL mySQLConnectionCancelled; BOOL automaticFavoriteSelection; BOOL favoriteNameFieldWasTouched; +#ifndef SP_REFACTOR /* ivars */ NSImage *folderImage; NSUserDefaults *prefs; @@ -154,9 +178,10 @@ SPFavoriteNode *currentFavorite; SPFavoritesController *favoritesController; SPFavoritesSortItem previousSortItem, currentSortItem; +#endif } -@property (readwrite, assign) id <SPConnectionControllerDelegateProtocol> delegate; +@property (readwrite, assign) id <SPConnectionControllerDelegateProtocol, NSObject> delegate; @property (readwrite, assign) NSInteger type; @property (readwrite, retain) NSString *name; @property (readwrite, retain) NSString *host; @@ -178,11 +203,13 @@ @property (readwrite, assign) NSInteger sshKeyLocationEnabled; @property (readwrite, retain) NSString *sshKeyLocation; @property (readwrite, retain) NSString *sshPort; +#ifndef SP_REFACTOR /* ivars */ @property (readwrite, retain) NSString *connectionKeychainItemName; @property (readwrite, retain) NSString *connectionKeychainItemAccount; @property (readwrite, retain) NSString *connectionSSHKeychainItemName; @property (readwrite, retain) NSString *connectionSSHKeychainItemAccount; +#endif @property (readonly, assign) BOOL isConnecting; @@ -190,6 +217,7 @@ // Connection processes - (IBAction)initiateConnection:(id)sender; +#ifndef SP_REFACTOR /* method decls */ - (IBAction)cancelMySQLConnection:(id)sender; // Interface interaction @@ -220,4 +248,5 @@ - (IBAction)importFavorites:(id)sender; - (IBAction)exportFavorites:(id)sender; +#endif @end diff --git a/Source/SPConstants.m b/Source/SPConstants.m index 6e8f8b2d..31ac3806 100644 --- a/Source/SPConstants.m +++ b/Source/SPConstants.m @@ -78,9 +78,15 @@ NSString *SPLoadBlobsAsNeeded = @"LoadBlobsAsNeeded"; NSString *SPTableRowCountQueryLevel = @"TableRowCountQueryLevel"; NSString *SPTableRowCountCheapSizeBoundary = @"TableRowCountCheapLookupSizeBoundary"; NSString *SPNewFieldsAllowNulls = @"NewFieldsAllowNulls"; +#ifndef SP_REFACTOR NSString *SPLimitResults = @"LimitResults"; NSString *SPLimitResultsValue = @"LimitResultsValue"; NSString *SPNullValue = @"NullValue"; +#else +NSString *SPLimitResults = @"SPLimitResults"; +NSString *SPLimitResultsValue = @"SPLimitResultsValue"; +NSString *SPNullValue = @"SPNullValue"; +#endif NSString *SPGlobalResultTableFont = @"GlobalResultTableFont"; NSString *SPFilterTableDefaultOperator = @"FilterTableDefaultOperator"; NSString *SPFilterTableDefaultOperatorLastItems = @"FilterTableDefaultOperatorLastItems"; diff --git a/Source/SPContentFilterManager.h b/Source/SPContentFilterManager.h index ec2c1ef6..ec23afe6 100644 --- a/Source/SPContentFilterManager.h +++ b/Source/SPContentFilterManager.h @@ -31,9 +31,15 @@ @end -@interface SPContentFilterManager : NSWindowController +#ifndef SP_REFACTOR /* ivars */ +@interface SPContentFilterManager : NSWindowController +#else +@interface SPContentFilterManager : NSWindowController <NSOpenSavePanelDelegate> +#endif { +#ifndef SP_REFACTOR /* ivars */ NSUserDefaults *prefs; +#endif SPDatabaseDocument *tableDocumentInstance; NSURL *delegatesFileURL; diff --git a/Source/SPContentFilterManager.m b/Source/SPContentFilterManager.m index 97c0b5d6..7b24d6e1 100644 --- a/Source/SPContentFilterManager.m +++ b/Source/SPContentFilterManager.m @@ -29,7 +29,9 @@ #import "SPQueryController.h" #import "SPTableContent.h" #import "SPConnectionController.h" +#ifndef SP_REFACTOR /* headers */ #import <BWToolkitFramework/BWToolkitFramework.h> +#endif #define SP_MULTIPLE_SELECTION_PLACEHOLDER_STRING NSLocalizedString(@"[multiple selection]", @"[multiple selection]") #define SP_NO_SELECTION_PLACEHOLDER_STRING NSLocalizedString(@"[no selection]", @"[no selection]") @@ -45,7 +47,9 @@ { if ((self = [super initWithWindowNibName:@"ContentFilterManager"])) { +#ifndef SP_REFACTOR prefs = [NSUserDefaults standardUserDefaults]; +#endif contentFilters = [[NSMutableArray alloc] init]; @@ -84,6 +88,7 @@ @"", @"ConjunctionLabel", nil]]; +#ifndef SP_REFACTOR /* prefs access */ // Build data source for global content filter (as mutable copy! otherwise each // change will be stored in the prefs at once) if([[prefs objectForKey:SPContentFilters] objectForKey:filterType]) { @@ -94,6 +99,7 @@ [contentFilters addObject:f]; } } +#endif // Build doc-based filters [contentFilters addObject:[NSDictionary dictionaryWithObjectsAndKeys: @@ -135,8 +141,10 @@ // Set column header [[[contentFilterTableView tableColumnWithIdentifier:@"MenuLabel"] headerCell] setStringValue:[NSString stringWithFormat:NSLocalizedString(@"‘%@’ Fields Content Filters", @"table column header. Read: 'Showing all content filters for fields of type %@' (ContentFilterManager)"), filterType]]; +#ifndef SP_REFACTOR /* split view delegate */ // Set the button delegate [splitViewButtonBar setSplitViewDelegate:self]; +#endif } #pragma mark - @@ -359,6 +367,7 @@ [[SPQueryController sharedQueryController] replaceContentFilterByArray: [self contentFilterForFileURL:delegatesFileURL] ofType:filterType forFileURL:delegatesFileURL]; +#ifndef SP_REFACTOR // Update global preferences' list id cf = [[prefs objectForKey:SPContentFilters] mutableCopy]; [cf setObject:[self contentFilterForFileURL:nil] forKey:filterType]; @@ -370,6 +379,7 @@ if([[doc valueForKeyPath:@"tableContentInstance"] respondsToSelector:@selector(setCompareTypes:)]) [[doc valueForKeyPath:@"tableContentInstance"] setCompareTypes:nil]; +#endif } @@ -833,7 +843,7 @@ mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&convError] retain]; if(!spf || readError != nil || [convError length] || !(format == NSPropertyListXMLFormat_v1_0 || format == NSPropertyListBinaryFormat_v1_0)) { - NSAlert *alert = [NSAlert alertWithMessageText:[NSString stringWithFormat:SP_FILE_PARSER_ERROR_TITLE_STRING] + NSAlert *alert = [NSAlert alertWithMessageText:[NSString stringWithString:SP_FILE_PARSER_ERROR_TITLE_STRING] defaultButton:NSLocalizedString(@"OK", @"OK button") alternateButton:nil otherButton:nil @@ -861,7 +871,7 @@ [contentFilterTableView reloadData]; [spf release]; } else { - NSAlert *alert = [NSAlert alertWithMessageText:[NSString stringWithFormat:SP_FILE_PARSER_ERROR_TITLE_STRING] + NSAlert *alert = [NSAlert alertWithMessageText:[NSString stringWithString:SP_FILE_PARSER_ERROR_TITLE_STRING] defaultButton:NSLocalizedString(@"OK", @"OK button") alternateButton:nil otherButton:nil @@ -913,7 +923,7 @@ errorDescription:&err]; if(err != nil) { - NSAlert *alert = [NSAlert alertWithMessageText:[NSString stringWithFormat:NSLocalizedString(@"Error while converting content filter data", @"Content filters could not be converted to plist upon export - message title (ContentFilterManager)")] + NSAlert *alert = [NSAlert alertWithMessageText:[NSString stringWithString:NSLocalizedString(@"Error while converting content filter data", @"Content filters could not be converted to plist upon export - message title (ContentFilterManager)")] defaultButton:NSLocalizedString(@"OK", @"OK button") alternateButton:nil otherButton:nil diff --git a/Source/SPCopyTable.h b/Source/SPCopyTable.h index 4723dbc9..87c4ec8c 100644 --- a/Source/SPCopyTable.h +++ b/Source/SPCopyTable.h @@ -28,6 +28,7 @@ #define SP_MAX_CELL_WIDTH 400 @class SPDataStorage; +@class SPTableContent; /*! @class copyTable @@ -39,7 +40,7 @@ */ @interface SPCopyTable : SPTableView { - id tableInstance; // the table content view instance + SPTableContent* tableInstance; // the table content view instance id mySQLConnection; // current MySQL connection NSArray* columnDefinitions; // array of NSDictionary containing info about columns NSString* selectedTable; // the name of the current selected table @@ -84,6 +85,7 @@ */ - (NSUInteger)draggingSourceOperationMaskForLocal:(BOOL)isLocal; +#ifndef SP_REFACTOR /* method decls */ /*! @method rowsAsTabStringWithHeaders:onlySelectedRows: @abstract getter of the selected rows or all of the table for copy @@ -105,6 +107,7 @@ @result The above described string, or nil if nothing selected */ - (NSString *)rowsAsCsvStringWithHeaders:(BOOL)withHeaders onlySelectedRows:(BOOL)onlySelected blobHandling:(NSInteger)withBlobHandling; +#endif /* * Generate a string in form of INSERT INTO <table> VALUES () of @@ -172,6 +175,8 @@ - (void)selectTableRows:(NSArray*)rowIndices; +- (BOOL)control:(NSControl *)control textView:(NSTextView *)textView doCommandBySelector:(SEL)command; + @end extern NSInteger MENU_EDIT_COPY; diff --git a/Source/SPCopyTable.m b/Source/SPCopyTable.m index b44ba920..e1b7e773 100644 --- a/Source/SPCopyTable.m +++ b/Source/SPCopyTable.m @@ -23,7 +23,9 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #import <MCPKit/MCPKit.h> +#ifndef SP_REFACTOR /* headers */ #import "MCPGeometryData.h" +#endif #import "SPCopyTable.h" #import "SPTableContent.h" @@ -67,8 +69,8 @@ NSInteger kBlobAsImageFile = 4; return ([[self delegate] isKindOfClass:[SPCustomQuery class]] || ([[self delegate] isKindOfClass:[SPTableContent class]] - && [[self delegate] valueForKeyPath:@"tablesListInstance"] - && [[[self delegate] valueForKeyPath:@"tablesListInstance"] tableType] == SPTableTypeView)); + && [(NSObject*)[self delegate] valueForKeyPath:@"tablesListInstance"] + && [(SPTablesList*)([(NSObject*)[self delegate] valueForKeyPath:@"tablesListInstance"]) tableType] == SPTableTypeView)); } @@ -90,6 +92,7 @@ NSInteger kBlobAsImageFile = 4; */ - (void) copy:(id)sender { +#ifndef SP_REFACTOR /* copy table rows */ NSString *tmp = nil; if([sender tag] == MENU_EDIT_COPY_AS_SQL) { @@ -119,12 +122,14 @@ NSInteger kBlobAsImageFile = 4; [pb setString:tmp forType:NSTabularTextPboardType]; } } +#endif } /** * Get selected rows a string of newline separated lines of tab separated fields * the value in each field is from the objects description method */ +#ifndef SP_REFACTOR /* get rows as string */ - (NSString *) rowsAsTabStringWithHeaders:(BOOL)withHeaders onlySelectedRows:(BOOL)onlySelected blobHandling:(NSInteger)withBlobHandling { if (onlySelected && [self numberOfSelectedRows] == 0) return nil; @@ -397,6 +402,7 @@ NSInteger kBlobAsImageFile = 4; return result; } +#endif /* * Return selected rows as SQL INSERT INTO `foo` VALUES (baz) string. @@ -478,7 +484,7 @@ NSInteger kBlobAsImageFile = 4; if ([cellData isSPNotLoaded] && [[self delegate] isKindOfClass:spTableContentClass]) { // Abort if no table name given, not table content, or if there are no indices on this table - if (!selectedTable || ![[self delegate] isKindOfClass:spTableContentClass] || ![[tableInstance argumentForRow:rowIndex] length]) { + if (!selectedTable || ![[self delegate] isKindOfClass:spTableContentClass] || ![(NSString*)[tableInstance argumentForRow:rowIndex] length]) { NSBeep(); free(columnMappings); free(columnTypes); @@ -753,7 +759,11 @@ NSInteger kBlobAsImageFile = 4; NSUInteger cellWidth, maxCellWidth, i; NSRange linebreakRange; double rowStep; +#ifndef SP_REFACTOR /* patch */ NSFont *tableFont = [NSUnarchiver unarchiveObjectWithData:[prefs dataForKey:SPGlobalResultTableFont]]; +#else + NSFont *tableFont = [NSFont systemFontOfSize:[NSFont smallSystemFontSize]]; +#endif NSUInteger columnIndex = [[columnDefinition objectForKey:@"datacolumnindex"] unsignedIntegerValue]; NSDictionary *stringAttributes = [NSDictionary dictionaryWithObject:tableFont forKey:NSFontAttributeName]; Class mcpGeometryData = [MCPGeometryData class]; @@ -836,6 +846,7 @@ NSInteger kBlobAsImageFile = 4; { NSMenu *menu = [self menu]; +#ifndef SP_REFACTOR /* menuForEvent: */ if(![[self delegate] isKindOfClass:[SPCustomQuery class]] && ![[self delegate] isKindOfClass:[SPTableContent class]]) return menu; @@ -903,7 +914,7 @@ NSInteger kBlobAsImageFile = 4; [bundleSubMenuItem release]; } - +#endif return menu; } @@ -914,7 +925,11 @@ NSInteger kBlobAsImageFile = 4; if(!rowIndices || ![rowIndices count]) return; NSMutableIndexSet *selection = [NSMutableIndexSet indexSet]; +#ifndef SP_REFACTOR NSInteger rows = [[self delegate] numberOfRowsInTableView:self]; +#else + NSInteger rows = [(id<NSTableViewDataSource>)[self delegate] numberOfRowsInTableView:self]; +#endif NSInteger i; if(rows > 0) { for(NSString* idx in rowIndices) { @@ -934,6 +949,7 @@ NSInteger kBlobAsImageFile = 4; */ - (BOOL) validateMenuItem:(NSMenuItem*)anItem { +#ifndef SP_REFACTOR /* validateMenuItem: */ NSInteger menuItemTag = [anItem tag]; if ([anItem action] == @selector(performFindPanelAction:)) { @@ -959,7 +975,7 @@ NSInteger kBlobAsImageFile = 4; if (menuItemTag == MENU_EDIT_COPY_AS_SQL) { return (columnDefinitions != nil && [self numberOfSelectedRows] > 0); } - +#endif return NO; } @@ -984,7 +1000,7 @@ NSInteger kBlobAsImageFile = 4; // Save the current line if it's the last field in the table if ( [self numberOfColumns] - 1 == column ) { if([[self delegate] respondsToSelector:@selector(saveRowToTable)]) - [[self delegate] saveRowToTable]; + [(SPTableContent*)[self delegate] saveRowToTable]; [[self window] makeFirstResponder:self]; } else { // Select the next field for editing @@ -1002,7 +1018,7 @@ NSInteger kBlobAsImageFile = 4; // Save the current line if it's the last field in the table if ( column < 1 ) { if([[self delegate] respondsToSelector:@selector(saveRowToTable)]) - [[self delegate] saveRowToTable]; + [(SPTableContent*)([self delegate]) saveRowToTable]; [[self window] makeFirstResponder:self]; } else { // Select the previous field for editing @@ -1021,7 +1037,7 @@ NSInteger kBlobAsImageFile = 4; [[control window] makeFirstResponder:control]; if([[self delegate] isKindOfClass:[SPTableContent class]] && ![self isCellEditingMode] && [[self delegate] respondsToSelector:@selector(saveRowToTable)]) - [[self delegate] saveRowToTable]; + [(SPTableContent*)[self delegate] saveRowToTable]; return YES; } @@ -1035,14 +1051,22 @@ NSInteger kBlobAsImageFile = 4; return NO; NSInteger newRow = row+1; +#ifndef SP_REFACTOR if (newRow>=[[self delegate] numberOfRowsInTableView:self]) return YES; //check if we're already at the end of the list +#else + if (newRow>=[(id<NSTableViewDataSource>)[self delegate] numberOfRowsInTableView:self]) return YES; //check if we're already at the end of the list +#endif [[control window] makeFirstResponder:control]; if([[self delegate] isKindOfClass:[SPTableContent class]] && ![self isCellEditingMode] && [[self delegate] respondsToSelector:@selector(saveRowToTable)]) - [[self delegate] saveRowToTable]; + [(SPTableContent*)([self delegate]) saveRowToTable]; +#ifndef SP_REFACTOR if (newRow>=[[self delegate] numberOfRowsInTableView:self]) return YES; //check again. saveRowToTable could reload the table and change the number of rows - if (tableStorage && column >= (NSInteger)[tableStorage columnCount]) return YES; //the column count could change too +#else + if (newRow>=[(id<NSTableViewDataSource>)[self delegate] numberOfRowsInTableView:self]) return YES; //check again. saveRowToTable could reload the table and change the number of rows +#endif + if (tableStorage && (NSUInteger)column>=[tableStorage columnCount]) return YES; //the column count could change too [self selectRowIndexes:[NSIndexSet indexSetWithIndex:newRow] byExtendingSelection:NO]; [self editColumn:column row:newRow withEvent:nil select:YES]; @@ -1062,10 +1086,14 @@ NSInteger kBlobAsImageFile = 4; [[control window] makeFirstResponder:control]; if([[self delegate] isKindOfClass:[SPTableContent class]] && ![self isCellEditingMode] && [[self delegate] respondsToSelector:@selector(saveRowToTable)]) - [[self delegate] saveRowToTable]; + [(SPTableContent*)([self delegate]) saveRowToTable]; +#ifndef SP_REFACTOR if (newRow>=[[self delegate] numberOfRowsInTableView:self]) return YES; // saveRowToTable could reload the table and change the number of rows - if (tableStorage && column >= (NSInteger)[tableStorage columnCount]) return YES; //the column count could change too +#else + if (newRow>=[(id<NSTableViewDataSource>)[self delegate] numberOfRowsInTableView:self]) return YES; // saveRowToTable could reload the table and change the number of rows +#endif + if (tableStorage && (NSUInteger)column>=[tableStorage columnCount]) return YES; //the column count could change too [self selectRowIndexes:[NSIndexSet indexSetWithIndex:newRow] byExtendingSelection:NO]; [self editColumn:column row:newRow withEvent:nil select:YES]; @@ -1089,7 +1117,7 @@ NSInteger kBlobAsImageFile = 4; // Check if ESCAPE is hit and use it to cancel row editing if supported if ([theEvent keyCode] == 53 && [[self delegate] respondsToSelector:@selector(cancelRowEditing)]) { - if ([[self delegate] cancelRowEditing]) return; + if ([[self delegate] performSelector:@selector(cancelRowEditing)]) return; } else if ([theEvent keyCode] == 48 && ([[self delegate] isKindOfClass:[SPCustomQuery class]] @@ -1104,7 +1132,7 @@ NSInteger kBlobAsImageFile = 4; - (void)performFindPanelAction:(id)sender { if([sender tag] == 1 && [[self delegate] isKindOfClass:[SPTableContent class]]) { - [[self delegate] showFilterTable:self]; + [(SPTableContent*)[self delegate] showFilterTable:self]; } } @@ -1113,6 +1141,7 @@ NSInteger kBlobAsImageFile = 4; - (IBAction)executeBundleItemForDataTable:(id)sender { +#ifndef SP_REFACTOR /* executeBundleItemForDataTable: */ NSInteger idx = [sender tag] - 1000000; NSString *infoPath = nil; NSArray *bundleItems = [[NSApp delegate] bundleItemsForScope:SPBundleScopeDataTable]; @@ -1389,7 +1418,7 @@ NSInteger kBlobAsImageFile = 4; if (cmdData) [cmdData release]; } - +#endif } #pragma mark - @@ -1407,7 +1436,9 @@ NSInteger kBlobAsImageFile = 4; - (void) dealloc { if (columnDefinitions) [columnDefinitions release]; +#ifndef SP_REFACTOR [prefs release]; +#endif [super dealloc]; } diff --git a/Source/SPCustomQuery.h b/Source/SPCustomQuery.h index 68969a01..8a1ad793 100644 --- a/Source/SPCustomQuery.h +++ b/Source/SPCustomQuery.h @@ -46,9 +46,17 @@ #define SP_HISTORY_SAVE_MENUITEM_TAG 300001 #define SP_HISTORY_CLEAR_MENUITEM_TAG 300002 +#ifndef SP_REFACTOR @class SPCopyTable, SPQueryFavoriteManager, SPDataStorage, BWSplitView, SPFieldEditorController; +#else +@class SPCopyTable, SPQueryFavoriteManager, SPDataStorage, NSSplitView, SPFieldEditorController; +#endif +#ifndef SP_REFACTOR @interface SPCustomQuery : NSObject +#else +@interface SPCustomQuery : NSObject <NSTableViewDataSource, NSWindowDelegate, NSTableViewDelegate> +#endif { IBOutlet id tableDocumentInstance; IBOutlet id tablesListInstance; @@ -101,15 +109,21 @@ IBOutlet NSMenuItem *previousHistoryMenuItem; IBOutlet NSMenuItem *nextHistoryMenuItem; +#ifndef SP_REFACTOR IBOutlet NSWindow *helpWebViewWindow; IBOutlet WebView *helpWebView; IBOutlet NSSearchField *helpSearchField; IBOutlet NSSearchFieldCell *helpSearchFieldCell; IBOutlet NSSegmentedControl *helpNavigator; IBOutlet NSSegmentedControl *helpTargetSelector; +#endif IBOutlet NSButton *queryInfoButton; +#ifndef SP_REFACTOR IBOutlet BWSplitView *queryInfoPaneSplitView; +#else + IBOutlet NSSplitView *queryInfoPaneSplitView; +#endif SPFieldEditorController *fieldEditor; @@ -129,9 +143,11 @@ NSUInteger queryStartPosition; +#ifndef SP_REFACTOR NSUInteger helpTarget; WebHistory *helpHistory; NSString *helpHTMLTemplate; +#endif SPDataStorage *resultData; pthread_mutex_t resultDataLock; @@ -181,6 +197,7 @@ - (IBAction)chooseQueryHistory:(id)sender; - (IBAction)closeSheet:(id)sender; - (IBAction)gearMenuItemSelected:(id)sender; +#ifndef SP_REFACTOR - (IBAction)showHelpForCurrentWord:(id)sender; - (IBAction)showHelpForSearchString:(id)sender; - (IBAction)helpSegmentDispatcher:(id)sender; @@ -190,6 +207,7 @@ - (IBAction)helpSelectHelpTargetMySQL:(id)sender; - (IBAction)helpSelectHelpTargetPage:(id)sender; - (IBAction)helpSelectHelpTargetWeb:(id)sender; +#endif - (IBAction)filterQueryFavorites:(id)sender; - (IBAction)filterQueryHistory:(id)sender; - (IBAction)saveQueryHistory:(id)sender; @@ -226,6 +244,7 @@ - (void) clearResultViewDetailsToRestore; - (void) autosizeColumns; +#ifndef SP_REFACTOR // MySQL Help - (void)showAutoHelpForCurrentWord:(id)sender; - (NSString *)getHTMLformattedMySQLHelpFor:(NSString *)searchString calledByAutoHelp:(BOOL)autoHelp; @@ -233,6 +252,7 @@ - (void)helpTargetValidation; - (void)openMySQLonlineDocumentationWithString:(NSString *)searchString; - (NSWindow *)helpWebViewWindow; +#endif - (void)setMySQLversion:(NSString *)theVersion; // Task interaction diff --git a/Source/SPCustomQuery.m b/Source/SPCustomQuery.m index 2c9e890e..a67ec5f3 100644 --- a/Source/SPCustomQuery.m +++ b/Source/SPCustomQuery.m @@ -25,7 +25,9 @@ #import "SPCustomQuery.h" #import "SPSQLParser.h" +#ifndef SP_REFACTOR /* headers */ #import "SPGrowlController.h" +#endif #import "SPDataCellFormatter.h" #import "SPDatabaseDocument.h" #import "SPTablesList.h" @@ -43,7 +45,9 @@ #import "SPAppController.h" #import "SPBundleHTMLOutputController.h" +#ifndef SP_REFACTOR /* headers */ #import <BWToolkitFramework/BWToolkitFramework.h> +#endif @implementation SPCustomQuery @@ -212,7 +216,9 @@ return; } +#ifndef SP_REFACTOR /* ui manip for query favorites */ if ([tableDocumentInstance isUntitled]) [saveQueryFavoriteGlobal setState:NSOnState]; +#endif [NSApp beginSheet:queryFavoritesSheet modalForWindow:[tableDocumentInstance parentWindow] modalDelegate:self @@ -230,7 +236,9 @@ return; } +#ifndef SP_REFACTOR /* ui manip for query favorites */ if ([tableDocumentInstance isUntitled]) [saveQueryFavoriteGlobal setState:NSOnState]; +#endif [NSApp beginSheet:queryFavoritesSheet modalForWindow:[tableDocumentInstance parentWindow] modalDelegate:self @@ -240,7 +248,9 @@ else if ([queryFavoritesButton indexOfSelectedItem] == 3) { // init query favorites controller +#ifndef SP_REFACTOR [prefs synchronize]; +#endif if(favoritesManager) [favoritesManager release]; favoritesManager = [[SPQueryFavoriteManager alloc] initWithDelegate:self]; @@ -253,7 +263,11 @@ } else if ([queryFavoritesButton indexOfSelectedItem] > 5) { // Choose favorite +#ifndef SP_REFACTOR BOOL replaceContent = [prefs boolForKey:SPQueryFavoriteReplacesContent]; +#else + BOOL replaceContent = YES; +#endif if([[NSApp currentEvent] modifierFlags] & (NSShiftKeyMask|NSControlKeyMask|NSAlternateKeyMask|NSCommandKeyMask)) replaceContent = !replaceContent; @@ -274,12 +288,18 @@ - (IBAction)chooseQueryHistory:(id)sender { +#ifndef SP_REFACTOR [prefs synchronize]; +#endif // Choose history item if ([queryHistoryButton indexOfSelectedItem] > 6) { +#ifndef SP_REFACTOR BOOL replaceContent = [prefs boolForKey:SPQueryHistoryReplacesContent]; +#else + BOOL replaceContent = YES; +#endif [textView breakUndoCoalescing]; if([[NSApp currentEvent] modifierFlags] & (NSShiftKeyMask|NSControlKeyMask|NSAlternateKeyMask|NSCommandKeyMask)) replaceContent = !replaceContent; @@ -382,8 +402,10 @@ // "Indent new lines" toggle if (sender == autoindentMenuItem) { BOOL enableAutoindent = !([autoindentMenuItem state] == NSOffState); +#ifndef SP_REFACTOR /* prefs access */ [prefs setBool:enableAutoindent forKey:SPCustomQueryAutoIndent]; [prefs synchronize]; +#endif [autoindentMenuItem setState:enableAutoindent?NSOnState:NSOffState]; [textView setAutoindent:enableAutoindent]; } @@ -391,12 +413,15 @@ // "Auto-pair characters" toggle if (sender == autopairMenuItem) { BOOL enableAutopair = !([autopairMenuItem state] == NSOffState); +#ifndef SP_REFACTOR /* prefs access */ [prefs setBool:enableAutopair forKey:SPCustomQueryAutoPairCharacters]; [prefs synchronize]; +#endif [autopairMenuItem setState:enableAutopair?NSOnState:NSOffState]; [textView setAutopair:enableAutopair]; } +#ifndef SP_REFACTOR /* prefs access */ // "Auto-help" toggle if (sender == autohelpMenuItem) { BOOL enableAutohelp = !([autohelpMenuItem state] == NSOffState); @@ -405,12 +430,15 @@ [autohelpMenuItem setState:enableAutohelp?NSOnState:NSOffState]; [textView setAutohelp:enableAutohelp]; } +#endif // "Auto-uppercase keywords" toggle if (sender == autouppercaseKeywordsMenuItem) { BOOL enableAutouppercaseKeywords = !([autouppercaseKeywordsMenuItem state] == NSOffState); +#ifndef SP_REFACTOR /* prefs access */ [prefs setBool:enableAutouppercaseKeywords forKey:SPCustomQueryAutoUppercaseKeywords]; [prefs synchronize]; +#endif [autouppercaseKeywordsMenuItem setState:enableAutouppercaseKeywords?NSOnState:NSOffState]; [textView setAutouppercaseKeywords:enableAutouppercaseKeywords]; } @@ -418,6 +446,7 @@ - (IBAction)saveQueryHistory:(id)sender { +#ifndef SP_REFACTOR NSSavePanel *panel = [NSSavePanel savePanel]; [panel setRequiredFileType:SPFileExtensionSQL]; @@ -432,6 +461,7 @@ [encodingPopUp setEnabled:YES]; [panel beginSheetForDirectory:nil file:@"history" modalForWindow:[tableDocumentInstance parentWindow] modalDelegate:self didEndSelector:@selector(savePanelDidEnd:returnCode:contextInfo:) contextInfo:@"saveHistory"]; +#endif } - (IBAction)copyQueryHistory:(id)sender @@ -450,10 +480,14 @@ NSString *infoString; +#ifndef SP_REFACTOR /* if ([tableDocumentInstance isUntitled]) */ if ([tableDocumentInstance isUntitled]) +#endif infoString = NSLocalizedString(@"Are you sure you want to clear the global history list? This action cannot be undone.", @"clear global history list informative message"); +#ifndef SP_REFACTOR /* if ([tableDocumentInstance isUntitled]) */ else infoString = [NSString stringWithFormat:NSLocalizedString(@"Are you sure you want to clear the history list for “%@”? This action cannot be undone.", @"clear history list for “%@” informative message"), [tableDocumentInstance displayName]]; +#endif NSAlert *alert = [NSAlert alertWithMessageText:NSLocalizedString(@"Clear History?", @"clear history message") defaultButton:NSLocalizedString(@"Clear", @"clear button") @@ -545,13 +579,21 @@ // BOOL queriesSeparatedByDelimiter = NO; NSCharacterSet *whitespaceAndNewlineSet = [NSCharacterSet whitespaceAndNewlineCharacterSet]; +#ifndef SP_REFACTOR /* [tableDocumentInstance setQueryMode:] */ [tableDocumentInstance setQueryMode:SPCustomQueryQueryMode]; +#endif // Notify listeners that a query has started +#ifndef SP_REFACTOR [[NSNotificationCenter defaultCenter] postNotificationOnMainThreadWithName:@"SMySQLQueryWillBePerformed" object:tableDocumentInstance]; +#else + [[NSNotificationCenter defaultCenter] sequelProPostNotificationOnMainThreadWithName:@"SMySQLQueryWillBePerformed" object:tableDocumentInstance]; +#endif +#ifndef SP_REFACTOR /* growl */ // Start the notification timer to allow notifications to be shown even if frontmost for long queries [[SPGrowlController sharedGrowlController] setVisibilityForNotificationName:@"Query Finished"]; +#endif // Reset the current table view as necessary to avoid redraw and reload issues. // Restore the view position to the top left to be within the results for all datasets. @@ -804,20 +846,28 @@ // Restore automatic query retries [mySQLConnection setAllowQueryRetries:YES]; +#ifndef SP_REFACTOR /* [tableDocumentInstance setQueryMode:] */ [tableDocumentInstance setQueryMode:SPInterfaceQueryMode]; +#endif // If no results were returned, redraw the empty table and post notifications before returning. if ( !resultDataCount ) { [customQueryView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES]; // Notify any listeners that the query has completed +#ifndef SP_REFACTOR [[NSNotificationCenter defaultCenter] postNotificationOnMainThreadWithName:@"SMySQLQueryHasBeenPerformed" object:tableDocumentInstance]; +#else + [[NSNotificationCenter defaultCenter] sequelProPostNotificationOnMainThreadWithName:@"SMySQLQueryHasBeenPerformed" object:tableDocumentInstance]; +#endif +#ifndef SP_REFACTOR /* growl */ // Perform the Growl notification for query completion [[SPGrowlController sharedGrowlController] notifyWithTitle:@"Query Finished" description:[NSString stringWithFormat:NSLocalizedString(@"%@",@"description for query finished growl notification"), [errorText string]] document:tableDocumentInstance notificationName:@"Query Finished"]; +#endif // Set up the callback if present if ([taskArguments objectForKey:@"callback"]) { @@ -842,13 +892,19 @@ } //query finished +#ifndef SP_REFACTOR [[NSNotificationCenter defaultCenter] postNotificationOnMainThreadWithName:@"SMySQLQueryHasBeenPerformed" object:tableDocumentInstance]; +#else + [[NSNotificationCenter defaultCenter] sequelProPostNotificationOnMainThreadWithName:@"SMySQLQueryHasBeenPerformed" object:tableDocumentInstance]; +#endif +#ifndef SP_REFACTOR /* growl */ // Query finished Growl notification [[SPGrowlController sharedGrowlController] notifyWithTitle:@"Query Finished" description:[NSString stringWithFormat:NSLocalizedString(@"%@",@"description for query finished growl notification"), [errorText string]] document:tableDocumentInstance notificationName:@"Query Finished"]; +#endif // Set up the callback if present if ([taskArguments objectForKey:@"callback"]) { @@ -1297,6 +1353,7 @@ [errorText setString:NSLocalizedString(@"There were no errors.", @"text shown when query was successfull")]; } +#ifndef SP_REFACTOR /* show/hide errror view */ // Show or hide the error area if necessary if ([errorsString length] && [queryInfoPaneSplitView collapsibleSubviewCollapsed]) { [queryInfoButton setState:NSOnState]; @@ -1305,6 +1362,7 @@ [queryInfoButton setState:NSOffState]; [self toggleQueryInfoPaneCollapse:queryInfoButton]; } +#endif } #pragma mark - @@ -1429,16 +1487,25 @@ // Set up the interface [customQueryView setVerticalMotionCanBeginDrag:NO]; +#ifndef SP_REFACTOR [autoindentMenuItem setState:([prefs boolForKey:SPCustomQueryAutoIndent]?NSOnState:NSOffState)]; [autopairMenuItem setState:([prefs boolForKey:SPCustomQueryAutoPairCharacters]?NSOnState:NSOffState)]; [autohelpMenuItem setState:([prefs boolForKey:SPCustomQueryUpdateAutoHelp]?NSOnState:NSOffState)]; [autouppercaseKeywordsMenuItem setState:([prefs boolForKey:SPCustomQueryAutoUppercaseKeywords]?NSOnState:NSOffState)]; +#else + [autoindentMenuItem setState:(YES?NSOnState:NSOffState)]; + [autopairMenuItem setState:(YES?NSOnState:NSOffState)]; + [autohelpMenuItem setState:(YES?NSOnState:NSOffState)]; + [autouppercaseKeywordsMenuItem setState:(YES?NSOnState:NSOffState)]; +#endif if ( [[SPQueryController sharedQueryController] historyForFileURL:[tableDocumentInstance fileURL]] ) [self performSelectorOnMainThread:@selector(historyItemsHaveBeenUpdated:) withObject:self waitUntilDone:YES]; // Populate query favorites +#ifndef SP_REFACTOR [self queryFavoritesHaveBeenUpdated:nil]; +#endif // Disable runSelectionMenuItem in the gear menu [runSelectionMenuItem setEnabled:NO]; @@ -1487,7 +1554,11 @@ } // Update font size on the table +#ifndef SP_REFACTOR NSFont *tableFont = [NSUnarchiver unarchiveObjectWithData:[prefs dataForKey:SPGlobalResultTableFont]]; +#else + NSFont *tableFont = [NSFont systemFontOfSize:[NSFont smallSystemFontSize]]; +#endif [customQueryView setRowHeight:2.0f+NSSizeToCGSize([[NSString stringWithString:@"{ǞṶḹÜ∑zgyf"] sizeWithAttributes:[NSDictionary dictionaryWithObject:tableFont forKey:NSFontAttributeName]]).height]; // If there are no table columns to add, return @@ -1525,6 +1596,7 @@ [[theCol headerCell] setStringValue:[columnDefinition objectForKey:@"name"]]; [theCol setHeaderToolTip:[NSString stringWithFormat:@"%@ – %@%@", [columnDefinition objectForKey:@"name"], [columnDefinition objectForKey:@"type"], ([columnDefinition objectForKey:@"char_length"]) ? [NSString stringWithFormat:@"(%@)", [columnDefinition objectForKey:@"char_length"]] : @""]]; +#ifndef SP_REFACTOR // Set the width of this column to saved value if exists and maps to a real column if ([columnDefinition objectForKey:@"org_name"] && [(NSString *)[columnDefinition objectForKey:@"org_name"] length]) { NSNumber *colWidth = [[[[prefs objectForKey:SPTableColumnWidths] objectForKey:[NSString stringWithFormat:@"%@@%@", [columnDefinition objectForKey:@"db"], [tableDocumentInstance host]]] objectForKey:[columnDefinition objectForKey:@"org_table"]] objectForKey:[columnDefinition objectForKey:@"org_name"]]; @@ -1532,6 +1604,7 @@ [theCol setWidth:[colWidth floatValue]]; } } +#endif [customQueryView addTableColumn:theCol]; [theCol release]; @@ -1619,8 +1692,10 @@ [customQueryView setDelegate:nil]; for (NSDictionary *columnDefinition in cqColumnDefinition) { +#ifndef SP_REFACTOR // Skip columns with saved widths if ([[[[prefs objectForKey:SPTableColumnWidths] objectForKey:[NSString stringWithFormat:@"%@@%@", [tableDocumentInstance database], [tableDocumentInstance host]]] objectForKey:[tablesListInstance tableName]] objectForKey:[columnDefinition objectForKey:@"name"]]) continue; +#endif // Otherwise set the column width NSTableColumn *aTableColumn = [customQueryView tableColumnWithIdentifier:[columnDefinition objectForKey:@"datacolumnindex"]]; @@ -1972,24 +2047,30 @@ // This shouldn't happen – for safety reasons if ( ![mySQLConnection affectedRows] ) { +#ifndef SP_REFACTOR if ( [prefs boolForKey:SPShowNoAffectedRowsError] ) { SPBeginAlertSheet(NSLocalizedString(@"Warning", @"warning"), NSLocalizedString(@"OK", @"OK button"), nil, nil, [tableDocumentInstance parentWindow], self, nil, nil, NSLocalizedString(@"The row was not written to the MySQL database. You probably haven't changed anything.\nReload the table to be sure that the row exists and use a primary key for your table.\n(This error can be turned off in the preferences.)", @"message of panel when no rows have been affected after writing to the db")); } else { NSBeep(); } +#endif return; } // On success reload table data by executing the last query if reloading is enabled +#ifndef SP_REFACTOR if ([prefs boolForKey:SPReloadAfterEditingRow]) { reloadingExistingResult = YES; [self storeCurrentResultViewForRestoration]; [self performQueries:[NSArray arrayWithObject:lastExecutedQuery] withCallback:NULL]; } else { +#endif // otherwise, just update the data in the data storage SPDataStorageReplaceObjectAtRowAndColumn(resultData, rowIndex, [[aTableColumn identifier] intValue], anObject); +#ifndef SP_REFACTOR } +#endif } else { SPBeginAlertSheet(NSLocalizedString(@"Error", @"error"), NSLocalizedString(@"OK", @"OK button"), nil, nil, [tableDocumentInstance parentWindow], self, nil, nil, [NSString stringWithFormat:NSLocalizedString(@"Updating field content failed. Couldn't identify field origin unambiguously (%ld match%@). It's very likely that while editing this field of table `%@` was changed.", @"message of panel when error while updating field to db after enabling it"), @@ -2407,6 +2488,7 @@ // Check our notification object is our table content view if ([aNotification object] != customQueryView) return; +#ifndef SP_REFACTOR /* triggered commands */ NSArray *triggeredCommands = [[NSApp delegate] bundleCommandsForTrigger:SPBundleTriggerActionTableRowChanged]; for(NSString* cmdPath in triggeredCommands) { NSArray *data = [cmdPath componentsSeparatedByString:@"|"]; @@ -2443,7 +2525,7 @@ } } } - +#endif } /** @@ -2468,11 +2550,15 @@ NSString *col = [columnDefinition objectForKey:@"org_name"]; // Retrieve or instantiate the tableColumnWidths object +#ifndef SP_REFACTOR if ([prefs objectForKey:SPTableColumnWidths] != nil) { tableColumnWidths = [NSMutableDictionary dictionaryWithDictionary:[prefs objectForKey:SPTableColumnWidths]]; } else { +#endif tableColumnWidths = [NSMutableDictionary dictionary]; +#ifndef SP_REFACTOR } +#endif // Edit or create database object if ([tableColumnWidths objectForKey:host_db] == nil) { @@ -2490,7 +2576,9 @@ // Save the column size [[[tableColumnWidths objectForKey:host_db] objectForKey:table] setObject:[NSNumber numberWithDouble:[(NSTableColumn *)[[aNotification userInfo] objectForKey:@"NSTableColumn"] width]] forKey:col]; +#ifndef SP_REFACTOR [prefs setObject:tableColumnWidths forKey:SPTableColumnWidths]; +#endif } /** @@ -2505,6 +2593,7 @@ NSUInteger targetWidth = [customQueryView autodetectWidthForColumnDefinition:columnDefinition maxRows:500]; // Clear any saved widths for the column +#ifndef SP_REFACTOR NSString *dbKey = [NSString stringWithFormat:@"%@@%@", [tableDocumentInstance database], [tableDocumentInstance host]]; NSString *tableKey = [tablesListInstance tableName]; NSMutableDictionary *savedWidths = [NSMutableDictionary dictionaryWithDictionary:[prefs objectForKey:SPTableColumnWidths]]; @@ -2524,6 +2613,7 @@ } [prefs setObject:[NSDictionary dictionaryWithDictionary:savedWidths] forKey:SPTableColumnWidths]; } +#endif // Return the width, while the delegate is empty to prevent column resize notifications [customQueryView setDelegate:nil]; @@ -2671,6 +2761,8 @@ #pragma mark - #pragma mark SplitView delegate methods +#ifndef SP_REFACTOR /* splitview delegate methods */ + /* * Tells the splitView that it can collapse views */ @@ -2705,6 +2797,8 @@ return (splitView == queryInfoPaneSplitView ? NSZeroRect : proposedEffectiveRect); } +#endif + #pragma mark - #pragma mark MySQL Help @@ -2718,6 +2812,7 @@ } +#ifndef SP_REFACTOR /* * Return the Help window. */ @@ -2912,6 +3007,7 @@ helpTarget = [helpTargetSelector selectedSegment]; [self helpTargetValidation]; } +#endif - (IBAction)showCompletionList:(id)sender { @@ -2928,6 +3024,8 @@ break; } } + +#ifndef SP_REFACTOR /* * Show the data for "HELP 'currentWord' invoked by autohelp" */ @@ -3236,6 +3334,8 @@ return YES; } +#endif + #pragma mark - #pragma mark Query favorites manager delegate methods @@ -3304,6 +3404,7 @@ [headerMenuItem setIndentationLevel:0]; [menu addItem:headerMenuItem]; [headerMenuItem release]; +#ifndef SP_REFACTOR for (NSDictionary *favorite in [prefs objectForKey:SPQueryFavorites]) { if (![favorite isKindOfClass:[NSDictionary class]] || ![favorite objectForKey:@"name"]) continue; NSMutableParagraphStyle *paraStyle = [[[NSMutableParagraphStyle alloc] init] autorelease]; @@ -3320,6 +3421,7 @@ [menu addItem:item]; [item release]; } +#endif } #pragma mark - @@ -3332,9 +3434,11 @@ { isWorking = YES; +#ifndef SP_REFACTOR /* check selected view */ // Only proceed if this view is selected. if (![[tableDocumentInstance selectedToolbarItemIdentifier] isEqualToString:SPMainToolbarCustomQuery]) return; +#endif tableRowsSelectable = NO; [runSelectionButton setEnabled:NO]; @@ -3350,9 +3454,11 @@ { isWorking = NO; +#ifndef SP_REFACTOR /* check active tab */ // Only proceed if this view is selected. if (![[tableDocumentInstance selectedToolbarItemIdentifier] isEqualToString:SPMainToolbarCustomQuery]) return; +#endif if (selectionButtonCanBeEnabled) { [runSelectionButton setEnabled:YES]; @@ -3435,6 +3541,7 @@ if ([contextInfo isEqualToString:@"addAllToNewQueryFavorite"] || [contextInfo isEqualToString:@"addSelectionToNewQueryFavorite"]) { if (returnCode == NSOKButton) { +#ifndef SP_REFACTOR // Add the new query favorite directly the user's preferences here instead of asking the manager to do it // as it may not have been fully initialized yet. @@ -3472,6 +3579,7 @@ [saveQueryFavoriteGlobal setState:NSOffState]; [self queryFavoritesHaveBeenUpdated:nil]; +#endif } } @@ -3485,8 +3593,10 @@ if (returnCode == NSOKButton) { NSError *error = nil; +#ifndef SP_REFACTOR [prefs setInteger:[[encodingPopUp selectedItem] tag] forKey:SPLastSQLFileEncoding]; [prefs synchronize]; +#endif [[self buildHistoryString] writeToFile:[panel filename] atomically:YES @@ -3524,13 +3634,17 @@ } // Control Clear History menu item title according to isUntitled else if ( [menuItem tag] == SP_HISTORY_CLEAR_MENUITEM_TAG ) { +#ifndef SP_REFACTOR /* if ( [tableDocumentInstance isUntitled] ) */ if ( [tableDocumentInstance isUntitled] ) { +#endif [menuItem setTitle:NSLocalizedString(@"Clear Global History", @"clear global history menu item title")]; [menuItem setToolTip:NSLocalizedString(@"Clear the global history list", @"clear the global history list tooltip message")]; +#ifndef SP_REFACTOR /* if ( [tableDocumentInstance isUntitled] ) */ } else { [menuItem setTitle:[NSString stringWithFormat:NSLocalizedString(@"Clear History for “%@”", @"clear history for “%@” menu title"), [tableDocumentInstance displayName]]]; [menuItem setToolTip:NSLocalizedString(@"Clear the document-based history list", @"clear the document-based history list tooltip message")]; } +#endif } // Check for History items else if ( [menuItem tag] >= SP_HISTORY_COPY_MENUITEM_TAG && [menuItem tag] <= SP_HISTORY_CLEAR_MENUITEM_TAG ) { @@ -3601,6 +3715,7 @@ selectionIndexToRestore = nil; selectionViewportToRestore = NSZeroRect; +#ifndef SP_REFACTOR // init helpHTMLTemplate NSError *error; @@ -3618,6 +3733,7 @@ // init search history [helpWebView setMaintainsBackForwardList:YES]; [[helpWebView backForwardList] setCapacity:20]; +#endif // init tableView's data source resultDataCount = 0; @@ -3834,8 +3950,10 @@ [queryFavoritesSaveAsMenuItem setTag:SP_SAVE_SELECTION_FAVORTITE_MENUITEM_TAG]; [queryFavoritesSaveAllMenuItem setTag:SP_SAVE_ALL_FAVORTITE_MENUITEM_TAG]; +#ifndef SP_REFACTOR // Set the structure and index view's vertical gridlines if required [customQueryView setGridStyleMask:([prefs boolForKey:SPDisplayTableViewVerticalGridlines]) ? NSTableViewSolidVerticalGridLineMask : NSTableViewGridNone]; +#endif // Add observers for document task activity [[NSNotificationCenter defaultCenter] addObserver:self @@ -3847,7 +3965,9 @@ name:SPDocumentTaskEndNotification object:tableDocumentInstance]; +#ifndef SP_REFACTOR [prefs addObserver:self forKeyPath:SPGlobalResultTableFont options:NSKeyValueObservingOptionNew context:NULL]; +#endif // Collapse the query information pane if ([queryInfoPaneSplitView collapsibleSubview]) { @@ -3870,7 +3990,9 @@ - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; +#ifndef SP_REFACTOR [prefs removeObserver:self forKeyPath:SPGlobalResultTableFont]; +#endif [NSObject cancelPreviousPerformRequestsWithTarget:customQueryView]; [self clearQueryLoadTimer]; @@ -3880,7 +4002,9 @@ if(fieldEditor) [fieldEditor release], fieldEditor = nil; +#ifndef SP_REFACTOR if (helpHTMLTemplate) [helpHTMLTemplate release]; +#endif if (mySQLversion) [mySQLversion release]; if (sortField) [sortField release]; if (cqColumnDefinition) [cqColumnDefinition release]; diff --git a/Source/SPDatabaseDocument.h b/Source/SPDatabaseDocument.h index 485b224b..d70a7a40 100644 --- a/Source/SPDatabaseDocument.h +++ b/Source/SPDatabaseDocument.h @@ -26,14 +26,15 @@ // More info at <http://code.google.com/p/sequel-pro/> #import <MCPKit/MCPKit.h> +#ifndef SP_REFACTOR /* headers */ #import <WebKit/WebKit.h> +#endif -@class SPConnectionController, - SPProcessListController, - SPServerVariablesController, - SPUserManager, - SPWindowController, - SPServerSupport; +@class SPConnectionController, +#ifndef SP_REFACTOR /* class forward decls */ +SPProcessListController, SPServerVariablesController, SPUserManager, SPWindowController, +#endif +SPTablesList, SPTableStructure, SPTableContent, SPTableData, SPServerSupport; #import "SPConnectionControllerDelegateProtocol.h" @@ -42,15 +43,19 @@ */ @interface SPDatabaseDocument : NSObject <SPConnectionControllerDelegateProtocol> { +#ifdef SP_REFACTOR /* patch */ + id delegate; +#endif + // IBOutlets - IBOutlet id tablesListInstance; - IBOutlet id tableSourceInstance; - IBOutlet id tableContentInstance; + SPTablesList* tablesListInstance; + SPTableStructure* tableSourceInstance; + SPTableContent* tableContentInstance; IBOutlet id tableRelationsInstance; IBOutlet id tableTriggersInstance; IBOutlet id customQueryInstance; IBOutlet id tableDumpInstance; - IBOutlet id tableDataInstance; + SPTableData* tableDataInstance; IBOutlet id extendedTableInfoInstance; IBOutlet id databaseDataInstance; IBOutlet id spHistoryControllerInstance; @@ -60,7 +65,9 @@ IBOutlet id statusTableView; IBOutlet id statusTableCopyChecksum; +#ifndef SP_REFACTOR /* ivars */ SPUserManager *userManagerInstance; +#endif SPServerSupport *serverSupport; IBOutlet NSSearchField *listFilterField; @@ -137,13 +144,15 @@ // Controllers SPConnectionController *connectionController; +#ifndef SP_REFACTOR /* ivars */ SPProcessListController *processListController; SPServerVariablesController *serverVariablesController; - +#endif MCPConnection *mySQLConnection; +#ifndef SP_REFACTOR /* ivars */ NSInteger currentTabIndex; - +#endif NSString *selectedTableName; SPTableType selectedTableType; @@ -154,14 +163,18 @@ NSString *selectedDatabase; NSString *mySQLVersion; +#ifndef SP_REFACTOR /* ivars */ NSUserDefaults *prefs; NSMutableArray *nibObjectsToRelease; +#endif NSMenu *selectEncodingMenu; BOOL _supportsEncoding; BOOL _isConnected; NSInteger _isWorkingLevel; +#ifndef SP_REFACTOR /* ivars */ BOOL _mainNibLoaded; +#endif BOOL databaseListIsSelectable; NSInteger _queryMode; BOOL _isSavedInBundle; @@ -182,7 +195,9 @@ NSToolbar *mainToolbar; NSToolbarItem *chooseDatabaseToolbarItem; +#ifndef SP_REFACTOR /* ivars */ WebView *printWebView; +#endif NSMutableArray *allDatabases; NSMutableArray *allSystemDatabases; @@ -198,6 +213,7 @@ NSString *keyChainID; +#ifndef SP_REFACTOR /* ivars */ NSThread *printThread; id statusValues; @@ -206,32 +222,51 @@ // Properties SPWindowController *parentWindowController; +#endif NSWindow *parentWindow; +#ifndef SP_REFACTOR /* ivars */ NSTabViewItem *parentTabViewItem; +#endif BOOL isProcessing; +#ifndef SP_REFACTOR /* ivars */ NSString *processID; +#endif } +#ifdef SP_REFACTOR /* ivars */ +@property (readwrite, assign) id delegate; +@property (readonly) NSMutableArray* allDatabases; +#endif + +#ifndef SP_REFACTOR /* ivars */ @property (readwrite, assign) SPWindowController *parentWindowController; @property (readwrite, assign) NSTabViewItem *parentTabViewItem; +#endif @property (readwrite, assign) BOOL isProcessing; +#ifndef SP_REFACTOR /* ivars */ @property (readwrite, retain) NSString *processID; +#endif @property (readonly) SPServerSupport *serverSupport; +#ifndef SP_REFACTOR /* method decls */ - (BOOL)isUntitled; - (BOOL)couldCommitCurrentViewActions; - (void)initQueryEditorWithString:(NSString *)query; // Connection callback and methods +#endif - (void)setConnection:(MCPConnection *)theConnection; - (MCPConnection *)getConnection; - (void)setKeychainID:(NSString *)theID; // Database methods - (IBAction)setDatabases:(id)sender; +#ifndef SP_REFACTOR /* method decls */ - (IBAction)chooseDatabase:(id)sender; +#endif - (void)selectDatabase:(NSString *)aDatabase item:(NSString *)anItem; +#ifndef SP_REFACTOR /* method decls */ - (IBAction)addDatabase:(id)sender; - (IBAction)removeDatabase:(id)sender; - (IBAction)refreshTables:(id)sender; @@ -241,6 +276,7 @@ - (IBAction)showServerVariables:(id)sender; - (IBAction)showServerProcesses:(id)sender; - (IBAction)openCurrentConnectionInNewWindow:(id)sender; +#endif - (NSArray *)allDatabaseNames; - (NSArray *)allSystemDatabaseNames; - (NSDictionary *)getDbStructure; @@ -269,6 +305,7 @@ - (void)updateEncodingMenuWithSelectedEncoding:(NSNumber *)encodingTag; - (NSNumber *)encodingTagFromMySQLEncoding:(NSString *)mysqlEncoding; - (NSString *)mysqlEncodingFromEncodingTag:(NSNumber *)encodingTag; +#ifndef SP_REFACTOR /* method decls */ // Table methods - (IBAction)showCreateTableSyntax:(id)sender; @@ -296,7 +333,9 @@ - (void)flushPrivileges:(id)sender; - (void)closeConnection; - (NSWindow *)getCreateTableSyntaxWindow; +#endif - (void)refreshCurrentDatabase; +#ifndef SP_REFACTOR /* method decls */ - (void)saveConnectionPanelDidEnd:(NSSavePanel *)panel returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo; - (IBAction)validateSaveConnectionAccessory:(id)sender; - (BOOL)saveDocumentWithFilePath:(NSString *)fileName inBackground:(BOOL)saveInBackground onlyPreferences:(BOOL)saveOnlyPreferences contextInfo:(NSDictionary*)contextInfo; @@ -312,6 +351,7 @@ - (void)showConsole:(id)sender; - (IBAction)showNavigator:(id)sender; - (IBAction)toggleNavigator:(id)sender; +#endif // Accessor methods - (NSString *)host; @@ -326,6 +366,7 @@ - (BOOL)isSaveInBundle; - (NSURL *)fileURL; - (NSString *)displayName; +#ifndef SP_REFACTOR /* method decls */ // Notification center methods - (void)willPerformQuery:(NSNotification *)notification; @@ -361,11 +402,14 @@ - (void)didBecomeActiveTabInWindow; - (void)tabDidBecomeKey; - (void)tabDidResize; +#endif + - (void)setIsProcessing:(BOOL)value; - (BOOL)isProcessing; - (void)setParentWindow:(NSWindow *)aWindow; - (NSWindow *)parentWindow; +#ifndef SP_REFACTOR /* method decls */ // Scripting - (void)handleSchemeCommand:(NSDictionary*)commandDict; - (void)registerActivity:(NSDictionary*)commandDict; @@ -379,5 +423,17 @@ - (BOOL)setState:(NSDictionary *)stateDetails; - (void)setStateFromConnectionFile:(NSString *)path; - (void)restoreSession; +#endif + +#ifdef SP_REFACTOR /* method decls */ +- (SPConnectionController*)createConnectionController; +- (void)connect; +- (NSArray*)allTableNames; +- (SPTablesList*)tablesListInstance; +- (SPTableData*)tableDataInstance; +- (void)setTableSourceInstance:(SPTableStructure*)source; +- (void)setTableContentInstance:(SPTableContent*)content; +- (void)setTableDataInstance:(SPTableData*)data; +#endif @end diff --git a/Source/SPDatabaseDocument.m b/Source/SPDatabaseDocument.m index fce0bd3f..8c05daa0 100644 --- a/Source/SPDatabaseDocument.m +++ b/Source/SPDatabaseDocument.m @@ -26,8 +26,13 @@ // More info at <http://code.google.com/p/sequel-pro/> #import "SPDatabaseDocument.h" +#import "SPConnectionController.h" + #import "SPTablesList.h" #import "SPTableStructure.h" +#ifndef SP_REFACTOR /* headers */ +#import "SPFileHandle.h" +#import "SPKeychain.h" #import "SPTableContent.h" #import "SPCustomQuery.h" #import "SPDataImport.h" @@ -35,13 +40,15 @@ #import "SPGrowlController.h" #import "SPExportController.h" #import "SPQueryController.h" +#import "SPWindowController.h" +#endif #import "SPNavigatorController.h" +#ifndef SP_REFACTOR /* headers */ #import "SPSQLParser.h" #import "SPTableData.h" #import "SPDatabaseData.h" #import "SPAppController.h" #import "SPExtendedTableInfo.h" -#import "SPConnectionController.h" #import "SPHistoryController.h" #import "SPPreferenceController.h" #import "SPUserManager.h" @@ -54,38 +61,58 @@ #import "SPDatabaseCopy.h" #import "SPTableCopy.h" #import "SPDatabaseRename.h" +#endif #import "SPServerSupport.h" +#ifndef SP_REFACTOR /* headers */ #import "SPTooltip.h" +#endif #import "SPDatabaseViewController.h" +#ifndef SP_REFACTOR /* headers */ #import "SPBundleHTMLOutputController.h" #import "SPConnectionDelegate.h" -#import "SPWindowController.h" -#import "SPFileHandle.h" -#import "SPConnectionHandler.h" +#endif + +#ifdef SP_REFACTOR /* headers */ +#import "SPAlertSheets.h" +#import "NSNotificationAdditions.h" +#endif @interface SPDatabaseDocument (PrivateAPI) +#ifndef SP_REFACTOR /* method decls */ - (void)_addDatabase; - (void)_copyDatabase; - (void)_renameDatabase; - (void)_removeDatabase; +#endif - (void)_selectDatabaseAndItem:(NSDictionary *)selectionDetails; @end @implementation SPDatabaseDocument +#ifndef SP_REFACTOR /* ivars */ @synthesize parentWindowController; @synthesize parentTabViewItem; +#endif @synthesize isProcessing; @synthesize serverSupport; +#ifndef SP_REFACTOR /* ivars */ @synthesize processID; +#endif + +#ifdef SP_REFACTOR /* ivars */ +@synthesize allDatabases; +@synthesize delegate; +#endif - (id)init { if ((self = [super init])) { +#ifndef SP_REFACTOR /* init ivars */ _mainNibLoaded = NO; +#endif _isConnected = NO; _isWorkingLevel = 0; _isSavedInBundle = NO; @@ -109,14 +136,18 @@ mySQLVersion = nil; allDatabases = nil; allSystemDatabases = nil; +#ifndef SP_REFACTOR /* init ivars */ mainToolbar = nil; parentWindow = nil; +#endif isProcessing = NO; +#ifndef SP_REFACTOR /* init ivars */ printWebView = [[WebView alloc] init]; [printWebView setFrameLoadDelegate:self]; prefs = [NSUserDefaults standardUserDefaults]; +#endif queryEditorInitString = nil; spfFileURL = nil; @@ -138,6 +169,7 @@ taskCancellationCallbackSelector = NULL; keyChainID = nil; +#ifndef SP_REFACTOR /* init ivars */ statusValues = nil; printThread = nil; nibObjectsToRelease = [[NSMutableArray alloc] init]; @@ -149,11 +181,47 @@ [nibLoader instantiateNibWithOwner:self topLevelObjects:&dbViewTopLevelObjects]; [nibLoader release]; [nibObjectsToRelease addObjectsFromArray:dbViewTopLevelObjects]; +#endif } return self; } +#ifdef SP_REFACTOR /* glue */ +- (SPConnectionController*)createConnectionController +{ + // Set up the connection controller + connectionController = [[SPConnectionController alloc] initWithDocument:self]; + + // Set the connection controller's delegate + [connectionController setDelegate:self]; + return connectionController; +} + +- (void)setTableSourceInstance:(SPTableStructure*)source +{ + tableSourceInstance = source; +} + +- (void)setTableContentInstance:(SPTableContent*)content +{ + tableContentInstance = content; +} + +- (void)setTableDataInstance:(SPTableData*)data +{ + tableDataInstance = data; +} + +- (SPTableData*)tableDataInstance +{ + return tableDataInstance; +} + +#endif + +#ifndef SP_REFACTOR /* awakeFromNib */ + - (void)awakeFromNib { if (_mainNibLoaded) return; @@ -255,7 +323,9 @@ [contentViewSplitter setDelegate:self]; } +#endif +#ifndef SP_REFACTOR /* password sheet and history navigation */ /** * Set the return code for entering the encryption passowrd sheet */ @@ -290,6 +360,7 @@ break; } } +#endif #pragma mark - #pragma mark Connection callback and methods @@ -304,12 +375,14 @@ serverSupport = [[SPServerSupport alloc] initWithMajorVersion:[mySQLConnection serverMajorVersion] minor:[mySQLConnection serverMinorVersion] release:[mySQLConnection serverReleaseVersion]]; - + +#ifndef SP_REFACTOR // Set the fileURL and init the preferences (query favs, filters, and history) if available for that URL [self setFileURL:[[SPQueryController sharedQueryController] registerDocumentWithFileURL:[self fileURL] andContextInfo:spfPreferences]]; // ...but hide the icon while the document is temporary if ([self isUntitled]) [[parentWindow standardWindowButton:NSWindowDocumentIconButton] setImage:nil]; +#endif // Get the mysql version mySQLVersion = [[NSString alloc] initWithString:[mySQLConnection serverVersionString]]; @@ -318,7 +391,9 @@ if ([connectionController database] && ![[connectionController database] isEqualToString:@""]) { if (selectedDatabase) [selectedDatabase release], selectedDatabase = nil; selectedDatabase = [[NSString alloc] initWithString:[connectionController database]]; +#ifndef SP_REFACTOR /* [spHistoryControllerInstance updateHistoryEntries] */ [spHistoryControllerInstance updateHistoryEntries]; +#endif } // Ensure the connection encoding is set to utf8 for database/table name retrieval @@ -331,19 +406,28 @@ [databaseDataInstance setConnection:mySQLConnection]; +#ifndef SP_REFACTOR /* setServerSupport: */ // Pass the support class to the data instance [databaseDataInstance setServerSupport:serverSupport]; - +#endif + +#ifdef SP_REFACTOR /* glue */ + tablesListInstance = [[SPTablesList alloc] init]; + [tablesListInstance setDatabaseDocument:self]; +#endif + // Set the connection on the tables list instance - this updates the table list while the connection // is still UTF8 [tablesListInstance setConnection:mySQLConnection]; +#ifndef SP_REFACTOR /* set connection encoding from prefs */ // Set the connection encoding if necessary NSNumber *encodingType = [prefs objectForKey:SPDefaultEncoding]; if ([encodingType intValue] != SPEncodingAutodetect) { [self setConnectionEncoding:[self mysqlEncodingFromEncodingTag:encodingType] reloadingViews:NO]; } +#endif // For each of the main controllers, assign the current connection [tableSourceInstance setConnection:mySQLConnection]; @@ -356,6 +440,7 @@ [tableDataInstance setConnection:mySQLConnection]; [extendedTableInfoInstance setConnection:mySQLConnection]; +#ifndef SP_REFACTOR /* update custom query editor */ // Set the custom query editor's MySQL version [customQueryInstance setMySQLversion:mySQLVersion]; @@ -435,6 +520,11 @@ } (void)[self databaseEncoding]; +#endif +#ifdef SP_REFACTOR /* glue */ + if ( delegate && [delegate respondsToSelector:@selector(databaseDocumentDidConnect:)] ) + [delegate performSelector:@selector(databaseDocumentDidConnect:) withObject:self]; +#endif } /** @@ -463,6 +553,8 @@ */ - (IBAction)setDatabases:(id)sender; { +#ifndef SP_REFACTOR /* ui manipulation */ + if (!chooseDatabaseButton) return; [chooseDatabaseButton removeAllItems]; @@ -472,6 +564,7 @@ [[chooseDatabaseButton menu] addItemWithTitle:NSLocalizedString(@"Add Database...", @"menu item to add db") action:@selector(addDatabase:) keyEquivalent:@""]; [[chooseDatabaseButton menu] addItemWithTitle:NSLocalizedString(@"Refresh Databases", @"menu item to refresh databases") action:@selector(setDatabases:) keyEquivalent:@""]; [[chooseDatabaseButton menu] addItem:[NSMenuItem separatorItem]]; +#endif MCPResult *queryResult = [mySQLConnection listDBs]; @@ -498,6 +591,7 @@ } } +#ifndef SP_REFACTOR /* ui manipulation */ // Add system databases for (NSString *db in allSystemDatabases) { @@ -516,8 +610,11 @@ } (![self database]) ? [chooseDatabaseButton selectItemAtIndex:0] : [chooseDatabaseButton selectItemWithTitle:[self database]]; +#endif } +#ifndef SP_REFACTOR /* chooseDatabase: */ + /** * Selects the database choosen by the user, using a child task if necessary, * and displaying errors in an alert sheet on failure. @@ -542,12 +639,14 @@ // Select the database [self selectDatabase:[chooseDatabaseButton titleOfSelectedItem] item:[self table]]; } +#endif /** * Select the specified database and, optionally, table. */ - (void)selectDatabase:(NSString *)aDatabase item:(NSString *)anItem { +#ifndef SP_REFACTOR /* update navigator controller */ // Do not update the navigator since nothing is changed [[SPNavigatorController sharedNavigatorController] setIgnoreUpdate:NO]; @@ -561,6 +660,7 @@ } [[SPNavigatorController sharedNavigatorController] selectPath:schemaPath]; } +#endif // Start a task [self startTaskWithDescription:[NSString stringWithFormat:NSLocalizedString(@"Loading database '%@'...", @"Loading database task string"), [chooseDatabaseButton titleOfSelectedItem]]]; @@ -576,6 +676,7 @@ } } +#ifndef SP_REFACTOR /* operations on whole databases */ /** * opens the add-db sheet and creates the new db */ @@ -730,6 +831,7 @@ [processListController displayProcessListWindow]; } +#endif /** * Returns an array of all available database names @@ -747,6 +849,7 @@ return allSystemDatabases; } +#ifndef SP_REFACTOR /* sheetDidEnd: */ /** * Alert sheet method. Invoked when an alert sheet is dismissed. * @@ -819,6 +922,7 @@ nil, nil, parentWindow, self, nil, nil, [error objectAtIndex:1]); } +#endif /** * Reset the current selected database name @@ -828,7 +932,11 @@ NSString *dbName = nil; // Notify listeners that a query has started +#ifndef SP_REFACTOR [[NSNotificationCenter defaultCenter] postNotificationOnMainThreadWithName:@"SMySQLQueryWillBePerformed" object:self]; +#else + [[NSNotificationCenter defaultCenter] sequelProPostNotificationOnMainThreadWithName:@"SMySQLQueryWillBePerformed" object:self]; +#endif MCPResult *theResult = [mySQLConnection queryString:@"SELECT DATABASE()"]; if (![mySQLConnection queryErrored]) { @@ -843,23 +951,33 @@ if (selectedDatabase) [selectedDatabase release], selectedDatabase = nil; selectedDatabase = [[NSString alloc] initWithString:dbName]; [chooseDatabaseButton selectItemWithTitle:selectedDatabase]; +#ifndef SP_REFACTOR /* [self updateWindowTitle:self] */ [self updateWindowTitle:self]; +#endif } } else { if (selectedDatabase) [selectedDatabase release], selectedDatabase = nil; [chooseDatabaseButton selectItemAtIndex:0]; +#ifndef SP_REFACTOR /* [self updateWindowTitle:self] */ [self updateWindowTitle:self]; +#endif } } //query finished +#ifndef SP_REFACTOR [[NSNotificationCenter defaultCenter] postNotificationOnMainThreadWithName:@"SMySQLQueryHasBeenPerformed" object:self]; +#else + [[NSNotificationCenter defaultCenter] sequelProPostNotificationOnMainThreadWithName:@"SMySQLQueryHasBeenPerformed" object:self]; +#endif } +#ifndef SP_REFACTOR /* navigatorSchemaPathExistsForDatabase: */ - (BOOL)navigatorSchemaPathExistsForDatabase:(NSString*)dbname { return [[SPNavigatorController sharedNavigatorController] schemaPathExistsForConnection:[self connectionID] andDatabase:dbname]; } +#endif - (NSDictionary*)getDbStructure { @@ -871,6 +989,8 @@ return [[SPNavigatorController sharedNavigatorController] allSchemaKeysForConnection:[self connectionID]]; } +#ifndef SP_REFACTOR /* console and navigator methods */ + #pragma mark - #pragma mark Console methods @@ -951,6 +1071,7 @@ [[[SPNavigatorController sharedNavigatorController] window] makeKeyAndOrderFront:self]; } } +#endif #pragma mark - #pragma mark Task progress and notification methods @@ -1425,6 +1546,7 @@ #pragma mark - #pragma mark Table Methods +#ifndef SP_REFACTOR /* whole table operations */ /** * Copies if sender == self or displays or the CREATE TABLE syntax of the selected table(s) to the user . @@ -2187,6 +2309,8 @@ [newTableDocument setStateFromConnectionFile:[[self fileURL] path]]; } +#endif + /** * Ask the connection controller to initiate connection, if it hasn't * already. Used to support automatic connections on window open, @@ -2202,13 +2326,16 @@ [mySQLConnection disconnect]; _isConnected = NO; +#ifndef SP_REFACTOR /* growl */ // Disconnected Growl notification [[SPGrowlController sharedGrowlController] notifyWithTitle:@"Disconnected" description:[NSString stringWithFormat:NSLocalizedString(@"Disconnected from %@",@"description for disconnected growl notification"), [parentTabViewItem label]] document:self notificationName:@"Disconnected"]; +#endif } +#ifndef SP_REFACTOR /* observeValueForKeyPath: */ /** * This method is called as part of Key Value Observing which is used to watch for prefernce changes which effect the interface. */ @@ -2218,6 +2345,7 @@ [mySQLConnection setDelegateQueryLogging:[[change objectForKey:NSKeyValueChangeNewKey] boolValue]]; } } +#endif /** * Is current document Untitled? @@ -2339,8 +2467,10 @@ tabTitle = [NSMutableString string]; +#ifndef SP_REFACTOR /* Add the MySQL version to the window title */ // Add the MySQL version to the window title if enabled in prefs if ([prefs boolForKey:SPDisplayServerVersionInWindowTitle]) [tabTitle appendFormat:@"(MySQL %@)\n", [self mySQLVersion]]; +#endif [tabTitle appendString:[self name]]; if ([self database]) { @@ -2420,6 +2550,7 @@ [queryProgressBar stopAnimation:self]; } +#ifndef SP_REFACTOR /* applicationWillTerminate: */ /** * Invoked when the application will terminate */ @@ -3271,7 +3402,7 @@ if ([connectionController selectedFavorite]) return; // Request the connection controller to add its details to favorites - [connectionController addFavoriteUsingCurrentDetails:self]; + [connectionController addFavorite:self]; } /** @@ -3839,6 +3970,7 @@ // If the task interface is visible, and this tab is frontmost, re-center the task child window if (_isWorkingLevel && [parentWindowController selectedTableDocument] == self) [self centerTaskWindow]; } +#endif /** * Set the parent window @@ -3847,7 +3979,9 @@ { // If the window is being set for the first time - connection controller is visible - update focus if (!parentWindow && !mySQLConnection) { - [aWindow makeFirstResponder:[connectionController valueForKey:@"favoritesOutlineView"]]; +#ifndef SP_REFACTOR + [aWindow makeFirstResponder:[connectionController valueForKey:@"favoritesTable"]]; +#endif [connectionController performSelector:@selector(updateFavoriteSelection:) withObject:self afterDelay:0.0]; } @@ -3864,6 +3998,7 @@ return parentWindow; } +#ifndef SP_REFACTOR #pragma mark - #pragma mark NSDocument compatibility @@ -3881,6 +4016,7 @@ [parentWindow setRepresentedURL:nil]; } } +#endif /** * Retrieve the NSURL for the .spf file for this connection instance (if any) @@ -3890,6 +4026,7 @@ return [[spfFileURL copy] autorelease]; } +#ifndef SP_REFACTOR /* writeSafelyToURL: */ /** * Invoked if user chose "Save" from 'Do you want save changes you made...' sheet * which is called automatically if [self isDocumentEdited] == YES and user wanted to close an Untitled doc. @@ -3916,6 +4053,7 @@ || [[[[SPQueryController sharedQueryController] contentFilterForFileURL:[self fileURL]] objectForKey:@"string"] count]) ); } +#endif /** * The window title for this document. @@ -3929,7 +4067,7 @@ } return [[[self fileURL] path] lastPathComponent]; } - +#ifndef SP_REFACTOR /* state saving and setting */ #pragma mark - #pragma mark State saving and setting @@ -4115,6 +4253,7 @@ { NSDictionary *connection = nil; NSInteger connectionType = -1; + SPKeychain *keychain = nil; // If this document already has a connection, don't proceed. if (mySQLConnection) return NO; @@ -4123,15 +4262,17 @@ connection = [NSDictionary dictionaryWithDictionary:[stateDetails objectForKey:@"connection"]]; if (!connection) return NO; + if ([connection objectForKey:@"kcid"]) keychain = [[SPKeychain alloc] init]; + [self updateWindowTitle:self]; // Deselect all favorites on the connection controller - [[connectionController valueForKeyPath:@"favoritesOutlineView"] deselectAll:connectionController]; + [[connectionController valueForKeyPath:@"favoritesTable"] deselectAll:connectionController]; // Suppress the possibility to choose an other connection from the favorites // if a connection should initialized by SPF file. Otherwise it could happen // that the SPF file runs out of sync. - [[connectionController valueForKeyPath:@"favoritesOutlineView"] setEnabled:NO]; + [[connectionController valueForKeyPath:@"favoritesTable"] setEnabled:NO]; // Ensure the connection controller is set to a blank slate [connectionController setName:@""]; @@ -4153,7 +4294,11 @@ [connectionController setSshPort:@""]; [connectionController setDatabase:@""]; [connectionController setPassword:nil]; + [connectionController setConnectionKeychainItemName:nil]; + [connectionController setConnectionKeychainItemAccount:nil]; [connectionController setSshPassword:nil]; + [connectionController setConnectionSSHKeychainItemName:nil]; + [connectionController setConnectionSSHKeychainItemAccount:nil]; // Set the correct connection type if ([connection objectForKey:@"type"]) { @@ -4197,8 +4342,11 @@ [connectionController setSslCACertFileLocation:[connection objectForKey:@"sslCACertFileLocation"]]; // Set the keychain details if available - if ([connection objectForKey:@"kcid"] && [(NSString *)[connection objectForKey:@"kcid"] length]) + if ([connection objectForKey:@"kcid"] && [(NSString *)[connection objectForKey:@"kcid"] length]) { [self setKeychainID:[connection objectForKey:@"kcid"]]; + [connectionController setConnectionKeychainItemName:[keychain nameForFavoriteName:[connectionController name] id:[self keyChainID]]]; + [connectionController setConnectionKeychainItemAccount:[keychain accountForUser:[connectionController user] host:[connectionController host] database:[connection objectForKey:@"database"]]]; + } // Set password - if not in SPF file try to get it via the KeyChain if ([connection objectForKey:@"password"]) @@ -4229,6 +4377,10 @@ if ([connection objectForKey:@"ssh_password"]) [connectionController setSshPassword:[connection objectForKey:@"ssh_password"]]; else { + if ([connection objectForKey:@"kcid"] && [(NSString *)[connection objectForKey:@"kcid"] length]) { + [connectionController setConnectionSSHKeychainItemName:[keychain nameForSSHForFavoriteName:[connectionController name] id:[self keyChainID]]]; + [connectionController setConnectionSSHKeychainItemAccount:[keychain accountForSSHUser:[connectionController sshUser] sshHost:[connectionController sshHost]]]; + } NSString *sshpw = [self keychainPasswordForSSHConnection:nil]; if(sshpw) [connectionController setSshPassword:sshpw]; @@ -4258,6 +4410,8 @@ [connectionController initiateConnection:self]; } + if (keychain) [keychain release]; + return YES; } @@ -4535,6 +4689,7 @@ [self endTask]; [taskPool drain]; } +#endif #pragma mark - #pragma mark Connection controller delegate methods @@ -4544,12 +4699,14 @@ */ - (void)connectionControllerInitiatingConnection:(id)controller { +#ifndef SP_REFACTOR /* ui manipulation */ // Update the window title to indicate that we are trying to establish a connection [parentTabViewItem setLabel:NSLocalizedString(@"Connecting…", @"window title string indicating that sp is connecting")]; if ([parentWindowController selectedTableDocument] == self) { [parentWindow setTitle:NSLocalizedString(@"Connecting…", @"window title string indicating that sp is connecting")]; } +#endif } /** @@ -4557,10 +4714,15 @@ */ - (void)connectionControllerConnectAttemptFailed:(id)controller { +#ifndef SP_REFACTOR /* updateWindowTitle: */ // Reset the window title [self updateWindowTitle:self]; +#endif } + +#ifndef SP_REFACTOR /* scheme scripting methods */ + #pragma mark - #pragma mark Scheme scripting methods @@ -5061,7 +5223,11 @@ - (void)registerActivity:(NSDictionary*)commandDict { [runningActivitiesArray addObject:commandDict]; +#ifndef SP_REFACTOR [[NSNotificationCenter defaultCenter] postNotificationOnMainThreadWithName:SPActivitiesUpdateNotification object:nil]; +#else + [[NSNotificationCenter defaultCenter] sequelProPostNotificationOnMainThreadWithName:SPActivitiesUpdateNotification object:self]; +#endif if([runningActivitiesArray count] || [[[NSApp delegate] runningActivities] count]) [self performSelector:@selector(setActivityPaneHidden:) withObject:[NSNumber numberWithInteger:0] afterDelay:1.0]; @@ -5093,7 +5259,11 @@ [self setActivityPaneHidden:[NSNumber numberWithInteger:1]]; } +#ifndef SP_REFACTOR [[NSNotificationCenter defaultCenter] postNotificationOnMainThreadWithName:SPActivitiesUpdateNotification object:nil]; +#else + [[NSNotificationCenter defaultCenter] sequelProPostNotificationOnMainThreadWithName:SPActivitiesUpdateNotification object:self]; +#endif } @@ -5166,6 +5336,7 @@ return (NSDictionary*)env; } +#endif #pragma mark - #pragma mark Text field delegate methods @@ -5194,6 +5365,7 @@ #pragma mark - #pragma mark General sheet delegate methods +#ifndef SP_REFACTOR /* window:willPositionSheet:usingRect: */ - (NSRect)window:(NSWindow *)window willPositionSheet:(NSWindow *)sheet usingRect:(NSRect)rect { @@ -5217,10 +5389,11 @@ rect.origin.y -= [[parentWindowController valueForKey:@"tabBar"] frame].size.height - 1; return rect; } +#endif #pragma mark - #pragma mark SplitView delegate methods - +#ifndef SP_REFACTOR /* SplitView delegate methods */ /** * tells the splitView that it can collapse views */ @@ -5348,6 +5521,9 @@ _isSavedInBundle = savedInBundle; } +#endif + + #pragma mark - /** @@ -5355,7 +5531,7 @@ */ - (void)dealloc { - +#ifndef SP_REFACTOR /* Unregister observers */ // Unregister observers [prefs removeObserver:self forKeyPath:SPDisplayTableViewVerticalGridlines]; [prefs removeObserver:tableSourceInstance forKeyPath:SPDisplayTableViewVerticalGridlines]; @@ -5371,23 +5547,30 @@ if (processListController) [prefs removeObserver:processListController forKeyPath:SPDisplayTableViewVerticalGridlines]; if (serverVariablesController) [prefs removeObserver:serverVariablesController forKeyPath:SPDisplayTableViewVerticalGridlines]; +#endif [[NSNotificationCenter defaultCenter] removeObserver:self]; [NSObject cancelPreviousPerformRequestsWithTarget:self]; +#ifndef SP_REFACTOR /* release nib objects */ for (id retainedObject in nibObjectsToRelease) [retainedObject release]; [nibObjectsToRelease release]; +#endif [allDatabases release]; [allSystemDatabases release]; +#ifndef SP_REFACTOR /* dealloc ivars */ [printWebView release]; +#endif [taskProgressWindow close]; if (selectedTableName) [selectedTableName release]; if (connectionController) [connectionController release]; +#ifndef SP_REFACTOR /* dealloc ivars */ if (processListController) [processListController release]; if (serverVariablesController) [serverVariablesController release]; +#endif if (mySQLConnection) [mySQLConnection release]; if (selectedDatabase) [selectedDatabase release]; if (mySQLVersion) [mySQLVersion release]; @@ -5403,16 +5586,30 @@ if (titleAccessoryView) [titleAccessoryView release]; if (taskProgressWindow) [taskProgressWindow release]; if (serverSupport) [serverSupport release]; +#ifndef SP_REFACTOR /* dealloc ivars */ if (processID) [processID release]; +#endif if (runningActivitiesArray) [runningActivitiesArray release]; [super dealloc]; } +- (NSArray*)allTableNames +{ + return [tablesListInstance allTableNames]; +} + +- (SPTablesList*)tablesListInstance +{ + return tablesListInstance; +} + @end @implementation SPDatabaseDocument (PrivateAPI) +#ifndef SP_REFACTOR /* whole database operations */ + - (void)_copyDatabase { if ([[databaseCopyNameField stringValue] isEqualToString:@""]) { @@ -5562,6 +5759,8 @@ [self updateWindowTitle:self]; } +#endif + /** * Select the specified database and, optionally, table. */ @@ -5569,6 +5768,7 @@ { NSAutoreleasePool *taskPool = [[NSAutoreleasePool alloc] init]; NSString *targetDatabaseName = [selectionDetails objectForKey:@"database"]; +#ifndef SP_REFACTOR /* update history controller */ NSString *targetItemName = [selectionDetails objectForKey:@"item"]; // Save existing scroll position and details, and ensure no duplicate entries are created as table list changes @@ -5577,12 +5777,17 @@ [spHistoryControllerInstance updateHistoryEntries]; [spHistoryControllerInstance setModifyingState:YES]; } +#endif if (![targetDatabaseName isEqualToString:selectedDatabase]) { // Attempt to select the specified database, and abort on failure +#ifndef SP_REFACTOR /* patch */ if ([chooseDatabaseButton indexOfItemWithTitle:targetDatabaseName] == NSNotFound || ![mySQLConnection selectDB:targetDatabaseName]) +#else + if ( ![mySQLConnection selectDB:targetDatabaseName] ) +#endif { // End the task first to ensure the database dropdown can be reselected @@ -5600,21 +5805,30 @@ return; } +#ifndef SP_REFACTOR /* chooseDatabaseButton selectItemWithTitle: */ [[chooseDatabaseButton onMainThread] selectItemWithTitle:targetDatabaseName]; +#endif if (selectedDatabase) [selectedDatabase release], selectedDatabase = nil; +#ifndef SP_REFACTOR /* patch */ selectedDatabase = [[NSString alloc] initWithString:[chooseDatabaseButton titleOfSelectedItem]]; +#else + selectedDatabase = [[NSString alloc] initWithString:targetDatabaseName]; +#endif +#ifndef SP_REFACTOR /* clear SPTablesList selection */ // If the item has changed, clear the item selection for cleaner loading if (![targetItemName isEqualToString:[self table]]) { [[tablesListInstance onMainThread] setTableListSelectability:YES]; [[[tablesListInstance valueForKey:@"tablesListView"] onMainThread] deselectAll:self]; [[tablesListInstance onMainThread] setTableListSelectability:NO]; } +#endif // Set the connection of SPTablesList and TablesDump to reload tables in db [tablesListInstance setConnection:mySQLConnection]; [tableDumpInstance setConnection:mySQLConnection]; +#ifndef SP_REFACTOR /* update history controller and ui manip */ // Update the window title [self updateWindowTitle:self]; @@ -5630,8 +5844,10 @@ [[parentWindow onMainThread] makeFirstResponder:listFilterField]; else [[parentWindow onMainThread] makeFirstResponder:[tablesListInstance valueForKeyPath:@"tablesListView"]]; +#endif } +#ifndef SP_REFACTOR /* update selected table in SPTablesList */ // If a the table has changed, update the selection if (![targetItemName isEqualToString:[self table]]) { if (targetItemName) { @@ -5642,8 +5858,9 @@ [[tablesListInstance onMainThread] setTableListSelectability:NO]; } } - +#endif [self endTask]; +#ifndef SP_REFACTOR /* triggered commands */ NSArray *triggeredCommands = [[NSApp delegate] bundleCommandsForTrigger:SPBundleTriggerActionDatabaseChanged]; for(NSString* cmdPath in triggeredCommands) { @@ -5681,8 +5898,14 @@ } } } +#endif - [taskPool drain]; +#ifdef SP_REFACTOR /* glue */ + if ( delegate && [delegate respondsToSelector:@selector(databaseDidChange:)] ) + [delegate performSelectorOnMainThread:@selector(databaseDidChange:) withObject:self waitUntilDone:NO]; +#endif + [taskPool drain]; } + @end diff --git a/Source/SPDatabaseViewController.h b/Source/SPDatabaseViewController.h index 682d6f74..f84d81cd 100644 --- a/Source/SPDatabaseViewController.h +++ b/Source/SPDatabaseViewController.h @@ -35,6 +35,7 @@ - (BOOL)contentLoaded; - (BOOL)statusLoaded; +#ifndef SP_REFACTOR /* method decls */ // Tab view control - (IBAction)viewStructure:(id)sender; - (IBAction)viewContent:(id)sender; @@ -42,6 +43,7 @@ - (IBAction)viewStatus:(id)sender; - (IBAction)viewRelations:(id)sender; - (IBAction)viewTriggers:(id)sender; +#endif - (void)setStructureRequiresReload:(BOOL)reload; - (void)setContentRequiresReload:(BOOL)reload; - (void)setStatusRequiresReload:(BOOL)reload; @@ -49,6 +51,8 @@ // Table control - (void)loadTable:(NSString *)aTable ofType:(NSInteger)aTableType; +#ifndef SP_REFACTOR /* method decls */ - (NSView *)databaseView; +#endif @end diff --git a/Source/SPDatabaseViewController.m b/Source/SPDatabaseViewController.m index 3b6cfc1f..171ff8f6 100644 --- a/Source/SPDatabaseViewController.m +++ b/Source/SPDatabaseViewController.m @@ -32,6 +32,9 @@ #import "SPTableData.h" #import "SPTablesList.h" #import "SPTableTriggers.h" +#ifdef SP_REFACTOR /* headers */ +#import "SPTableStructure.h" +#endif @interface SPDatabaseDocument (SPDatabaseViewControllerPrivateAPI) @@ -46,6 +49,7 @@ #pragma mark - #pragma mark Getters +#ifndef SP_REFACTOR /* getters */ /** * Returns the master database view, containing the tables list and views for * table setup and contents. @@ -54,6 +58,7 @@ { return parentView; } +#endif /** * Returns the name of the currently selected table/view/procedure/function. @@ -95,6 +100,7 @@ return statusLoaded; } +#ifndef SP_REFACTOR /* toolbar ibactions */ #pragma mark - #pragma mark Tab view control and delegate methods @@ -204,6 +210,7 @@ [prefs setInteger:SPTriggersViewMode forKey:SPLastViewMode]; } +#endif /** * Mark the structure tab for refresh when it's next switched to, @@ -224,7 +231,11 @@ */ - (void)setContentRequiresReload:(BOOL)reload { - if (reload && selectedTableName && [tableTabView indexOfTabViewItem:[tableTabView selectedTabViewItem]] == SPTableViewContent) { + if (reload && selectedTableName +#ifndef SP_REFACTOR /* check which tab is selected */ + && [tableTabView indexOfTabViewItem:[tableTabView selectedTabViewItem]] == SPTableViewContent +#endif + ) { [tableContentInstance loadTable:selectedTableName]; } else { contentLoaded = !reload; @@ -237,14 +248,18 @@ */ - (void)setStatusRequiresReload:(BOOL)reload { - if (reload && selectedTableName && [tableTabView indexOfTabViewItem:[tableTabView selectedTabViewItem]] == SPTableViewStatus) { + if (reload && selectedTableName +#ifndef SP_REFACTOR /* check which tab is selected */ + && [tableTabView indexOfTabViewItem:[tableTabView selectedTabViewItem]] == SPTableViewStatus +#endif + ) { [[extendedTableInfoInstance onMainThread] loadTable:selectedTableName]; } else { statusLoaded = !reload; } } - +#ifndef SP_REFACTOR /* !!! respond to tab change */ /** * Triggers a task to update the newly selected tab view, ensuring * the data is fully loaded and up-to-date. @@ -258,6 +273,7 @@ [self _loadTabTask:tabViewItem]; } } +#endif #pragma mark - #pragma mark Table control @@ -286,21 +302,29 @@ [[tablesListInstance onMainThread] setSelectionState:nil]; [tableSourceInstance loadTable:nil]; [tableContentInstance loadTable:nil]; +#ifndef SP_REFACTOR /* [extendedTableInfoInstance loadTable:] */ [[extendedTableInfoInstance onMainThread] loadTable:nil]; [[tableTriggersInstance onMainThread] resetInterface]; +#endif structureLoaded = NO; contentLoaded = NO; statusLoaded = NO; triggersLoaded = NO; +#ifndef SP_REFACTOR // Update the window title [self updateWindowTitle:self]; // Add a history entry [spHistoryControllerInstance updateHistoryEntries]; +#endif // Notify listeners of the table change +#ifndef SP_REFACTOR [[NSNotificationCenter defaultCenter] postNotificationOnMainThreadWithName:SPTableChangedNotification object:self]; +#else + [[NSNotificationCenter defaultCenter] sequelProPostNotificationOnMainThreadWithName:SPTableChangedNotification object:self]; +#endif return; } @@ -370,6 +394,7 @@ contentLoaded = YES; } break; +#ifndef SP_REFACTOR /* case SPTableViewStatus: case SPTableViewTriggers: */ case SPTableViewStatus: if (!statusLoaded) { [[extendedTableInfoInstance onMainThread] loadTable:selectedTableName]; @@ -382,6 +407,7 @@ triggersLoaded = YES; } break; +#endif } [self endTask]; @@ -397,8 +423,10 @@ NSAutoreleasePool *loadPool = [[NSAutoreleasePool alloc] init]; NSString *tableEncoding = nil; +#ifndef SP_REFACTOR /* Update the window title */ // Update the window title [self updateWindowTitle:self]; +#endif // Reset table information caches and mark that all loaded views require their data reloading [tableDataInstance resetAllData]; @@ -439,24 +467,35 @@ if (changeEncoding) [mySQLConnection restoreStoredEncoding]; // Notify listeners of the table change now that the state is fully set up. - [[NSNotificationCenter defaultCenter] postNotificationOnMainThreadWithName:SPTableChangedNotification object:self]; +#ifndef SP_REFACTOR + [[NSNotificationCenter defaultCenter] postNotificationOnMainThreadWithName:SPTableChangedNotification object:self]; +#else + [[NSNotificationCenter defaultCenter] sequelProPostNotificationOnMainThreadWithName:SPTableChangedNotification object:self]; +#endif +#ifndef SP_REFACTOR /* [spHistoryControllerInstance restoreViewStates] */ // Restore view states as appropriate [spHistoryControllerInstance restoreViewStates]; +#endif // Load the currently selected view if looking at a table or view if (tableEncoding && (selectedTableType == SPTableTypeView || selectedTableType == SPTableTypeTable)) { +#ifndef SP_REFACTOR /* load everything */ NSInteger selectedTabViewIndex = [tableTabView indexOfTabViewItem:[tableTabView selectedTabViewItem]]; switch (selectedTabViewIndex) { case SPTableViewStructure: +#endif [tableSourceInstance loadTable:selectedTableName]; structureLoaded = YES; +#ifndef SP_REFACTOR /* load everything */ break; case SPTableViewContent: +#endif [tableContentInstance loadTable:selectedTableName]; contentLoaded = YES; +#ifndef SP_REFACTOR /* load everything */ break; case SPTableViewStatus: [[extendedTableInfoInstance onMainThread] loadTable:selectedTableName]; @@ -467,6 +506,7 @@ triggersLoaded = YES; break; } +#endif } // Clear any views which haven't been loaded as they weren't visible. Note @@ -477,6 +517,7 @@ if (!statusLoaded) [[extendedTableInfoInstance onMainThread] loadTable:nil]; if (!triggersLoaded) [[tableTriggersInstance onMainThread] resetInterface]; +#ifndef SP_REFACTOR /* show Create Table syntax */ // Update the "Show Create Syntax" window if it's already opened // according to the selected table/view/proc/func if([[[self onMainThread] getCreateTableSyntaxWindow] isVisible]) @@ -484,10 +525,11 @@ // Add a history entry [spHistoryControllerInstance updateHistoryEntries]; - +#endif // Empty the loading pool and exit the thread [self endTask]; +#ifndef SP_REFACTOR /* triggered commands */ NSArray *triggeredCommands = [[NSApp delegate] bundleCommandsForTrigger:SPBundleTriggerActionTableChanged]; for(NSString* cmdPath in triggeredCommands) { NSArray *data = [cmdPath componentsSeparatedByString:@"|"]; @@ -524,6 +566,7 @@ } } } +#endif [loadPool drain]; diff --git a/Source/SPEditSheetTextView.m b/Source/SPEditSheetTextView.m index 7a4fb37c..b028c177 100644 --- a/Source/SPEditSheetTextView.m +++ b/Source/SPEditSheetTextView.m @@ -125,6 +125,12 @@ [self saveChangedFontInUserDefaults]; return; } + if([charactersIgnMod isEqualToString:@"0"]) // return the text size to the default size; ⌘0 + { + [self makeTextStandardSize]; + [self saveChangedFontInUserDefaults]; + return; + } } // Allow undo grouping if user typed a ' ' (for word level undo) diff --git a/Source/SPFieldEditorController.h b/Source/SPFieldEditorController.h index 1f3b6ea8..b629acbf 100644 --- a/Source/SPFieldEditorController.h +++ b/Source/SPFieldEditorController.h @@ -32,7 +32,11 @@ * This class offers a sheet for editing different kind of data such as text, blobs (including images) as * editSheet and bit fields as bitSheet. */ +#ifndef SP_REFACTOR @interface SPFieldEditorController : NSWindowController +#else +@interface SPFieldEditorController : NSWindowController <NSComboBoxDataSource> +#endif { IBOutlet id editSheetProgressBar; IBOutlet id editSheetSegmentControl; diff --git a/Source/SPFieldEditorController.m b/Source/SPFieldEditorController.m index 73fafe39..52a90fcd 100644 --- a/Source/SPFieldEditorController.m +++ b/Source/SPFieldEditorController.m @@ -4,7 +4,7 @@ // SPFieldEditorController.m // sequel-pro // -// Created by Hans-Jörg Bibiko on July 16, 2009 +// Created by Hans-J√∂rg Bibiko on July 16, 2009 // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -31,6 +31,8 @@ #import "SPGeometryDataView.h" #import "SPCopyTable.h" #include <objc/objc-runtime.h> +#import "SPCustomQuery.h" +#import "SPTableContent.h" @interface SPFieldEditorController (SPFieldEditorControllerDelegate) @@ -110,6 +112,7 @@ [qlTypesItems addObject:type]; } } +#ifndef SP_REFACTOR // Load user-defined QL types if([prefs objectForKey:SPQuickLookTypes]) { for(id type in [prefs objectForKey:SPQuickLookTypes]) { @@ -122,6 +125,7 @@ [qlTypesItems addObject:type]; } } +#endif qlTypes = [[NSDictionary dictionaryWithObject:qlTypesItems forKey:SPQuickLookTypes] retain]; [qlTypesItems release]; @@ -239,14 +243,28 @@ usedSheet = editSheet; // If required, use monospaced fonts +#ifndef SP_REFACTOR if (![prefs objectForKey:SPFieldEditorSheetFont]) { - [editTextView setFont:([prefs boolForKey:SPUseMonospacedFonts]) ? [NSFont fontWithName:SPDefaultMonospacedFontName size:[NSFont smallSystemFontSize]] : [NSFont systemFontOfSize:[NSFont smallSystemFontSize]]]; +#endif + [editTextView setFont: +#ifndef SP_REFACTOR + ([prefs boolForKey:SPUseMonospacedFonts]) ? [NSFont fontWithName:SPDefaultMonospacedFontName size:[NSFont smallSystemFontSize]] : +#endif + [NSFont systemFontOfSize:[NSFont smallSystemFontSize]]]; +#ifndef SP_REFACTOR } else { [editTextView setFont:[NSUnarchiver unarchiveObjectWithData:[prefs dataForKey:@"FieldEditorSheetFont"]]]; } +#endif - [editTextView setContinuousSpellCheckingEnabled:[prefs boolForKey:SPBlobTextEditorSpellCheckingEnabled]]; + [editTextView setContinuousSpellCheckingEnabled: +#ifndef SP_REFACTOR + [prefs boolForKey:SPBlobTextEditorSpellCheckingEnabled] +#else + NO +#endif + ]; [hexTextView setFont:[NSFont fontWithName:SPDefaultMonospacedFontName size:[NSFont smallSystemFontSize]]]; @@ -532,8 +550,10 @@ - (void)sheetDidEnd:(id)sheet returnCode:(NSInteger)returnCode contextInfo:(NSString *)contextInfo { +#ifndef SP_REFACTOR // Remember spell cheecker status [prefs setBool:[editTextView isContinuousSpellCheckingEnabled] forKey:SPBlobTextEditorSpellCheckingEnabled]; +#endif } /** @@ -551,7 +571,7 @@ // and suppress closing the sheet if(sender == editSheetOkButton) { if (maxTextLength > 0 && [[editTextView textStorage] length] > maxTextLength && ![[[editTextView textStorage] string] isEqualToString:[prefs objectForKey:SPNullValue]]) { - [editTextView setSelectedRange:NSMakeRange((NSUInteger)maxTextLength, [[editTextView textStorage] length] - (NSUInteger)maxTextLength)]; + [editTextView setSelectedRange:NSMakeRange(maxTextLength, [[editTextView textStorage] length] - maxTextLength)]; [editTextView scrollRangeToVisible:NSMakeRange([editTextView selectedRange].location,0)]; [SPTooltip showWithObject:[NSString stringWithFormat:NSLocalizedString(@"Text is too long. Maximum text length is set to %llu.", @"Text is too long. Maximum text length is set to %llu."), maxTextLength]]; return; @@ -580,7 +600,15 @@ if(callerInstance) { id returnData = ( editSheetReturnCode && _isEditable ) ? (_isGeometry) ? [editTextView string] : sheetEditData : nil; + +#ifdef SP_REFACTOR /* patch */ + if ( [callerInstance isKindOfClass:[SPCustomQuery class]] ) + [(SPCustomQuery*)callerInstance processFieldEditorResult:returnData contextInfo:contextInfo]; + else if ( [callerInstance isKindOfClass:[SPTableContent class]] ) + [(SPTableContent*)callerInstance processFieldEditorResult:returnData contextInfo:contextInfo]; +#else [callerInstance processFieldEditorResult:returnData contextInfo:contextInfo]; +#endif } } diff --git a/Source/SPFieldMapperController.h b/Source/SPFieldMapperController.h index 69e9fac4..860eef81 100644 --- a/Source/SPFieldMapperController.h +++ b/Source/SPFieldMapperController.h @@ -26,7 +26,11 @@ @class SPTextView, SPTableView, SPTablesList; -@interface SPFieldMapperController : NSWindowController +#ifndef SP_REFACTOR +@interface SPFieldMapperController : NSWindowController +#else +@interface SPFieldMapperController : NSWindowController <NSTokenFieldCellDelegate> +#endif { IBOutlet SPTableView *fieldMapperTableView; IBOutlet id fieldMapperTableScrollView; diff --git a/Source/SPFieldMapperController.m b/Source/SPFieldMapperController.m index f6633172..ae76f8e2 100644 --- a/Source/SPFieldMapperController.m +++ b/Source/SPFieldMapperController.m @@ -94,11 +94,12 @@ static NSString *SPTableViewSqlColumnID = @"sql"; tablesListInstance = [theDelegate valueForKeyPath:@"tablesListInstance"]; databaseDataInstance = [tablesListInstance valueForKeyPath:@"databaseDataInstance"]; +#ifndef SP_REFACTOR /* init ivars */ if(![prefs objectForKey:SPLastImportIntoNewTableType]) [prefs setObject:@"Default" forKey:SPLastImportIntoNewTableType]; if(![prefs objectForKey:SPLastImportIntoNewTableEncoding]) [prefs setObject:@"Default" forKey:SPLastImportIntoNewTableEncoding]; - +#endif } return self; @@ -387,8 +388,10 @@ static NSString *SPTableViewSqlColumnID = @"sql"; { // Only save selection if the user selected 'OK' if ([sender tag]) { +#ifndef SP_REFACTOR [prefs setObject:[newTableInfoEnginePopup titleOfSelectedItem] forKey:SPLastImportIntoNewTableType]; [prefs setObject:[newTableInfoEncodingPopup titleOfSelectedItem] forKey:SPLastImportIntoNewTableEncoding]; +#endif } [NSApp endSheet:[sender window] returnCode:[sender tag]]; @@ -453,13 +456,15 @@ static NSString *SPTableViewSqlColumnID = @"sql"; } [createString appendString:@")"]; +#ifndef SP_REFACTOR if(![[prefs objectForKey:SPLastImportIntoNewTableType] isEqualToString:@"Default"]) [createString appendFormat:@" ENGINE=%@", [prefs objectForKey:SPLastImportIntoNewTableType]]; if(![[prefs objectForKey:SPLastImportIntoNewTableEncoding] isEqualToString:@"Default"]) { NSString *encodingName = [[prefs objectForKey:SPLastImportIntoNewTableEncoding] stringByMatching:@"\\((.*)\\)" capture:1L]; if (!encodingName) encodingName = @"utf8"; - [createString appendFormat:[NSString stringWithFormat:@" DEFAULT CHARACTER SET %@", [encodingName backtickQuotedString]]]; + [createString appendString:[NSString stringWithFormat:@" DEFAULT CHARACTER SET %@", [encodingName backtickQuotedString]]]; } +#endif [mySQLConnection queryString:createString]; @@ -728,9 +733,11 @@ static NSString *SPTableViewSqlColumnID = @"sql"; } [fieldMapperTableView reloadData]; +#ifndef SP_REFACTOR // Remember last field alignment if not "custom order" if([[alignByPopup selectedItem] tag] != 3) [prefs setInteger:[[alignByPopup selectedItem] tag] forKey:SPCSVFieldImportMappingAlignment]; +#endif } /* @@ -834,8 +841,8 @@ static NSString *SPTableViewSqlColumnID = @"sql"; columnCounter = 0; for(id col in row) { if(col && col != [NSNull null]) { - if([col isKindOfClass:[NSString class]] && maxLengthOfSourceColumns[columnCounter] < (NSInteger)[col length]) { - maxLengthOfSourceColumns[columnCounter] = [col length]; + if([col isKindOfClass:[NSString class]] && maxLengthOfSourceColumns[columnCounter] < (NSInteger)[(NSString*)col length]) { + maxLengthOfSourceColumns[columnCounter] = [(NSString*)col length]; } if(typeOfSourceColumns[columnCounter] == 1) { if(![[[NSNumber numberWithLongLong:[col longLongValue]] stringValue] isEqualToString:col]) @@ -1034,7 +1041,9 @@ static NSString *SPTableViewSqlColumnID = @"sql"; [newTableInfoEnginePopup addItemWithTitle:[engine objectForKey:@"Engine"]]; } +#ifndef SP_REFACTOR [newTableInfoEnginePopup selectItemWithTitle:[prefs objectForKey:SPLastImportIntoNewTableType]]; +#endif // Populate the table encoding popup button with a default menu item [newTableInfoEncodingPopup removeAllItems]; @@ -1065,7 +1074,9 @@ static NSString *SPTableViewSqlColumnID = @"sql"; [newTableInfoEncodingPopup insertItemWithTitle:utf8MenuItemTitle atIndex:2]; } +#ifndef SP_REFACTOR [newTableInfoEncodingPopup selectItemWithTitle:[prefs objectForKey:SPLastImportIntoNewTableEncoding]]; +#endif } [NSApp beginSheet:newTableInfoWindow @@ -1092,10 +1103,12 @@ static NSString *SPTableViewSqlColumnID = @"sql"; while([insertPullDownButton numberOfItems] > (([[self selectedImportMethod] isEqualToString:@"UPDATE"]) ? 6 : 5)) [insertPullDownButton removeItemAtIndex:[insertPullDownButton numberOfItems]-1]; +#ifndef SP_REFACTOR // Add recent global value menu if([prefs objectForKey:SPGlobalValueHistory] && [[prefs objectForKey:SPGlobalValueHistory] isKindOfClass:[NSArray class]] && [[prefs objectForKey:SPGlobalValueHistory] count]) for(id item in [prefs objectForKey:SPGlobalValueHistory]) [recentGlobalValueMenu addItemWithTitle:item action:@selector(insertRecentGlobalValue:) keyEquivalent:@""]; +#endif // Add column placeholder NSInteger i = 0; @@ -1107,7 +1120,7 @@ static NSString *SPTableViewSqlColumnID = @"sql"; } else if ([item isSPNotLoaded]) { [insertPullDownButton addItemWithTitle:[NSString stringWithFormat:@"%i. <%@>", i, @"DEFAULT"]]; } else { - if([item length] > 20) + if([(NSString*)item length] > 20) [insertPullDownButton addItemWithTitle:[NSString stringWithFormat:@"%i. %@…", i, [item substringToIndex:20]]]; else [insertPullDownButton addItemWithTitle:[NSString stringWithFormat:@"%i. %@", i, item]]; @@ -1309,6 +1322,7 @@ static NSString *SPTableViewSqlColumnID = @"sql"; - (void)resizeWindowByHeightDelta:(NSInteger)delta { +#ifndef SP_REFACTOR /* resizeWindowByHeightDelta: */ NSUInteger tableMask = [fieldMapperTableScrollView autoresizingMask]; NSUInteger headerSwitchMask = [importFieldNamesHeaderSwitch autoresizingMask]; NSUInteger alignPopupMask = [alignByPopup autoresizingMask]; @@ -1362,7 +1376,7 @@ static NSString *SPTableViewSqlColumnID = @"sql"; [advancedUpdateView setAutoresizingMask:updateViewMask]; [advancedInsertView setAutoresizingMask:insertViewMask]; [advancedBox setAutoresizingMask:NSViewNotSizable|NSViewWidthSizable|NSViewMaxYMargin|NSViewMaxXMargin|NSViewMinXMargin]; - +#endif } - (void)sheetDidEnd:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo @@ -1535,11 +1549,13 @@ static NSString *SPTableViewSqlColumnID = @"sql"; NSInteger alignment = 0; +#ifndef SP_REFACTOR if([prefs integerForKey:SPCSVFieldImportMappingAlignment] && [prefs integerForKey:SPCSVFieldImportMappingAlignment] >= 0 && [prefs integerForKey:SPCSVFieldImportMappingAlignment] < 4) { alignment = [prefs integerForKey:SPCSVFieldImportMappingAlignment]; } +#endif // Set matching names only if csv file has an header if(importFieldNamesHeader && alignment == 2) @@ -1642,7 +1658,9 @@ static NSString *SPTableViewSqlColumnID = @"sql"; - (void)tableView:(NSTableView *)aTableView willDisplayCell:(id)aCell forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex { +#ifndef SP_REFACTOR [aCell setFont:([prefs boolForKey:SPUseMonospacedFonts]) ? [NSFont fontWithName:SPDefaultMonospacedFontName size:[NSFont smallSystemFontSize]] : [NSFont systemFontOfSize:[NSFont smallSystemFontSize]]]; +#endif } - (void)tableView:(NSTableView*)aTableView didClickTableColumn:(NSTableColumn *)aTableColumn @@ -1940,15 +1958,19 @@ static NSString *SPTableViewSqlColumnID = @"sql"; // Store anObject as recent global value if it's new NSMutableArray *recents = [NSMutableArray array]; +#ifndef SP_REFACTOR if([prefs objectForKey:SPGlobalValueHistory] && [[prefs objectForKey:SPGlobalValueHistory] isKindOfClass:[NSArray class]] && [[prefs objectForKey:SPGlobalValueHistory] count]) [recents setArray:[prefs objectForKey:SPGlobalValueHistory]]; +#endif if([recents containsObject:anObject]) [recents removeObject:anObject]; [recents insertObject:anObject atIndex:0]; while([recents count] > 20) [recents removeObjectAtIndex:[recents count]-1]; +#ifndef SP_REFACTOR if([recents count]) [prefs setObject:recents forKey:SPGlobalValueHistory]; +#endif // Re-init recent menu [recentGlobalValueMenu compatibleRemoveAllItems]; diff --git a/Source/SPIndexesController.h b/Source/SPIndexesController.h index 02dade6c..c56ff4eb 100644 --- a/Source/SPIndexesController.h +++ b/Source/SPIndexesController.h @@ -62,7 +62,9 @@ NSMutableArray *fields, *indexes, *indexedFields, *supportsLength, *requiresLength; +#ifndef SP_REFACTOR /* ivars */ NSUserDefaults *prefs; +#endif MCPConnection *connection; diff --git a/Source/SPIndexesController.m b/Source/SPIndexesController.m index 12aa58e1..9c0c03a6 100644 --- a/Source/SPIndexesController.m +++ b/Source/SPIndexesController.m @@ -28,9 +28,11 @@ #import "SPServerSupport.h" #import "SPTableContent.h" #import "SPTableData.h" -#import "SPTablesList.h" #import <MCPKit/MCPKit.h> +#import "SPDatabaseDocument.h" +#import "SPTablesList.h" #import "SPDatabaseViewController.h" +#import "SPTableStructure.h" // Constants static const NSString *SPNewIndexIndexName = @"IndexName"; @@ -70,7 +72,9 @@ static const NSString *SPNewIndexKeyBlockSize = @"IndexKeyBlockSize"; indexes = [[NSMutableArray alloc] init]; indexedFields = [[NSMutableArray alloc] init]; +#ifndef SP_REFACTOR /* init ivars */ prefs = [NSUserDefaults standardUserDefaults]; +#endif showAdvancedView = NO; @@ -97,11 +101,15 @@ static const NSString *SPNewIndexKeyBlockSize = @"IndexKeyBlockSize"; */ - (void)awakeFromNib { +#ifndef SP_REFACTOR /* patch */ // Set the index tables view's vertical gridlines if required [indexesTableView setGridStyleMask:([prefs boolForKey:SPDisplayTableViewVerticalGridlines]) ? NSTableViewSolidVerticalGridLineMask : NSTableViewGridNone]; // Set the strutcture and index view's font BOOL useMonospacedFont = [prefs boolForKey:SPUseMonospacedFonts]; +#else + BOOL useMonospacedFont = NO; +#endif for (NSTableColumn *indexColumn in [indexesTableView tableColumns]) { @@ -113,7 +121,9 @@ static const NSString *SPNewIndexKeyBlockSize = @"IndexKeyBlockSize"; [[fieldColumn dataCell] setFont:(useMonospacedFont) ? [NSFont fontWithName:SPDefaultMonospacedFontName size:[NSFont smallSystemFontSize]] : [NSFont systemFontOfSize:[NSFont smallSystemFontSize]]]; } +#ifndef SP_REFACTOR /* patch */ [prefs addObserver:self forKeyPath:SPDisplayTableViewVerticalGridlines options:NSKeyValueObservingOptionNew context:NULL]; +#endif } #pragma mark - @@ -846,7 +856,7 @@ static const NSString *SPNewIndexKeyBlockSize = @"IndexKeyBlockSize"; [errorDictionary setObject:NSLocalizedString(@"Unable to delete relation", @"error deleting relation message") forKey:@"title"]; [errorDictionary setObject:[NSString stringWithFormat:NSLocalizedString(@"An error occurred while trying to delete the relation '%@'.\n\nMySQL said: %@", @"error deleting relation informative message"), constraintName, [connection getLastErrorMessage]] forKey:@"message"]; - [[tableStructure onMainThread] showErrorSheetWith:errorDictionary]; + [(SPTableStructure*)[tableStructure onMainThread] showErrorSheetWith:errorDictionary]; } } @@ -865,7 +875,7 @@ static const NSString *SPNewIndexKeyBlockSize = @"IndexKeyBlockSize"; [errorDictionary setObject:NSLocalizedString(@"Unable to delete index", @"error deleting index message") forKey:@"title"]; [errorDictionary setObject:[NSString stringWithFormat:NSLocalizedString(@"An error occured while trying to delete the index.\n\nMySQL said: %@", @"error deleting index informative message"), [connection getLastErrorMessage]] forKey:@"message"]; - [[tableStructure onMainThread] showErrorSheetWith:errorDictionary]; + [(SPTableStructure*)[tableStructure onMainThread] showErrorSheetWith:errorDictionary]; } else { [tableData resetAllData]; @@ -895,7 +905,7 @@ static const NSString *SPNewIndexKeyBlockSize = @"IndexKeyBlockSize"; NSUInteger advancedViewMask = [indexAdvancedOptionsView autoresizingMask]; NSUInteger typeLabelMask = [indexTypeLabel autoresizingMask]; NSUInteger nameLabelMask = [indexNameLabel autoresizingMask]; - NSUInteger buttonBarMask = [anchoredButtonBar autoresizingMask]; + NSUInteger buttonBarMask = [(NSView*)anchoredButtonBar autoresizingMask]; NSRect frame = [[self window] frame]; @@ -914,7 +924,7 @@ static const NSString *SPNewIndexKeyBlockSize = @"IndexKeyBlockSize"; [indexAdvancedOptionsView setAutoresizingMask:NSViewNotSizable | NSViewMinYMargin]; [indexTypeLabel setAutoresizingMask:NSViewNotSizable | NSViewMinYMargin]; [indexNameLabel setAutoresizingMask:NSViewNotSizable | NSViewMinYMargin]; - [anchoredButtonBar setAutoresizingMask:NSViewNotSizable | NSViewMinYMargin]; + [(NSView*)anchoredButtonBar setAutoresizingMask:NSViewNotSizable | NSViewMinYMargin]; NSInteger newMinHeight = (windowMinHeigth - heightOffset + delta < windowMinHeigth) ? windowMinHeigth : windowMinHeigth - heightOffset + delta; @@ -938,7 +948,7 @@ static const NSString *SPNewIndexKeyBlockSize = @"IndexKeyBlockSize"; [indexAdvancedOptionsView setAutoresizingMask:advancedViewMask]; [indexTypeLabel setAutoresizingMask:typeLabelMask]; [indexNameLabel setAutoresizingMask:nameLabelMask]; - [anchoredButtonBar setAutoresizingMask:buttonBarMask]; + [(NSView*)anchoredButtonBar setAutoresizingMask:buttonBarMask]; } #pragma mark - diff --git a/Source/SPNarrowDownCompletion.h b/Source/SPNarrowDownCompletion.h index 08393d4d..44118380 100644 --- a/Source/SPNarrowDownCompletion.h +++ b/Source/SPNarrowDownCompletion.h @@ -26,7 +26,11 @@ // // More info at <http://code.google.com/p/sequel-pro/> -@interface SPNarrowDownCompletion : NSWindow +#ifndef SP_REFACTOR +@interface SPNarrowDownCompletion : NSWindow +#else +@interface SPNarrowDownCompletion : NSWindow <NSTableViewDelegate, NSTableViewDataSource, NSTokenFieldCellDelegate> +#endif { NSArray* suggestions; NSMutableString* mutablePrefix; @@ -70,7 +74,9 @@ NSMutableCharacterSet* textualInputCharacters; +#ifndef SP_REFACTOR NSUserDefaults *prefs; +#endif } - (id)initWithItems:(NSArray*)someSuggestions alreadyTyped:(NSString*)aUserString staticPrefix:(NSString*)aStaticPrefix diff --git a/Source/SPNarrowDownCompletion.m b/Source/SPNarrowDownCompletion.m index b1101704..04627e2d 100644 --- a/Source/SPNarrowDownCompletion.m +++ b/Source/SPNarrowDownCompletion.m @@ -92,7 +92,7 @@ [self selectRowIndexes:[NSIndexSet indexSetWithIndex:row] byExtendingSelection:NO]; } [self scrollRowToVisible:row]; - [[self delegate] insertAutocompletePlaceholder]; + [(SPNarrowDownCompletion*)[self delegate] insertAutocompletePlaceholder]; return YES; } } @@ -124,9 +124,15 @@ staticPrefix = nil; suggestions = nil; autocompletePlaceholderWasInserted = NO; +#ifndef SP_REFACTOR prefs = [NSUserDefaults standardUserDefaults]; +#endif +#ifndef SP_REFACTOR tableFont = [NSUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] dataForKey:SPCustomQueryEditorFont]]; +#else + tableFont = [NSFont userFixedPitchFontOfSize:10.0]; +#endif [self setupInterface]; syncArrowImages = [[NSArray alloc] initWithObjects: @@ -270,7 +276,7 @@ if(!dictMode) { NSUInteger maxLength = 0; for(id w in someSuggestions) { - NSUInteger len = [[w objectForKey:@"display"] length]; + NSUInteger len = [(NSString*)[w objectForKey:@"display"] length]; if(len>maxLength) maxLength = len; } NSMutableString *dummy = [NSMutableString string]; @@ -1054,12 +1060,14 @@ if(backtickMode && !triggerMode) [theView performSelector:@selector(moveRight:)]; // If it's a function or procedure append () and if a argument list can be retieved insert them as snippets +#ifndef SP_REFACTOR else if([prefs boolForKey:SPCustomQueryFunctionCompletionInsertsArguments] && ([[[filtered objectAtIndex:[theTableView selectedRow]] objectForKey:@"image"] hasPrefix:@"func"] || [[[filtered objectAtIndex:[theTableView selectedRow]] objectForKey:@"image"] hasPrefix:@"proc"]) && ![aString hasSuffix:@")"]) { NSString *functionArgumentSnippet = [NSString stringWithFormat:@"(%@)", [[SPQueryController sharedQueryController] argumentSnippetForFunction:aString]]; [theView insertAsSnippet:functionArgumentSnippet atRange:[theView selectedRange]]; if([functionArgumentSnippet length] == 2) [theView performSelector:@selector(moveLeft:)]; } +#endif } - (void)completeAndInsertSnippet @@ -1079,7 +1087,7 @@ NSString* candidateMatch = [selectedItem objectForKey:@"match"] ?: [selectedItem objectForKey:@"display"]; if([selectedItem objectForKey:@"isRef"] && ([[NSApp currentEvent] modifierFlags] & (NSShiftKeyMask)) - && [[selectedItem objectForKey:@"path"] length] && theAliasName == nil) { + && [(NSString*)[selectedItem objectForKey:@"path"] length] && theAliasName == nil) { NSString *path = [[[selectedItem objectForKey:@"path"] componentsSeparatedByString:SPUniqueSchemaDelimiter] componentsJoinedByPeriodAndBacktickQuotedAndIgnoreFirst]; // Check if path's db name is the current selected db name diff --git a/Source/SPNavigatorController.h b/Source/SPNavigatorController.h index cdac2706..20b3a796 100644 --- a/Source/SPNavigatorController.h +++ b/Source/SPNavigatorController.h @@ -26,6 +26,7 @@ @interface SPNavigatorController : NSWindowController { +#ifndef SP_REFACTOR /* ivars */ IBOutlet id outlineSchema2; IBOutlet id navigatorWindow; IBOutlet id infoTable; @@ -36,7 +37,7 @@ IBOutlet id schema12SplitView; NSUserDefaults *prefs; - +#endif NSMutableDictionary *schemaData; NSMutableDictionary *schemaDataFiltered; NSMutableDictionary *allSchemaKeys; @@ -44,7 +45,7 @@ NSMutableArray *updatingConnections; NSMutableDictionary *expandStatus2; NSMutableDictionary *cachedSortedKeys; - +#ifndef SP_REFACTOR /* ivars */ NSString *selectedKey2; NSRect selectionViewPort2; BOOL ignoreUpdate; @@ -60,11 +61,12 @@ NSImage *fieldIcon; Class NSDictionaryClass; - +#endif } + (SPNavigatorController *)sharedNavigatorController; +#ifndef SP_REFACTOR /* method decls */ - (IBAction)outlineViewAction:(id)sender; - (IBAction)reloadAllStructures:(id)sender; - (IBAction)filterTree:(id)sender; @@ -74,11 +76,13 @@ - (NSString*)tableInfoLabelForIndex:(NSInteger)index ofType:(NSInteger)type; - (void)updateNavigator:(NSNotification *)aNotification; +#endif - (NSDictionary *)dbStructureForConnection:(NSString*)connectionID; - (NSArray *)allSchemaKeysForConnection:(NSString*)connectionID; - (NSArray *)getUniqueDbIdentifierFor:(NSString*)term andConnection:(NSString*)connectionID ignoreFields:(BOOL)ignoreFields; +#ifndef SP_REFACTOR /* method decls */ - (BOOL)isUpdatingConnection:(NSString*)connectionID; - (BOOL)isUpdating; @@ -91,5 +95,6 @@ - (BOOL)schemaPathExistsForConnection:(NSString*)connectionID andDatabase:(NSString*)dbname; - (void)removeDatabase:(NSString*)db_id forConnectionID:(NSString*)connectionID; +#endif @end diff --git a/Source/SPNavigatorController.m b/Source/SPNavigatorController.m index 36dddf39..be24948b 100644 --- a/Source/SPNavigatorController.m +++ b/Source/SPNavigatorController.m @@ -23,6 +23,7 @@ // More info at <http://code.google.com/p/sequel-pro/> #import "SPNavigatorController.h" +#ifndef SP_REFACTOR /* headers */ #import "RegexKitLite.h" #import "SPNavigatorOutlineView.h" #import "ImageAndTextCell.h" @@ -34,18 +35,23 @@ #import "SPDatabaseViewController.h" #import <objc/message.h> +#endif static SPNavigatorController *sharedNavigatorController = nil; +#ifndef SP_REFACTOR /* pasteboard types */ #define DragFromNavigatorPboardType @"SPDragFromNavigatorPboardType" #define DragTableDataFromNavigatorPboardType @"SPDragTableDataFromNavigatorPboardType" +#endif @implementation SPNavigatorController +#ifndef SP_REFACTOR /* unused sort func */ static NSComparisonResult compareStrings(NSString *s1, NSString *s2, void* context) { return (NSComparisonResult)objc_msgSend(s1, @selector(localizedCompare:), s2); } +#endif /** @@ -80,13 +86,14 @@ static NSComparisonResult compareStrings(NSString *s1, NSString *s2, void* conte cachedSortedKeys = [[NSMutableDictionary alloc] init]; infoArray = [[NSMutableArray alloc] init]; updatingConnections = [[NSMutableArray alloc] init]; +#ifndef SP_REFACTOR selectedKey2 = @""; ignoreUpdate = NO; isFiltered = NO; isFiltering = NO; [syncButton setState:NSOffState]; NSDictionaryClass = [NSDictionary class]; - +#endif } return self; @@ -103,6 +110,7 @@ static NSComparisonResult compareStrings(NSString *s1, NSString *s2, void* conte if(updatingConnections) [updatingConnections release]; if(expandStatus2) [expandStatus2 release]; if(cachedSortedKeys) [cachedSortedKeys release]; +#ifndef SP_REFACTOR /* dealloc ivars */ [connectionIcon release]; [databaseIcon release]; [tableIcon release]; @@ -110,6 +118,10 @@ static NSComparisonResult compareStrings(NSString *s1, NSString *s2, void* conte [procedureIcon release]; [functionIcon release]; [fieldIcon release]; +#endif +#ifdef SP_REFACTOR /* patch */ + [super dealloc]; +#endif } /** * The following base protocol methods are implemented to ensure the singleton status of this class. @@ -125,6 +137,7 @@ static NSComparisonResult compareStrings(NSString *s1, NSString *s2, void* conte - (void)release { } +#ifndef SP_REFACTOR /** * Set the window's auto save name and initialise display */ @@ -487,6 +500,7 @@ static NSComparisonResult compareStrings(NSString *s1, NSString *s2, void* conte [[schemaData objectForKey:connectionID] removeObjectForKey:db_id]; [outlineSchema2 reloadData]; } +#endif - (NSDictionary *)dbStructureForConnection:(NSString*)connectionID { @@ -550,6 +564,7 @@ static NSComparisonResult compareStrings(NSString *s1, NSString *s2, void* conte return [NSArray arrayWithObjects:[NSNumber numberWithInt:0], @"", nil]; } +#ifndef SP_REFACTOR - (BOOL)isUpdatingConnection:(NSString*)connectionID { @@ -1253,4 +1268,5 @@ static NSComparisonResult compareStrings(NSString *s1, NSString *s2, void* conte } return @""; } +#endif @end diff --git a/Source/SPQueryController.h b/Source/SPQueryController.h index 6f1d835d..c80da762 100644 --- a/Source/SPQueryController.h +++ b/Source/SPQueryController.h @@ -53,7 +53,9 @@ NSArray *completionFunctionList; NSDictionary *functionArgumentSnippets; +#ifndef SP_REFACTOR /* ivars */ NSUserDefaults *prefs; +#endif NSDateFormatter *dateFormatter; pthread_mutex_t consoleLock; diff --git a/Source/SPQueryController.m b/Source/SPQueryController.m index 346be3d6..475b96bc 100644 --- a/Source/SPQueryController.m +++ b/Source/SPQueryController.m @@ -32,7 +32,6 @@ #define MESSAGE_TRUNCATE_CHARACTER_LENGTH 256 // Table view column identifier constants -static NSString *SPTableViewMessageColumnID = @"message"; static NSString *SPTableViewDateColumnID = @"messageDate"; static NSString *SPTableViewConnectionColumnID = @"messageConnection"; @@ -158,20 +157,41 @@ static SPQueryController *sharedQueryController = nil; */ - (void)awakeFromNib { +#ifndef SP_REFACTOR /* init ivars */ prefs = [NSUserDefaults standardUserDefaults]; +#endif [self setWindowFrameAutosaveName:@"QueryConsole"]; // Show/hide table columns - [[consoleTableView tableColumnWithIdentifier:SPTableViewDateColumnID] setHidden:![prefs boolForKey:SPConsoleShowTimestamps]]; - [[consoleTableView tableColumnWithIdentifier:SPTableViewConnectionColumnID] setHidden:![prefs boolForKey:SPConsoleShowConnections]]; - + [[consoleTableView tableColumnWithIdentifier:SPTableViewDateColumnID] setHidden: +#ifndef SP_REFACTOR + ![prefs boolForKey:SPConsoleShowTimestamps] +#else + YES +#endif + ]; + [[consoleTableView tableColumnWithIdentifier:SPTableViewConnectionColumnID] setHidden: +#ifndef SP_REFACTOR + ![prefs boolForKey:SPConsoleShowConnections] +#else + YES +#endif + ]; + +#ifndef SP_REFACTOR showSelectStatementsAreDisabled = ![prefs boolForKey:SPConsoleShowSelectsAndShows]; showHelpStatementsAreDisabled = ![prefs boolForKey:SPConsoleShowHelps]; +#else + showSelectStatementsAreDisabled = YES; + showHelpStatementsAreDisabled = YES; +#endif [self _updateFilterState]; +#ifndef SP_REFACTOR [loggingDisabledTextField setStringValue:([prefs boolForKey:SPConsoleEnableLogging]) ? @"" : NSLocalizedString(@"Query logging is currently disabled", @"query logging disabled label")]; +#endif // Setup data formatter dateFormatter = [[NSDateFormatter alloc] init]; @@ -181,11 +201,17 @@ static SPQueryController *sharedQueryController = nil; [dateFormatter setDateStyle:NSDateFormatterNoStyle]; [dateFormatter setTimeStyle:NSDateFormatterMediumStyle]; +#ifndef SP_REFACTOR // Set the process table view's vertical gridlines if required [consoleTableView setGridStyleMask:([prefs boolForKey:SPDisplayTableViewVerticalGridlines]) ? NSTableViewSolidVerticalGridLineMask : NSTableViewGridNone]; +#endif // Set the strutcture and index view's font +#ifndef SP_REFACTOR BOOL useMonospacedFont = [prefs boolForKey:SPUseMonospacedFonts]; +#else + BOOL useMonospacedFont = YES; +#endif for (NSTableColumn *column in [consoleTableView tableColumns]) { @@ -540,16 +566,20 @@ static SPQueryController *sharedQueryController = nil; // Set the global history coming from the Prefs as default if available if(![historyContainer objectForKey:[new absoluteString]]) { +#ifndef SP_REFACTOR if([prefs objectForKey:SPQueryHistory]) { NSMutableArray *arr = [[NSMutableArray alloc] init]; [arr addObjectsFromArray:[prefs objectForKey:SPQueryHistory]]; [historyContainer setObject:arr forKey:[new absoluteString]]; [arr release]; } else { +#endif NSMutableArray *arr = [[NSMutableArray alloc] init]; [historyContainer setObject:[NSMutableArray array] forKey:[new absoluteString]]; [arr release]; +#ifndef SP_REFACTOR } +#endif } // Set the doc-based content filters @@ -652,9 +682,11 @@ static SPQueryController *sharedQueryController = nil; [[doc valueForKeyPath:@"customQueryInstance"] performSelectorOnMainThread:@selector(historyItemsHaveBeenUpdated:) withObject:self waitUntilDone:NO]; +#ifndef SP_REFACTOR // User did choose to clear the global history list if(![fileURL isFileURL] && ![historyArray count]) [prefs setObject:historyArray forKey:SPQueryHistory]; +#endif } - (void)addFavorite:(NSDictionary *)favorite forFileURL:(NSURL *)fileURL @@ -665,7 +697,11 @@ static SPQueryController *sharedQueryController = nil; - (void)addHistory:(NSString *)history forFileURL:(NSURL *)fileURL { - NSInteger maxHistoryItems = [[prefs objectForKey:SPCustomQueryMaxHistoryItems] integerValue]; +#ifndef SP_REFACTOR + NSUInteger maxHistoryItems = [[prefs objectForKey:SPCustomQueryMaxHistoryItems] integerValue]; +#else + NSUInteger maxHistoryItems = 20; +#endif // Save each history item due to its document source if([historyContainer objectForKey:[fileURL absoluteString]]) { @@ -675,7 +711,7 @@ static SPQueryController *sharedQueryController = nil; [uniquifier addItemsWithTitles:[historyContainer objectForKey:[fileURL absoluteString]]]; [uniquifier insertItemWithTitle:history atIndex:0]; - while ( [uniquifier numberOfItems] > maxHistoryItems ) + while ( (NSUInteger)[uniquifier numberOfItems] > maxHistoryItems ) [uniquifier removeItemAtIndex:[uniquifier numberOfItems]-1]; [self replaceHistoryByArray:[uniquifier itemTitles] forFileURL:fileURL]; @@ -685,17 +721,19 @@ static SPQueryController *sharedQueryController = nil; // Save history items coming from each Untitled document in the global Preferences successively // regardingless of the source document. if(![fileURL isFileURL]) { +#ifndef SP_REFACTOR // Remove all duplicates by using a NSPopUpButton NSPopUpButton *uniquifier = [[NSPopUpButton alloc] initWithFrame:NSMakeRect(0,0,0,0) pullsDown:YES]; [uniquifier addItemsWithTitles:[prefs objectForKey:SPQueryHistory]]; [uniquifier insertItemWithTitle:history atIndex:0]; - while ( [uniquifier numberOfItems] > maxHistoryItems ) + while ( (NSUInteger)[uniquifier numberOfItems] > maxHistoryItems ) [uniquifier removeItemAtIndex:[uniquifier numberOfItems]-1]; [prefs setObject:[uniquifier itemTitles] forKey:SPQueryHistory]; [uniquifier release]; +#endif } } @@ -773,6 +811,7 @@ static SPQueryController *sharedQueryController = nil; [result addObject:fav]; } +#ifndef SP_REFACTOR if(includeGlobals && [prefs objectForKey:SPQueryFavorites]) { for(id fav in [prefs objectForKey:SPQueryFavorites]) { if([fav objectForKey:@"tabtrigger"] && [[fav objectForKey:@"tabtrigger"] isEqualToString:tabTrigger]) { @@ -781,6 +820,7 @@ static SPQueryController *sharedQueryController = nil; } } } +#endif return [result autorelease]; } diff --git a/Source/SPQueryFavoriteManager.h b/Source/SPQueryFavoriteManager.h index 6698ae61..0ebdc837 100644 --- a/Source/SPQueryFavoriteManager.h +++ b/Source/SPQueryFavoriteManager.h @@ -31,9 +31,15 @@ @end -@interface SPQueryFavoriteManager : NSWindowController +#ifndef SP_REFACTOR +@interface SPQueryFavoriteManager : NSWindowController +#else +@interface SPQueryFavoriteManager : NSWindowController <NSOpenSavePanelDelegate> +#endif { +#ifndef SP_REFACTOR /* ivars */ NSUserDefaults *prefs; +#endif NSURL *delegatesFileURL; SPDatabaseDocument *tableDocumentInstance; diff --git a/Source/SPQueryFavoriteManager.m b/Source/SPQueryFavoriteManager.m index 9316c5ec..7fe5797f 100644 --- a/Source/SPQueryFavoriteManager.m +++ b/Source/SPQueryFavoriteManager.m @@ -30,7 +30,9 @@ #import "SPConnectionController.h" #import "RegexKitLite.h" #import "SPTextView.h" +#ifndef SP_REFACTOR #import <BWToolkitFramework/BWAnchoredButtonBar.h> +#endif #define SP_MULTIPLE_SELECTION_PLACEHOLDER_STRING NSLocalizedString(@"[multiple selection]", @"[multiple selection]") #define SP_NO_SELECTION_PLACEHOLDER_STRING NSLocalizedString(@"[no selection]", @"[no selection]") @@ -50,7 +52,9 @@ { if ((self = [super initWithWindowNibName:@"QueryFavoriteManager"])) { +#ifndef SP_REFACTOR prefs = [NSUserDefaults standardUserDefaults]; +#endif favorites = [[NSMutableArray alloc] init]; @@ -95,12 +99,14 @@ @"", @"query", nil]]; +#ifndef SP_REFACTOR // Build data source for global queryFavorites (as mutable copy! otherwise each // change will be stored in the prefs at once) if([prefs objectForKey:SPQueryFavorites]) { for(id fav in [prefs objectForKey:SPQueryFavorites]) [favorites addObject:[[fav mutableCopy] autorelease]]; } +#endif [favorites addObject:[NSDictionary dictionaryWithObjectsAndKeys: [[[delegatesFileURL absoluteString] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding] lastPathComponent], @"name", @@ -131,8 +137,10 @@ // Set Remove button state [removeButton setEnabled:([favoritesTableView numberOfSelectedRows] > 0)]; +#ifndef SP_REFACTOR /* split view delegate */ // Set the button bar delegate [splitViewButtonBar setSplitViewDelegate:self]; +#endif } #pragma mark - @@ -297,7 +305,9 @@ [panel setCanSelectHiddenExtension:YES]; [panel setCanCreateDirectories:YES]; +#ifndef SP_REFACTOR [panel setAccessoryView:[SPEncodingPopupAccessory encodingAccessory:[prefs integerForKey:SPLastSQLFileEncoding] includeDefaultEntry:NO encodingPopUp:&encodingPopUp]]; +#endif [encodingPopUp setEnabled:YES]; @@ -379,8 +389,10 @@ [[SPQueryController sharedQueryController] replaceFavoritesByArray: [self queryFavoritesForFileURL:delegatesFileURL] forFileURL:delegatesFileURL]; +#ifndef SP_REFACTOR // Update global preferences' list [prefs setObject:[self queryFavoritesForFileURL:nil] forKey:SPQueryFavorites]; +#endif // Inform all opened documents to update the query favorites list for(id doc in [[NSApp delegate] orderedDocuments]) @@ -756,7 +768,7 @@ mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&convError] retain]; if(!spf || readError != nil || [convError length] || !(format == NSPropertyListXMLFormat_v1_0 || format == NSPropertyListBinaryFormat_v1_0)) { - NSAlert *alert = [NSAlert alertWithMessageText:[NSString stringWithFormat:NSLocalizedString(@"Error while reading data file", @"error while reading data file")] + NSAlert *alert = [NSAlert alertWithMessageText:[NSString stringWithString:NSLocalizedString(@"Error while reading data file", @"error while reading data file")] defaultButton:NSLocalizedString(@"OK", @"OK button") alternateButton:nil otherButton:nil @@ -784,7 +796,7 @@ [favoritesTableView reloadData]; [spf release]; } else { - NSAlert *alert = [NSAlert alertWithMessageText:[NSString stringWithFormat:NSLocalizedString(@"Error while reading data file", @"error while reading data file")] + NSAlert *alert = [NSAlert alertWithMessageText:[NSString stringWithString:NSLocalizedString(@"Error while reading data file", @"error while reading data file")] defaultButton:NSLocalizedString(@"OK", @"OK button") alternateButton:nil otherButton:nil @@ -810,8 +822,10 @@ if (returnCode == NSOKButton) { NSError *error = nil; +#ifndef SP_REFACTOR [prefs setInteger:[[encodingPopUp selectedItem] tag] forKey:SPLastSQLFileEncoding]; [prefs synchronize]; +#endif [[favoriteQueryTextView string] writeToFile:[panel filename] atomically:YES encoding:[[encodingPopUp selectedItem] tag] error:&error]; @@ -846,7 +860,7 @@ errorDescription:&err]; if(err != nil) { - NSAlert *alert = [NSAlert alertWithMessageText:[NSString stringWithFormat:NSLocalizedString(@"Error while converting query favorite data", @"error while converting query favorite data")] + NSAlert *alert = [NSAlert alertWithMessageText:[NSString stringWithString:NSLocalizedString(@"Error while converting query favorite data", @"error while converting query favorite data")] defaultButton:NSLocalizedString(@"OK", @"OK button") alternateButton:nil otherButton:nil diff --git a/Source/SPSQLParser.m b/Source/SPSQLParser.m index 6485fc85..6da67396 100644 --- a/Source/SPSQLParser.m +++ b/Source/SPSQLParser.m @@ -280,12 +280,14 @@ TO_BUFFER_STATE to_scan_string (const char *); } } - if ([carriageReturnPositions count]) { + // If any CRs were found, iterate over them backwards, converting to LFs by replacing or subtracting as appropriate + NSUInteger carriageReturnCount = [carriageReturnPositions count]; + if (carriageReturnCount) { NSMutableString *normalisedString = [NSMutableString stringWithString:queryString]; BOOL isCRLF; NSUInteger CRLocation; - for (NSNumber *position in carriageReturnPositions) { - CRLocation = [position unsignedIntegerValue]; + while ( carriageReturnCount-- ) { + CRLocation = [[carriageReturnPositions objectAtIndex:carriageReturnCount] unsignedIntegerValue]; // Check whether it's a CRLF or just a CR isCRLF = NO; @@ -778,7 +780,7 @@ TO_BUFFER_STATE to_scan_string (const char *); if (delimiter) [delimiter release]; delimiter = [[NSString alloc] initWithString:[delimiterCommandParts objectAtIndex:2]]; delimiterLengthMinusOne = [delimiter length] - 1; - parsedToPosition = currentStringIndex + [[delimiterCommandParts objectAtIndex:1] length]; + parsedToPosition = currentStringIndex + [(NSString*)[delimiterCommandParts objectAtIndex:1] length]; // Drop back to standard non-delimiter mode if the delimiter has ended if ([delimiter isEqualToString:[NSString stringWithFormat:@"%C", character]]) { diff --git a/Source/SPServerSupport.m b/Source/SPServerSupport.m index 1aebc0d4..15c3555f 100644 --- a/Source/SPServerSupport.m +++ b/Source/SPServerSupport.m @@ -214,7 +214,7 @@ NSString *varName = [NSString stringWithUTF8String:ivar_getName(vars[j])]; if ([varName hasPrefix:@"supports"]) { - [description appendFormat:@"\t%@ = %@\n", varName, ((BOOL)object_getIvar(self, vars[j])) ? @"YES" : @"NO"]; + [description appendFormat:@"\t%@ = %@\n", varName, (object_getIvar(self, vars[j])) ? @"YES" : @"NO"]; } } diff --git a/Source/SPStringAdditions.h b/Source/SPStringAdditions.h index 72967780..a45fbe0b 100644 --- a/Source/SPStringAdditions.h +++ b/Source/SPStringAdditions.h @@ -77,7 +77,9 @@ static inline id NSMutableAttributedStringAttributeAtIndex (NSMutableAttributedS - (CGFloat)levenshteinDistanceWithWord:(NSString *)stringB; +#ifndef SP_REFACTOR /* run self as bash commands */ - (NSString *)runBashCommandWithEnvironment:(NSDictionary*)shellEnvironment atCurrentDirectoryPath:(NSString*)path callerInstance:(id)caller contextInfo:(NSDictionary*)contextInfo error:(NSError**)theError; - (NSString *)runBashCommandWithEnvironment:(NSDictionary*)shellEnvironment atCurrentDirectoryPath:(NSString*)path error:(NSError**)theError; +#endif @end diff --git a/Source/SPStringAdditions.m b/Source/SPStringAdditions.m index 79546f9a..31dbbfc6 100644 --- a/Source/SPStringAdditions.m +++ b/Source/SPStringAdditions.m @@ -452,6 +452,7 @@ } +#ifndef SP_REFACTOR /* run self as bash commands */ /** * Run self as BASH command(s) and return the result. * This task can be interrupted by pressing ⌘. @@ -739,6 +740,7 @@ { return [self runBashCommandWithEnvironment:shellEnvironment atCurrentDirectoryPath:path callerInstance:nil contextInfo:nil error:theError]; } +#endif /** * Returns the minimum of a, b and c. diff --git a/Source/SPTableContent.h b/Source/SPTableContent.h index 6c0f2ab7..2b125acd 100644 --- a/Source/SPTableContent.h +++ b/Source/SPTableContent.h @@ -29,11 +29,17 @@ @class SPDatabaseDocument, SPCopyTable, SPTextAndLinkCell, SPHistoryController, SPTableInfo, SPDataStorage, SPTextView, SPFieldEditorController; -@interface SPTableContent : NSObject +@class SPTableData, SPDatabaseDocument, SPTablesList; + +#ifndef SP_REFACTOR +@interface SPTableContent : NSObject +#else +@interface SPTableContent : NSObject <NSTableViewDelegate, NSTableViewDataSource> +#endif { IBOutlet SPDatabaseDocument *tableDocumentInstance; IBOutlet id tablesListInstance; - IBOutlet id tableDataInstance; + IBOutlet SPTableData* tableDataInstance; IBOutlet id tableSourceInstance; IBOutlet SPTableInfo *tableInfoInstance; @@ -241,4 +247,10 @@ - (void)updateFilterTableClause:(id)currentValue; - (NSString*)escapeFilterTableDefaultOperator:(NSString*)anOperator; +#ifdef SP_REFACTOR /* glue */ +- (void)setDatabaseDocument:(SPDatabaseDocument*)doc; +- (void)setTableListInstance:(SPTablesList*)list; +- (void)setConnection:(MCPConnection *)theConnection; +#endif + @end diff --git a/Source/SPTableContent.m b/Source/SPTableContent.m index 9cf2e72f..c9b8c145 100644 --- a/Source/SPTableContent.m +++ b/Source/SPTableContent.m @@ -49,6 +49,7 @@ #import "SPDatabaseViewController.h" #import "SPAppController.h" #import "SPBundleHTMLOutputController.h" +#import "SPCustomQuery.h" @interface SPTableContent (Private) - (BOOL)cancelRowEditing; @@ -157,8 +158,10 @@ if (_mainNibLoaded) return; _mainNibLoaded = YES; +#ifndef SP_REFACTOR /* ui manipulation */ // Set the table content view's vertical gridlines if required [tableContentView setGridStyleMask:([prefs boolForKey:SPDisplayTableViewVerticalGridlines]) ? NSTableViewSolidVerticalGridLineMask : NSTableViewGridNone]; +#endif // Load the pagination view, keeping references to the top-level objects for later release NSArray *paginationViewTopLevelObjects = nil; @@ -186,7 +189,11 @@ [filterTableDistinctMenuItem setState:(filterTableDistinct) ? NSOnState : NSOffState]; [filterTableNegateCheckbox setState:(filterTableNegate) ? NSOnState : NSOffState]; [filterTableLiveSearchCheckbox setState:NSOffState]; +#ifndef SP_REFACTOR /* patch */ filterTableDefaultOperator = [[self escapeFilterTableDefaultOperator:[prefs objectForKey:SPFilterTableDefaultOperator]] retain]; +#else + filterTableDefaultOperator = [[self escapeFilterTableDefaultOperator:nil] retain]; +#endif // Add observers for document task activity [[NSNotificationCenter defaultCenter] addObserver:self @@ -230,7 +237,11 @@ } // Post a notification that a query will be performed +#ifndef SP_REFACTOR [[NSNotificationCenter defaultCenter] postNotificationOnMainThreadWithName:@"SMySQLQueryWillBePerformed" object:tableDocumentInstance]; +#else + [[NSNotificationCenter defaultCenter] sequelProPostNotificationOnMainThreadWithName:@"SMySQLQueryWillBePerformed" object:tableDocumentInstance]; +#endif // Set up the table details for the new table, and trigger an interface update NSDictionary *tableDetails = [NSDictionary dictionaryWithObjectsAndKeys: @@ -252,7 +263,7 @@ // Scroll the viewport to the saved location selectionViewportToRestore.size = [tableContentView visibleRect].size; - [[tableContentView onMainThread] scrollRectToVisible:selectionViewportToRestore]; + [(SPCopyTable*)[tableContentView onMainThread] scrollRectToVisible:selectionViewportToRestore]; } // Restore selection indexes if appropriate @@ -270,7 +281,11 @@ [[tableContentView onMainThread] setNeedsDisplay:YES]; // Post the notification that the query is finished +#ifndef SP_REFACTOR [[NSNotificationCenter defaultCenter] postNotificationOnMainThreadWithName:@"SMySQLQueryHasBeenPerformed" object:tableDocumentInstance]; +#else + [[NSNotificationCenter defaultCenter] sequelProPostNotificationOnMainThreadWithName:@"SMySQLQueryHasBeenPerformed" object:tableDocumentInstance]; +#endif // Clear any details to restore now that they have been restored [self clearDetailsToRestore]; @@ -285,11 +300,19 @@ { NSString *newTableName; NSInteger i; - NSNumber *colWidth, *sortColumnNumberToRestore = nil; + NSNumber +#ifndef SP_REFACTOR + *colWidth, +#endif + *sortColumnNumberToRestore = nil; NSArray *columnNames; NSDictionary *columnDefinition; NSTableColumn *theCol, *filterCol; - BOOL enableInteraction = ![[tableDocumentInstance selectedToolbarItemIdentifier] isEqualToString:SPMainToolbarTableContent] || ![tableDocumentInstance isWorking]; + BOOL enableInteraction = +#ifndef SP_REFACTOR /* checking toolbar state */ + ![[tableDocumentInstance selectedToolbarItemIdentifier] isEqualToString:SPMainToolbarTableContent] || +#endif + ![tableDocumentInstance isWorking]; if (!tableDetails) { @@ -443,7 +466,11 @@ } NSString *nullValue = [prefs objectForKey:SPNullValue]; +#ifndef SP_REFACTOR /* get font from prefs */ NSFont *tableFont = [NSUnarchiver unarchiveObjectWithData:[prefs dataForKey:SPGlobalResultTableFont]]; +#else + NSFont *tableFont = [NSFont systemFontOfSize:[NSFont smallSystemFontSize]]; +#endif [tableContentView setRowHeight:2.0f+NSSizeToCGSize([[NSString stringWithString:@"{ǞṶḹÜ∑zgyf"] sizeWithAttributes:[NSDictionary dictionaryWithObject:tableFont forKey:NSFontAttributeName]]).height]; // Add the new columns to the table and filterTable @@ -530,11 +557,13 @@ // Assign the data cell [theCol setDataCell:dataCell]; +#ifndef SP_REFACTOR /* prefs access */ // Set the width of this column to saved value if exists colWidth = [[[[prefs objectForKey:SPTableColumnWidths] objectForKey:[NSString stringWithFormat:@"%@@%@", [tableDocumentInstance database], [tableDocumentInstance host]]] objectForKey:[tablesListInstance tableName]] objectForKey:[columnDefinition objectForKey:@"name"]]; if ( colWidth ) { [theCol setWidth:[colWidth floatValue]]; } +#endif // Set the column to be reselected for sorting if appropriate if (sortColumnToRestore && [sortColumnToRestore isEqualToString:[columnDefinition objectForKey:@"name"]]) @@ -610,7 +639,8 @@ } // Restore page number if limiting is set - if ([prefs boolForKey:SPLimitResults]) contentPage = pageToRestore; + if ([prefs boolForKey:SPLimitResults]) + contentPage = pageToRestore; // Restore first responder [[tableDocumentInstance parentWindow] makeFirstResponder:currentFirstResponder]; @@ -667,7 +697,11 @@ [countText setStringValue:NSLocalizedString(@"Loading table data...", @"Loading table data string")]; // Notify any listeners that a query has started +#ifndef SP_REFACTOR [[NSNotificationCenter defaultCenter] postNotificationOnMainThreadWithName:@"SMySQLQueryWillBePerformed" object:tableDocumentInstance]; +#else + [[NSNotificationCenter defaultCenter] sequelProPostNotificationOnMainThreadWithName:@"SMySQLQueryWillBePerformed" object:tableDocumentInstance]; +#endif // Start construction of the query string queryString = [NSMutableString stringWithFormat:@"SELECT %@%@ FROM %@", (activeFilter == 1 && [self tableFilterString] && filterTableDistinct) ? @"DISTINCT " : @"", [self fieldListForQuery], [selectedTable backtickQuotedString]]; @@ -689,13 +723,13 @@ } // Check to see if a limit needs to be applied - if ([prefs boolForKey:SPLimitResults]) { - + if ([prefs boolForKey:SPLimitResults]) + { // Ensure the page supplied is within the appropriate limits if (contentPage <= 0) contentPage = 1; else if (contentPage > 1 && (NSInteger)(contentPage - 1) * [prefs integerForKey:SPLimitResultsValue] >= maxNumRows) - contentPage = ceilf((CGFloat)maxNumRows / [prefs floatForKey:SPLimitResultsValue]); + contentPage = ceil((CGFloat)maxNumRows / [prefs floatForKey:SPLimitResultsValue]); // If the result set is from a late page, take a copy of the string to allow resetting limit // if no results are found @@ -756,9 +790,7 @@ // End cancellation ability [tableDocumentInstance disableTaskCancellation]; - if ([prefs boolForKey:SPLimitResults] - && (contentPage > 1 - || (NSInteger)tableRowsCount == [prefs integerForKey:SPLimitResultsValue])) + if ([prefs boolForKey:SPLimitResults] && (contentPage > 1 || (NSInteger)tableRowsCount == [prefs integerForKey:SPLimitResultsValue])) { isLimited = YES; } else { @@ -780,7 +812,11 @@ // Notify listenters that the query has finished +#ifndef SP_REFACTOR [[NSNotificationCenter defaultCenter] postNotificationOnMainThreadWithName:@"SMySQLQueryHasBeenPerformed" object:tableDocumentInstance]; +#else + [[NSNotificationCenter defaultCenter] sequelProPostNotificationOnMainThreadWithName:@"SMySQLQueryHasBeenPerformed" object:tableDocumentInstance]; +#endif if ([mySQLConnection queryErrored] && ![mySQLConnection queryCancelled]) { if(activeFilter == 0) { @@ -822,8 +858,14 @@ NSAutoreleasePool *dataLoadingPool; NSProgressIndicator *dataLoadingIndicator = [tableDocumentInstance valueForKey:@"queryProgressBar"]; - BOOL prefsLoadBlobsAsNeeded = [prefs boolForKey:SPLoadBlobsAsNeeded]; - + BOOL prefsLoadBlobsAsNeeded = +#ifndef SP_REFACTOR + [prefs boolForKey:SPLoadBlobsAsNeeded] +#else + NO +#endif + ; + // Build up an array of which columns are blobs for faster iteration for ( i = 0; i < dataColumnsCount ; i++ ) { columnBlobStatuses[i] = [tableDataInstance columnIsBlobOrText:[NSArrayObjectAtIndex(dataColumns, i) objectForKey:@"name"]]; @@ -1461,19 +1503,19 @@ paginationViewFrame.size.height = paginationViewHeight; [paginationButton setState:NSOnState]; [paginationButton setImage:[NSImage imageNamed:@"button_action"]]; - [[tableDocumentInstance parentWindow] makeFirstResponder:paginationPageField]; + [[paginationPageField window] makeFirstResponder:paginationPageField]; } else { if (paginationViewFrame.size.height == 0) return; paginationViewFrame.size.height = 0; [paginationButton setState:NSOffState]; [paginationButton setImage:[NSImage imageNamed:@"button_pagination"]]; - if ([[tableDocumentInstance parentWindow] firstResponder] == paginationPageField - || ([[[tableDocumentInstance parentWindow] firstResponder] respondsToSelector:@selector(superview)] - && [(id)[[tableDocumentInstance parentWindow] firstResponder] superview] - && [[(id)[[tableDocumentInstance parentWindow] firstResponder] superview] respondsToSelector:@selector(superview)] - && [[(id)[[tableDocumentInstance parentWindow] firstResponder] superview] superview] == paginationPageField)) + if ([[paginationPageField window] firstResponder] == paginationPageField + || ([[[paginationPageField window] firstResponder] respondsToSelector:@selector(superview)] + && [(id)[[paginationPageField window] firstResponder] superview] + && [[(id)[[paginationPageField window] firstResponder] superview] respondsToSelector:@selector(superview)] + && [[(id)[[paginationPageField window] firstResponder] superview] superview] == paginationPageField)) { - [[tableDocumentInstance parentWindow] makeFirstResponder:nil]; + [[paginationPageField window] makeFirstResponder:nil]; } } @@ -1667,6 +1709,7 @@ //copy row tempRow = [tableValues rowContentsAtIndex:[tableContentView selectedRow]]; +#ifndef SP_REFACTOR //if we don't show blobs, read data for this duplicate column from db if ([prefs boolForKey:SPLoadBlobsAsNeeded]) { // Abort if there are no indices on this table - argumentForRow will display an error. @@ -1677,6 +1720,7 @@ queryResult = [mySQLConnection queryString:[NSString stringWithFormat:@"SELECT * FROM %@ WHERE %@", [selectedTable backtickQuotedString], [self argumentForRow:[tableContentView selectedRow]]]]; dbDataRow = [queryResult fetchRowAsArray]; } +#endif //set autoincrement fields to NULL queryResult = [mySQLConnection queryString:[NSString stringWithFormat:@"SHOW COLUMNS FROM %@", [selectedTable backtickQuotedString]]]; @@ -1686,7 +1730,13 @@ row = [queryResult fetchRowAsDictionary]; if ( [[row objectForKey:@"Extra"] isEqualToString:@"auto_increment"] ) { [tempRow replaceObjectAtIndex:i withObject:[NSNull null]]; - } else if ( [tableDataInstance columnIsBlobOrText:[row objectForKey:@"Field"]] && [prefs boolForKey:SPLoadBlobsAsNeeded] && dbDataRow) { + } else if ( [tableDataInstance columnIsBlobOrText:[row objectForKey:@"Field"]] && +#ifndef SP_REFACTOR + [prefs boolForKey:SPLoadBlobsAsNeeded] +#else + NO +#endif + && dbDataRow) { [tempRow replaceObjectAtIndex:i withObject:[dbDataRow objectAtIndex:i]]; } } @@ -1748,7 +1798,9 @@ // If table has PRIMARY KEY ask for resetting the auto increment after deletion if given if(![[tableDataInstance statusValueForKey:@"Auto_increment"] isKindOfClass:[NSNull class]]) { [alert setShowsSuppressionButton:YES]; +#ifndef SP_REFACTOR [[alert suppressionButton] setState:([prefs boolForKey:SPResetAutoIncrementAfterDeletionOfAllRows]) ? NSOnState : NSOffState]; +#endif [[[alert suppressionButton] cell] setControlSize:NSSmallControlSize]; [[[alert suppressionButton] cell] setFont:[NSFont systemFontOfSize:11]]; [[alert suppressionButton] setTitle:NSLocalizedString(@"Reset AUTO_INCREMENT after deletion?", @"reset auto_increment after deletion of all rows message")]; @@ -1778,13 +1830,18 @@ NSString *wherePart; NSInteger i, errors; BOOL consoleUpdateStatus; - BOOL reloadAfterRemovingRow = [prefs boolForKey:SPReloadAfterRemovingRow]; - + BOOL reloadAfterRemovingRow = +#ifndef SP_REFACTOR + [prefs boolForKey:SPReloadAfterRemovingRow] +#else + NO +#endif + ; // Order out current sheet to suppress overlapping of sheets [[alert window] orderOut:nil]; - if ([contextInfo isEqualToString:@"removeallrows"]) { - if (returnCode == NSAlertDefaultReturn) { + if ( [(NSString*)contextInfo isEqualToString:@"removeallrows"] ) { + if ( returnCode == NSAlertDefaultReturn ) { // Check if the user is currently editing a row, and revert to ensure a somewhat // consistent state if deletion fails. @@ -1800,9 +1857,13 @@ // Reset auto increment if suppression button was ticked if([[alert suppressionButton] state] == NSOnState) { [tableSourceInstance setAutoIncrementTo:@"1"]; +#ifndef SP_REFACTOR [prefs setBool:YES forKey:SPResetAutoIncrementAfterDeletionOfAllRows]; +#endif } else { +#ifndef SP_REFACTOR [prefs setBool:NO forKey:SPResetAutoIncrementAfterDeletionOfAllRows]; +#endif } [self reloadTable:self]; @@ -1816,9 +1877,8 @@ afterDelay:0.3]; } } - } - else if ([contextInfo isEqualToString:@"removerow"]) { - if (returnCode == NSAlertDefaultReturn) { + } else if ( [(NSString*)contextInfo isEqualToString:@"removerow"] ) { + if ( returnCode == NSAlertDefaultReturn ) { [selectedRows addIndexes:[tableContentView selectedRowIndexes]]; //check if the user is currently editing a row @@ -2343,6 +2403,7 @@ } } +#ifndef SP_REFACTOR /* content filters */ // Load global user-defined content filters if([prefs objectForKey:SPContentFilters] && [contentFilters objectForKey:compareType] @@ -2350,6 +2411,7 @@ { [[contentFilters objectForKey:compareType] addObjectsFromArray:[[prefs objectForKey:SPContentFilters] objectForKey:compareType]]; } +#endif // Load doc-based user-defined content filters if([[SPQueryController sharedQueryController] contentFilterForFileURL:[tableDocumentInstance fileURL]]) { @@ -2417,7 +2479,9 @@ [compareField selectItemWithTag:lastSelectedContentFilterIndex]; // init query favorites controller +#ifndef SP_REFACTOR [prefs synchronize]; +#endif if(contentFilterManager) [contentFilterManager release]; contentFilterManager = [[SPContentFilterManager alloc] initWithDelegate:self forFilterType:compareType]; @@ -2516,7 +2580,11 @@ [rowValuesToSave addObject:fieldValue]; } +#ifndef SP_REFACTOR [[NSNotificationCenter defaultCenter] postNotificationOnMainThreadWithName:@"SMySQLQueryWillBePerformed" object:tableDocumentInstance]; +#else + [[NSNotificationCenter defaultCenter] sequelProPostNotificationOnMainThreadWithName:@"SMySQLQueryWillBePerformed" object:tableDocumentInstance]; +#endif NSMutableString *queryString; // Use INSERT syntax when creating new rows @@ -2542,16 +2610,22 @@ // Run the query [mySQLConnection queryString:queryString]; +#ifndef SP_REFACTOR [[NSNotificationCenter defaultCenter] postNotificationOnMainThreadWithName:@"SMySQLQueryHasBeenPerformed" object:tableDocumentInstance]; +#else + [[NSNotificationCenter defaultCenter] sequelProPostNotificationOnMainThreadWithName:@"SMySQLQueryHasBeenPerformed" object:tableDocumentInstance]; +#endif // If no rows have been changed, show error if appropriate. if ( ![mySQLConnection affectedRows] && ![mySQLConnection queryErrored] ) { +#ifndef SP_REFACTOR if ( [prefs boolForKey:SPShowNoAffectedRowsError] ) { SPBeginAlertSheet(NSLocalizedString(@"Warning", @"warning"), NSLocalizedString(@"OK", @"OK button"), nil, nil, [tableDocumentInstance parentWindow], self, nil, nil, NSLocalizedString(@"The row was not written to the MySQL database. You probably haven't changed anything.\nReload the table to be sure that the row exists and use a primary key for your table.\n(This error can be turned off in the preferences.)", @"message of panel when no rows have been affected after writing to the db")); } else { NSBeep(); } +#endif // If creating a new row, remove the row; otherwise revert the row contents if (isEditingNewRow) { @@ -2574,30 +2648,35 @@ // New row created successfully if ( isEditingNewRow ) { +#ifndef SP_REFACTOR if ( [prefs boolForKey:SPReloadAfterAddingRow] ) { [[tableDocumentInstance parentWindow] endEditingFor:nil]; previousTableRowsCount = tableRowsCount; [self loadTableValues]; } else { - +#endif // Set the insertId for fields with auto_increment for ( i = 0; i < [dataColumns count] ; i++ ) { if ([[NSArrayObjectAtIndex(dataColumns, i) objectForKey:@"autoincrement"] integerValue]) { [tableValues replaceObjectInRow:currentlyEditingRow column:i withObject:[[NSNumber numberWithUnsignedLongLong:[mySQLConnection insertId]] description]]; } } +#ifndef SP_REFACTOR } +#endif isEditingNewRow = NO; // Existing row edited successfully } else { // Reload table if set to - otherwise no action required. +#ifndef SP_REFACTOR if ( [prefs boolForKey:SPReloadAfterEditingRow] ) { [[tableDocumentInstance parentWindow] endEditingFor:nil]; previousTableRowsCount = tableRowsCount; [self loadTableValues]; } +#endif } currentlyEditingRow = -1; @@ -2622,7 +2701,7 @@ // Edit row selected - reselect the row, and start editing. if ( returnCode == NSAlertDefaultReturn ) { [tableContentView selectRowIndexes:[NSIndexSet indexSetWithIndex:currentlyEditingRow] byExtendingSelection:NO]; - [tableContentView performSelector:@selector(keyDown:) withObject:[NSEvent keyEventWithType:NSKeyDown location:NSMakePoint(0,0) modifierFlags:0 timestamp:0 windowNumber:[[tableDocumentInstance parentWindow] windowNumber] context:[NSGraphicsContext currentContext] characters:nil charactersIgnoringModifiers:nil isARepeat:NO keyCode:0x24] afterDelay:0.0]; + [tableContentView performSelector:@selector(keyDown:) withObject:[NSEvent keyEventWithType:NSKeyDown location:NSMakePoint(0,0) modifierFlags:0 timestamp:0 windowNumber:[[tableContentView window] windowNumber] context:[NSGraphicsContext currentContext] characters:nil charactersIgnoringModifiers:nil isARepeat:NO keyCode:0x24] afterDelay:0.0]; // Discard changes selected } else { @@ -2647,9 +2726,9 @@ // Save any edits which have been made but not saved to the table yet; // but not for any NSSearchFields which could cause a crash for undo, redo. - if([[[tableDocumentInstance parentWindow] firstResponder] respondsToSelector:@selector(delegate)] - && ![[(id)[[tableDocumentInstance parentWindow] firstResponder] delegate] isKindOfClass:[NSSearchField class]]) - [[tableDocumentInstance parentWindow] endEditingFor:nil]; + if([[[tableContentView window] firstResponder] respondsToSelector:@selector(delegate)] + && ![[(id)[[tableContentView window] firstResponder] delegate] isKindOfClass:[NSSearchField class]]) + [[tableContentView window] endEditingFor:nil]; // If no rows are currently being edited, or a save is in progress, return success at once. if (!isEditingRow || isSavingRow) return YES; @@ -2674,7 +2753,7 @@ - (BOOL)cancelRowEditing { - [[tableDocumentInstance parentWindow] makeFirstResponder:tableContentView]; + [[tableContentView window] makeFirstResponder:tableContentView]; if (!isEditingRow) return NO; if (isEditingNewRow) { @@ -2688,7 +2767,7 @@ isEditingRow = NO; currentlyEditingRow = -1; [tableContentView reloadData]; - [[tableDocumentInstance parentWindow] makeFirstResponder:tableContentView]; + [[tableContentView window] makeFirstResponder:tableContentView]; return YES; } @@ -2747,6 +2826,7 @@ // When the option to not show blob or text options is set, we have a problem - we don't have // the right values to use in the WHERE statement. Throw an error if this is the case. +#ifndef SP_REFACTOR if ( [prefs boolForKey:SPLoadBlobsAsNeeded] && [self tableContainsBlobOrTextColumns] ) { SPBeginAlertSheet(NSLocalizedString(@"Error", @"error"), NSLocalizedString(@"OK", @"OK button"), nil, nil, [tableDocumentInstance parentWindow], self, nil, nil, NSLocalizedString(@"You can't hide blob and text fields when working with tables without index.", @"message of panel when trying to edit tables without index and with hidden blob/text fields")); @@ -2754,6 +2834,7 @@ [tableContentView deselectAll:self]; return @""; } +#endif } // Walk through the keys list constructing the argument list @@ -2826,6 +2907,7 @@ */ - (NSString *)fieldListForQuery { +#ifndef SP_REFACTOR if (([prefs boolForKey:SPLoadBlobsAsNeeded]) && [dataColumns count]) { NSMutableArray *fields = [NSMutableArray arrayWithCapacity:[dataColumns count]]; @@ -2844,11 +2926,9 @@ return (tableHasBlobs) ? [fields componentsJoinedByString:@", "] : @"*"; } - else { - +#endif return @"*"; - } } /** @@ -2953,12 +3033,18 @@ if(filterTableDefaultOperator) [filterTableDefaultOperator release]; NSString *newOperator = [filterTableSetDefaultOperatorValue stringValue]; filterTableDefaultOperator = [[self escapeFilterTableDefaultOperator:newOperator] retain]; +#ifndef SP_REFACTOR [prefs setObject:newOperator forKey:SPFilterTableDefaultOperator]; +#endif if(![newOperator isMatchedByRegex:@"(?i)like\\s+['\"]%@%['\"]\\s*"]) { +#ifndef SP_REFACTOR if(![prefs objectForKey:SPFilterTableDefaultOperatorLastItems]) [prefs setObject:[NSMutableArray array] forKey:SPFilterTableDefaultOperatorLastItems]; +#endif NSMutableArray *lastItems = [NSMutableArray array]; +#ifndef SP_REFACTOR [lastItems setArray:[prefs objectForKey:SPFilterTableDefaultOperatorLastItems]]; +#endif if([lastItems containsObject:newOperator]) [lastItems removeObject:newOperator]; if([lastItems count] > 0) @@ -2969,7 +3055,9 @@ if([lastItems count] > 15) while([lastItems count] > 15) [filterTableSetDefaultOperatorValue removeItemAtIndex:[lastItems count]-1]; +#ifndef SP_REFACTOR [prefs setObject:lastItems forKey:SPFilterTableDefaultOperatorLastItems]; +#endif } [self updateFilterTableClause:nil]; } @@ -3010,8 +3098,7 @@ } if ([data isKindOfClass:[NSString class]] - && [data isEqualToString:[prefs objectForKey:SPNullValue]] - && [[NSArrayObjectAtIndex(dataColumns, column) objectForKey:@"null"] boolValue]) + && [data isEqualToString:[prefs objectForKey:SPNullValue]] && [[NSArrayObjectAtIndex(dataColumns, column) objectForKey:@"null"] boolValue]) { data = [[NSNull null] retain]; } @@ -3032,7 +3119,7 @@ fieldEditor = nil; } - [[tableDocumentInstance parentWindow] makeFirstResponder:tableContentView]; + [[tableContentView window] makeFirstResponder:tableContentView]; if(row > -1 && editedColumn > -1) [tableContentView editColumn:editedColumn row:row withEvent:nil select:YES]; @@ -3075,13 +3162,15 @@ [filterTableWhereClause setContinuousSpellCheckingEnabled:NO]; [filterTableWhereClause setAutoindent:NO]; [filterTableWhereClause setAutoindentIgnoresEnter:NO]; +#ifndef SP_REFACTOR [filterTableWhereClause setAutopair:[prefs boolForKey:SPCustomQueryAutoPairCharacters]]; [filterTableWhereClause setAutohelp:NO]; [filterTableWhereClause setAutouppercaseKeywords:[prefs boolForKey:SPCustomQueryAutoUppercaseKeywords]]; +#endif [filterTableWhereClause setCompletionWasReinvokedAutomatically:NO]; [filterTableWhereClause insertText:@""]; [filterTableWhereClause didChangeText]; - [[tableDocumentInstance parentWindow] makeFirstResponder:filterTableView]; + [[filterTableView window] makeFirstResponder:filterTableView]; } /** @@ -3121,6 +3210,7 @@ [filterTableWindow makeFirstResponder:filterTableView]; // Load history +#ifndef SP_REFACTOR if([prefs objectForKey:SPFilterTableDefaultOperatorLastItems]) { NSMutableArray *lastItems = [NSMutableArray array]; NSString *defaultItem = @"LIKE '%@%'"; @@ -3133,6 +3223,7 @@ } [filterTableSetDefaultOperatorValue setStringValue:[prefs objectForKey:SPFilterTableDefaultOperator]]; +#endif [NSApp beginSheet:filterTableSetDefaultOperatorSheet modalForWindow:filterTableWindow @@ -3395,7 +3486,9 @@ [tableDataInstance setStatusValue:[NSString stringWithFormat:@"%ld", (long)maxNumRows] forKey:@"Rows"]; [tableDataInstance setStatusValue:@"y" forKey:@"RowsCountAccurate"]; [[tableInfoInstance onMainThread] tableChanged:nil]; +#ifndef SP_REFACTOR [[[tableDocumentInstance valueForKey:@"extendedTableInfoInstance"] onMainThread] loadTable:selectedTable]; +#endif // Otherwise, if the table status value is accurate, use it } else if ([[tableDataInstance statusValueForKey:@"RowsCountAccurate"] boolValue]) { @@ -3404,10 +3497,23 @@ checkStatusCount = YES; // Choose whether to display an estimate, or to fetch the correct row count, based on prefs - } else if ([[prefs objectForKey:SPTableRowCountQueryLevel] integerValue] == SPRowCountFetchAlways + } else if ( +#ifndef SP_REFACTOR + [[prefs objectForKey:SPTableRowCountQueryLevel] integerValue] == SPRowCountFetchAlways || ([[prefs objectForKey:SPTableRowCountQueryLevel] integerValue] == SPRowCountFetchIfCheap - && [tableDataInstance statusValueForKey:@"Data_length"] - && [[prefs objectForKey:SPTableRowCountCheapSizeBoundary] integerValue] > [[tableDataInstance statusValueForKey:@"Data_length"] integerValue])) + && +#endif + [tableDataInstance statusValueForKey:@"Data_length"] + && +#ifndef SP_REFACTOR + [[prefs objectForKey:SPTableRowCountCheapSizeBoundary] integerValue] +#else + 5242880 +#endif + > [[tableDataInstance statusValueForKey:@"Data_length"] integerValue]) +#ifndef SP_REFACTOR + ) +#endif { maxNumRows = [self fetchNumberOfRows]; maxNumRowsIsEstimate = NO; @@ -3426,10 +3532,12 @@ // Check whether the estimated count requires updating, ie if the retrieved count exceeds it if (checkStatusCount) { NSInteger foundMaxRows; - if ([prefs boolForKey:SPLimitResults]) { + if ([prefs boolForKey:SPLimitResults]) + { foundMaxRows = ((contentPage - 1) * [prefs integerForKey:SPLimitResultsValue]) + tableRowsCount; if (foundMaxRows > maxNumRows) { - if ((NSInteger)tableRowsCount == [prefs integerForKey:SPLimitResultsValue]) { + if ((NSInteger)tableRowsCount == [prefs integerForKey:SPLimitResultsValue]) + { maxNumRows = foundMaxRows + 1; maxNumRowsIsEstimate = YES; } else { @@ -3470,8 +3578,10 @@ [tableContentView setDelegate:nil]; for (NSDictionary *columnDefinition in dataColumns) { +#ifndef SP_REFACTOR // Skip columns with saved widths if ([[[[prefs objectForKey:SPTableColumnWidths] objectForKey:[NSString stringWithFormat:@"%@@%@", [tableDocumentInstance database], [tableDocumentInstance host]]] objectForKey:[tablesListInstance tableName]] objectForKey:[columnDefinition objectForKey:@"name"]]) continue; +#endif // Otherwise set the column width NSTableColumn *aTableColumn = [tableContentView tableColumnWithIdentifier:[columnDefinition objectForKey:@"datacolumnindex"]]; @@ -3480,6 +3590,7 @@ } [tableContentView setDelegate:self]; } +#ifndef SP_REFACTOR #pragma mark - #pragma mark TableView delegate methods @@ -3565,6 +3676,7 @@ return nil; } +#endif - (NSInteger)numberOfRowsInTableView:(SPCopyTable *)aTableView { @@ -3791,12 +3903,14 @@ // This shouldn't happen – for safety reasons if ( ![mySQLConnection affectedRows] ) { +#ifndef SP_REFACTOR if ( [prefs boolForKey:SPShowNoAffectedRowsError] ) { SPBeginAlertSheet(NSLocalizedString(@"Warning", @"warning"), NSLocalizedString(@"OK", @"OK button"), nil, nil, [tableDocumentInstance parentWindow], self, nil, nil, NSLocalizedString(@"The row was not written to the MySQL database. You probably haven't changed anything.\nReload the table to be sure that the row exists and use a primary key for your table.\n(This error can be turned off in the preferences.)", @"message of panel when no rows have been affected after writing to the db")); } else { NSBeep(); } +#endif [tableDocumentInstance endTask]; [[NSNotificationCenter defaultCenter] postNotificationName:@"SMySQLQueryHasBeenPerformed" object:tableDocumentInstance]; return; @@ -3979,6 +4093,7 @@ [self updateCountText]; +#ifndef SP_REFACTOR /* triggered commands */ NSArray *triggeredCommands = [[NSApp delegate] bundleCommandsForTrigger:SPBundleTriggerActionTableRowChanged]; for(NSString* cmdPath in triggeredCommands) { NSArray *data = [cmdPath componentsSeparatedByString:@"|"]; @@ -4015,7 +4130,7 @@ } } } - +#endif } /** @@ -4036,11 +4151,15 @@ NSString *table = [tablesListInstance tableName]; // get tableColumnWidths object +#ifndef SP_REFACTOR if ( [prefs objectForKey:SPTableColumnWidths] != nil ) { tableColumnWidths = [NSMutableDictionary dictionaryWithDictionary:[prefs objectForKey:SPTableColumnWidths]]; } else { +#endif tableColumnWidths = [NSMutableDictionary dictionary]; +#ifndef SP_REFACTOR } +#endif // get database object if ( [tableColumnWidths objectForKey:database] == nil ) { [tableColumnWidths setObject:[NSMutableDictionary dictionary] forKey:database]; @@ -4057,7 +4176,9 @@ } // save column size [[[tableColumnWidths objectForKey:database] objectForKey:table] setObject:[NSNumber numberWithDouble:[(NSTableColumn *)[[aNotification userInfo] objectForKey:@"NSTableColumn"] width]] forKey:[[[[aNotification userInfo] objectForKey:@"NSTableColumn"] headerCell] stringValue]]; +#ifndef SP_REFACTOR [prefs setObject:tableColumnWidths forKey:SPTableColumnWidths]; +#endif } /** @@ -4238,6 +4359,7 @@ // Get the column width NSUInteger targetWidth = [tableContentView autodetectWidthForColumnDefinition:columnDefinition maxRows:500]; +#ifndef SP_REFACTOR // Clear any saved widths for the column NSString *dbKey = [NSString stringWithFormat:@"%@@%@", [tableDocumentInstance database], [tableDocumentInstance host]]; NSString *tableKey = [tablesListInstance tableName]; @@ -4258,6 +4380,7 @@ } [prefs setObject:[NSDictionary dictionaryWithDictionary:savedWidths] forKey:SPTableColumnWidths]; } +#endif // Return the width, while the delegate is empty to prevent column resize notifications [tableContentView setDelegate:nil]; @@ -4265,6 +4388,7 @@ return targetWidth; } +#ifndef SP_REFACTOR /* SplitView delegate methods */ #pragma mark - #pragma mark SplitView delegate methods @@ -4310,6 +4434,7 @@ [leftView setFrame:leftFrame]; [rightView setFrame:rightFrame]; } +#endif #pragma mark - @@ -4322,9 +4447,11 @@ { isWorking = YES; +#ifndef SP_REFACTOR /* Only proceed if this view is selected */ // Only proceed if this view is selected. if (![[tableDocumentInstance selectedToolbarItemIdentifier] isEqualToString:SPMainToolbarTableContent]) return; +#endif [addButton setEnabled:NO]; [removeButton setEnabled:NO]; @@ -4344,9 +4471,11 @@ { isWorking = NO; +#ifndef SP_REFACTOR /* Only proceed if this view is selected */ // Only proceed if this view is selected. if (![[tableDocumentInstance selectedToolbarItemIdentifier] isEqualToString:SPMainToolbarTableContent]) return; +#endif if ( ![[[tableDataInstance statusValues] objectForKey:@"Rows"] isNSNull] && selectedTable && [selectedTable length] && [tableDataInstance tableEncoding]) { [addButton setEnabled:([tablesListInstance tableType] == SPTableTypeTable)]; @@ -4460,7 +4589,11 @@ { // Check firstly if SPCopyTable can handle command +#ifndef SP_REFACTOR if([control control:control textView:textView doCommandBySelector:(SEL)command]) +#else + if([(id<NSControlTextEditingDelegate>)control control:control textView:textView doCommandBySelector:(SEL)command]) +#endif return YES; // Trap the escape key @@ -4482,6 +4615,7 @@ */ - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { +#ifndef SP_REFACTOR /* observe pref changes */ // Display table veiew vertical gridlines preference changed if ([keyPath isEqualToString:SPDisplayTableViewVerticalGridlines]) { [tableContentView setGridStyleMask:([[change objectForKey:NSKeyValueChangeNewKey] boolValue]) ? NSTableViewSolidVerticalGridLineMask : NSTableViewGridNone]; @@ -4493,6 +4627,7 @@ [tableContentView setFont:tableFont]; [tableContentView reloadData]; } +#endif } /** @@ -4690,13 +4825,13 @@ NSUInteger numOfArgs = [[filter objectForKey:@"NumberOfArguments"] integerValue]; switch(numOfArgs) { case 2: - [[tableDocumentInstance parentWindow] makeFirstResponder:firstBetweenField]; + [[firstBetweenField window] makeFirstResponder:firstBetweenField]; break; case 1: - [[tableDocumentInstance parentWindow] makeFirstResponder:argumentField]; + [[argumentField window] makeFirstResponder:argumentField]; break; default: - [[tableDocumentInstance parentWindow] makeFirstResponder:compareField]; + [[compareField window] makeFirstResponder:compareField]; } } } @@ -4711,6 +4846,18 @@ return [tableContentView fieldEditorSelectedRange]; } +#ifdef SP_REFACTOR /* glue */ +- (void)setDatabaseDocument:(SPDatabaseDocument*)doc +{ + tableDocumentInstance = doc; +} + +- (void)setTableListInstance:(SPTablesList*)list +{ + tablesListInstance = list; +} +#endif + #pragma mark - /** diff --git a/Source/SPTableData.h b/Source/SPTableData.h index 1c3fa8f0..b4042527 100644 --- a/Source/SPTableData.h +++ b/Source/SPTableData.h @@ -25,10 +25,13 @@ #import <MCPKit/MCPKit.h> +@class SPDatabaseDocument; +@class SPTablesList; + @interface SPTableData : NSObject { - IBOutlet id tableDocumentInstance; - IBOutlet id tableListInstance; + IBOutlet SPDatabaseDocument* tableDocumentInstance; + IBOutlet SPTablesList* tableListInstance; NSMutableArray *columns; NSMutableArray *columnNames; @@ -74,4 +77,9 @@ - (NSDictionary *) parseFieldDefinitionStringParts:(NSArray *)definitionParts; - (NSArray *) primaryKeyColumnNames; +#ifdef SP_REFACTOR /* glue */ +- (void)setTableDocumentInstance:(SPDatabaseDocument*)doc; +- (void)setTableListInstance:(SPTablesList*)list; +#endif + @end diff --git a/Source/SPTableData.m b/Source/SPTableData.m index b69ce816..de253e57 100644 --- a/Source/SPTableData.m +++ b/Source/SPTableData.m @@ -1374,4 +1374,17 @@ pthread_mutex_unlock(&dataProcessingLock); } +#ifdef SP_REFACTOR /* glue */ + +- (void)setTableDocumentInstance:(SPDatabaseDocument*)doc +{ + tableDocumentInstance = doc; +} + +- (void)setTableListInstance:(SPTablesList*)list +{ + tableListInstance = list; +} +#endif + @end
\ No newline at end of file diff --git a/Source/SPTableStructure.h b/Source/SPTableStructure.h index a08ddd15..81905410 100644 --- a/Source/SPTableStructure.h +++ b/Source/SPTableStructure.h @@ -25,17 +25,19 @@ #import <MCPKit/MCPKit.h> -@class SPDatabaseDocument, SPTableFieldValidation; +@class SPDatabaseDocument, SPTableFieldValidation, SPTableData, SPDatabaseData, SPTablesList, SPIndexesController; @interface SPTableStructure : NSObject { - IBOutlet id tablesListInstance; - IBOutlet id tableDataInstance; - IBOutlet SPDatabaseDocument *tableDocumentInstance; + IBOutlet SPTablesList* tablesListInstance; + IBOutlet SPTableData* tableDataInstance; + IBOutlet SPDatabaseDocument* tableDocumentInstance; +#ifndef SP_REFACTOR /* ivars */ IBOutlet id tableInfoInstance; IBOutlet id extendedTableInfoInstance; - IBOutlet id indexesController; - IBOutlet id databaseDataInstance; +#endif + IBOutlet SPIndexesController* indexesController; + IBOutlet SPDatabaseData* databaseDataInstance; IBOutlet id keySheet; IBOutlet id resetAutoIncrementSheet; @@ -85,6 +87,13 @@ - (IBAction)reloadTable:(id)sender; - (void)setTableDetails:(NSDictionary *)tableDetails; +#ifdef SP_REFACTOR /* method decls */ +- (void)setDatabaseDocument:(SPDatabaseDocument*)doc; +- (void)setTableListInstance:(SPTablesList*)list; +- (void)setTableDataInstance:(SPTableData*)data; +#endif +- (void)showErrorSheetWith:(NSDictionary *)errorDictionary; + // Edit methods - (IBAction)addField:(id)sender; - (IBAction)copyField:(id)sender; diff --git a/Source/SPTableStructure.m b/Source/SPTableStructure.m index aab62af8..1af8bc62 100644 --- a/Source/SPTableStructure.m +++ b/Source/SPTableStructure.m @@ -79,12 +79,15 @@ */ - (void)awakeFromNib { +#ifndef SP_REFACTOR /* ui manipulation */ // Set the structure and index view's vertical gridlines if required [tableSourceView setGridStyleMask:([prefs boolForKey:SPDisplayTableViewVerticalGridlines]) ? NSTableViewSolidVerticalGridLineMask : NSTableViewGridNone]; - +#endif +#ifndef SP_REFACTOR /* set font from prefs */ // Set the strutcture and index view's font [tableSourceView setFont:([prefs boolForKey:SPUseMonospacedFonts]) ? [NSFont fontWithName:SPDefaultMonospacedFontName size:[NSFont smallSystemFontSize]] : [NSFont systemFontOfSize:[NSFont smallSystemFontSize]]]; [indexesTableView setFont:([prefs boolForKey:SPUseMonospacedFonts]) ? [NSFont fontWithName:SPDefaultMonospacedFontName size:[NSFont smallSystemFontSize]] : [NSFont systemFontOfSize:[NSFont smallSystemFontSize]]]; +#endif extraFieldSuggestions = [[NSArray arrayWithObjects: @"None", @@ -159,12 +162,15 @@ name:SPDocumentTaskEndNotification object:tableDocumentInstance]; +#ifndef SP_REFACTOR /* add prefs observer */ [prefs addObserver:indexesController forKeyPath:SPUseMonospacedFonts options:NSKeyValueObservingOptionNew context:NULL]; +#endif // Init the view column submenu according to saved hidden status; // menu items are identified by their tag number which represents the initial column index for (NSMenuItem *item in [viewColumnsMenu itemArray]) [item setState:NSOnState]; // Set all items to NSOnState - + +#ifndef SP_REFACTOR /* patch */ for (NSTableColumn *col in [tableSourceView tableColumns]) { if ([col isHidden]) { @@ -178,6 +184,21 @@ [[viewColumnsMenu itemWithTag:12] setState:NSOffState]; } } +#else + for (NSTableColumn *col in [tableSourceView tableColumns]) + { + if ([col isHidden]) { + if ([[col identifier] isEqualToString:@"Key"]) + [[viewColumnsMenu itemAtIndex:[viewColumnsMenu indexOfItemWithTag:7]] setState:NSOffState]; + else if ([[col identifier] isEqualToString:@"encoding"]) + [[viewColumnsMenu itemAtIndex:[viewColumnsMenu indexOfItemWithTag:10]] setState:NSOffState]; + else if ([[col identifier] isEqualToString:@"collation"]) + [[viewColumnsMenu itemAtIndex:[viewColumnsMenu indexOfItemWithTag:11]] setState:NSOffState]; + else if ([[col identifier] isEqualToString:@"comment"]) + [[viewColumnsMenu itemAtIndex:[viewColumnsMenu indexOfItemWithTag:12]] setState:NSOffState]; + } + } +#endif [tableSourceView reloadData]; } @@ -213,7 +234,11 @@ // If an error occurred, reset the interface and abort if ([mySQLConnection queryErrored]) { +#ifndef SP_REFACTOR [[NSNotificationCenter defaultCenter] postNotificationOnMainThreadWithName:@"SMySQLQueryHasBeenPerformed" object:tableDocumentInstance]; +#else + [[NSNotificationCenter defaultCenter] sequelProPostNotificationOnMainThreadWithName:@"SMySQLQueryHasBeenPerformed" object:tableDocumentInstance]; +#endif [[self onMainThread] setTableDetails:nil]; if ([mySQLConnection isConnected]) { @@ -341,7 +366,11 @@ autoIncrementIndex = nil; // Send the query finished/work complete notification +#ifndef SP_REFACTOR [[NSNotificationCenter defaultCenter] postNotificationOnMainThreadWithName:@"SMySQLQueryHasBeenPerformed" object:tableDocumentInstance]; +#else + [[NSNotificationCenter defaultCenter] sequelProPostNotificationOnMainThreadWithName:@"SMySQLQueryHasBeenPerformed" object:tableDocumentInstance]; +#endif [theTableFields release]; } @@ -373,7 +402,12 @@ { NSString *newTableName = [tableDetails objectForKey:@"name"]; NSMutableDictionary *newDefaultValues; - BOOL enableInteraction = ![[tableDocumentInstance selectedToolbarItemIdentifier] isEqualToString:SPMainToolbarTableStructure] || ![tableDocumentInstance isWorking]; + + BOOL enableInteraction = +#ifndef SP_REFACTOR /* patch */ + ![[tableDocumentInstance selectedToolbarItemIdentifier] isEqualToString:SPMainToolbarTableStructure] || +#endif + ![tableDocumentInstance isWorking]; // Update the selected table name if (selectedTable) [selectedTable release], selectedTable = nil; @@ -445,10 +479,17 @@ NSInteger insertIndex = ([tableSourceView numberOfSelectedRows] == 0 ? [tableSourceView numberOfRows] : [tableSourceView selectedRow] + 1); +#ifndef SP_REFACTOR /* prefs access */ [tableFields insertObject:[NSMutableDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"", @"INT", @"", @"0", @"0", @"0", ([prefs boolForKey:SPNewFieldsAllowNulls]) ? @"1" : @"0", @"", [prefs stringForKey:SPNullValue], @"None", @"", [NSNumber numberWithInt:0], [NSNumber numberWithInt:0], nil] forKeys:[NSArray arrayWithObjects:@"name", @"type", @"length", @"unsigned", @"zerofill", @"binary", @"null", @"Key", @"default", @"Extra", @"comment", @"encoding", @"collation", nil]] atIndex:insertIndex]; +#else + [tableFields insertObject:[NSMutableDictionary + dictionaryWithObjects:[NSArray arrayWithObjects:@"", @"INT", @"", @"0", @"0", @"0", @"1", @"", @"NULL", @"None", @"", [NSNumber numberWithInt:0], [NSNumber numberWithInt:0], nil] + forKeys:[NSArray arrayWithObjects:@"name", @"type", @"length", @"unsigned", @"zerofill", @"binary", @"null", @"Key", @"default", @"Extra", @"comment", @"encoding", @"collation", nil]] + atIndex:insertIndex]; +#endif [tableSourceView reloadData]; [tableSourceView selectRowIndexes:[NSIndexSet indexSetWithIndex:insertIndex] byExtendingSelection:NO]; @@ -769,8 +810,10 @@ if (valueAsString == nil || ![valueAsString length]) { // reload data and bail [tableDataInstance resetAllData]; +#ifndef SP_REFACTOR [extendedTableInfoInstance loadTable:selTable]; [tableInfoInstance tableChanged:nil]; +#endif return; } @@ -793,10 +836,14 @@ [tableDataInstance resetStatusData]; if([[tableDocumentInstance valueForKeyPath:@"tableTabView"] indexOfTabViewItem:[[tableDocumentInstance valueForKeyPath:@"tableTabView"] selectedTabViewItem]] == 3) { [tableDataInstance resetAllData]; +#ifndef SP_REFACTOR [extendedTableInfoInstance loadTable:selTable]; +#endif } +#ifndef SP_REFACTOR [tableInfoInstance tableChanged:nil]; +#endif } /** @@ -808,14 +855,14 @@ NSMutableArray *tempResult = [NSMutableArray arrayWithCapacity:numOfRows]; NSMutableDictionary *tempRow; NSArray *keys; - NSUInteger i; + NSInteger i; id prefsNullValue = [prefs objectForKey:SPNullValue]; // Ensure table information is returned as strings to avoid problems with some server versions [theResult setReturnDataAsStrings:YES]; if (numOfRows) [theResult dataSeek:0]; - for ( i = 0 ; i < numOfRows ; i++ ) { + for ( i = 0 ; i < (NSInteger)numOfRows ; i++ ) { tempRow = [NSMutableDictionary dictionaryWithDictionary:[theResult fetchRowAsDictionary]]; // Replace NSNull instances with the NULL string from preferences @@ -862,7 +909,11 @@ isSavingRow = YES; // Save any edits which have been made but not saved to the table yet. +#ifndef SP_REFACTOR /* patch */ [[tableDocumentInstance parentWindow] endEditingFor:nil]; +#else + [[tableSourceView window] endEditingFor:nil]; +#endif // Attempt to save the row, and return YES if the save succeeded. if ([self addRowToDB]) { @@ -880,7 +931,7 @@ * returns YES if row written to db, otherwies NO * returns YES if no row is beeing edited and nothing has to be written to db */ -- (BOOL)addRowToDB; +- (BOOL)addRowToDB { if ((!isEditingRow) || (currentlyEditingRow == -1)) return YES; @@ -931,7 +982,8 @@ [queryString appendString:@"\n NULL"]; } // If a NULL value has been specified, and NULL is allowed, specify DEFAULT NULL - if ([[theRow objectForKey:@"default"] isEqualToString:[prefs objectForKey:SPNullValue]]) { + if ([[theRow objectForKey:@"default"] isEqualToString:[prefs objectForKey:SPNullValue]]) + { if ([[theRow objectForKey:@"null"] integerValue] == 1) { [queryString appendString:@"\n DEFAULT NULL "]; } @@ -1003,7 +1055,8 @@ if (![theRowExtra isEqualToString:@"AUTO_INCREMENT"]) { // If a NULL value has been specified, and NULL is allowed, specify DEFAULT NULL - if ([[theRow objectForKey:@"default"] isEqualToString:[prefs objectForKey:SPNullValue]]) { + if ([[theRow objectForKey:@"default"] isEqualToString:[prefs objectForKey:SPNullValue]]) + { if ([[theRow objectForKey:@"null"] integerValue] == 1) { [queryString appendString:@"\n DEFAULT NULL"]; } @@ -1161,6 +1214,24 @@ } } +#ifdef SP_REFACTOR /* glue */ +- (void)setDatabaseDocument:(SPDatabaseDocument*)doc +{ + tableDocumentInstance = doc; +} + +- (void)setTableListInstance:(SPTablesList*)list +{ + tablesListInstance = list; +} + +- (void)setTableDataInstance:(SPTableData*)data +{ + tableDataInstance = data; +} + +#endif + /** * A method to show an error sheet after a short delay, so that it can * be called from within an endSheet selector. This should be called on @@ -1280,6 +1351,7 @@ */ - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { +#ifndef SP_REFACTOR /* observe prefs change */ // Display table veiew vertical gridlines preference changed if ([keyPath isEqualToString:SPDisplayTableViewVerticalGridlines]) { [tableSourceView setGridStyleMask:([[change objectForKey:NSKeyValueChangeNewKey] boolValue]) ? NSTableViewSolidVerticalGridLineMask : NSTableViewGridNone]; @@ -1295,6 +1367,7 @@ [tableSourceView reloadData]; [indexesTableView reloadData]; } +#endif } #pragma mark - @@ -1441,8 +1514,10 @@ */ - (void)startDocumentTaskForTab:(NSNotification *)aNotification { +#ifndef SP_REFACTOR /* check toolbar mode */ // Only proceed if this view is selected. if (![[tableDocumentInstance selectedToolbarItemIdentifier] isEqualToString:SPMainToolbarTableStructure]) return; +#endif [tableSourceView setEnabled:NO]; [addFieldButton setEnabled:NO]; @@ -1462,8 +1537,10 @@ */ - (void)endDocumentTaskForTab:(NSNotification *)aNotification { +#ifndef SP_REFACTOR /* check toolbar mode */ // Only re-enable elements if the current tab is the structure view if (![[tableDocumentInstance selectedToolbarItemIdentifier] isEqualToString:SPMainToolbarTableStructure]) return; +#endif BOOL editingEnabled = ([tablesListInstance tableType] == SPTableTypeTable); diff --git a/Source/SPTableStructureDelegate.m b/Source/SPTableStructureDelegate.m index 0cabda4c..e7f9d3be 100644 --- a/Source/SPTableStructureDelegate.m +++ b/Source/SPTableStructureDelegate.m @@ -541,6 +541,7 @@ #pragma mark - #pragma mark Split view delegate methods +#ifndef SP_REFACTOR /* Split view delegate methods */ - (BOOL)splitView:(NSSplitView *)sender canCollapseSubview:(NSView *)subview { @@ -576,6 +577,7 @@ } } } +#endif #pragma mark - #pragma mark Combo box delegate methods diff --git a/Source/SPTableView.h b/Source/SPTableView.h index 6914723d..e39df82f 100644 --- a/Source/SPTableView.h +++ b/Source/SPTableView.h @@ -23,5 +23,10 @@ // More info at <http://code.google.com/p/sequel-pro/> @interface SPTableView : NSTableView +{ + BOOL tabEditingDisabled; +} + +@property (readwrite, assign) BOOL tabEditingDisabled; @end diff --git a/Source/SPTableView.m b/Source/SPTableView.m index 226bfe6c..d678fef3 100644 --- a/Source/SPTableView.m +++ b/Source/SPTableView.m @@ -36,12 +36,15 @@ @implementation SPTableView +@synthesize tabEditingDisabled; + /** * Right-click at row will select that row before ordering out the contextual menu * if not more than one row is selected. */ - (NSMenu *)menuForEvent:(NSEvent *)event { +#ifndef SP_REFACTOR /* menuForEvent: */ // Try to retrieve a reference to the table document (assuming this is frontmost tab) SPDatabaseDocument *parentTableDocument = nil; @@ -65,24 +68,24 @@ // Check for SPTablesList if right-click on header, then suppress context menu if ([[[[self delegate] class] description] isEqualToString:@"SPTablesList"]) { - if ([NSArrayObjectAtIndex([[self delegate] valueForKeyPath:@"tableTypes"], row) integerValue] == -1) + if ([NSArrayObjectAtIndex([(NSObject*)[self delegate] valueForKeyPath:@"tableTypes"], row) integerValue] == -1) return nil; } if ([[[[self delegate] class] description] isEqualToString:@"SPQueryFavoriteManager"]) { - if ([NSArrayObjectAtIndex([[self delegate] valueForKeyPath:@"favorites"], row) objectForKey:@"headerOfFileURL"]) + if ([NSArrayObjectAtIndex([(NSObject*)[self delegate] valueForKeyPath:SPFavorites], row) objectForKey:@"headerOfFileURL"]) return nil; } if ([[[[self delegate] class] description] isEqualToString:@"SPContentFilterManager"]) { - if ([NSArrayObjectAtIndex([[self delegate] valueForKeyPath:@"contentFilters"], row) objectForKey:@"headerOfFileURL"]) + if ([NSArrayObjectAtIndex([(NSObject*)[self delegate] valueForKeyPath:@"contentFilters"], row) objectForKey:@"headerOfFileURL"]) return nil; } [self selectRowIndexes:[NSIndexSet indexSetWithIndex:row] byExtendingSelection:NO]; [[self window] makeFirstResponder:self]; } - +#endif return [self menu]; } @@ -91,23 +94,36 @@ return YES; } +/** + * On becomeFirstResponder, if editing is disabled, override the super and just + * display instead; this prevents the selected cell from automatically editing + * if the table is backtabbed to. + */ +- (BOOL)becomeFirstResponder { + if (tabEditingDisabled) { + [self display]; + return YES; + } + return [super becomeFirstResponder]; +} + - (void)keyDown:(NSEvent *)theEvent { // Check if ENTER or RETURN is hit and edit the column. if ([self numberOfSelectedRows] == 1 && ([theEvent keyCode] == 36 || [theEvent keyCode] == 76)) { if ([[[[self delegate] class] description] isEqualToString:@"SPFieldMapperController"]) { - if ([[self delegate] isGlobalValueSheetOpen]) { - [[self delegate] closeGlobalValuesSheet:nil]; + if ([(SPFieldMapperController*)[self delegate] isGlobalValueSheetOpen]) { + [(SPFieldMapperController*)[self delegate] closeGlobalValuesSheet:nil]; return; } // ENTER or RETURN closes the SPFieldMapperController sheet // by sending an object with the tag 1 if no table cell is edited - if ([[self delegate] canBeClosed]) { + if ([(SPFieldMapperController*)[self delegate] canBeClosed]) { NSButton *b = [[[NSButton alloc] init] autorelease]; [b setTag:1]; - [[self delegate] closeSheet:b]; + [(SPFieldMapperController*)[self delegate] closeSheet:b]; return; } @@ -131,9 +147,20 @@ return; } } + // Check if ESCAPE is hit and use it to cancel row editing if supported else if ([theEvent keyCode] == 53 && [[self delegate] respondsToSelector:@selector(cancelRowEditing)]) { - if ([[self delegate] cancelRowEditing]) return; + if ([[self delegate] performSelector:@selector(cancelRowEditing)]) return; + } + + // If the Tab key is used, but tab editing is disabled, change focus rather than entering edit mode. + else if (tabEditingDisabled && [[theEvent characters] length] && [[theEvent characters] characterAtIndex:0] == NSTabCharacter) { + if (([theEvent modifierFlags] & NSShiftKeyMask) != NSShiftKeyMask) { + [[self window] selectKeyViewFollowingView:self]; + } else { + [[self window] selectKeyViewPrecedingView:self]; + } + return; } [super keyDown:theEvent]; diff --git a/Source/SPTablesList.h b/Source/SPTablesList.h index d4623f40..914295a5 100644 --- a/Source/SPTablesList.h +++ b/Source/SPTablesList.h @@ -25,7 +25,8 @@ #import <MCPKit/MCPKit.h> -@class SPHistoryController; +@class SPHistoryController, SPTableView; +@class SPDatabaseDocument; @interface NSObject (NSSplitView) @@ -38,7 +39,8 @@ @interface SPTablesList : NSObject { - IBOutlet id tableDocumentInstance; + SPDatabaseDocument* tableDocumentInstance; +#ifndef SP_REFACTOR /* ivars */ IBOutlet id tableSourceInstance; IBOutlet id tableContentInstance; IBOutlet id customQueryInstance; @@ -51,7 +53,7 @@ IBOutlet SPHistoryController *spHistoryControllerInstance; IBOutlet id copyTableSheet; - IBOutlet id tablesListView; + IBOutlet SPTableView *tablesListView; IBOutlet id copyTableButton; IBOutlet id copyTableNameField; IBOutlet id copyTableMessageField; @@ -79,9 +81,11 @@ IBOutlet NSMenuItem *separatorTableMenuItem; IBOutlet NSMenuItem *showCreateSyntaxMenuItem; IBOutlet NSMenuItem *separatorTableMenuItem2; +#endif MCPConnection *mySQLConnection; +#ifndef SP_REFACTOR /* ivars */ // Table list context menu items IBOutlet NSMenuItem *removeTableContextMenuItem; IBOutlet NSMenuItem *duplicateTableContextMenuItem; @@ -91,25 +95,34 @@ IBOutlet NSMenuItem *separatorTableContextMenuItem; IBOutlet NSMenuItem *showCreateSyntaxContextMenuItem; IBOutlet NSMenuItem *separatorTableContextMenuItem2; +#endif NSMutableArray *tables; +#ifndef SP_REFACTOR /* ivars */ NSMutableArray *filteredTables; +#endif NSMutableArray *tableTypes; +#ifndef SP_REFACTOR /* ivars */ NSMutableArray *filteredTableTypes; - SPTableType selectedTableType; +#endif + NSInteger selectedTableType; NSString *selectedTableName; +#ifndef SP_REFACTOR /* ivars */ BOOL isTableListFiltered; BOOL tableListIsSelectable; +#endif BOOL tableListContainsViews; - +#ifndef SP_REFACTOR /* ivars */ BOOL alertSheetOpened; NSFont *smallSystemFont; - +#endif } // IBAction methods - (IBAction)updateTables:(id)sender; + +#ifndef SP_REFACTOR /* method decls */ - (IBAction)addTable:(id)sender; - (IBAction)closeSheet:(id)sender; - (IBAction)removeTable:(id)sender; @@ -118,13 +131,11 @@ - (IBAction)truncateTable:(id)sender; - (IBAction)openTableInNewTab:(id)sender; - (IBAction)togglePaneCollapse:(id)sender; - -// Alert sheet callbacks -- (void)sheetDidEnd:(id)sheet returnCode:(NSInteger)returnCode contextInfo:(NSString *)contextInfo; - +#endif // Additional methods - (void)setConnection:(MCPConnection *)theConnection; - (void)setSelectionState:(NSDictionary *)selectionDetails; +#ifndef SP_REFACTOR /* method decls */ - (void)selectTableAtIndex:(NSNumber *)row; - (void)makeTableListFilterHaveFocus; @@ -132,6 +143,7 @@ - (NSArray *)selectedTableNames; - (NSArray *)selectedTableItems; - (NSArray *)selectedTableTypes; +#endif - (NSString *)tableName; - (SPTableType)tableType; - (NSArray *)tables; @@ -147,12 +159,9 @@ // Setters - (BOOL)selectItemWithName:(NSString *)theName; +#ifndef SP_REFACTOR /* method decls */ - (BOOL)selectItemsWithNames:(NSArray *)theNames; -// Data validation -- (BOOL)isTableNameValid:(NSString *)tableName forType:(SPTableType)tableType; -- (BOOL)isTableNameValid:(NSString *)tableName forType:(SPTableType)tableType ignoringSelectedTable:(BOOL)ignoreSelectedTable; - // Table list filter interaction - (void) showFilter; - (void) hideFilter; @@ -163,5 +172,11 @@ - (void) startDocumentTaskForTab:(NSNotification *)aNotification; - (void) endDocumentTaskForTab:(NSNotification *)aNotification; - (void) setTableListSelectability:(BOOL)isSelectable; +#endif +- (BOOL)isTableNameValid:(NSString *)tableName forType:(SPTableType)tableType; +- (BOOL)isTableNameValid:(NSString *)tableName forType:(SPTableType)tableType ignoringSelectedTable:(BOOL)ignoreSelectedTable; +#ifdef SP_REFACTOR /* method decls */ +- (void)setDatabaseDocument:(SPDatabaseDocument*)val; +#endif @end diff --git a/Source/SPTablesList.m b/Source/SPTablesList.m index 9c1a1d0c..5ccb9bae 100644 --- a/Source/SPTablesList.m +++ b/Source/SPTablesList.m @@ -24,13 +24,21 @@ // More info at <http://code.google.com/p/sequel-pro/> #import "SPTablesList.h" +#ifndef SP_REFACTOR /* headers */ +#import "SPConnectionController.h" +#endif #import "SPDatabaseDocument.h" -#import "SPDatabaseViewController.h" #import "SPTableStructure.h" +#import "SPDatabaseViewController.h" + +#ifndef SP_REFACTOR /* headers */ #import "SPTableContent.h" +#endif #import "SPTableData.h" +#ifndef SP_REFACTOR /* headers */ #import "SPTableInfo.h" #import "SPDataImport.h" +#import "SPTableView.h" #import "ImageAndTextCell.h" #import "RegexKitLite.h" #import "SPDatabaseData.h" @@ -50,6 +58,7 @@ - (void)renameTableOfType:(SPTableType)tableType from:(NSString *)oldTableName to:(NSString *)newTableName; @end +#endif @implementation SPTablesList @@ -66,10 +75,13 @@ NSUInteger i; NSString *previousSelectedTable = nil; NSString *previousFilterString = nil; +#ifndef SP_REFACTOR /* table list filtering */ BOOL previousTableListIsSelectable = tableListIsSelectable; +#endif BOOL changeEncoding = ![[mySQLConnection encoding] isEqualToString:@"utf8"]; if (selectedTableName) previousSelectedTable = [[NSString alloc] initWithString:selectedTableName]; +#ifndef SP_REFACTOR /* table list filtering */ if (isTableListFiltered) { previousFilterString = [[NSString alloc] initWithString:[listFilterField stringValue]]; if (filteredTables) [filteredTables release]; @@ -84,13 +96,18 @@ tableListIsSelectable = YES; [[tablesListView onMainThread] deselectAll:self]; tableListIsSelectable = previousTableListIsSelectable; +#endif [tables removeAllObjects]; [tableTypes removeAllObjects]; if ([tableDocumentInstance database]) { // Notify listeners that a query has started +#ifndef SP_REFACTOR [[NSNotificationCenter defaultCenter] postNotificationOnMainThreadWithName:@"SMySQLQueryWillBePerformed" object:tableDocumentInstance]; +#else + [[NSNotificationCenter defaultCenter] sequelProPostNotificationOnMainThreadWithName:@"SMySQLQueryWillBePerformed" object:tableDocumentInstance]; +#endif // Use UTF8 for identifier-based queries if (changeEncoding) { @@ -131,6 +148,7 @@ // Reorder the tables in alphabetical order [tables sortArrayUsingSelector:@selector(localizedCompare:) withPairedMutableArrays:tableTypes, nil]; +#ifndef SP_REFACTOR /* table procedures and functions */ /* Grab the procedures and functions * * Using information_schema gives us more info (for information window perhaps?) but breaks @@ -170,7 +188,7 @@ } } } - /* +#endif /* BOOL addedPFHeader = FALSE; NSString *pQuery = [NSString stringWithFormat:@"SHOW PROCEDURE STATUS WHERE db = '%@'",[tableDocumentInstance database]]; theResult = [mySQLConnection queryString:pQuery]; @@ -226,7 +244,11 @@ if (changeEncoding) [mySQLConnection restoreStoredEncoding]; // Notify listeners that the query has finished +#ifndef SP_REFACTOR [[NSNotificationCenter defaultCenter] postNotificationOnMainThreadWithName:@"SMySQLQueryHasBeenPerformed" object:tableDocumentInstance]; +#else + [[NSNotificationCenter defaultCenter] sequelProPostNotificationOnMainThreadWithName:@"SMySQLQueryHasBeenPerformed" object:tableDocumentInstance]; +#endif } // Add the table headers even if no tables were found @@ -239,7 +261,9 @@ [tableTypes insertObject:[NSNumber numberWithInteger:SPTableTypeNone] atIndex:0]; +#ifndef SP_REFACTOR /* ui manipulation */ [[tablesListView onMainThread] reloadData]; +#endif // if the previous selected table still exists, select it // but not if the update was called from SPTableData since it calls that method @@ -247,9 +271,11 @@ // or if the table name contains characters which are not supported by the current set encoding if ( ![sender isKindOfClass:[SPTableData class]] && previousSelectedTable != nil && [tables indexOfObject:previousSelectedTable] < [tables count]) { NSInteger itemToReselect = [tables indexOfObject:previousSelectedTable]; +#ifndef SP_REFACTOR /* ui manipulation */ tableListIsSelectable = YES; [[tablesListView onMainThread] selectRowIndexes:[NSIndexSet indexSetWithIndex:itemToReselect] byExtendingSelection:NO]; tableListIsSelectable = previousTableListIsSelectable; +#endif if (selectedTableName) [selectedTableName release]; selectedTableName = [[NSString alloc] initWithString:[tables objectAtIndex:itemToReselect]]; selectedTableType = (SPTableType)[[tableTypes objectAtIndex:itemToReselect] integerValue]; @@ -260,6 +286,7 @@ selectedTableType = SPTableTypeNone; } +#ifndef SP_REFACTOR /* table list filtering */ // Determine whether or not to preserve the existing filter, and whether to // show or hide the list filter based on the number of tables if ([tables count] > 20) { @@ -276,6 +303,7 @@ if ([tableDocumentInstance database]) { [[[listFilterField cell] onMainThread] setPlaceholderString:NSLocalizedString(@"Filter", @"filter label")]; } +#endif if (previousSelectedTable) [previousSelectedTable release]; if (previousFilterString) [previousFilterString release]; @@ -288,6 +316,7 @@ // User press refresh button ergo force update [NSThread detachNewThreadSelector:@selector(queryDbStructureWithUserInfo:) toTarget:mySQLConnection withObject:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], @"forceUpdate", [NSNumber numberWithBool:YES], @"cancelQuerying", nil]]; } +#ifndef SP_REFACTOR /* whole table operations */ /** * Adds a new table to the tables-array (no changes in mysql-db) @@ -657,6 +686,8 @@ #pragma mark - #pragma mark Additional methods +#endif + /** * Sets the connection (received from SPDatabaseDocument) and makes things that have to be done only once */ @@ -666,6 +697,8 @@ [self updateTables:self]; } +#ifndef SP_REFACTOR /* ui validation */ + /** * Performs interface validation for various controls. */ @@ -701,6 +734,7 @@ [copyTableButton performClick:object]; } } +#endif /** * Updates application state to match the current selection, including @@ -714,17 +748,23 @@ { // First handle empty or multiple selections if (!selectionDetails || ![selectionDetails objectForKey:@"name"]) { +#ifndef SP_REFACTOR /* ui manipulation */ NSIndexSet *indexes = [tablesListView selectedRowIndexes]; - +#endif // Update the selected table name and type if (selectedTableName) [selectedTableName release]; +#ifndef SP_REFACTOR /* ui manipulation */ if ([indexes count]) { selectedTableName = [[NSString alloc] initWithString:@""]; } else { +#endif selectedTableName = nil; +#ifndef SP_REFACTOR /* ui manipulation */ } +#endif +#ifndef SP_REFACTOR /* ui manipulation */ // Set gear menu items Remove/Duplicate table/view according to the table types // if at least one item is selected @@ -825,6 +865,7 @@ [[tableSubMenu itemAtIndex:10] setHidden:NO]; return; +#endif } // If a new selection has been provided, store variables and update the interface to match @@ -836,6 +877,7 @@ selectedTableName = [[NSString alloc] initWithString:selectedItemName]; selectedTableType = selectedItemType; +#ifndef SP_REFACTOR /* ui manipulation */ // Remove the "current selection" item for filtered lists if appropriate if (isTableListFiltered && [tablesListView selectedRow] < (NSInteger)[filteredTables count] - 2 && [filteredTables count] > 2 && [[filteredTableTypes objectAtIndex:[filteredTableTypes count]-2] integerValue] == SPTableTypeNone @@ -1006,8 +1048,11 @@ [showCreateSyntaxContextMenuItem setHidden:NO]; [showCreateSyntaxContextMenuItem setTitle:NSLocalizedString(@"Show Create Function Syntax...", @"show create func syntax menu item")]; } +#endif } +#ifndef SP_REFACTOR /* getters */ + #pragma mark - #pragma mark Getter methods @@ -1054,6 +1099,7 @@ } return selTables; } +#endif /** * Returns the currently selected table or nil if no table or mulitple tables are selected @@ -1202,6 +1248,7 @@ // If no match found, return failure if (itemIndex == NSNotFound) return NO; +#ifndef SP_REFACTOR /* table list filtering */ if (!isTableListFiltered) { [tablesListView selectRowIndexes:[NSIndexSet indexSetWithIndex:itemIndex] byExtendingSelection:NO]; } else { @@ -1210,19 +1257,26 @@ [tablesListView selectRowIndexes:[NSIndexSet indexSetWithIndex:filteredIndex] byExtendingSelection:NO]; } else { [tablesListView deselectAll:nil]; +#endif if (selectedTableName) [selectedTableName release]; selectedTableName = [[NSString alloc] initWithString:[tables objectAtIndex:itemIndex]]; - selectedTableType = (SPTableType)[[tableTypes objectAtIndex:itemIndex] integerValue]; + selectedTableType = [[tableTypes objectAtIndex:itemIndex] integerValue]; +#ifndef SP_REFACTOR /* table list filtering */ [self updateFilter:self]; +#endif [tableDocumentInstance loadTable:selectedTableName ofType:selectedTableType]; +#ifndef SP_REFACTOR /* table list filtering */ } } [[tablesListView onMainThread] scrollRowToVisible:[tablesListView selectedRow]]; +#endif return YES; } +#ifndef SP_REFACTOR /* tableView datasource/delegate */ + /** * Try to select items using the provided names in theNames; returns YES if at least * one item could be seleceted, otherwise NO. @@ -1360,6 +1414,9 @@ return ![tableDocumentInstance isWorking]; } + +#ifndef SP_REFACTOR + /** * Renames a table (in tables-array and mysql-db). */ @@ -1419,6 +1476,7 @@ // Query the structure of all databases in the background (mainly for completion) [NSThread detachNewThreadSelector:@selector(queryDbStructureWithUserInfo:) toTarget:mySQLConnection withObject:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], @"forceUpdate", nil]]; } +#endif #pragma mark - #pragma mark TableView delegate methods @@ -1428,15 +1486,16 @@ */ - (BOOL)control:(NSControl *)control textView:(NSTextView *)textView doCommandBySelector:(SEL)command { + + // When enter/return is used, save the row. if ( [textView methodForSelector:command] == [textView methodForSelector:@selector(insertNewline:)] ) { - //save current line [[control window] makeFirstResponder:control]; return TRUE; + // When the escape key is used, abort the rename. } else if ( [[control window] methodForSelector:command] == [[control window] methodForSelector:@selector(cancelOperation:)] || [textView methodForSelector:command] == [textView methodForSelector:@selector(complete:)] ) { - //abort editing [control abortEditing]; [[NSApp mainWindow] makeFirstResponder:tablesListView]; @@ -1847,6 +1906,7 @@ { return (splitView == tableListSplitView ? NSZeroRect : proposedEffectiveRect); } +#endif #pragma mark - @@ -1859,21 +1919,28 @@ { if ((self = [super init])) { tables = [[NSMutableArray alloc] init]; +#ifndef SP_REFACTOR filteredTables = tables; +#endif tableTypes = [[NSMutableArray alloc] init]; +#ifndef SP_REFACTOR filteredTableTypes = tableTypes; isTableListFiltered = NO; tableListIsSelectable = YES; +#endif tableListContainsViews = NO; selectedTableType = SPTableTypeNone; selectedTableName = nil; [tables addObject:NSLocalizedString(@"TABLES",@"header for table list")]; +#ifndef SP_REFACTOR /* font */ smallSystemFont = [NSFont systemFontOfSize:[NSFont smallSystemFontSize]]; +#endif } return self; } +#ifndef SP_REFACTOR /* awakeFromNib */ /** * Standard awakeFromNib method for interface loading. */ @@ -1903,6 +1970,9 @@ [tableListFilterSplitView setCollapsibleSubviewCollapsed:YES]; } + // Disable tab edit behaviour in the tables list + [tablesListView setTabEditingDisabled:YES]; + // Add observers for document task activity [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(startDocumentTaskForTab:) @@ -1917,6 +1987,7 @@ [tablesListView registerForDraggedTypes:[NSArray arrayWithObjects:@"SPDragTableDataFromNavigatorPboardType", nil]]; } +#endif /** * Standard dealloc method. @@ -1927,13 +1998,24 @@ [tables release]; [tableTypes release]; +#ifndef SP_REFACTOR if (isTableListFiltered && filteredTables) [filteredTables release]; if (isTableListFiltered && filteredTableTypes) [filteredTableTypes release]; +#endif if (selectedTableName) [selectedTableName release]; [super dealloc]; } + +#ifdef SP_REFACTOR /* glue */ +- (void)setDatabaseDocument:(SPDatabaseDocument*)val +{ + tableDocumentInstance = val; +} +#endif + +#ifndef SP_REFACTOR /* operations performed on whole tables */ @end @implementation SPTablesList (PrivateAPI) @@ -2148,7 +2230,9 @@ [self updateFilter:self]; [tablesListView scrollRowToVisible:[tablesListView selectedRow]]; + // Select the newly created table and switch to the table structure view for easier setup [tableDocumentInstance loadTable:selectedTableName ofType:selectedTableType]; + [tableDocumentInstance viewStructure:self]; // Query the structure of all databases in the background (mainly for completion) [NSThread detachNewThreadSelector:@selector(queryDbStructureWithUserInfo:) toTarget:mySQLConnection withObject:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], @"forceUpdate", nil]]; @@ -2438,5 +2522,67 @@ [NSException raise:@"Object of unknown type" format:NSLocalizedString(@"An error occured while renaming. '%@' is of an unknown type.", @"rename error - don't know what type the renamed thing is"), oldTableName]; } +#endif + +/** + * Check tableName for length and if the tableName doesn't match + * against current database table/view names (case-insensitive). + */ +- (BOOL)isTableNameValid:(NSString *)tableName forType:(SPTableType)tableType +{ + return [self isTableNameValid:tableName forType:tableType ignoringSelectedTable:NO]; +} + +/** + * Check tableName for length and if the tableName doesn't match + * against current database table/view names (case-insensitive). + */ +- (BOOL)isTableNameValid:(NSString *)tableName forType:(SPTableType)tableType ignoringSelectedTable:(BOOL)ignoreSelectedTable +{ + BOOL isValid = YES; + + // delete trailing whitespaces since 'foo ' or ' ' are not valid table names + NSString *fieldStr = [tableName stringByMatching:@"(.*?)\\s*$" capture:1]; + NSString *lowercaseFieldStr = [fieldStr lowercaseString]; + + // If table name has trailing whitespaces return 'no valid' + if([fieldStr length] != [tableName length]) return NO; + + // empty table names are invalid + if([fieldStr length] == 0) return NO; + + + NSArray *similarTables; + switch (tableType) { + case SPTableTypeView: + case SPTableTypeTable: + similarTables = [self allTableAndViewNames]; + break; + case SPTableTypeProc: + similarTables = [self allProcedureNames]; + break; + case SPTableTypeFunc: + similarTables = [self allFunctionNames]; + break; + default: + // if some other table type is given, just return yes + // better a mysql error than not being able to change something at all + return YES; + } + + for(id table in similarTables) { + //compare case insensitive here + if([lowercaseFieldStr isEqualToString:[table lowercaseString]]) { + if (ignoreSelectedTable) { + // if table is the selectedTable, ignore it + // we must compare CASE SENSITIVE here! + if ([table isEqualToString:selectedTableName]) continue; + } + isValid = NO; + break; + } + } + return isValid; +} @end diff --git a/Source/SPTextView.h b/Source/SPTextView.h index 3954c941..bc4a3eb8 100644 --- a/Source/SPTextView.h +++ b/Source/SPTextView.h @@ -32,7 +32,11 @@ @class SPNarrowDownCompletion, SPDatabaseDocument, SPTablesList, SPCustomQuery; -@interface SPTextView : NSTextView +#ifndef SP_REFACTOR +@interface SPTextView : NSTextView +#else +@interface SPTextView : NSTextView <NSTextStorageDelegate> +#endif { IBOutlet SPDatabaseDocument *tableDocumentInstance; IBOutlet SPTablesList *tablesListInstance; @@ -43,18 +47,24 @@ BOOL autoindentIgnoresEnter; BOOL autouppercaseKeywordsEnabled; BOOL delBackwardsWasPressed; +#ifndef SP_REFACTOR BOOL autohelpEnabled; +#endif NoodleLineNumberView *lineNumberView; BOOL startListeningToBoundChanges; BOOL textBufferSizeIncreased; +#ifndef SP_REFACTOR NSString *showMySQLHelpFor; +#endif IBOutlet NSScrollView *scrollView; SPNarrowDownCompletion *completionPopup; +#ifndef SP_REFACTOR NSUserDefaults *prefs; +#endif MCPConnection *mySQLConnection; NSInteger mySQLmajorVersion; @@ -102,7 +112,9 @@ @property(assign) BOOL completionIsOpen; @property(assign) BOOL completionWasReinvokedAutomatically; +#ifndef SP_REFACTOR - (IBAction)showMySQLHelpForCurrentWord:(id)sender; +#endif - (BOOL) isNextCharMarkedBy:(id)attribute withValue:(id)aValue; - (BOOL) areAdjacentCharsLinked; @@ -119,12 +131,16 @@ - (BOOL) autopair; - (void) setAutouppercaseKeywords:(BOOL)enableAutouppercaseKeywords; - (BOOL) autouppercaseKeywords; +#ifndef SP_REFACTOR - (void) setAutohelp:(BOOL)enableAutohelp; - (BOOL) autohelp; +#endif - (void) setTabStops; - (void) selectLineNumber:(NSUInteger)lineNumber ignoreLeadingNewLines:(BOOL)ignLeadingNewLines; - (NSUInteger) getLineNumberForCharacterIndex:(NSUInteger)anIndex; +#ifndef SP_REFACTOR - (void) autoHelp; +#endif - (void) doSyntaxHighlighting; - (NSBezierPath*)roundedBezierPathAroundRange:(NSRange)aRange; - (void) setConnection:(MCPConnection *)theConnection withVersion:(NSInteger)majorVersion; diff --git a/Source/SPTextView.m b/Source/SPTextView.m index 4fef6ee3..fa01709e 100644 --- a/Source/SPTextView.m +++ b/Source/SPTextView.m @@ -112,9 +112,10 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) - (void) awakeFromNib { - +#ifndef SP_REFACTOR /* init ivars */ prefs = [[NSUserDefaults standardUserDefaults] retain]; [self setFont:[NSUnarchiver unarchiveObjectWithData:[prefs dataForKey:SPCustomQueryEditorFont]]]; +#endif // Set self as delegate for the textView's textStorage to enable syntax highlighting, [[self textStorage] setDelegate:self]; @@ -124,7 +125,9 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) autopairEnabled = YES; autoindentIgnoresEnter = NO; autouppercaseKeywordsEnabled = NO; +#ifndef SP_REFACTOR autohelpEnabled = NO; +#endif delBackwardsWasPressed = NO; startListeningToBoundChanges = NO; textBufferSizeIncreased = NO; @@ -142,11 +145,20 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) [scrollView setRulersVisible:YES]; [self setAllowsDocumentBackgroundColorChange:YES]; [self setContinuousSpellCheckingEnabled:NO]; +#ifndef SP_REFACTOR [self setAutoindent:[prefs boolForKey:SPCustomQueryAutoIndent]]; +#else + [self setAutoindent:YES]; +#endif [self setAutoindentIgnoresEnter:YES]; +#ifndef SP_REFACTOR [self setAutopair:[prefs boolForKey:SPCustomQueryAutoPairCharacters]]; [self setAutohelp:[prefs boolForKey:SPCustomQueryUpdateAutoHelp]]; [self setAutouppercaseKeywords:[prefs boolForKey:SPCustomQueryAutoUppercaseKeywords]]; +#else + [self setAutopair:YES]; + [self setAutouppercaseKeywords:YES]; +#endif [self setCompletionWasReinvokedAutomatically:NO]; // Re-define tab stops for a better editing @@ -159,6 +171,7 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) [scrollView setPostsBoundsChangedNotifications:YES]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(boundsDidChangeNotification:) name:NSViewBoundsDidChangeNotification object:[scrollView contentView]]; +#ifndef SP_REFACTOR [self setQueryHiliteColor:[NSUnarchiver unarchiveObjectWithData:[prefs dataForKey:SPCustomQueryEditorHighlightQueryColor]]]; [self setQueryEditorBackgroundColor:[NSUnarchiver unarchiveObjectWithData:[prefs dataForKey:SPCustomQueryEditorBackgroundColor]]]; [self setCommentColor:[NSUnarchiver unarchiveObjectWithData:[prefs dataForKey:SPCustomQueryEditorCommentColor]]]; @@ -189,7 +202,22 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) [prefs addObserver:self forKeyPath:SPCustomQueryEditorTextColor options:NSKeyValueObservingOptionNew context:NULL]; [prefs addObserver:self forKeyPath:SPCustomQueryEditorTabStopWidth options:NSKeyValueObservingOptionNew context:NULL]; [prefs addObserver:self forKeyPath:SPCustomQueryAutoUppercaseKeywords options:NSKeyValueObservingOptionNew context:NULL]; +#else + [self setQueryHiliteColor:[NSColor whiteColor]]; + [self setQueryEditorBackgroundColor:[NSColor whiteColor]]; + [self setCommentColor:[NSColor darkGrayColor]]; + [self setQuoteColor:[NSColor blueColor]]; + [self setKeywordColor:[NSColor redColor]]; + [self setBacktickColor:[NSColor purpleColor]]; + [self setNumericColor:[NSColor blueColor]]; + [self setVariableColor:[NSColor yellowColor]]; + [self setOtherTextColor:[NSColor blackColor]]; + [self setTextColor:otherTextColor]; + [self setInsertionPointColor:[NSColor blackColor]]; + [self setShouldHiliteQuery:YES]; + [self setSelectedTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[NSColor lightGrayColor], NSBackgroundColorAttributeName, nil]]; +#endif } - (void) setConnection:(MCPConnection *)theConnection withVersion:(NSInteger)majorVersion @@ -203,6 +231,7 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) */ - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { +#ifndef SP_REFACTOR if ([keyPath isEqualToString:SPCustomQueryEditorBackgroundColor]) { [self setQueryEditorBackgroundColor:[NSUnarchiver unarchiveObjectWithData:[change objectForKey:NSKeyValueChangeNewKey]]]; [self setNeedsDisplay:YES]; @@ -255,6 +284,7 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) } else if ([keyPath isEqualToString:SPCustomQueryAutoUppercaseKeywords]) { [self setAutouppercaseKeywords:[prefs boolForKey:SPCustomQueryAutoUppercaseKeywords]]; } +#endif } /** @@ -375,7 +405,7 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) if(!aDbName) { // Try to suggest only items which are uniquely valid for the parsed string - NSArray *uniqueSchema = [[SPNavigatorController sharedNavigatorController] getUniqueDbIdentifierFor:[aTableName lowercaseString] andConnection:[[[self delegate] valueForKeyPath:@"tableDocumentInstance"] connectionID] ignoreFields:YES]; + NSArray *uniqueSchema = [[SPNavigatorController sharedNavigatorController] getUniqueDbIdentifierFor:[aTableName lowercaseString] andConnection:[[(NSObject*)[self delegate] valueForKeyPath:@"tableDocumentInstance"] connectionID] ignoreFields:YES]; NSInteger uniqueSchemaKind = [[uniqueSchema objectAtIndex:0] intValue]; // If no db name but table name check if table name is a valid name in the current selected db @@ -535,7 +565,9 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) if(completionIsOpen || !self || ![self delegate]) return; // Cancel autocompletion trigger +#ifndef SP_REFACTOR if([prefs boolForKey:SPCustomQueryAutoComplete]) +#endif [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(doAutoCompletion) object:nil]; @@ -577,7 +609,9 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) { // Cancel autocompletion trigger +#ifndef SP_REFACTOR if([prefs boolForKey:SPCustomQueryAutoComplete]) +#endif [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(doAutoCompletion) object:nil]; @@ -770,7 +804,9 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) } // Cancel autocompletion trigger again if user typed something in while parsing +#ifndef SP_REFACTOR if([prefs boolForKey:SPCustomQueryAutoComplete]) +#endif [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(doAutoCompletion) object:nil]; @@ -982,7 +1018,7 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) // If Extended Table Info tab is active delegate the print call to the SPPrintController // if the user doesn't select anything in self if([[[[self delegate] class] description] isEqualToString:@"SPExtendedTableInfo"] && ![self selectedRange].length) { - [[[self delegate] valueForKeyPath:@"tableDocumentInstance"] printDocument:sender]; + [[(NSObject*)[self delegate] valueForKeyPath:@"tableDocumentInstance"] printDocument:sender]; return; } @@ -1020,6 +1056,7 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) [self performSelector:@selector(doSyntaxHighlighting) withObject:nil afterDelay:0.01]; } +#ifndef SP_REFACTOR /** * Search for the current selection or current word in the MySQL Help */ @@ -1027,6 +1064,7 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) { [customQueryInstance showHelpForCurrentWord:self]; } +#endif /** * If the textview has a selection, wrap it with the supplied prefix and suffix strings; @@ -1051,7 +1089,9 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) [self setSelectedRange:innerSelectionRange]; // If autopair is enabled mark last autopair character as autopair-linked +#ifndef SP_REFACTOR if([prefs boolForKey:SPCustomQueryAutoPairCharacters]) +#endif [[self textStorage] addAttribute:kAPlinked value:kAPval range:NSMakeRange(NSMaxRange(innerSelectionRange), 1)]; return YES; @@ -1133,6 +1173,7 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) if (selectedRange.location == NSNotFound || ![self isEditable]) return NO; NSString *indentString = @"\t"; +#ifndef SP_REFACTOR if ([prefs boolForKey:SPCustomQuerySoftIndent]) { NSUInteger numberOfSpaces = [prefs integerForKey:SPCustomQuerySoftIndentWidth]; if(numberOfSpaces < 1) numberOfSpaces = 1; @@ -1142,6 +1183,7 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) [spaces appendString:@" "]; indentString = [NSString stringWithString:spaces]; } +#endif // Indent the currently selected line if the caret is within a single line if (selectedRange.length == 0) { @@ -1222,6 +1264,7 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) // Check for soft indention NSUInteger indentStringLength = 1; +#ifndef SP_REFACTOR if ([prefs boolForKey:SPCustomQuerySoftIndent]) { NSUInteger numberOfSpaces = [prefs integerForKey:SPCustomQuerySoftIndentWidth]; if(numberOfSpaces < 1) numberOfSpaces = 1; @@ -1234,8 +1277,11 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) if(numberOfLeadingWhiteSpaces == NSNotFound) numberOfLeadingWhiteSpaces = 0; replaceRange = NSMakeRange(currentLineRange.location, numberOfLeadingWhiteSpaces); } else { +#endif replaceRange = NSMakeRange(currentLineRange.location, indentStringLength); +#ifndef SP_REFACTOR } +#endif // Register the undent for undo [self shouldChangeTextInRange:replaceRange replacementString:@""]; @@ -1258,6 +1304,7 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) // Check for soft or hard indention NSString *indentString = @"\t"; NSUInteger indentStringLength = 1; +#ifndef SP_REFACTOR if ([prefs boolForKey:SPCustomQuerySoftIndent]) { indentStringLength = [prefs integerForKey:SPCustomQuerySoftIndentWidth]; if(indentStringLength < 1) indentStringLength = 1; @@ -1267,6 +1314,7 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) [spaces appendString:@" "]; indentString = [NSString stringWithString:spaces]; } +#endif // Check if blockRange starts with SPACE or TAB // (this also catches the first line of the entire text buffer or @@ -1321,7 +1369,9 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) { // Cancel auto-completion timer +#ifndef SP_REFACTOR if([prefs boolForKey:SPCustomQueryAutoComplete]) +#endif [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(doAutoCompletion) object:nil]; @@ -1362,7 +1412,7 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) // } // } // } else { - arr = [NSArray arrayWithArray:[[[self delegate] valueForKeyPath:@"tablesListInstance"] allTableAndViewNames]]; + arr = [NSArray arrayWithArray:[[(NSObject*)[self delegate] valueForKeyPath:@"tablesListInstance"] allTableAndViewNames]]; if(arr == nil) { arr = [NSArray array]; } @@ -1371,13 +1421,13 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) // } } else if([kind isEqualToString:@"$SP_ASLIST_ALL_DATABASES"]) { - arr = [NSArray arrayWithArray:[[[self delegate] valueForKeyPath:@"tablesListInstance"] allDatabaseNames]]; + arr = [NSArray arrayWithArray:[[(NSObject*)[self delegate] valueForKeyPath:@"tablesListInstance"] allDatabaseNames]]; if(arr == nil) { arr = [NSArray array]; } for(id w in arr) [possibleCompletions addObject:[NSDictionary dictionaryWithObjectsAndKeys:w, @"display", @"database-small", @"image", @"", @"isRef", nil]]; - arr = [NSArray arrayWithArray:[[[self delegate] valueForKeyPath:@"tablesListInstance"] allSystemDatabaseNames]]; + arr = [NSArray arrayWithArray:[[(NSObject*)[self delegate] valueForKeyPath:@"tablesListInstance"] allSystemDatabaseNames]]; if(arr == nil) { arr = [NSArray array]; } @@ -1733,6 +1783,7 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) if (tablesListInstance && [tablesListInstance selectedDatabase]) currentDb = [tablesListInstance selectedDatabase]; +#ifndef SP_REFACTOR while([theHintString isMatchedByRegex:@"(?<!\\\\)\\$SP_SELECTED_TABLES"]) { r = [theHintString rangeOfRegex:@"(?<!\\\\)\\$SP_SELECTED_TABLES"]; if(r.length) { @@ -1744,6 +1795,7 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) } [theHintString flushCachedRegexData]; } +#endif while([theHintString isMatchedByRegex:@"(?<!\\\\)\\$SP_SELECTED_TABLE"]) { r = [theHintString rangeOfRegex:@"(?<!\\\\)\\$SP_SELECTED_TABLE"]; @@ -1772,6 +1824,7 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) [theHintString replaceOccurrencesOfRegex:@"\\\\(\\$\\(|\\}|\\$SP_)" withString:@"$1"]; [theHintString flushCachedRegexData]; +#ifndef SP_REFACTOR // If inside the snippet hint $(…) is defined run … as BASH command // and replace $(…) by the return string of that command. Please note // only one $(…) statement is allowed within one ${…} snippet environment. @@ -1794,6 +1847,7 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) } } [theHintString flushCachedRegexData]; +#endif [snip replaceCharactersInRange:snipRange withString:theHintString]; [snip flushCachedRegexData]; @@ -1899,11 +1953,15 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) [self insertText:snip]; // If autopair is enabled check whether snip begins with ( and ends with ), if so mark ) as pair-linked - if ([prefs boolForKey:SPCustomQueryAutoPairCharacters] - && (([snip hasPrefix:@"("] && [snip hasSuffix:@")"]) - || ([snip hasPrefix:@"`"] && [snip hasSuffix:@"`"]) - || ([snip hasPrefix:@"'"] && [snip hasSuffix:@"'"]) - || ([snip hasPrefix:@"\""] && [snip hasSuffix:@"\""]))) +#ifndef SP_REFACTOR + if ([prefs boolForKey:SPCustomQueryAutoPairCharacters] && +#else + if ( +#endif + (([snip hasPrefix:@"("] && [snip hasSuffix:@")"]) + || ([snip hasPrefix:@"`"] && [snip hasSuffix:@"`"]) + || ([snip hasPrefix:@"'"] && [snip hasSuffix:@"'"]) + || ([snip hasPrefix:@"\""] && [snip hasSuffix:@"\""]))) { [[self textStorage] addAttribute:kAPlinked value:kAPval range:NSMakeRange([self selectedRange].location - 1, 1)]; } @@ -2019,23 +2077,28 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) { // Cancel autoHelp timer +#ifndef SP_REFACTOR if([prefs boolForKey:SPCustomQueryUpdateAutoHelp]) [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(autoHelp) object:nil]; +#endif // Cancel auto-completion timer +#ifndef SP_REFACTOR if([prefs boolForKey:SPCustomQueryAutoComplete]) +#endif [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(doAutoCompletion) object:nil]; [super mouseDown:theEvent]; +#ifndef SP_REFACTOR // Start autoHelp timer if([prefs boolForKey:SPCustomQueryUpdateAutoHelp]) [self performSelector:@selector(autoHelp) withObject:nil afterDelay:[[prefs valueForKey:SPCustomQueryAutoHelpDelay] doubleValue]]; - +#endif } /** @@ -2043,6 +2106,7 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) */ - (void) keyDown:(NSEvent *)theEvent { +#ifndef SP_REFACTOR if([prefs boolForKey:SPCustomQueryUpdateAutoHelp]) {// restart autoHelp timer [NSObject cancelPreviousPerformRequestsWithTarget:self @@ -2051,9 +2115,12 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) [self performSelector:@selector(autoHelp) withObject:nil afterDelay:[[prefs valueForKey:SPCustomQueryAutoHelpDelay] doubleValue]]; } +#endif // Cancel auto-completion timer +#ifndef SP_REFACTOR if([prefs boolForKey:SPCustomQueryAutoComplete]) +#endif [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(doAutoCompletion) object:nil]; @@ -2081,7 +2148,9 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) [self setCompletionWasReinvokedAutomatically:NO]; completionWasRefreshed = NO; // Cancel autocompletion trigger +#ifndef SP_REFACTOR if([prefs boolForKey:SPCustomQueryAutoComplete]) +#endif [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(doAutoCompletion) object:nil]; @@ -2156,11 +2225,14 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) // Check for TAB as indention for current line, i.e. left of the caret there are only white spaces // but only if Soft Indent is set +#ifndef SP_REFACTOR if([prefs boolForKey:SPCustomQuerySoftIndent] && [self isCaretAtIndentPositionIgnoreLineStart:YES]) { if([self shiftSelectionRight]) return; } +#endif } +#ifndef SP_REFACTOR // Note: switch(insertedCharacter) {} does not work instead use charactersIgnoringModifiers if([charactersIgnMod isEqualToString:@"h"]) // ^H show MySQL Help if(curFlags==(NSControlKeyMask)) @@ -2168,6 +2240,7 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) [self showMySQLHelpForCurrentWord:self]; return; } +#endif if([charactersIgnMod isEqualToString:@"y"]) // ^Y select current query if(curFlags==(NSControlKeyMask)) { @@ -2188,14 +2261,20 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) if([charactersIgnMod isEqualToString:@"0"]) { // reset font to default BOOL editableStatus = [self isEditable]; [self setEditable:YES]; +#ifndef SP_REFACTOR [self setFont:[NSUnarchiver unarchiveObjectWithData:[prefs dataForKey:SPCustomQueryEditorFont]]]; +#endif [self setEditable:editableStatus]; return; } } // Only process for character autopairing if autopairing is enabled and a single character is being added. +#ifndef SP_REFACTOR if ([prefs boolForKey:SPCustomQueryAutoPairCharacters] && characters && [characters length] == 1) { +#else + if (characters && [characters length] == 1) { +#endif delBackwardsWasPressed = NO; @@ -2400,7 +2479,11 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) } // Remove soft indent if active and left from caret are only white spaces +#ifndef SP_REFACTOR else if ([prefs boolForKey:SPCustomQuerySoftIndent] && [self isCaretAtIndentPositionIgnoreLineStart:NO]) +#else + else if ([self isCaretAtIndentPositionIgnoreLineStart:NO]) +#endif { [self shiftSelectionLeft]; return; @@ -2422,7 +2505,9 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) // Handle newlines, adding any indentation found on the current line to the new line - ignoring the enter key if appropriate if (aSelector == @selector(insertNewline:) +#ifndef SP_REFACTOR && [prefs boolForKey:SPCustomQueryAutoIndent] +#endif && (!autoindentIgnoresEnter || [[NSApp currentEvent] keyCode] != 0x4C)) { NSString *textViewString = [[self textStorage] string]; @@ -2460,6 +2545,7 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) } // Remove soft indent if active and left from caret are only white spaces +#ifndef SP_REFACTOR if (aSelector == @selector(deleteForward:) && ![self selectedRange].length && [prefs boolForKey:SPCustomQuerySoftIndent] @@ -2469,6 +2555,7 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) [self shiftSelectionLeft]; return; } +#endif [super doCommandBySelector:aSelector]; } @@ -2522,6 +2609,7 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) return autopairEnabled; } +#ifndef SP_REFACTOR /** * Set whether MySQL Help should be automatically invoked while typing. */ @@ -2537,6 +2625,7 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) { return autohelpEnabled; } +#endif /** * Set whether SQL keywords should be automatically uppercased. @@ -2562,7 +2651,11 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) - (void)autoHelp { +#ifndef SP_REFACTOR if(![prefs boolForKey:SPCustomQueryUpdateAutoHelp] || ![[self string] length]) return; +#else + if(![[self string] length]) return; +#endif // If selection show Help for it if([self selectedRange].length) @@ -2784,7 +2877,11 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) - (void) setTabStops { +#ifndef SP_REFACTOR NSFont *tvFont = [self font]; +#else + NSFont* tvFont = [NSFont userFixedPitchFontOfSize:10.0]; +#endif NSInteger i; NSTextTab *aTab; NSMutableArray *myArrayOfTabs; @@ -2793,7 +2890,11 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) BOOL oldEditableStatus = [self isEditable]; [self setEditable:YES]; +#ifndef SP_REFACTOR NSInteger tabStopWidth = [prefs integerForKey:SPCustomQueryEditorTabStopWidth]; +#else + NSInteger tabStopWidth = 4; +#endif if(tabStopWidth < 1) tabStopWidth = 1; float tabWidth = NSSizeToCGSize([[NSString stringWithString:@" "] sizeWithAttributes:[NSDictionary dictionaryWithObject:tvFont forKey:NSFontAttributeName]]).width; @@ -2960,11 +3061,13 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) */ - (NSMenu *)menuForEvent:(NSEvent *)event { +#ifndef SP_REFACTOR // Set title of the menu item if([self selectedRange].length) showMySQLHelpFor = NSLocalizedString(@"MySQL Help for Selection", @"MySQL Help for Selection"); else showMySQLHelpFor = NSLocalizedString(@"MySQL Help for Word", @"MySQL Help for Word"); +#endif // Add the menu items for // - MySQL Help for Word/Selection @@ -2973,6 +3076,7 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) // if it doesn't yet exist NSMenu *menu = [[self class] defaultMenu]; +#ifndef SP_REFACTOR if ([[[self class] defaultMenu] itemWithTag:SP_CQ_SEARCH_IN_MYSQL_HELP_MENU_ITEM_TAG] == nil) { [menu insertItem:[NSMenuItem separatorItem] atIndex:3]; @@ -2984,6 +3088,7 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) } else { [[menu itemWithTag:SP_CQ_SEARCH_IN_MYSQL_HELP_MENU_ITEM_TAG] setTitle:showMySQLHelpFor]; } +#endif if ([[[self class] defaultMenu] itemWithTag:SP_CQ_COPY_AS_RTF_MENU_ITEM_TAG] == nil) { NSMenuItem *copyAsRTFMenuItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"Copy as RTF", @"Copy as RTF") action:@selector(copyAsRTF) keyEquivalent:@""]; @@ -3010,6 +3115,7 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) [[menu itemAtIndex:6] setHidden:YES]; } +#ifndef SP_REFACTOR [[NSApp delegate] reloadBundles:self]; // Remove 'Bundles' sub menu and separator @@ -3074,6 +3180,7 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) [bundleSubMenuItem release]; } +#endif return menu; @@ -3147,7 +3254,9 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) if (textStore!=[self textStorage]) return; // Cancel autocompletion trigger +#ifndef SP_REFACTOR if([prefs boolForKey:SPCustomQueryAutoComplete]) +#endif [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(doAutoCompletion) object:nil]; @@ -3155,13 +3264,20 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) NSInteger editedMask = [textStore editedMask]; // Start autohelp only if the user really changed the text (not e.g. for setting a background color) +#ifndef SP_REFACTOR if([prefs boolForKey:SPCustomQueryUpdateAutoHelp] && editedMask != 1) { [self performSelector:@selector(autoHelp) withObject:nil afterDelay:[[prefs valueForKey:SPCustomQueryAutoHelpDelay] doubleValue]]; } +#endif // Start autocompletion if enabled +#ifndef SP_REFACTOR if([[NSApp keyWindow] firstResponder] == self && [prefs boolForKey:SPCustomQueryAutoComplete] && !completionIsOpen && editedMask != 1 && [textStore changeInLength] == 1) [self performSelector:@selector(doAutoCompletion) withObject:nil afterDelay:[[prefs valueForKey:SPCustomQueryAutoCompleteDelay] doubleValue]]; +#else + if([[NSApp keyWindow] firstResponder] == self && !completionIsOpen && editedMask != 1 && [textStore changeInLength] == 1) + [self performSelector:@selector(doAutoCompletion) withObject:nil afterDelay:1.5]; +#endif // Cancel calling doSyntaxHighlighting for large text if([[self string] length] > SP_TEXT_SIZE_TRIGGER_FOR_PARTLY_PARSING) @@ -3488,6 +3604,7 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) - (void)changeFont:(id)sender { +#ifndef SP_REFACTOR if (prefs && [self font] != nil) { [prefs setObject:[NSArchiver archivedDataWithRootObject:[self font]] forKey:SPCustomQueryEditorFont]; NSFont *nf = [[NSFontPanel sharedFontPanel] panelConvertFont:[NSUnarchiver unarchiveObjectWithData:[prefs dataForKey:SPCustomQueryEditorFont]]]; @@ -3498,6 +3615,7 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) [self setNeedsDisplay:YES]; [prefs setObject:[NSArchiver archivedDataWithRootObject:nf] forKey:SPCustomQueryEditorFont]; } +#endif } #pragma mark - @@ -3513,6 +3631,7 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) // Remove observers [[NSNotificationCenter defaultCenter] removeObserver:self]; +#ifndef SP_REFACTOR [prefs removeObserver:self forKeyPath:SPCustomQueryEditorFont]; [prefs removeObserver:self forKeyPath:SPCustomQueryEditorBackgroundColor]; [prefs removeObserver:self forKeyPath:SPCustomQueryEditorHighlightQueryColor]; @@ -3526,9 +3645,12 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) [prefs removeObserver:self forKeyPath:SPCustomQueryEditorTextColor]; [prefs removeObserver:self forKeyPath:SPCustomQueryEditorTabStopWidth]; [prefs removeObserver:self forKeyPath:SPCustomQueryAutoUppercaseKeywords]; +#endif if (completionIsOpen) [completionPopup close], completionIsOpen = NO; +#ifndef SP_REFACTOR [prefs release]; +#endif [lineNumberView release]; if(queryHiliteColor) [queryHiliteColor release]; if(queryEditorBackgroundColor) [queryEditorBackgroundColor release]; diff --git a/Source/SPTextViewAdditions.h b/Source/SPTextViewAdditions.h index 013d8872..e95b7041 100644 --- a/Source/SPTextViewAdditions.h +++ b/Source/SPTextViewAdditions.h @@ -42,9 +42,12 @@ - (IBAction)moveSelectionLineUp:(id)sender; - (IBAction)moveSelectionLineDown:(id)sender; +#ifndef SP_REFACTOR - (IBAction)executeBundleItemForInputField:(id)sender; +#endif - (void)makeTextSizeLarger; - (void)makeTextSizeSmaller; +- (void)makeTextStandardSize; @end diff --git a/Source/SPTextViewAdditions.m b/Source/SPTextViewAdditions.m index 0d3b4b8e..b2a2354b 100644 --- a/Source/SPTextViewAdditions.m +++ b/Source/SPTextViewAdditions.m @@ -389,7 +389,6 @@ */ - (IBAction)insertNULLvalue:(id)sender { - id prefs = [NSUserDefaults standardUserDefaults]; if ([self respondsToSelector:@selector(insertText:)]) { if([prefs stringForKey:SPNullValue] && [[prefs stringForKey:SPNullValue] length]) @@ -482,6 +481,19 @@ [self setEditable:editableStatus]; } +/** + * Increase the textView's font size by 1 + */ +- (void)makeTextStandardSize +{ + NSFont *aFont = [self font]; + BOOL editableStatus = [self isEditable]; + [self setEditable:YES]; + [self setFont:[[NSFontManager sharedFontManager] convertFont:aFont toSize:11.0f]]; + [self setEditable:editableStatus]; +} + +#ifndef SP_REFACTOR - (IBAction)executeBundleItemForInputField:(id)sender { @@ -859,5 +871,6 @@ else if([anEvent deltaZ]<-5.0) [self makeTextSizeSmaller]; } +#endif @end |