Revision: 26203 http://sourceforge.net/p/bibdesk/svn/26203 Author: hofman Date: 2021-06-11 13:46:58 +0000 (Fri, 11 Jun 2021) Log Message: ----------- Only override setting value from table when editing as complex string, use value as flag wheter to override, check NSTableView class for implementaiton of private method, as our subclass always does, even if it is not valid.
Modified Paths: -------------- trunk/bibdesk/BDSKComplexStringTableView.m Modified: trunk/bibdesk/BDSKComplexStringTableView.m =================================================================== --- trunk/bibdesk/BDSKComplexStringTableView.m 2021-06-11 06:30:27 UTC (rev 26202) +++ trunk/bibdesk/BDSKComplexStringTableView.m 2021-06-11 13:46:58 UTC (rev 26203) @@ -37,6 +37,8 @@ */ #import "BDSKComplexStringTableView.h" +#import "BDSKComplexString.h" +#import "BDSKComplexStringFormatter.h" @interface NSTableView (BDSKApplePrivate) - (void)_dataSourceSetValue:(id)value forColumn:(NSTableColumn *)tableColumn row:(NSInteger)row; @@ -61,26 +63,29 @@ */ NSInteger editedRow = [self editedRow]; NSInteger editedColumn = [self editedColumn]; - BOOL shouldCheckValue = NO; id newValue = nil; - if (editedColumn >= 0 && editedRow >= 0 && [self respondsToSelector:@selector(_dataSourceSetValue:forColumn:row:)]) { + if (editedColumn >= 0 && editedRow >= 0 && [NSTableView instancesRespondToSelector:@selector(_dataSourceSetValue:forColumn:row:)]) { NSCell *editedCell = [self preparedCellAtColumn:editedColumn row:editedRow]; NSFormatter *formatter = [editedCell formatter]; - id oldValue = [editedCell objectValue]; - newValue = [[aNotification object] string]; - if (formatter == nil || [formatter getObjectValue:&newValue forString:newValue errorDescription:NULL]) { - shouldCheckValue = [oldValue respondsToSelector:@selector(isEqualAsComplexString:)] && - [newValue respondsToSelector:@selector(isEqualAsComplexString:)] && - [oldValue isEqualAsComplexString:newValue] == NO; + if ([formatter respondsToSelector:@selector(editAsComplexString)] && + [(BDSKComplexStringFormatter *)formatter editAsComplexString]) { + id oldValue = [editedCell objectValue]; + if ([oldValue respondsToSelector:@selector(isEqualAsComplexString:)]) { + newValue = [[aNotification object] string]; + if ([formatter getObjectValue:&newValue forString:newValue errorDescription:NULL] && [newValue respondsToSelector:@selector(isEqualAsComplexString:)] && [oldValue isEqualAsComplexString:newValue] == NO) + newValue = [newValue copy]; + else + newValue = nil; + } } - newValue = [newValue copy]; } + didSetValue = NO; [super textDidEndEditing:aNotification]; // only try setting if NSTableView did not, and if these are not equal as complex strings - if (didSetValue == NO && shouldCheckValue) + if (didSetValue == NO && newValue != nil) [self _dataSourceSetValue:newValue forColumn:[[self tableColumns] objectAtIndex:editedColumn] row:editedRow]; [newValue release]; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. _______________________________________________ Bibdesk-commit mailing list Bibdesk-commit@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bibdesk-commit