Browse Source

【综合】系统菜单栏Go菜单标记页面跳转相关菜单入口补充

tangchao 1 year ago
parent
commit
1b8b49b4b7

+ 6 - 6
PDF Office/PDF Master.xcodeproj/xcuserdata/kdanmobile.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -318,8 +318,8 @@
             filePath = "PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+MenuAction.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "1009"
-            endingLineNumber = "1009"
+            startingLineNumber = "1035"
+            endingLineNumber = "1035"
             landmarkName = "rotateAllRight(_:)"
             landmarkType = "7">
          </BreakpointContent>
@@ -334,8 +334,8 @@
             filePath = "PDF Master/Class/ChromiumTabs/KMBrowserWindowController.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "2222"
-            endingLineNumber = "2222"
+            startingLineNumber = "2233"
+            endingLineNumber = "2233"
             landmarkName = "autoSelectContent(_:)"
             landmarkType = "7">
          </BreakpointContent>
@@ -350,8 +350,8 @@
             filePath = "PDF Master/Class/ChromiumTabs/KMBrowserWindowController.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "1951"
-            endingLineNumber = "1951"
+            startingLineNumber = "1962"
+            endingLineNumber = "1962"
             landmarkName = "editWatermark(_:)"
             landmarkType = "7">
          </BreakpointContent>

+ 17 - 6
PDF Office/PDF Master/Class/ChromiumTabs/KMBrowserWindowController.swift

@@ -755,12 +755,6 @@ extension KMBrowserWindowController {
     @IBAction func doGoForward(_ sender: Any?) {
         KMPrint("doGoForward ...")
     }
-    @IBAction func goToMarkedPage(_ sender: Any?) {
-        KMPrint("goToMarkedPage ...")
-    }
-    @IBAction func markPage(_ sender: Any?) {
-        KMPrint("markPage ...")
-    }
     @IBAction func doZoomIn(_ sender: Any?) {
         KMPrint("doZoomIn ...")
     }
@@ -1625,6 +1619,23 @@ extension KMBrowserWindowController: KMSystemGotoMenuProtocol {
             document.mainViewController?.menuItemAction_gotoPage(sender)
         }
     }
+    
+    @IBAction func goToMarkedPage(_ sender: Any?) {
+        if (self.canResponseDocumentAction() == false) {
+            return
+        }
+        if let document = self.browser.activeTabContents() as? KMMainDocument, document.isHome == false {
+            document.mainViewController?.goToMarkedPage(sender)
+        }
+    }
+    @IBAction func markPage(_ sender: Any?) {
+        if (self.canResponseDocumentAction() == false) {
+            return
+        }
+        if let document = self.browser.activeTabContents() as? KMMainDocument, document.isHome == false {
+            document.mainViewController?.markPage(sender)
+        }
+    }
 }
 
 // MARK: - KMSystemToolMenuProtocol

+ 3 - 0
PDF Office/PDF Master/Class/PDFWindowController/PDFListView/CPDFListViewExtension/CPDFListView+Extension.h

@@ -40,6 +40,9 @@
 
 - (IBAction)autoSelectContent:(id)sender;
 
+- (void)goToPageAtIndex:(NSUInteger)pageIndex point:(NSPoint)point;
+- (NSUInteger)currentPageIndexAndPoint:(NSPoint *)point rotated:(BOOL *)rotated;
+
 @end
 
 @interface CPDFView (KMExtension)

+ 19 - 0
PDF Office/PDF Master/Class/PDFWindowController/PDFListView/CPDFListViewExtension/CPDFListView+Extension.m

@@ -514,6 +514,25 @@ CGFloat DEFAULT_SNAPSHOT_HEIGHT = 200.0;
     }
 }
 
+- (void)goToPageAtIndex:(NSUInteger)pageIndex point:(NSPoint)point {
+    CPDFPage *page = [[self document] pageAtIndex:pageIndex];
+    CPDFDestination *destination = [[CPDFDestination alloc] initWithPage:page atPoint:point];
+    [self goToDestination:destination];
+}
+
+- (NSUInteger)currentPageIndexAndPoint:(NSPoint *)point rotated:(BOOL *)rotated {
+    CPDFPage *page = [self currentPage];
+    // don't use currentDestination, as that always gives the top-left of the page in non-continuous mode, rather than the visible area
+    // SKTopLeftPoint([self bounds]
+    NSPoint tmpP = NSMakePoint(NSMinX(self.bounds), NSMaxY(self.bounds));
+    if (point) *point = [self convertPoint:tmpP toPage:page];
+    // [page rotation] != [page intrinsicRotation];
+    if (rotated) {
+        *rotated = true;
+    }
+    return [page pageIndex];
+}
+
 @end
 
 @implementation CPDFView (KMExtension)

+ 26 - 0
PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+MenuAction.swift

@@ -621,6 +621,32 @@ extension KMMainViewController {
         sheet.pageBox.addItems(withObjectValues: pages)
         sheet.stringValue = "\(self.listView.currentPageIndex+1)"
     }
+    
+    @IBAction func goToMarkedPage(_ sender: Any?) {
+        guard let pdfDoc = self.listView.document, pdfDoc.isLocked == false && pdfDoc.pageCount > 0 else {
+            NSSound.beep()
+            return
+        }
+        guard let currentPageIndex = self.listView.currentPage()?.pageIndex() else {
+            NSSound.beep()
+            return
+        }
+//        if (markedPageIndex == NSNotFound || [pdfDoc isLocked] || [pdfDoc pageCount] == 0) {
+//            NSBeep();
+//        } else if (beforeMarkedPageIndex != NSNotFound) {
+        if self.beforeMarkedPageIndex != NSNotFound {
+            self.listView.goToPage(at: min(UInt(self.beforeMarkedPageIndex), pdfDoc.pageCount-1), point: self.beforeMarkedPagePoint)
+        } else if (currentPageIndex != self.markedPageIndex) {
+//            NSUInteger lastPageIndex = [pdfView currentPageIndexAndPoint:&beforeMarkedPagePoint rotated:NULL];
+            let lastPageIndex = self.listView.currentPageIndexAndPoint(&self.beforeMarkedPagePoint, rotated: nil)
+            self.listView.goToPage(at: min(UInt(self.markedPageIndex), pdfDoc.pageCount-1), point: self.markedPagePoint)
+            self.beforeMarkedPageIndex = Int(lastPageIndex)
+        }
+    }
+    @IBAction func markPage(_ sender: Any?) {
+        self.markedPageIndex = Int(self.listView.currentPageIndexAndPoint(&self.markedPagePoint, rotated: nil))
+        self.beforeMarkedPageIndex = NSNotFound
+    }
 }
 
 // MARK: tool Menu

+ 5 - 0
PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController.swift

@@ -171,6 +171,11 @@ import Cocoa
         }
     }
     
+    var beforeMarkedPageIndex = NSNotFound
+    var markedPageIndex = NSNotFound
+    var beforeMarkedPagePoint = NSPoint.zero
+    var markedPagePoint = NSPoint.zero
+    
     deinit {
         NotificationCenter.default.removeObserver(self)
         self.stopAutoSaveTimer()

+ 8 - 1
PDF Office/PDF Master/Class/SystemMenu/KMSystemGotoMenu.swift

@@ -15,6 +15,9 @@ protocol KMSystemGotoMenuProtocol {
     func menuItemAction_forward(_ sender: Any)
     func menuItemAction_goback(_ sender: Any)
     func menuItemAction_gotoPage(_ sender: Any)
+    
+    func goToMarkedPage(_ sender: Any?)
+    func markPage(_ sender: Any?)
 }
 
 extension KMSystemMenu.Goto {
@@ -26,8 +29,12 @@ extension KMSystemMenu.Goto {
     public static let gobackSelector       = NSSelectorFromString("menuItemAction_goback:")
     public static let gotoPageSelector     = NSSelectorFromString("menuItemAction_gotoPage:")
     
+    public static let goToMarkedPageSelector     = NSSelectorFromString("goToMarkedPage:")
+    public static let markPageSelector     = NSSelectorFromString("markPage:")
+    
     public static func actions() -> [Selector] {
         return [self.nextPageSelector, self.forwardPageSelector, self.firstPageSelector, self.lastPageSelector,
-                self.forwardSelector, self.gobackSelector, self.gotoPageSelector]
+                self.forwardSelector, self.gobackSelector, self.gotoPageSelector,
+                self.goToMarkedPageSelector, self.markPageSelector]
     }
 }

+ 0 - 1
PDF Office/PDF Master/Class/SystemMenu/KMSystemToolMenu.swift

@@ -181,7 +181,6 @@ extension KMSystemMenu.Tool {
     
     public static let autoSelectContentSelector       = NSSelectorFromString("autoSelectContent:")
     
-    
     public static func actions() -> [Selector] {
         return [self.getInfoSelector ,self.orderFrontNotesPanelSelector, self.orderFrontLineInspectorSelector,
                 self.textToolSelector, self.scrolToolSelector, self.zoomToolSelector, self.selectToolSelector,