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

Reply via email to