aboutsummaryrefslogtreecommitdiffstats
path: root/Source/SPTableStructure.m
diff options
context:
space:
mode:
Diffstat (limited to 'Source/SPTableStructure.m')
-rw-r--r--Source/SPTableStructure.m143
1 files changed, 121 insertions, 22 deletions
diff --git a/Source/SPTableStructure.m b/Source/SPTableStructure.m
index aab62af8..a616951c 100644
--- a/Source/SPTableStructure.m
+++ b/Source/SPTableStructure.m
@@ -68,7 +68,9 @@
fieldValidation = [[SPTableFieldValidation alloc] init];
+#ifndef SP_REFACTOR /* patch */
prefs = [NSUserDefaults standardUserDefaults];
+#endif
}
return self;
@@ -79,12 +81,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 +164,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 +186,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];
}
@@ -314,7 +337,11 @@
if(![theField objectForKey:@"default"])
[theField setObject:@"" forKey:@"default"];
else if([[theField objectForKey:@"default"] isKindOfClass:[NSNull class]])
+#ifndef SP_REFACTOR /* patch */
[theField setObject:[prefs stringForKey:SPNullValue] forKey:@"default"];
+#else
+ [theField setObject:@"NULL" forKey:@"default"];
+#endif
// Init Extra field
[theField setObject:@"None" forKey:@"Extra"];
@@ -373,7 +400,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 +477,17 @@
NSInteger insertIndex = ([tableSourceView numberOfSelectedRows] == 0 ? [tableSourceView numberOfRows] : [tableSourceView selectedRow] + 1);
+#ifndef SP_REFACTOR
[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];
@@ -477,7 +516,7 @@
alternateButton:nil
otherButton:nil
informativeTextWithFormat:[NSString stringWithFormat:NSLocalizedString(@"An error occurred while fetching the optimized field type.\n\nMySQL said:%@",@"an error occurred while fetching the optimized field type.\n\nMySQL said:%@"), [mySQLConnection getLastErrorMessage]]]
- beginSheetModalForWindow:[tableDocumentInstance parentWindow]
+ beginSheetModalForWindow:[NSApp keyWindow]
modalDelegate:self
didEndSelector:NULL
contextInfo:NULL];
@@ -500,7 +539,7 @@
alternateButton:nil
otherButton:nil
informativeTextWithFormat:type]
- beginSheetModalForWindow:[tableDocumentInstance parentWindow]
+ beginSheetModalForWindow:[NSApp keyWindow]
modalDelegate:self
didEndSelector:NULL
contextInfo:NULL];
@@ -603,7 +642,7 @@
[alert setAlertStyle:NSCriticalAlertStyle];
- [alert beginSheetModalForWindow:[tableDocumentInstance parentWindow] modalDelegate:self didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:) contextInfo:@"cannotremovefield"];
+ [alert beginSheetModalForWindow:[NSApp keyWindow] modalDelegate:self didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:) contextInfo:@"cannotremovefield"];
}
@@ -641,7 +680,7 @@
[[buttons objectAtIndex:0] setKeyEquivalentModifierMask:NSCommandKeyMask];
[[buttons objectAtIndex:1] setKeyEquivalent:@"\r"];
- [alert beginSheetModalForWindow:[tableDocumentInstance parentWindow] modalDelegate:self didEndSelector:@selector(removeFieldSheetDidEnd:returnCode:contextInfo:) contextInfo:(hasForeignKey) ? @"removeFieldAndForeignKey" : @"removeField"];
+ [alert beginSheetModalForWindow:[NSApp keyWindow] modalDelegate:self didEndSelector:@selector(removeFieldSheetDidEnd:returnCode:contextInfo:) contextInfo:(hasForeignKey) ? @"removeFieldAndForeignKey" : @"removeField"];
}
/**
@@ -658,7 +697,7 @@
// Begin the sheet
[NSApp beginSheet:resetAutoIncrementSheet
- modalForWindow:[tableDocumentInstance parentWindow]
+ modalForWindow:[NSApp keyWindow]
modalDelegate:self
didEndSelector:@selector(resetAutoincrementSheetDidEnd:returnCode:contextInfo:)
contextInfo:nil];
@@ -727,7 +766,7 @@
autoIncrementIndex = nil;
[tableSourceView reloadData];
currentlyEditingRow = -1;
- [[tableDocumentInstance parentWindow] makeFirstResponder:tableSourceView];
+ [[NSApp keyWindow] makeFirstResponder:tableSourceView];
return YES;
}
@@ -769,8 +808,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 +834,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 +853,18 @@
NSMutableArray *tempResult = [NSMutableArray arrayWithCapacity:numOfRows];
NSMutableDictionary *tempRow;
NSArray *keys;
- NSUInteger i;
+ NSInteger i;
+#ifndef SP_REFACTOR /* patch */
id prefsNullValue = [prefs objectForKey:SPNullValue];
+#else
+ id prefsNullValue = @"NULL";
+#endif
// 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
@@ -852,9 +901,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.
- id currentFirstResponder = [[tableDocumentInstance parentWindow] firstResponder];
+ id currentFirstResponder = [[NSApp keyWindow] firstResponder];
if (currentFirstResponder && [currentFirstResponder isKindOfClass:[NSView class]] && [(NSView *)currentFirstResponder isDescendantOf:tableSourceView]) {
- [[tableDocumentInstance parentWindow] endEditingFor:nil];
+ [[NSApp keyWindow] endEditingFor:nil];
}
// If no rows are currently being edited, or a save is already in progress, return success at once.
@@ -862,7 +911,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 +933,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 +984,12 @@
[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]]) {
+#ifndef SP_REFACTOR /* patch */
+ if ([[theRow objectForKey:@"default"] isEqualToString:[prefs objectForKey:SPNullValue]])
+#else
+ if ([[theRow objectForKey:@"default"] isEqualToString:@"NULL"])
+#endif
+ {
if ([[theRow objectForKey:@"null"] integerValue] == 1) {
[queryString appendString:@"\n DEFAULT NULL "];
}
@@ -1003,7 +1061,12 @@
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]]) {
+#ifndef SP_REFACTOR /* patch */
+ if ([[theRow objectForKey:@"default"] isEqualToString:[prefs objectForKey:SPNullValue]])
+#else
+ if ([[theRow objectForKey:@"default"] isEqualToString:@"NULL"])
+#endif
+ {
if ([[theRow objectForKey:@"null"] integerValue] == 1) {
[queryString appendString:@"\n DEFAULT NULL"];
}
@@ -1122,7 +1185,7 @@
if([mySQLConnection getLastErrorID] == 1146) { // If the current table doesn't exist anymore
SPBeginAlertSheet(NSLocalizedString(@"Error", @"error"),
NSLocalizedString(@"OK", @"OK button"),
- nil, nil, [tableDocumentInstance parentWindow], self, nil, nil,
+ nil, nil, [NSApp keyWindow], self, nil, nil,
[NSString stringWithFormat:NSLocalizedString(@"An error occurred while trying to alter table '%@'.\n\nMySQL said: %@", @"error while trying to alter table message"),
selectedTable, [mySQLConnection getLastErrorMessage]]);
@@ -1145,14 +1208,14 @@
if (isEditingNewRow) {
SPBeginAlertSheet(NSLocalizedString(@"Error adding field", @"error adding field message"),
NSLocalizedString(@"Edit row", @"Edit row button"),
- NSLocalizedString(@"Discard changes", @"discard changes button"), nil, [tableDocumentInstance parentWindow], self, @selector(addRowErrorSheetDidEnd:returnCode:contextInfo:), nil,
+ NSLocalizedString(@"Discard changes", @"discard changes button"), nil, [NSApp keyWindow], self, @selector(addRowErrorSheetDidEnd:returnCode:contextInfo:), nil,
[NSString stringWithFormat:NSLocalizedString(@"An error occurred when trying to add the field '%@' via\n\n%@\n\nMySQL said: %@", @"error adding field informative message"),
[theRow objectForKey:@"name"], queryString, [mySQLConnection getLastErrorMessage]]);
}
else {
SPBeginAlertSheet(NSLocalizedString(@"Error changing field", @"error changing field message"),
NSLocalizedString(@"Edit row", @"Edit row button"),
- NSLocalizedString(@"Discard changes", @"discard changes button"), nil, [tableDocumentInstance parentWindow], self, @selector(addRowErrorSheetDidEnd:returnCode:contextInfo:), nil,
+ NSLocalizedString(@"Discard changes", @"discard changes button"), nil, [NSApp keyWindow], self, @selector(addRowErrorSheetDidEnd:returnCode:contextInfo:), nil,
[NSString stringWithFormat:NSLocalizedString(@"An error occurred when trying to change the field '%@' via\n\n%@\n\nMySQL said: %@", @"error changing field informative message"),
[theRow objectForKey:@"name"], queryString, [mySQLConnection getLastErrorMessage]]);
}
@@ -1161,6 +1224,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
@@ -1179,7 +1260,7 @@
// Display the error sheet
SPBeginAlertSheet([errorDictionary objectForKey:@"title"], NSLocalizedString(@"OK", @"OK button"),
- nil, nil, [tableDocumentInstance parentWindow], self, nil, nil,
+ nil, nil, [NSApp keyWindow], self, nil, nil,
[errorDictionary objectForKey:@"message"]);
}
@@ -1261,7 +1342,7 @@
// Problem: reentering edit mode for first cell doesn't function
[tableSourceView selectRowIndexes:[NSIndexSet indexSetWithIndex:currentlyEditingRow] byExtendingSelection:NO];
- [tableSourceView 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];
+ [tableSourceView performSelector:@selector(keyDown:) withObject:[NSEvent keyEventWithType:NSKeyDown location:NSMakePoint(0,0) modifierFlags:0 timestamp:0 windowNumber:[[NSApp keyWindow] windowNumber] context:[NSGraphicsContext currentContext] characters:nil charactersIgnoringModifiers:nil isARepeat:NO keyCode:0x24] afterDelay:0.0];
}
// Discard changes and cancel editing
@@ -1280,6 +1361,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 +1377,7 @@
[tableSourceView reloadData];
[indexesTableView reloadData];
}
+#endif
}
#pragma mark -
@@ -1320,9 +1403,17 @@
- (NSString *)defaultValueForField:(NSString *)field
{
if ( ![defaultValues objectForKey:field] ) {
+#ifndef SP_REFACTOR /* patch */
return [prefs objectForKey:SPNullValue];
+#else
+ return @"NULL";
+#endif
} else if ( [[defaultValues objectForKey:field] isMemberOfClass:[NSNull class]] ) {
+#ifndef SP_REFACTOR /* patch */
return [prefs objectForKey:SPNullValue];
+#else
+ return @"NULL";
+#endif
} else {
return [defaultValues objectForKey:field];
}
@@ -1371,7 +1462,11 @@
NSMutableArray *tempResult = [NSMutableArray array];
NSMutableArray *tempResult2 = [NSMutableArray array];
+#ifndef SP_REFACTOR /* patch */
NSString *nullValue = [prefs stringForKey:SPNullValue];
+#else
+ NSString *nullValue = @"NULL";
+#endif
CFStringRef escapedNullValue = CFXMLCreateStringByEscapingEntities(NULL, ((CFStringRef)nullValue), NULL);
MCPResult *structureQueryResult = [mySQLConnection queryString:[NSString stringWithFormat:@"SHOW COLUMNS FROM %@", [selectedTable backtickQuotedString]]];
@@ -1441,8 +1536,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 +1559,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);
@@ -1551,7 +1650,7 @@
[tableDocumentInstance endTask];
// Preserve focus on table for keyboard navigation
- [[tableDocumentInstance parentWindow] makeFirstResponder:tableSourceView];
+ [[NSApp keyWindow] makeFirstResponder:tableSourceView];
[pool drain];
}