Revision: 11877
          http://bibdesk.svn.sourceforge.net/bibdesk/?rev=11877&view=rev
Author:   hofman
Date:     2007-12-12 04:54:38 -0800 (Wed, 12 Dec 2007)

Log Message:
-----------
Handle nil values equivalently to empty string when setting a field value in 
the editor, to document dirtying for changing empty fields. 

Do not display empty custom fields, they may be left over from a type change. 

Implement field editor delegate methods for citation links through the editor 
tableview. This used to go through the form.

Modified Paths:
--------------
    trunk/bibdesk/BDSKEditor.m
    trunk/bibdesk/BDSKEditorTableView.h
    trunk/bibdesk/BDSKEditorTableView.m

Modified: trunk/bibdesk/BDSKEditor.m
===================================================================
--- trunk/bibdesk/BDSKEditor.m  2007-12-12 06:45:54 UTC (rev 11876)
+++ trunk/bibdesk/BDSKEditor.m  2007-12-12 12:54:38 UTC (rev 11877)
@@ -2190,9 +2190,8 @@
        }
 }
 
-#warning how does this work?
-- (BOOL)textViewShouldLinkKeys:(NSTextView *)textView forFormCell:(id)aCell {
-    return [[aCell representedObject] isCitationField];
+- (BOOL)tableView:(NSTableView *)tv textViewShouldLinkKeys:(NSTextView 
*)textView forTableColumn:(NSTableColumn *)tableColumn row:(int)row {
+    return [tv isEqual:tableView] && [[tableColumn identifier] 
isEqualToString:@"value"] && [[fields objectAtIndex:row] isCitationField];
 }
 
 static NSString *queryStringWithCiteKey(NSString *citekey)
@@ -2200,8 +2199,10 @@
     return [NSString stringWithFormat:@"(net_sourceforge_bibdesk_citekey = 
'%@'cd) && ((kMDItemContentType != *) || (kMDItemContentType != 
com.apple.mail.emlx))", citekey];
 }
 
-- (BOOL)textView:(NSTextView *)textView isValidKey:(NSString *)key 
forFormCell:(id)aCell {
-    if ([[[publication owner] publications] itemForCiteKey:key] == nil) {
+- (BOOL)tableView:(NSTableView *)tv textView:(NSTextView *)textView 
isValidKey:(NSString *)key forTableColumn:(NSTableColumn *)tableColumn 
row:(int)row {
+    if ([tv isEqual:tableView] == NO || [[tableColumn identifier] 
isEqualToString:@"value"] == NO) {
+        return NO;
+    } else if ([[[publication owner] publications] itemForCiteKey:key] == nil) 
{
         // don't add a search with the query here, since it gets called on 
every keystroke; the formatter method gets called at the end, or when scrolling
         NSString *queryString = queryStringWithCiteKey(key);
         return [[[BDSKPersistentSearch sharedSearch] 
resultsForQuery:queryString attribute:(id)kMDItemPath] count] > 0;
@@ -2209,19 +2210,23 @@
     return YES;
 }
 
-- (BOOL)textView:(NSTextView *)aTextView clickedOnLink:(id)aLink 
atIndex:(unsigned)charIndex forFormCell:(id)aCell {
-    BibItem *pub = [[[publication owner] publications] itemForCiteKey:aLink];
-    if (nil == pub) {
-        NSString *path = [[[BDSKPersistentSearch sharedSearch] 
resultsForQuery:queryStringWithCiteKey(aLink) attribute:(id)kMDItemPath] 
firstObject];
-        // if it was a valid key/link, we should definitely have a path, but 
better make sure
-        if (path)
-            [[NSWorkspace sharedWorkspace] openLinkedFile:path];
-        else
-            NSBeep();
+- (BOOL)tableView:(NSTableView *)tv textView:(NSTextView *)textView 
clickedOnLink:(id)aLink atIndex:(unsigned)charIndex 
forTableColumn:(NSTableColumn *)tableColumn row:(int)row {
+    if ([tv isEqual:tableView] == NO || [[tableColumn identifier] 
isEqualToString:@"value"] == NO) {
+        return NO;
     } else {
-        [[self document] editPub:[[[publication owner] publications] 
itemForCiteKey:aLink]];
+        BibItem *pub = [[[publication owner] publications] 
itemForCiteKey:aLink];
+        if (nil == pub) {
+            NSString *path = [[[BDSKPersistentSearch sharedSearch] 
resultsForQuery:queryStringWithCiteKey(aLink) attribute:(id)kMDItemPath] 
firstObject];
+            // if it was a valid key/link, we should definitely have a path, 
but better make sure
+            if (path)
+                [[NSWorkspace sharedWorkspace] openLinkedFile:path];
+            else
+                NSBeep();
+        } else {
+            [[self document] editPub:[[[publication owner] publications] 
itemForCiteKey:aLink]];
+        }
+        return YES;
     }
-    return YES;
 }
 
 - (BOOL)citationFormatter:(BDSKCitationFormatter *)formatter 
isValidKey:(NSString *)key {
@@ -2556,7 +2561,13 @@
             }
         }
         
-        if (NO == [object isEqualAsComplexString:[publication 
valueOfField:field]])
+        NSString *oldValue = [publication valueOfField:field];
+        if (oldValue == nil)
+            oldValue = @"";
+        if (object == nil)
+            object = @"";
+        
+        if (NO == [object isEqualAsComplexString:oldValue])
             [self recordChangingField:field toValue:object];
     }
 }
@@ -2870,11 +2881,12 @@
 
 @implementation BDSKEditor (Private)
 
-#define AddFields(newFields) \
+#define AddFields(newFields, checkEmpty) \
     e = [newFields objectEnumerator]; \
     while(tmp = [e nextObject]){ \
         if ([ignoredKeys containsObject:tmp]) continue; \
-               [ignoredKeys addObject:tmp]; \
+        if (checkEmpty && [[publication valueOfField:tmp inherit:NO] 
isEqualToString:@""]) continue; \
+        [ignoredKeys addObject:tmp]; \
         [fields addObject:tmp]; \
     }
 
@@ -2909,11 +2921,14 @@
        
     [fields removeAllObjects];
        
+    BDSKTypeManager *tm = [BDSKTypeManager sharedManager];
+    NSString *type = [publication pubType];
+    
        // now add the entries to the form
-       AddFields([[BDSKTypeManager sharedManager] 
requiredFieldsForType:[publication pubType]]);
-       AddFields([[BDSKTypeManager sharedManager] 
optionalFieldsForType:[publication pubType]]);
-       AddFields([[BDSKTypeManager sharedManager] 
userDefaultFieldsForType:[publication pubType]]);
-       AddFields(allFields);
+       AddFields([tm requiredFieldsForType:type], NO);
+       AddFields([tm optionalFieldsForType:type], NO);
+       AddFields([tm userDefaultFieldsForType:type], NO);
+       AddFields(allFields, YES);
     
     [ignoredKeys release];
     
@@ -2985,7 +3000,7 @@
        NSString *editedTitle = nil;
        int editedIndex = -1;
     if([[self window] firstResponder] == extraBibFields)
-        editedTitle = [(NSFormCell *)[extraBibFields selectedCell] 
representedObject];
+        editedTitle = [(NSCell *)[extraBibFields selectedCell] 
representedObject];
        
        NSEnumerator *e;
     NSString *tmp;

Modified: trunk/bibdesk/BDSKEditorTableView.h
===================================================================
--- trunk/bibdesk/BDSKEditorTableView.h 2007-12-12 06:45:54 UTC (rev 11876)
+++ trunk/bibdesk/BDSKEditorTableView.h 2007-12-12 12:54:38 UTC (rev 11877)
@@ -41,3 +41,9 @@
 
 @interface BDSKEditorTableView : NSTableView
 @end
+
[EMAIL PROTECTED] NSObject (BDSKEditorTableViewDelegate)
+- (BOOL)tableView:(NSTableView *)aTableView textViewShouldLinkKeys:(NSTextView 
*)textView forTableColumn:(NSTableColumn *)aTableColumn row:(int)row;
+- (BOOL)tableView:(NSTableView *)aTableView textView:(NSTextView *)textView 
isValidKey:(NSString *)key forTableColumn:(NSTableColumn *)aTableColumn 
row:(int)row;
+- (BOOL)tableView:(NSTableView *)aTableView textView:(NSTextView *)textView 
clickedOnLink:(id)link atIndex:(unsigned)charIndex 
forTableColumn:(NSTableColumn *)aTableColumn row:(int)row;
[EMAIL PROTECTED]

Modified: trunk/bibdesk/BDSKEditorTableView.m
===================================================================
--- trunk/bibdesk/BDSKEditorTableView.m 2007-12-12 06:45:54 UTC (rev 11876)
+++ trunk/bibdesk/BDSKEditorTableView.m 2007-12-12 12:54:38 UTC (rev 11877)
@@ -38,6 +38,7 @@
 
 #import "BDSKEditorTableView.h"
 #import "BDSKEditorTextFieldCell.h"
+#import "BDSKFieldEditor.h"
 
 
 @implementation BDSKEditorTableView
@@ -117,4 +118,27 @@
 
 - (void)highlightSelectionInClipRect:(NSRect)clipRect {}
 
+#pragma mark BDSKFieldEditorDelegate protocol
+
+- (BOOL)textViewShouldLinkKeys:(NSTextView *)textView {
+    int row = [self editedRow], column = [self editedColumn];
+    NSTableColumn *tableColumn = [[self tableColumns] objectAtIndex:column];
+    return [[self delegate] 
respondsToSelector:@selector(tableView:textViewShouldLinkKeys:forTableColumn:row:)]
 &&
+           [[self delegate] tableView:self textViewShouldLinkKeys:textView 
forTableColumn:tableColumn row:row];
+}
+
+- (BOOL)textView:(NSTextView *)textView isValidKey:(NSString *)key{
+    int row = [self editedRow], column = [self editedColumn];
+    NSTableColumn *tableColumn = [[self tableColumns] objectAtIndex:column];
+    return [[self delegate] 
respondsToSelector:@selector(tableView:textView:isValidKey:forTableColumn:row:)]
 &&
+           [[self delegate] tableView:self textView:textView isValidKey:key 
forTableColumn:tableColumn row:row];
+}
+
+- (BOOL)textView:(NSTextView *)textView clickedOnLink:(id)aLink 
atIndex:(unsigned)charIndex{
+    int row = [self editedRow], column = [self editedColumn];
+    NSTableColumn *tableColumn = [[self tableColumns] objectAtIndex:column];
+    return [[self delegate] 
respondsToSelector:@selector(tableView:textView:clickedOnLink:atIndex:forTableColumn:row:)]
 &&
+           [[self delegate] tableView:self textView:textView 
clickedOnLink:aLink atIndex:charIndex forTableColumn:tableColumn row:row];
+}
+
 @end


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

-------------------------------------------------------------------------
SF.Net email is sponsored by:
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
Bibdesk-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit

Reply via email to