From 1d12c0e41319ffd2a1f1ab62305bd2688910f151 Mon Sep 17 00:00:00 2001 From: Abhi Beckert Date: Fri, 10 Mar 2017 13:38:05 +1000 Subject: #2629 show binary data as hex now also applies to blob --- Source/SPTableContentDataSource.m | 34 +++++++++++++++++++++++++++------- Source/SPTableContentDelegate.m | 13 ++++--------- 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/Source/SPTableContentDataSource.m b/Source/SPTableContentDataSource.m index 34b886d4..56e8df71 100644 --- a/Source/SPTableContentDataSource.m +++ b/Source/SPTableContentDataSource.m @@ -106,10 +106,6 @@ value = [self _contentValueForTableColumn:columnIndex row:rowIndex asPreview:YES]; } } - - NSDictionary *columnDefinition = [[(id )[tableContentView delegate] dataColumnDefinitions] objectAtIndex:columnIndex]; - - NSString *columnType = [columnDefinition objectForKey:@"typegrouping"]; if ([value isKindOfClass:[SPMySQLGeometryData class]]) { return [value wktString]; @@ -120,9 +116,12 @@ } if ([value isKindOfClass:[NSData class]]) { - - if ([columnType isEqualToString:@"binary"] && [prefs boolForKey:SPDisplayBinaryDataAsHex]) { - return [NSString stringWithFormat:@"0x%@", [value dataToHexString]]; + + if ([self cellValueIsDisplayedAsHexForColumn:columnIndex]) { + if ([(NSData *)value length] > 255) { + return [NSString stringWithFormat:@"0x%@...", [[(NSData *)value subdataWithRange:NSMakeRange(0, 255)] dataToHexString]]; + } + return [NSString stringWithFormat:@"0x%@", [(NSData *)value dataToHexString]]; } pthread_mutex_t *fieldEditorCheckLock = NULL; @@ -207,6 +206,27 @@ } } +- (BOOL)cellValueIsDisplayedAsHexForColumn:(NSUInteger)columnIndex +{ + if (![prefs boolForKey:SPDisplayBinaryDataAsHex]) { + return NO; + } + + NSDictionary *columnDefinition = [[(id )[tableContentView delegate] dataColumnDefinitions] objectAtIndex:columnIndex]; + NSString *typeGrouping = columnDefinition[@"typegrouping"]; + + if ([typeGrouping isEqual:@"binary"]) { + return YES; + } + + if ([typeGrouping isEqual:@"blobdata"]) { + return YES; + } + + + return NO; +} + @end @implementation SPTableContent (SPTableContentDataSource_Private_API) diff --git a/Source/SPTableContentDelegate.m b/Source/SPTableContentDelegate.m index 6634e29e..a510108b 100644 --- a/Source/SPTableContentDelegate.m +++ b/Source/SPTableContentDelegate.m @@ -54,6 +54,7 @@ @interface SPTableContent (SPDeclaredAPI) - (BOOL)cancelRowEditing; +- (BOOL)cellValueIsDisplayedAsHexForColumn:(NSUInteger)columnIndex; @end @@ -273,7 +274,7 @@ NSDictionary *columnDefinition = [cqColumnDefinition objectAtIndex:[[tableColumn identifier] integerValue]]; // TODO: Fix editing of "Display as Hex" columns and remove this (also see above) - if ([[columnDefinition objectForKey:@"typegrouping"] isEqualToString:@"binary"] && [prefs boolForKey:SPDisplayBinaryDataAsHex]) { + if ([self cellValueIsDisplayedAsHexForColumn:[[tableColumn identifier] integerValue]]) { NSBeep(); [SPTooltip showWithObject:NSLocalizedString(@"Disable \"Display Binary Data as Hex\" in the View menu to edit this field.",@"Temporary : Tooltip shown when trying to edit a binary field in table content view while it is displayed using HEX conversion")]; return NO; @@ -330,7 +331,7 @@ cellValue = [NSString stringWithString:[prefs objectForKey:SPNullValue]]; } - if ([[columnDefinition objectForKey:@"typegrouping"] isEqualToString:@"binary"] && [prefs boolForKey:SPDisplayBinaryDataAsHex]) { + if ([self cellValueIsDisplayedAsHexForColumn:[[tableColumn identifier] integerValue]]) { [fieldEditor setTextMaxLength:[[self tableView:tableContentView objectValueForTableColumn:tableColumn row:rowIndex] length]]; isFieldEditable = NO; } @@ -521,13 +522,7 @@ NSDictionary *columnDefinition = [[(id )[tableContentView delegate] dataColumnDefinitions] objectAtIndex:columnIndex]; - NSString *columnType = [columnDefinition objectForKey:@"typegrouping"]; - - // Find a more reliable way of doing this check - if ([columnType isEqualToString:@"binary"] && - [prefs boolForKey:SPDisplayBinaryDataAsHex] && - [[self tableView:tableContentView objectValueForTableColumn:tableColumn row:rowIndex] hasPrefix:@"0x"]) { - + if ([self cellValueIsDisplayedAsHexForColumn:[[tableColumn identifier] integerValue]]) { [cell setTextColor:rowIndex == [tableContentView selectedRow] ? whiteColor : blueColor]; } -- cgit v1.2.3