Revision: 13654
          http://sourceforge.net/p/skim-app/code/13654
Author:   hofman
Date:     2023-09-10 17:00:25 +0000 (Sun, 10 Sep 2023)
Log Message:
-----------
convenience method to check whether notes can be added to a pdfview, disable 
some menu items when notyes can not be selected

Modified Paths:
--------------
    trunk/SKMainToolbarController.m
    trunk/SKMainTouchBarController.m
    trunk/SKMainWindowController_Actions.m
    trunk/SKMainWindowController_UI.m
    trunk/SKPDFView.h
    trunk/SKPDFView.m

Modified: trunk/SKMainToolbarController.m
===================================================================
--- trunk/SKMainToolbarController.m     2023-09-10 08:32:12 UTC (rev 13653)
+++ trunk/SKMainToolbarController.m     2023-09-10 17:00:25 UTC (rev 13654)
@@ -1044,13 +1044,13 @@
     } else if ([identifier 
isEqualToString:SKDocumentToolbarToolModeItemIdentifier]) {
         return [mainController hasOverview] == NO;
     } else if ([identifier 
isEqualToString:SKDocumentToolbarNewTextNoteItemIdentifier] || [identifier 
isEqualToString:SKDocumentToolbarNewCircleNoteItemIdentifier] || [identifier 
isEqualToString:SKDocumentToolbarNewLineItemIdentifier]) {
-        return ([mainController.pdfView toolMode] == SKTextToolMode || 
[mainController.pdfView toolMode] == SKNoteToolMode) && [mainController 
hasOverview] == NO && [mainController.pdfView hideNotes] == NO && 
[mainController.pdfView.document allowsNotes];
+        return [mainController hasOverview] == NO && [mainController.pdfView 
canAddNotes];
     } else if ([identifier 
isEqualToString:SKDocumentToolbarNewMarkupItemIdentifier]) {
-        return ([mainController.pdfView toolMode] == SKTextToolMode || 
[mainController.pdfView toolMode] == SKNoteToolMode) && [mainController 
hasOverview] == NO && [mainController.pdfView hideNotes] == NO && 
[mainController.pdfView.document allowsNotes];
+        return [mainController hasOverview] == NO && [mainController.pdfView 
canAddNotes];
     } else if ([identifier 
isEqualToString:SKDocumentToolbarNewLineItemIdentifier]) {
-        return ([mainController.pdfView toolMode] == SKTextToolMode || 
[mainController.pdfView toolMode] == SKNoteToolMode) && [mainController 
hasOverview] == NO && [mainController.pdfView hideNotes] == NO && 
[mainController.pdfView.document allowsNotes];
+        return [mainController hasOverview] == NO && [mainController.pdfView 
canAddNotes];
     } else if ([identifier 
isEqualToString:SKDocumentToolbarNewNoteItemIdentifier]) {
-        return ([mainController.pdfView toolMode] == SKTextToolMode || 
[mainController.pdfView toolMode] == SKNoteToolMode) && [mainController 
hasOverview] == NO && [mainController.pdfView hideNotes] == NO && 
[mainController.pdfView.document allowsNotes];
+        return [mainController hasOverview] == NO && [mainController.pdfView 
canAddNotes];
     } else if ([identifier 
isEqualToString:SKDocumentToolbarFullScreenItemIdentifier]) {
         return [mainController canEnterFullscreen] || [mainController 
canExitFullscreen];
     } else if ([identifier 
isEqualToString:SKDocumentToolbarPresentationItemIdentifier]) {
@@ -1074,10 +1074,10 @@
         return [mainController interactionMode] != SKPresentationMode && 
[mainController hasOverview] == NO && [mainController.pdfView.document 
allowsNotes] && ([mainController.pdfView toolMode] == SKTextToolMode || 
[mainController.pdfView toolMode] == SKNoteToolMode) && [mainController.pdfView 
hideNotes] == NO;
     } else if (action == @selector(createNewCircleNote:)) {
         [menuItem setState:[[circleNoteButton cell] tagForSegment:0] == 
[menuItem tag] ? NSOnState : NSOffState];
-        return [mainController interactionMode] != SKPresentationMode && 
[mainController hasOverview] == NO && [mainController.pdfView.document 
allowsNotes] && ([mainController.pdfView toolMode] == SKTextToolMode || 
[mainController.pdfView toolMode] == SKNoteToolMode) && [mainController.pdfView 
hideNotes] == NO;
+        return [mainController hasOverview] == NO && [mainController.pdfView 
canAddNotes];
     } else if (action == @selector(createNewMarkupNote:)) {
         [menuItem setState:[[markupNoteButton cell] tagForSegment:0] == 
[menuItem tag] ? NSOnState : NSOffState];
-        return [mainController interactionMode] != SKPresentationMode && 
[mainController hasOverview] == NO && [mainController.pdfView.document 
allowsNotes] && ([mainController.pdfView toolMode] == SKTextToolMode || 
[mainController.pdfView toolMode] == SKNoteToolMode) && [mainController.pdfView 
hideNotes] == NO;
+        return [mainController hasOverview] == NO && [mainController.pdfView 
canAddNotes];
     } else if (action == @selector(toggleFullScreen:)) {
         return [mainController canEnterFullscreen] || [mainController 
canExitFullscreen];
     } else if (action == @selector(togglePresentation:)) {
@@ -1253,7 +1253,7 @@
 }
 
 - (void)createNewNoteWithType:(NSInteger)type forButton:(NSSegmentedControl 
*)button {
-    if ([mainController.pdfView hideNotes] == NO && 
[mainController.pdfView.document allowsNotes]) {
+    if ([mainController.pdfView canAddNotes]) {
         [mainController.pdfView addAnnotationWithType:type];
         if (type != [[button cell] tagForSegment:0]) {
             [[button cell] setTag:type forSegment:0];
@@ -1279,7 +1279,7 @@
 }
 
 - (IBAction)createNewNote:(id)sender {
-    if ([mainController.pdfView hideNotes] == NO && 
[mainController.pdfView.document allowsNotes]) {
+    if ([mainController.pdfView canAddNotes]) {
         NSInteger type = [sender selectedTag];
         [mainController.pdfView addAnnotationWithType:type];
     } else NSBeep();

Modified: trunk/SKMainTouchBarController.m
===================================================================
--- trunk/SKMainTouchBarController.m    2023-09-10 08:32:12 UTC (rev 13653)
+++ trunk/SKMainTouchBarController.m    2023-09-10 17:00:25 UTC (rev 13654)
@@ -380,7 +380,7 @@
 }
 
 - (void)createNewNote:(id)sender {
-    if ([mainController.pdfView hideNotes] == NO && 
[mainController.pdfView.document allowsNotes]) {
+    if ([mainController.pdfView canAddNotes]) {
         NSInteger type = [sender selectedSegment];
         [mainController.pdfView addAnnotationWithType:type];
     } else NSBeep();
@@ -413,8 +413,7 @@
 
 - (void)handleToolModeChangedNotification:(NSNotification *)notification {
     [toolModeButton selectSegmentWithTag:[mainController.pdfView toolMode]];
-    BOOL enabled = ([mainController.pdfView toolMode] == SKTextToolMode || 
[mainController.pdfView toolMode] == SKNoteToolMode) && [mainController.pdfView 
hideNotes] == NO;
-    [noteButton setEnabled:enabled];
+    [noteButton setEnabled:[mainController.pdfView canAddNotes]];
     if ([mainController.pdfView toolMode] == SKNoteToolMode) {
         [annotationModeButton selectSegmentWithTag:[mainController.pdfView 
annotationMode]];
     } else {

Modified: trunk/SKMainWindowController_Actions.m
===================================================================
--- trunk/SKMainWindowController_Actions.m      2023-09-10 08:32:12 UTC (rev 
13653)
+++ trunk/SKMainWindowController_Actions.m      2023-09-10 17:00:25 UTC (rev 
13654)
@@ -185,7 +185,7 @@
 }
 
 - (IBAction)createNewNote:(id)sender{
-    if ([pdfView hideNotes] == NO && [[self pdfDocument] allowsNotes])
+    if ([pdfView canAddNotes])
         [pdfView addAnnotationWithType:[sender tag]];
     else NSBeep();
 }

Modified: trunk/SKMainWindowController_UI.m
===================================================================
--- trunk/SKMainWindowController_UI.m   2023-09-10 08:32:12 UTC (rev 13653)
+++ trunk/SKMainWindowController_UI.m   2023-09-10 17:00:25 UTC (rev 13654)
@@ -1203,7 +1203,7 @@
             NSArray *selections = [[leftSideController.findArrayController 
arrangedObjects] objectsAtIndexes:rowIndexes];
             item = [menu addItemWithTitle:NSLocalizedString(@"Select", @"Menu 
item title") action:@selector(selectSelections:) target:self];
             [item setRepresentedObject:selections];
-            if ([pdfView hideNotes] == NO && [[self pdfDocument] allowsNotes]) 
{
+            if ([pdfView canAddNotes]) {
                 item = [menu addItemWithTitle:NSLocalizedString(@"New Circle", 
@"Menu item title") action:@selector(addAnnotationForContext:) target:pdfView 
tag:SKCircleNote];
                 [item setRepresentedObject:selections];
                 item = [menu addItemWithTitle:NSLocalizedString(@"New Box", 
@"Menu item title") action:@selector(addAnnotationForContext:) target:pdfView 
tag:SKSquareNote];
@@ -1225,7 +1225,7 @@
             NSArray *selections = 
[[[leftSideController.groupedFindArrayController arrangedObjects] 
objectsAtIndexes:rowIndexes] valueForKeyPath:@"@unionOfArrays.matches"];
             item = [menu addItemWithTitle:NSLocalizedString(@"Select", @"Menu 
item title") action:@selector(selectSelections:) target:self];
             [item setRepresentedObject:selections];
-            if ([pdfView hideNotes] == NO && [[self pdfDocument] allowsNotes]) 
{
+            if ([pdfView canAddNotes]) {
                 item = [menu addItemWithTitle:NSLocalizedString(@"New Circle", 
@"Menu item title") action:@selector(addAnnotationForContext:) target:pdfView 
tag:SKCircleNote];
                 [item setRepresentedObject:selections];
                 item = [menu addItemWithTitle:NSLocalizedString(@"New Box", 
@"Menu item title") action:@selector(addAnnotationForContext:) target:pdfView 
tag:SKSquareNote];
@@ -1278,16 +1278,18 @@
                             item = [menu 
addItemWithTitle:[NSLocalizedString(@"Edit", @"Menu item title") 
stringByAppendingEllipsis] action:@selector(editNoteTextFromTable:) 
target:self];
                             [item setRepresentedObject:annotation];
                         }
-                    } else if ([[rightSideController.noteOutlineView 
tableColumnWithIdentifier:NOTE_COLUMNID] isHidden]) {
+                    } else if ([[rightSideController.noteOutlineView 
tableColumnWithIdentifier:NOTE_COLUMNID] isHidden] && [pdfView canAddNotes]) {
                         item = [menu 
addItemWithTitle:[NSLocalizedString(@"Edit", @"Menu item title") 
stringByAppendingEllipsis] action:@selector(editThisAnnotation:) 
target:pdfView];
                         [item setRepresentedObject:annotation];
                     } else {
                         item = [menu 
addItemWithTitle:NSLocalizedString(@"Edit", @"Menu item title") 
action:@selector(editNoteFromTable:) target:self];
                         [item setRepresentedObject:annotation];
-                        item = [menu 
addItemWithTitle:[NSLocalizedString(@"Edit", @"Menu item title") 
stringByAppendingEllipsis] action:@selector(editThisAnnotation:) 
target:pdfView];
-                        [item setRepresentedObject:annotation];
-                        [item 
setKeyEquivalentModifierMask:NSEventModifierFlagOption];
-                        [item setAlternate:YES];
+                        if ([pdfView canAddNotes]) {
+                            item = [menu 
addItemWithTitle:[NSLocalizedString(@"Edit", @"Menu item title") 
stringByAppendingEllipsis] action:@selector(editThisAnnotation:) 
target:pdfView];
+                            [item setRepresentedObject:annotation];
+                            [item 
setKeyEquivalentModifierMask:NSEventModifierFlagOption];
+                            [item setAlternate:YES];
+                        }
                     }
                 }
                 if ([pdfView hideNotes] == NO && [[self pdfDocument] 
allowsNotes]) {
@@ -1294,7 +1296,7 @@
                     if ([pdfView currentAnnotation] == annotation) {
                         item = [menu 
addItemWithTitle:NSLocalizedString(@"Deselect", @"Menu item title") 
action:@selector(deselectNote:) target:self];
                         [item setRepresentedObject:annotation];
-                    } else {
+                    } else if ([pdfView canAddNotes]) {
                         item = [menu 
addItemWithTitle:NSLocalizedString(@"Select", @"Menu item title") 
action:@selector(selectNote:) target:self];
                         [item setRepresentedObject:annotation];
                     }
@@ -1678,7 +1680,7 @@
 - (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
     SEL action = [menuItem action];
     if (action == @selector(createNewNote:)) {
-        return [self interactionMode] != SKPresentationMode && [self 
hasOverview] == NO && [[self pdfDocument] allowsNotes] && ([pdfView toolMode] 
== SKTextToolMode || [pdfView toolMode] == SKNoteToolMode) && [pdfView 
hideNotes] == NO;
+        return [pdfView canAddNotes];
     } else if (action == @selector(editNote:)) {
         PDFAnnotation *annotation = [pdfView currentAnnotation];
         return [self interactionMode] != SKPresentationMode && [self 
hasOverview] == NO && [annotation isSkimNote] && [annotation isEditable];

Modified: trunk/SKPDFView.h
===================================================================
--- trunk/SKPDFView.h   2023-09-10 08:32:12 UTC (rev 13653)
+++ trunk/SKPDFView.h   2023-09-10 17:00:25 UTC (rev 13654)
@@ -187,6 +187,7 @@
 @property (nonatomic, retain) PDFPage *currentSelectionPage;
 @property (nonatomic, readonly) CGFloat currentMagnification;
 @property (nonatomic) BOOL hideNotes;
+@property (nonatomic, readonly) BOOL canAddNotes;
 @property (nonatomic, readonly) BOOL hasReadingBar;
 @property (readonly) SKReadingBar *readingBar;
 @property (nonatomic) CGFloat pacerSpeed;

Modified: trunk/SKPDFView.m
===================================================================
--- trunk/SKPDFView.m   2023-09-10 08:32:12 UTC (rev 13653)
+++ trunk/SKPDFView.m   2023-09-10 17:00:25 UTC (rev 13654)
@@ -270,7 +270,7 @@
 @implementation SKPDFView
 
 @synthesize toolMode, annotationMode, temporaryToolMode, interactionMode, 
currentAnnotation, readingBar, pacerSpeed, transitionController, 
typeSelectHelper, syncDot, zooming;
-@dynamic extendedDisplayMode, displaysHorizontally, displaysRightToLeft, 
hideNotes, hasReadingBar, hasPacer, currentSelectionPage, currentSelectionRect, 
currentMagnification, needsRewind, editing;
+@dynamic extendedDisplayMode, displaysHorizontally, displaysRightToLeft, 
hideNotes, canAddNotes, hasReadingBar, hasPacer, currentSelectionPage, 
currentSelectionRect, currentMagnification, needsRewind, editing;
 
 + (void)initialize {
     SKINITIALIZE;
@@ -1062,6 +1062,10 @@
         [[self undoManager] setActionName:actionName];
 }
 
+- (BOOL)canAddNotes {
+    return pdfvFlags.hideNotes == NO && interactionMode != SKPresentationMode 
&& (toolMode == SKTextToolMode || toolMode == SKNoteToolMode) && [[self 
document] allowsNotes];
+}
+
 #pragma mark Reading bar
 
 - (BOOL)hasReadingBar {
@@ -3476,11 +3480,11 @@
             return YES;
         return NO;
     } else if (action == @selector(paste:)) {
-        return interactionMode != SKPresentationMode && (toolMode == 
SKTextToolMode || toolMode == SKNoteToolMode) && [[NSPasteboard 
generalPasteboard] canReadObjectForClasses:@[[PDFAnnotation class], [NSString 
class]] options:@{}];
+        return [self canAddNotes] && [[NSPasteboard generalPasteboard] 
canReadObjectForClasses:@[[PDFAnnotation class], [NSString class]] options:@{}];
     } else if (action == @selector(alternatePaste:)) {
-        return interactionMode != SKPresentationMode && (toolMode == 
SKTextToolMode || toolMode == SKNoteToolMode) && [[NSPasteboard 
generalPasteboard] canReadObjectForClasses:@[[PDFAnnotation class], 
[NSAttributedString class], [NSString class]] options:@{}];
+        return [self canAddNotes] && [[NSPasteboard generalPasteboard] 
canReadObjectForClasses:@[[PDFAnnotation class], [NSAttributedString class], 
[NSString class]] options:@{}];
     } else if (action == @selector(pasteAsPlainText:)) {
-        return interactionMode != SKPresentationMode && (toolMode == 
SKTextToolMode || toolMode == SKNoteToolMode) && [[NSPasteboard 
generalPasteboard] canReadObjectForClasses:@[[NSAttributedString class], 
[NSString class]] options:@{}];
+        return [self canAddNotes] && [[NSPasteboard generalPasteboard] 
canReadObjectForClasses:@[[NSAttributedString class], [NSString class]] 
options:@{}];
     } else if (action == @selector(delete:)) {
         return [currentAnnotation isSkimNote];
     } else if (action == @selector(selectAll:)) {

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



_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit

Reply via email to