Revision: 27663
          http://sourceforge.net/p/bibdesk/svn/27663
Author:   hofman
Date:     2022-06-30 23:30:50 +0000 (Thu, 30 Jun 2022)
Log Message:
-----------
Reorganize conditions to avoid multiple checks of setting

Modified Paths:
--------------
    trunk/bibdesk/BibDocument_DataSource.m
    trunk/bibdesk/BibDocument_UI.m

Modified: trunk/bibdesk/BibDocument_DataSource.m
===================================================================
--- trunk/bibdesk/BibDocument_DataSource.m      2022-06-30 23:06:15 UTC (rev 
27662)
+++ trunk/bibdesk/BibDocument_DataSource.m      2022-06-30 23:30:50 UTC (rev 
27663)
@@ -108,6 +108,79 @@
 
 #pragma mark TableView delegate
 
+- (void)reloadView:(NSTableCellView *)view forField:(NSString *)tcID 
ofItem:(BibItem *)pub {
+    id value = [pub displayValueOfField:tcID];
+    NSTextField *textField = [view textField];
+    NSImageView *imageView = [view imageView];
+    if (textField == nil && imageView == nil) {
+        // special field types displayed using a button or level indicator
+        BDSKASSERT([view isKindOfClass:[BDSKControlTableCellView class]]);
+        BDSKASSERT(value == nil || [value isKindOfClass:[NSNumber class]] || 
[value isKindOfClass:[NSColor class]]);
+        NSControl *control = [(BDSKControlTableCellView *)view control];
+        if ([tcID isEqualToString:BDSKImportOrderString]) {
+            if ([pub isImported]) {
+                [control setEnabled:NO];
+                [control setToolTip:nil];
+            } else {
+                [control setEnabled:YES];
+                [control setToolTip:NSLocalizedString(@"Click to import this 
item", @"Tool tip message")];
+            }
+        } else if ([tcID isEqualToString:BDSKCrossrefString]) {
+            BibItem *parent = [pub crossrefParent];
+            if (parent) {
+                [control setEnabled:YES];
+                [(NSButton *)control setImage:[NSImage 
imageNamed:NSImageNameFollowLinkFreestandingTemplate]];
+            } else {
+                [control setEnabled:NO];
+                [(NSButton *)control setImage:nil];
+            }
+            [control setToolTip:[parent citeKey]];
+        } else if ([tcID isBooleanField] || [tcID isTriStateField]) {
+            [control setEnabled:[self 
hasGroupTypeSelected:BDSKExternalGroupType] == NO];
+        }
+        [control setObjectValue:value];
+    } else if (imageView == nil) {
+        // generic text field
+        // value can be an NSNumber for Item Number
+        // possibly reset red color from invalid cite key, can be reused for 
any text field
+        if ([tcID isEqualToString:BDSKCiteKeyString] && [pub 
isValidCiteKey:[pub citeKey]] == NO)
+            [textField setTextColor:[NSColor systemRedColor]];
+        else
+            [textField setTextColor:[NSColor controlTextColor]];
+        [textField setObjectValue:value];
+    } else if (textField == nil) {
+        NSImage *image = nil;
+        if ([value isNotEmpty]) {
+            image = [tableView cellImageForField:tcID];
+            BDSKASSERT(image != nil || [value isKindOfClass:[NSURL class]]);
+            if ([value isKindOfClass:[NSURL class]]) {
+                // URL field
+                [imageView setToolTip:[value isFileURL] ? [[value path] 
stringByAbbreviatingWithTildeInPath] : [value absoluteString]];
+                if (image == nil) {
+                    if ([value isFileURL] == NO)
+                        image =  [NSImage imageForURL:value];
+                    else if ((value = [value 
fileURLByStrictlyResolvingAliases]))
+                        image = [[NSWorkspace sharedWorkspace] 
iconForFileType:[value pathExtension]];
+                    else
+                        image = [NSImage missingFileImage];
+                }
+            } else {
+                // field with custom cell image, e.g. a note field
+                [imageView setToolTip:[value isKindOfClass:[NSString class]] ? 
value : [value isKindOfClass:[NSDictionary class]] ? [value 
objectForKey:@"toolTip"] : nil];
+            }
+        } else {
+            [imageView setToolTip:nil];
+        }
+        [imageView setObjectValue:image];
+    } else {
+        // linked files and URLs
+        BDSKASSERT(value == nil || [value isKindOfClass:[NSDictionary class]]);
+        [view setToolTip:[value valueForKey:@"toolTip"]];
+        [textField setObjectValue:[value valueForKey:@"string"]];
+        [imageView setObjectValue:[value valueForKey:@"image"]];
+    }
+}
+
 - (NSView *)tableView:(NSTableView *)tv viewForTableColumn:(NSTableColumn 
*)tableColumn row:(NSInteger)row {
     NSString *tcID = [tableColumn identifier];
     if (tv == tableView) {

Modified: trunk/bibdesk/BibDocument_UI.m
===================================================================
--- trunk/bibdesk/BibDocument_UI.m      2022-06-30 23:06:15 UTC (rev 27662)
+++ trunk/bibdesk/BibDocument_UI.m      2022-06-30 23:30:50 UTC (rev 27663)
@@ -1336,7 +1336,9 @@
 }
 
 static BOOL groupFieldsDependOnKey(NSArray *groupFields, NSString *key) {
-    if ([groupFields containsObject:key])
+    if ([groupFields count] == 0)
+        return NO;
+    else if (key == nil || [groupFields containsObject:key])
         return YES;
     else if ([key isEqualToString:BDSKColorString])
         return [groupFields containsObject:BDSKColorLabelString];
@@ -1357,9 +1359,7 @@
             [self previewURLs:nil];
     }
     
-    BOOL shouldUpdateGroups = [[self currentGroupFields] count] > 0 && 
(docFlags.itemChangeMask & BDSKItemChangedGroupFieldMask) != 0;
-    
-    if(shouldUpdateGroups){
+    if((docFlags.itemChangeMask & BDSKItemChangedGroupFieldMask) != 0){
         // this handles all UI updates if we call it, so don't bother with any 
others
         [self updateFilteringGroups];
     } else {
@@ -1366,12 +1366,12 @@
         // allow updating a smart group if it's selected
         [[groups smartGroups] 
makeObjectsPerformSelector:@selector(invalidateCount)];
         [self updateSmartGroups];
-        if (displayingLocal && (docFlags.itemChangeMask & 
BDSKItemChangedSearchKeyMask) != 0) {
-            // this handles all UI updates if we call it, so don't bother with 
any others
-            [self search:nil];
-        } else if (displayingLocal) {
-            // groups and quicksearch won't update for us
-            if ((docFlags.itemChangeMask & BDSKItemChangedSortKeyMask) != 0) {
+        if (displayingLocal) {
+            if ((docFlags.itemChangeMask & BDSKItemChangedSearchKeyMask) != 0) 
{
+                // this handles all UI updates if we call it, so don't bother 
with any others
+                [self search:nil];
+            } else if ((docFlags.itemChangeMask & BDSKItemChangedSortKeyMask) 
!= 0) {
+                // groups and quicksearch won't update for us
                 [self sortPubsByKey:nil];
             } else {
                 // @@ DON'T RETURN WITHOUT RESETTING THIS!
@@ -1483,7 +1483,7 @@
         }
     }
     
-    if (changedKey == nil || groupFieldsDependOnKey([self currentGroupFields], 
changedKey))
+    if (groupFieldsDependOnKey([self currentGroupFields], changedKey))
         docFlags.itemChangeMask |= BDSKItemChangedGroupFieldMask;
     if ((tmpSortKey && sortKeyDependsOnKey(tmpSortKey, changedKey)) || 
sortKeyDependsOnKey(sortKey, changedKey) || 
sortKeyDependsOnKey(previousSortKey, changedKey))
         docFlags.itemChangeMask |= BDSKItemChangedSortKeyMask;

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



_______________________________________________
Bibdesk-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit

Reply via email to