diff options
Diffstat (limited to 'Source/SPTableContentDataSource.m')
-rw-r--r-- | Source/SPTableContentDataSource.m | 49 |
1 files changed, 17 insertions, 32 deletions
diff --git a/Source/SPTableContentDataSource.m b/Source/SPTableContentDataSource.m index a005cdce..562a5856 100644 --- a/Source/SPTableContentDataSource.m +++ b/Source/SPTableContentDataSource.m @@ -165,10 +165,10 @@ } #endif if (tableView == tableContentView) { - + NSInteger columnIndex = [[tableColumn identifier] integerValue]; // If the current cell should have been edited in a sheet, do nothing - field closing will have already // updated the field. - if ([tableContentView shouldUseFieldEditorForRow:rowIndex column:[[tableColumn identifier] integerValue] checkWithLock:NULL]) { + if ([tableContentView shouldUseFieldEditorForRow:rowIndex column:columnIndex checkWithLock:NULL]) { return; } @@ -178,11 +178,6 @@ return; } - NSInteger columnIndex = [[tableColumn identifier] integerValue]; - NSDictionary *columnDefinition = [[(id <SPDatabaseContentViewDelegate>)[tableContentView delegate] dataColumnDefinitions] objectAtIndex:columnIndex]; - - NSString *columnType = [columnDefinition objectForKey:@"typegrouping"]; - // Catch editing events in the row and if the row isn't currently being edited, // start an edit. This allows edits including enum changes to save correctly. if (isEditingRow && [tableContentView selectedRow] != currentlyEditingRow) { @@ -196,39 +191,29 @@ currentlyEditingRow = rowIndex; } - NSDictionary *column = NSArrayObjectAtIndex(dataColumns, [[tableColumn identifier] integerValue]); + NSDictionary *column = NSArrayObjectAtIndex(dataColumns, columnIndex); - if ([columnType isEqualToString:@"binary"] && [object isKindOfClass: [NSString class]]) { - // - // This is a binary object being edited as a hex string. (Is there a better - // way to detect this case?) - // Convert the string back to binary, checking for errors. - // - NSData *data = [NSData dataWithHexString: object]; - if (data) { - object = data; - [tableValues replaceObjectInRow:rowIndex column:[[tableColumn identifier] integerValue] withObject:object]; - } - else { - SPOnewayAlertSheet( - NSLocalizedString(@"Error", @"error"), - [tableDocumentInstance parentWindow], - NSLocalizedString(@"Bad hexadecimal data input.", @"Bad hexadecimal data input.") - ); - return; - - } - } - else if (object) { + if (object) { // Restore NULLs if necessary if ([object isEqualToString:[prefs objectForKey:SPNullValue]] && [[column objectForKey:@"null"] boolValue]) { object = [NSNull null]; } + else if ([self cellValueIsDisplayedAsHexForColumn:columnIndex]) { + // This is a binary object being edited as a hex string. + // Convert the string back to binary. + // Error checking is done in -control:textShouldEndEditing: + NSData *data = [NSData dataWithHexString:object]; + if (!data) { + NSBeep(); + return; + } + object = data; + } - [tableValues replaceObjectInRow:rowIndex column:[[tableColumn identifier] integerValue] withObject:object]; + [tableValues replaceObjectInRow:rowIndex column:columnIndex withObject:object]; } else { - [tableValues replaceObjectInRow:rowIndex column:[[tableColumn identifier] integerValue] withObject:@""]; + [tableValues replaceObjectInRow:rowIndex column:columnIndex withObject:@""]; } } } |