Revision: 29444
          http://sourceforge.net/p/bibdesk/svn/29444
Author:   hofman
Date:     2025-08-24 08:18:15 +0000 (Sun, 24 Aug 2025)
Log Message:
-----------
Show number of linked files and URLs in text import

Modified Paths:
--------------
    trunk/bibdesk/BDSKTextImportController.h
    trunk/bibdesk/BDSKTextImportController.m
    trunk/bibdesk/Base.lproj/TextImport.xib

Modified: trunk/bibdesk/BDSKTextImportController.h
===================================================================
--- trunk/bibdesk/BDSKTextImportController.h    2025-08-23 21:26:48 UTC (rev 
29443)
+++ trunk/bibdesk/BDSKTextImportController.h    2025-08-24 08:18:15 UTC (rev 
29444)
@@ -52,6 +52,10 @@
     BDSKTextImportItemTableView *itemTableView;
     NSTextField *citeKeyField;
     NSTextField *statusLine;
+    NSTextField *linkedFileField1;
+    NSImageView *linkedFileImageView1;
+    NSTextField *linkedFileField2;
+    NSImageView *linkedFileImageView2;
     NSButton *addButton;
     NSButton *addAndCloseButton;
     NSButton *closeButton;
@@ -104,6 +108,10 @@
 @property (nonatomic, nullable, strong) IBOutlet BDSKTextImportItemTableView* 
itemTableView;
 @property (nonatomic, nullable, strong) IBOutlet NSTextField *citeKeyField;
 @property (nonatomic, nullable, strong) IBOutlet NSTextField *statusLine;
+@property (nonatomic, nullable, strong) IBOutlet NSTextField *linkedFileField1;
+@property (nonatomic, nullable, strong) IBOutlet NSImageView 
*linkedFileImageView1;
+@property (nonatomic, nullable, strong) IBOutlet NSTextField *linkedFileField2;
+@property (nonatomic, nullable, strong) IBOutlet NSImageView 
*linkedFileImageView2;
 @property (nonatomic, nullable, strong) IBOutlet NSButton *addButton;
 @property (nonatomic, nullable, strong) IBOutlet NSButton *addAndCloseButton;
 @property (nonatomic, nullable, strong) IBOutlet NSButton *closeButton;

Modified: trunk/bibdesk/BDSKTextImportController.m
===================================================================
--- trunk/bibdesk/BDSKTextImportController.m    2025-08-23 21:26:48 UTC (rev 
29443)
+++ trunk/bibdesk/BDSKTextImportController.m    2025-08-24 08:18:15 UTC (rev 
29444)
@@ -132,6 +132,7 @@
 - (void)clearWebView;
 - (void)updateTypeAndFields;
 - (void)updateColumnWidths;
+- (void)updateLinkedFileUI;
 
 - (void)setLoading:(BOOL)loading;
 
@@ -149,7 +150,7 @@
 
 @implementation BDSKTextImportController
 
-@synthesize sourceTextView, itemTableView, citeKeyField, statusLine, 
addButton, addAndCloseButton, closeButton, clearButton, itemTypeButton, 
actionMenuButton, splitView, sourceView, webViewBox, webViewView, 
progressIndicator, backButton, forwardButton, stopOrReloadButton, 
citeKeyWarningButton, addedPublications=itemsAdded;
+@synthesize sourceTextView, itemTableView, citeKeyField, statusLine, 
linkedFileField1, linkedFileImageView1, linkedFileField2, linkedFileImageView2, 
addButton, addAndCloseButton, closeButton, clearButton, itemTypeButton, 
actionMenuButton, splitView, sourceView, webViewBox, webViewView, 
progressIndicator, backButton, forwardButton, stopOrReloadButton, 
citeKeyWarningButton, addedPublications=itemsAdded;
 @dynamic publication;
 
 - (instancetype)initForOwner:(id <BDSKOwner>)anOwner {
@@ -194,6 +195,8 @@
     [itemTypeButton addItemsWithTitles:[[BDSKTypeManager sharedManager] 
types]];
     [self updateTypeAndFields];
     
+    [self updateLinkedFileUI];
+    
     [sourceTextView setTextColor:[NSColor textColor]];
     if (@available(macOS 10.14, *))
         [sourceTextView setDrawsBackground:NO];
@@ -268,6 +271,7 @@
     [citeKeyField setStringValue:[newItem citeKey]];
     [self setCiteKeyDuplicateWarning:[newItem isValidCiteKey:[newItem 
citeKey]] == NO];
     [itemTableView reloadData];
+    [self updateLinkedFileUI];
 }
 
 - (IBAction)closeAction:(id)sender{
@@ -303,6 +307,7 @@
     [citeKeyField setStringValue:[newItem citeKey]];
     [self setCiteKeyDuplicateWarning:[newItem isValidCiteKey:[newItem 
citeKey]] == NO];
     [itemTableView reloadData];
+    [self updateLinkedFileUI];
 }
 
 - (IBAction)showHelpAction:(id)sender{
@@ -600,7 +605,9 @@
         [itemTableView reloadData];
     } else if ([changeKey isEqualToString:BDSKPubTypeString]) {
         [self updateTypeAndFields];
-    } else if ([changeKey isEqualToString:BDSKRemoteURLString] == NO && 
[changeKey isEqualToString:BDSKLocalFileString] == NO) {
+    } else if ([changeKey isEqualToString:BDSKRemoteURLString]|| [changeKey 
isEqualToString:BDSKLocalFileString]) {
+        [self updateLinkedFileUI];
+    } else {
         [itemTableView reloadData];
     }
 }
@@ -867,6 +874,44 @@
     [itemTableView sizeToFit];
 }
 
+- (void)updateLinkedFileUI {
+    BibItem *pub = [self publication];
+    NSUInteger fileCount = [[pub localFiles] count];
+    NSUInteger urlCount = [[pub remoteURLs] count];
+    NSString *toolTip;
+    if (urlCount > 0) {
+        [linkedFileImageView2 setImage:[NSImage URLImage]];
+        [linkedFileField2 setStringValue:[NSString stringWithFormat:@"%lu", 
(unsigned long)urlCount]];
+        toolTip = [[[pub remoteURLs] valueForKeyPath:@"URL.absoluteString"] 
componentsJoinedByString:@"\n"];
+        [linkedFileImageView2 setToolTip:toolTip];
+        [linkedFileField2 setToolTip:toolTip];
+        if (fileCount > 0) {
+            [linkedFileImageView1 setImage:[NSImage paperclipImage]];
+            [linkedFileField1 setStringValue:[NSString 
stringWithFormat:@"%lu", (unsigned long)fileCount]];
+            toolTip = [[[pub existingLocalFiles] valueForKey:@"path"] 
componentsJoinedByString:@"\n"];
+            [linkedFileImageView1 setToolTip:toolTip];
+            [linkedFileField1 setToolTip:toolTip];
+        }
+    } else if (fileCount > 0) {
+        [linkedFileImageView2 setImage:[NSImage paperclipImage]];
+        [linkedFileField2 setStringValue:[NSString stringWithFormat:@"%lu", 
(unsigned long)fileCount]];
+        toolTip = [[[pub existingLocalFiles] valueForKey:@"path"] 
componentsJoinedByString:@"\n"];
+        [linkedFileImageView2 setToolTip:toolTip];
+        [linkedFileField2 setToolTip:toolTip];
+    } else {
+        [linkedFileImageView2 setImage:nil];
+        [linkedFileField2 setStringValue:@""];
+        [linkedFileImageView2 setToolTip:nil];
+        [linkedFileField2 setToolTip:nil];
+    }
+    if (fileCount == 0 || urlCount == 0) {
+        [linkedFileImageView1 setImage:nil];
+        [linkedFileField1 setStringValue:@""];
+        [linkedFileImageView1 setToolTip:nil];
+        [linkedFileField1 setToolTip:nil];
+    }
+}
+
 #pragma mark Page loading methods
 
 - (void)setLoading:(BOOL)loading{

Modified: trunk/bibdesk/Base.lproj/TextImport.xib
===================================================================
--- trunk/bibdesk/Base.lproj/TextImport.xib     2025-08-23 21:26:48 UTC (rev 
29443)
+++ trunk/bibdesk/Base.lproj/TextImport.xib     2025-08-24 08:18:15 UTC (rev 
29444)
@@ -19,6 +19,10 @@
                 <outlet property="forwardButton" destination="176" id="185"/>
                 <outlet property="itemTableView" destination="22" id="31"/>
                 <outlet property="itemTypeButton" destination="20" id="32"/>
+                <outlet property="linkedFileField1" destination="2Rr-PU-Ymu" 
id="8kZ-Vu-U3j"/>
+                <outlet property="linkedFileField2" destination="EIF-pq-DTr" 
id="dgw-dB-j3H"/>
+                <outlet property="linkedFileImageView1" 
destination="7Cj-T2-zag" id="GTf-2B-xhW"/>
+                <outlet property="linkedFileImageView2" 
destination="B2J-hu-16z" id="7Ox-vq-n6i"/>
                 <outlet property="progressIndicator" destination="178" 
id="187"/>
                 <outlet property="sourceTextView" destination="51" id="57"/>
                 <outlet property="sourceView" destination="L50-7z-90R" 
id="rU0-IF-NPw"/>
@@ -63,7 +67,7 @@
                         </connections>
                     </button>
                     <textField verticalHuggingPriority="750" 
preferredMaxLayoutWidth="556" translatesAutoresizingMaskIntoConstraints="NO" 
id="13">
-                        <rect key="frame" x="18" y="60" width="558" 
height="14"/>
+                        <rect key="frame" x="18" y="60" width="506" 
height="14"/>
                         <textFieldCell key="cell" scrollable="YES" 
lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" 
id="305">
                             <font key="font" metaFont="message" size="11"/>
                             <color key="textColor" name="controlTextColor" 
catalog="System" colorSpace="catalog"/>
@@ -425,35 +429,75 @@
                             <action selector="clearAction:" target="-2" 
id="235"/>
                         </connections>
                     </button>
+                    <textField horizontalHuggingPriority="251" 
verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" 
id="EIF-pq-DTr">
+                        <rect key="frame" x="572" y="60" width="4" 
height="16"/>
+                        <textFieldCell key="cell" lineBreakMode="clipping" 
id="PbU-uQ-twC">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="controlTextColor" 
catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" 
name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <textField horizontalHuggingPriority="251" 
verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" 
id="2Rr-PU-Ymu">
+                        <rect key="frame" x="546" y="60" width="4" 
height="16"/>
+                        <textFieldCell key="cell" lineBreakMode="clipping" 
id="vua-GF-gax">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="controlTextColor" 
catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" 
name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <imageView horizontalHuggingPriority="251" 
verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" 
id="B2J-hu-16z">
+                        <rect key="frame" x="556" y="60" width="16" 
height="16"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="16" 
id="DGp-8V-b05"/>
+                            <constraint firstAttribute="width" constant="16" 
id="O2n-nP-LQu"/>
+                        </constraints>
+                        <imageCell key="cell" refusesFirstResponder="YES" 
alignment="left" imageScaling="proportionallyDown" id="8LZ-yM-cPT"/>
+                    </imageView>
+                    <imageView horizontalHuggingPriority="251" 
verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" 
id="7Cj-T2-zag">
+                        <rect key="frame" x="530" y="60" width="16" 
height="16"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="16" 
id="vl6-Sj-FCE"/>
+                            <constraint firstAttribute="width" constant="16" 
id="ztV-Bm-tws"/>
+                        </constraints>
+                        <imageCell key="cell" refusesFirstResponder="YES" 
alignment="left" imageScaling="proportionallyDown" id="uan-tC-X6C"/>
+                    </imageView>
                 </subviews>
                 <constraints>
                     <constraint firstItem="219" firstAttribute="width" 
secondItem="234" secondAttribute="width" id="67V-NA-QeG"/>
                     <constraint firstItem="195" firstAttribute="firstBaseline" 
secondItem="11" secondAttribute="firstBaseline" id="6GB-VF-osz"/>
                     <constraint firstAttribute="trailing" secondItem="195" 
secondAttribute="trailing" constant="20" symbolic="YES" id="8lE-Jq-5DL"/>
+                    <constraint firstItem="2Rr-PU-Ymu" 
firstAttribute="leading" secondItem="7Cj-T2-zag" secondAttribute="trailing" 
constant="2" id="Axd-NV-DLL"/>
                     <constraint firstItem="195" firstAttribute="leading" 
secondItem="10" secondAttribute="trailing" constant="12" symbolic="YES" 
id="ETS-E6-ern"/>
+                    <constraint firstItem="2Rr-PU-Ymu" 
firstAttribute="firstBaseline" secondItem="13" secondAttribute="firstBaseline" 
id="Eqf-Wc-bht"/>
                     <constraint firstItem="13" firstAttribute="leading" 
secondItem="24" secondAttribute="leading" constant="20" symbolic="YES" 
id="FZb-Cm-gsO"/>
                     <constraint firstItem="234" firstAttribute="leading" 
relation="greaterThanOrEqual" secondItem="11" secondAttribute="trailing" 
constant="12" symbolic="YES" id="HRX-39-BoP"/>
                     <constraint firstItem="219" firstAttribute="leading" 
secondItem="234" secondAttribute="trailing" constant="12" symbolic="YES" 
id="J9K-UJ-QRo"/>
                     <constraint firstItem="195" firstAttribute="width" 
secondItem="234" secondAttribute="width" id="JN2-Wc-Ase"/>
                     <constraint firstItem="13" firstAttribute="top" 
secondItem="71" secondAttribute="bottom" constant="8" symbolic="YES" 
id="Kuv-wl-L2e"/>
+                    <constraint firstItem="B2J-hu-16z" 
firstAttribute="leading" secondItem="2Rr-PU-Ymu" secondAttribute="trailing" 
constant="8" symbolic="YES" id="L7c-iA-RsT"/>
                     <constraint firstItem="10" firstAttribute="width" 
secondItem="234" secondAttribute="width" id="MDu-jB-0az"/>
                     <constraint firstItem="10" firstAttribute="leading" 
secondItem="219" secondAttribute="trailing" constant="12" symbolic="YES" 
id="Msz-yQ-YPj"/>
+                    <constraint firstAttribute="trailing" 
secondItem="EIF-pq-DTr" secondAttribute="trailing" constant="20" symbolic="YES" 
id="Ofm-4A-aGj"/>
                     <constraint firstItem="11" firstAttribute="leading" 
secondItem="24" secondAttribute="leading" constant="20" symbolic="YES" 
id="Q7E-xa-iDx"/>
-                    <constraint firstAttribute="trailing" secondItem="13" 
secondAttribute="trailing" constant="20" symbolic="YES" id="Z2W-oR-u28"/>
                     <constraint firstAttribute="trailing" secondItem="71" 
secondAttribute="trailing" id="eRb-BR-IgN"/>
                     <constraint firstItem="71" firstAttribute="leading" 
secondItem="24" secondAttribute="leading" id="ewR-05-Mgc"/>
                     <constraint firstItem="219" firstAttribute="firstBaseline" 
secondItem="11" secondAttribute="firstBaseline" id="giY-gb-aXu"/>
                     <constraint firstItem="71" firstAttribute="top" 
secondItem="24" secondAttribute="top" id="gv4-Oc-VaU"/>
+                    <constraint firstItem="2Rr-PU-Ymu" 
firstAttribute="centerY" secondItem="7Cj-T2-zag" secondAttribute="centerY" 
id="i16-eX-xU0"/>
+                    <constraint firstItem="EIF-pq-DTr" 
firstAttribute="centerY" secondItem="B2J-hu-16z" secondAttribute="centerY" 
id="iqM-fz-03F"/>
                     <constraint firstItem="195" firstAttribute="top" 
secondItem="13" secondAttribute="bottom" constant="20" id="jl5-iL-eep"/>
+                    <constraint firstItem="EIF-pq-DTr" 
firstAttribute="leading" secondItem="B2J-hu-16z" secondAttribute="trailing" 
constant="2" id="mTi-FX-Dxd"/>
                     <constraint firstItem="10" firstAttribute="firstBaseline" 
secondItem="11" secondAttribute="firstBaseline" id="p7Q-gd-JOk"/>
                     <constraint firstItem="234" firstAttribute="firstBaseline" 
secondItem="11" secondAttribute="firstBaseline" id="qgg-b5-H7f"/>
                     <constraint firstAttribute="bottom" secondItem="195" 
secondAttribute="bottom" constant="20" symbolic="YES" id="vvW-rS-NUc"/>
+                    <constraint firstItem="7Cj-T2-zag" 
firstAttribute="leading" secondItem="13" secondAttribute="trailing" 
constant="8" symbolic="YES" id="yGn-12-2Za"/>
+                    <constraint firstItem="EIF-pq-DTr" 
firstAttribute="firstBaseline" secondItem="2Rr-PU-Ymu" 
secondAttribute="firstBaseline" id="zSY-9Q-nSu"/>
                 </constraints>
             </view>
             <connections>
                 <outlet property="delegate" destination="-2" id="26"/>
             </connections>
-            <point key="canvasLocation" x="139" y="147"/>
+            <point key="canvasLocation" x="139" y="146.5"/>
         </window>
         <customView id="95" userLabel="WebViewView">
             <rect key="frame" x="0.0" y="0.0" width="293" height="299"/>

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