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