Revision: 15590
          http://sourceforge.net/p/skim-app/code/15590
Author:   hofman
Date:     2025-07-03 09:13:55 +0000 (Thu, 03 Jul 2025)
Log Message:
-----------
move joining notes bby shift-mousedown to separate method

Modified Paths:
--------------
    trunk/SKPDFView.m

Modified: trunk/SKPDFView.m
===================================================================
--- trunk/SKPDFView.m   2025-07-02 16:23:14 UTC (rev 15589)
+++ trunk/SKPDFView.m   2025-07-03 09:13:55 UTC (rev 15590)
@@ -2398,6 +2398,58 @@
     [[self undoManager] setActionName:NSLocalizedString(@"Remove Note", @"Undo 
action name")];
 }
 
+- (PDFAnnotation *)joinAnnotationToCurrentAnnotation:(PDFAnnotation 
*)annotation {
+    PDFAnnotation *newAnnotation = nil;
+    PDFPage *page = [currentAnnotation page];
+    if ([currentAnnotation isMarkup]) {
+        NSString *type = [currentAnnotation type];
+        PDFSelection *sel = [currentAnnotation selection];
+        PDFSelection *newSel = [annotation selection];
+        BOOL copyText = [[NSUserDefaults standardUserDefaults] 
integerForKey:SKDisableUpdateContentsFromEnclosedTextKey] < 2;
+        NSString *string1 = [currentAnnotation string];
+        NSString *string2 = [annotation string];
+        NSString *string = nil;
+        if ([string1 length] > 0 && [string2 length] > 0) {
+            if ([sel safeIndexOfFirstCharacterOnPage:page] > (copyText ? 
[newSel safeIndexOfLastCharacterOnPage:page] : [newSel 
safeIndexOfFirstCharacterOnPage:page]))
+               string = [NSString stringWithFormat:@"%@ %@", string2, string1];
+            else if (copyText == NO || [newSel 
safeIndexOfFirstCharacterOnPage:page] > [sel 
safeIndexOfLastCharacterOnPage:page])
+                string = [NSString stringWithFormat:@"%@ %@", string1, 
string2];
+        }
+        [sel addSelection:newSel];
+        if (string == nil) {
+            if (copyText)
+                string = [sel cleanedString];
+            else if ([string1 length])
+                string = string1;
+            else if ([string2 length])
+                string = string2;
+        }
+        
+        newAnnotation = [PDFAnnotation newSkimNoteWithSelection:sel 
forType:type];
+        if ([string length] > 0)
+            [newAnnotation setString:string];
+    } else if ([currentAnnotation isInk]) {
+        NSMutableArray *paths = [[currentAnnotation pagePaths] mutableCopy];
+        [paths addObjectsFromArray:[annotation pagePaths]];
+        NSString *string1 = [currentAnnotation string];
+        NSString *string2 = [annotation string];
+        
+        newAnnotation = [PDFAnnotation newSkimNoteWithPaths:paths];
+        if ([string1 length] > 0 || [string2 length] > 0)
+            [newAnnotation setString:[string2 length] == 0 ? string1 : 
[string1 length] == 0 ? string2 : [NSString stringWithFormat:@"%@ %@", string1, 
string2]];
+        [newAnnotation setBorder:[currentAnnotation border]];
+    } else {
+        return nil;
+    }
+    [newAnnotation setColor:[currentAnnotation color]];
+    [newAnnotation registerUserName];
+    [[self document] removeAnnotation:currentAnnotation];
+    [[self document] removeAnnotation:annotation];
+    [[self document] addAnnotation:newAnnotation toPage:page];
+    [[self undoManager] setActionName:NSLocalizedString(@"Join Notes", @"Undo 
action name")];
+    return newAnnotation;
+}
+
 - (BOOL)addAnnotationWithType:(SKNoteType)annotationType 
selection:(PDFSelection *)selection page:(PDFPage *)page bounds:(NSRect)bounds {
     PDFAnnotation *newAnnotation = nil;
     NSArray *newAnnotations = nil;
@@ -3778,11 +3830,9 @@
     PDFPage *newActivePage = [self pageAndPoint:&point forEvent:theEvent 
nearest:YES];
     
     if (newActivePage) { // newActivePage should never be nil, but just to be 
sure
-        if (newActivePage != [currentAnnotation page]) {
+        if (newActivePage != [currentAnnotation page])
             // move the annotation to the new page
             [[self document] moveAnnotation:currentAnnotation 
toPage:newActivePage];
-            [[self undoManager] setActionName:NSLocalizedString(@"Edit Note", 
@"Undo action name")];
-        }
         
         NSRect newBounds = [currentAnnotation bounds];
         newBounds.origin = SKIntegralPoint(SKSubstractPoints(point, offset));
@@ -4173,54 +4223,7 @@
             // don't drag markup notes or in freehand tool mode, unless the 
note was previously selected, so we can select text or draw freehand strokes
             newCurrentAnnotation = nil;
         } else if ((modifiers & NSEventModifierFlagShift) && currentAnnotation 
!= newCurrentAnnotation && [[currentAnnotation page] 
isEqual:[newCurrentAnnotation page]] && [[currentAnnotation type] 
isEqualToString:[newCurrentAnnotation type]]) {
-            PDFAnnotation *newAnnotation = nil;
-            if ([currentAnnotation isMarkup]) {
-                NSString *type = [currentAnnotation type];
-                PDFSelection *sel = [currentAnnotation selection];
-                PDFSelection *newSel = [newCurrentAnnotation selection];
-                BOOL copyText = [[NSUserDefaults standardUserDefaults] 
integerForKey:SKDisableUpdateContentsFromEnclosedTextKey] < 2;
-                NSString *string1 = [currentAnnotation string];
-                NSString *string2 = [newCurrentAnnotation string];
-                NSString *string = nil;
-                if ([string1 length] > 0 && [string2 length] > 0) {
-                    if ([sel safeIndexOfFirstCharacterOnPage:page] > (copyText 
? [newSel safeIndexOfLastCharacterOnPage:page] : [newSel 
safeIndexOfFirstCharacterOnPage:page]))
-                       string = [NSString stringWithFormat:@"%@ %@", string2, 
string1];
-                    else if (copyText == NO || [newSel 
safeIndexOfFirstCharacterOnPage:page] > [sel 
safeIndexOfLastCharacterOnPage:page])
-                        string = [NSString stringWithFormat:@"%@ %@", string1, 
string2];
-                }
-                [sel addSelection:newSel];
-                if (string == nil) {
-                    if (copyText)
-                        string = [sel cleanedString];
-                    else if ([string1 length])
-                        string = string1;
-                    else if ([string2 length])
-                        string = string2;
-                }
-                
-                newAnnotation = [PDFAnnotation newSkimNoteWithSelection:sel 
forType:type];
-                if ([string length] > 0)
-                    [newAnnotation setString:string];
-            } else if ([currentAnnotation isInk]) {
-                NSMutableArray *paths = [[currentAnnotation pagePaths] 
mutableCopy];
-                [paths addObjectsFromArray:[newCurrentAnnotation pagePaths]];
-                NSString *string1 = [currentAnnotation string];
-                NSString *string2 = [newCurrentAnnotation string];
-                
-                newAnnotation = [PDFAnnotation newSkimNoteWithPaths:paths];
-                if ([string1 length] > 0 || [string2 length] > 0)
-                    [newAnnotation setString:[string2 length] == 0 ? string1 : 
[string1 length] == 0 ? string2 : [NSString stringWithFormat:@"%@ %@", string1, 
string2]];
-                [newAnnotation setBorder:[currentAnnotation border]];
-            }
-            if (newAnnotation) {
-                [newAnnotation setColor:[currentAnnotation color]];
-                [newAnnotation registerUserName];
-                [[self document] removeAnnotation:currentAnnotation];
-                [[self document] removeAnnotation:newCurrentAnnotation];
-                [[self document] addAnnotation:newAnnotation toPage:page];
-                [[self undoManager] setActionName:NSLocalizedString(@"Join 
Notes", @"Undo action name")];
-                newCurrentAnnotation = newAnnotation;
-            }
+            newCurrentAnnotation = [self 
joinAnnotationToCurrentAnnotation:newCurrentAnnotation] ?: newCurrentAnnotation;
         }
     }
     

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



_______________________________________________
Skim-app-commit mailing list
Skim-app-commit@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/skim-app-commit

Reply via email to