Browse Source

Merge branch 'develop_PDFReaderProNew' of git.kdan.cc:Mac_PDF/PDF_Office into develop_PDFReaderProNew

liujiajie 1 year ago
parent
commit
043012a432

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

@@ -324,22 +324,6 @@
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "0ADF65CA-AD47-4911-9A16-633164400183"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "PDF Master/Class/PDFTools/Print/KMPrintWindowController.swift"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "200"
-            endingLineNumber = "200"
-            landmarkName = "showNewPrintWindowControll(inputData:inputDocument:inputType:inputPageRange:printType:)"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
@@ -436,5 +420,53 @@
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "07EA03B1-F153-4E70-9121-8711E5C4978A"
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+MenuAction.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "867"
+            endingLineNumber = "867"
+            landmarkName = "rotateAllRight(_:)"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "CA98A2A3-AC7E-428F-8189-E463B0D77F34"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/Class/ChromiumTabs/KMBrowserWindowController.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "2034"
+            endingLineNumber = "2034"
+            landmarkName = "autoSelectContent(_:)"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "4061BC4B-4340-4644-BE17-783EA8A4B007"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/Class/ChromiumTabs/KMBrowserWindowController.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "1879"
+            endingLineNumber = "1879"
+            landmarkName = "editWatermark(_:)"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
    </Breakpoints>
 </Bucket>

+ 196 - 88
PDF Office/PDF Master/Class/ChromiumTabs/KMBrowserWindowController.swift

@@ -777,21 +777,6 @@ extension KMBrowserWindowController {
     @IBAction func toggleAutoScale(_ sender: Any?) {
         KMPrint("toggleAutoScale ...")
     }
-    @IBAction func rotateRight(_ sender: Any?) {
-        KMPrint("rotateRight ...")
-    }
-    @IBAction func rotateLeft(_ sender: Any?) {
-        KMPrint("rotateLeft ...")
-    }
-    @IBAction func rotateAllRight(_ sender: Any?) {
-        KMPrint("rotateAllRight ...")
-    }
-    @IBAction func rotateAllLeft(_ sender: Any?) {
-        KMPrint("rotateAllLeft ...")
-    }
-    @IBAction func autoSelectContent(_ sender: Any?) {
-        KMPrint("autoSelectContent ...")
-    }
     @IBAction func getInfo(_ sender: Any?) {
         KMPrint("getInfo ...")
     }
@@ -897,9 +882,6 @@ extension KMBrowserWindowController {
     @IBAction func link(_ sender: Any?) {
         KMPrint("link ...")
     }
-    @IBAction func addWatermark(_ sender: Any?) {
-        KMPrint("addWatermark ...")
-    }
     @IBAction func pageEdit(_ sender: Any?) {
         KMPrint("pageEdit ...")
     }
@@ -922,76 +904,6 @@ extension KMBrowserWindowController {
     @IBAction func coverageComparison(_ sender: Any?) {
         KMPrint("coverageComparison ...")
     }
-    @IBAction func addBackground(_ sender: Any?) {
-        KMPrint("addBackground ...")
-    }
-    @IBAction func removeBackground(_ sender: Any?) {
-        KMPrint("removeBackground ...")
-    }
-    @IBAction func addHeaderFooter(_ sender: Any?) {
-        KMPrint("addHeaderFooter ...")
-    }
-    @IBAction func removeHeaderFooter(_ sender: Any?) {
-        KMPrint("removeHeaderFooter ...")
-    }
-    @IBAction func addHeaderFooterBates(_ sender: Any?) {
-        KMPrint("addHeaderFooterBates ...")
-    }
-    @IBAction func removeHeaderFooterBates(_ sender: Any?) {
-        KMPrint("removeHeaderFooterBates ...")
-    }
-    @IBAction func editWatermark(_ sender: Any?) {
-        KMPrint("editWatermark ...")
-    }
-    @IBAction func batchAddWatermark(_ sender: Any?) {
-        KMPrint("batchAddWatermark ...")
-    }
-    @IBAction func batchRemoveWatermark(_ sender: Any?) {
-        KMPrint("batchRemoveWatermark ...")
-    }
-    @IBAction func removeWatermark(_ sender: Any?) {
-        KMPrint("removeWatermark ...")
-    }
-    @IBAction func templateWatermark(_ sender: Any?) {
-        KMPrint("templateWatermark ...")
-    }
-    @IBAction func batchAddBackground(_ sender: Any?) {
-        KMPrint("batchAddBackground ...")
-    }
-    @IBAction func batchRemoveBackground(_ sender: Any?) {
-        KMPrint("batchRemoveBackground ...")
-    }
-    @IBAction func templateBackground(_ sender: Any?) {
-        KMPrint("templateBackground ...")
-    }
-    
-    @IBAction func batchAddHeaderFooter(_ sender: Any?) {
-        KMPrint("batchAddHeaderFooter ...")
-    }
-    @IBAction func batchRemoveHeaderFooter(_ sender: Any?) {
-        KMPrint("batchRemoveHeaderFooter ...")
-    }
-    @IBAction func templateHeaderFooter(_ sender: Any?) {
-        KMPrint("templateHeaderFooter ...")
-    }
-    @IBAction func batchAddBates(_ sender: Any?) {
-        KMPrint("batchAddBates ...")
-    }
-    @IBAction func batchRemoveBates(_ sender: Any?) {
-        KMPrint("batchRemoveBates ...")
-    }
-    @IBAction func templateBates(_ sender: Any?) {
-        KMPrint("templateBates ...")
-    }
-    @IBAction func togglePoster(_ sender: Any?) {
-        KMPrint("togglePoster ...")
-    }
-    @IBAction func toggleMultiple(_ sender: Any?) {
-        KMPrint("toggleMultiple ...")
-    }
-    @IBAction func toggleBooklet(_ sender: Any?) {
-        KMPrint("toggleBooklet ...")
-    }
     @IBAction func readMode(_ sender: Any?) {
         KMPrint("readMode ...")
     }
@@ -1933,6 +1845,202 @@ extension KMBrowserWindowController: KMSystemToolMenuProtocol {
             }
         }
     }
+    
+    @IBAction func addBackground(_ sender: Any?) {
+        KMPrint("addBackground ...")
+    }
+    @IBAction func removeBackground(_ sender: Any?) {
+        KMPrint("removeBackground ...")
+    }
+    @IBAction func addHeaderFooter(_ sender: Any?) {
+        KMPrint("addHeaderFooter ...")
+    }
+    @IBAction func removeHeaderFooter(_ sender: Any?) {
+        KMPrint("removeHeaderFooter ...")
+    }
+    @IBAction func addHeaderFooterBates(_ sender: Any?) {
+        KMPrint("addHeaderFooterBates ...")
+    }
+    @IBAction func removeHeaderFooterBates(_ sender: Any?) {
+        KMPrint("removeHeaderFooterBates ...")
+    }
+    @IBAction func addWatermark(_ sender: Any?) {
+        if (self.canResponseDocumentAction() == false) {
+            return
+        }
+        if let document = self.browser.activeTabContents() as? KMMainDocument {
+            if (document.isHome) {
+            } else {
+                document.mainViewController?.addWatermark(sender)
+            }
+        }
+    }
+    @IBAction func editWatermark(_ sender: Any?) {
+        KMPrint("editWatermark ...")
+    }
+    @IBAction func batchAddWatermark(_ sender: Any?) {
+        if (self.canResponseDocumentAction() == false) {
+            return
+        }
+        if let document = self.browser.activeTabContents() as? KMMainDocument {
+            if (document.isHome) {
+            } else {
+                document.mainViewController?.batchAddWatermark(sender)
+            }
+        }
+    }
+    @IBAction func batchRemoveWatermark(_ sender: Any?) {
+        if (self.canResponseDocumentAction() == false) {
+            return
+        }
+        if let document = self.browser.activeTabContents() as? KMMainDocument {
+            if (document.isHome) {
+            } else {
+                document.mainViewController?.batchRemoveWatermark(sender)
+            }
+        }
+    }
+    @IBAction func removeWatermark(_ sender: Any?) {
+        if (self.canResponseDocumentAction() == false) {
+            return
+        }
+        if let document = self.browser.activeTabContents() as? KMMainDocument {
+            if (document.isHome) {
+            } else {
+                document.mainViewController?.removeWatermark(sender)
+            }
+        }
+    }
+    @IBAction func templateWatermark(_ sender: Any?) {
+        if (self.canResponseDocumentAction() == false) {
+            return
+        }
+        if let document = self.browser.activeTabContents() as? KMMainDocument {
+            if (document.isHome) {
+            } else {
+                document.mainViewController?.templateWatermark(sender)
+            }
+        }
+    }
+    @IBAction func batchAddBackground(_ sender: Any?) {
+        KMPrint("batchAddBackground ...")
+    }
+    @IBAction func batchRemoveBackground(_ sender: Any?) {
+        KMPrint("batchRemoveBackground ...")
+    }
+    @IBAction func templateBackground(_ sender: Any?) {
+        KMPrint("templateBackground ...")
+    }
+    
+    @IBAction func batchAddHeaderFooter(_ sender: Any?) {
+        KMPrint("batchAddHeaderFooter ...")
+    }
+    @IBAction func batchRemoveHeaderFooter(_ sender: Any?) {
+        KMPrint("batchRemoveHeaderFooter ...")
+    }
+    @IBAction func templateHeaderFooter(_ sender: Any?) {
+        KMPrint("templateHeaderFooter ...")
+    }
+    @IBAction func batchAddBates(_ sender: Any?) {
+        KMPrint("batchAddBates ...")
+    }
+    @IBAction func batchRemoveBates(_ sender: Any?) {
+        KMPrint("batchRemoveBates ...")
+    }
+    @IBAction func templateBates(_ sender: Any?) {
+        KMPrint("templateBates ...")
+    }
+    
+    @IBAction func togglePoster(_ sender: Any?) {
+        if (self.canResponseDocumentAction() == false) {
+            return
+        }
+        if let document = self.browser.activeTabContents() as? KMMainDocument {
+            if (document.isHome) {
+            } else {
+                document.mainViewController?.togglePoster(sender)
+            }
+        }
+    }
+    @IBAction func toggleMultiple(_ sender: Any?) {
+        if (self.canResponseDocumentAction() == false) {
+            return
+        }
+        if let document = self.browser.activeTabContents() as? KMMainDocument {
+            if (document.isHome) {
+            } else {
+                document.mainViewController?.toggleMultiple(sender)
+            }
+        }
+    }
+    @IBAction func toggleBooklet(_ sender: Any?) {
+        if (self.canResponseDocumentAction() == false) {
+            return
+        }
+        if let document = self.browser.activeTabContents() as? KMMainDocument {
+            if (document.isHome) {
+            } else {
+                document.mainViewController?.toggleBooklet(sender)
+            }
+        }
+    }
+    
+    @IBAction func rotateRight(_ sender: Any?) {
+        if (self.canResponseDocumentAction() == false) {
+            return
+        }
+        if let document = self.browser.activeTabContents() as? KMMainDocument {
+            if (document.isHome) {
+            } else {
+                document.mainViewController?.rotateRight(sender)
+            }
+        }
+    }
+    @IBAction func rotateLeft(_ sender: Any?) {
+        if (self.canResponseDocumentAction() == false) {
+            return
+        }
+        if let document = self.browser.activeTabContents() as? KMMainDocument {
+            if (document.isHome) {
+            } else {
+                document.mainViewController?.rotateLeft(sender)
+            }
+        }
+    }
+    @IBAction func rotateAllRight(_ sender: Any?) {
+        if (self.canResponseDocumentAction() == false) {
+            return
+        }
+        if let document = self.browser.activeTabContents() as? KMMainDocument {
+            if (document.isHome) {
+            } else {
+                document.mainViewController?.rotateAllRight(sender)
+            }
+        }
+    }
+    @IBAction func rotateAllLeft(_ sender: Any?) {
+        if (self.canResponseDocumentAction() == false) {
+            return
+        }
+        if let document = self.browser.activeTabContents() as? KMMainDocument {
+            if (document.isHome) {
+            } else {
+                document.mainViewController?.rotateAllLeft(sender)
+            }
+        }
+    }
+    
+    @IBAction func autoSelectContent(_ sender: Any?) {
+        if (self.canResponseDocumentAction() == false) {
+            return
+        }
+        if let document = self.browser.activeTabContents() as? KMMainDocument {
+            if (document.isHome) {
+            } else {
+                document.mainViewController?.autoSelectContent(sender)
+            }
+        }
+    }
 }
 
 // MARK: - KMSystemWindowMenuRrotocol

+ 17 - 9
PDF Office/PDF Master/Class/PDFTools/Compress/Controller/KMCompressWIndowControllerNew.swift

@@ -20,20 +20,28 @@ class KMCompressWIndowControllerNew: NSWindowController {
     
     var documentURL: URL! {
         didSet{
-            KMBaseWindowController.checkPassword(url: documentURL) { [unowned self] success, paasswordString in
-                if success {
-                    self.password = paasswordString
-                    self.compressView.documentURL = self.documentURL
-                } else {
-                    guard let callBack = self.itemClick else { return }
-                    
-                    callBack()
+            if self.password.count != 0 {
+                self.compressView.documentURL = self.documentURL
+            } else {
+                KMBaseWindowController.checkPassword(url: documentURL) { [unowned self] success, paasswordString in
+                    if success {
+                        self.password = paasswordString
+                        self.compressView.documentURL = self.documentURL
+                    } else {
+                        guard let callBack = self.itemClick else { return }
+                        
+                        callBack()
+                    }
                 }
             }
         }
     }
     
-    var password: String!
+    var password: String = "" {
+        didSet {
+            self.compressView.password = password
+        }
+    }
     private var datas: [String] = []
     
     var limit = true

+ 6 - 2
PDF Office/PDF Master/Class/PDFTools/Compress/View/KMCompressView.swift

@@ -41,7 +41,7 @@ class KMCompressView: KMBaseXibView {
             self.reloadData()
         }
     }
-//    var password: String!
+    var password: String = ""
 //    private var datas: [String] = []
 //    var selectIndex = 2
 //    
@@ -93,7 +93,11 @@ class KMCompressView: KMBaseXibView {
                 titleLabel.stringValue = filePath.lastPathComponent
                 finalSizeLabel.isHidden = true
                 
-                let image: NSImage = NSImage.previewForFile(path: url!, ofSize: fileImageView.bounds.size, asIcon: true) ?? NSImage()
+                let pdfDocument = CPDFDocument(url: url)
+                pdfDocument?.unlock(withPassword: self.password)
+                let page = pdfDocument?.page(at: 0) ?? CPDFPage()
+                let image = page.thumbnail(of: page.size)
+//                let image: NSImage = NSImage.previewForFile(path: url!, ofSize: fileImageView.bounds.size, asIcon: true) ?? NSImage()
                 fileImageView.image = image;
             }
         }

+ 1 - 1
PDF Office/PDF Master/Class/PDFTools/Crop/Tools/KMCropTools.swift

@@ -7,7 +7,7 @@
 
 import Cocoa
 
-class KMCropTools: NSObject {
+@objcMembers class KMCropTools: NSObject {
     class func getPageSize() -> Array<String> {
         return ["A3","A4","A5","A6",
                 "Envelope #10","Envelope Choukei 3","Envelope DL",

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

@@ -38,6 +38,8 @@
 - (void)takeSnapshot:(id)sender;
 -(void)takeSnapshotSelectContent:(id)sender;
 
+- (IBAction)autoSelectContent:(id)sender;
+
 @end
 
 @interface CPDFView (KMExtension)

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

@@ -501,6 +501,19 @@ CGFloat DEFAULT_SNAPSHOT_HEIGHT = 200.0;
      }
 }
 
+- (IBAction)autoSelectContent:(id)sender {
+    if (self.toolMode == CSelectToolMode) {
+        CPDFPage *page = [self currentPage];
+        @synchronized (self) {
+            NSRect foregroundBox = [KMCropTools getPageForegroundBox:page];
+            self.selectionRect = NSIntersectionRect(NSUnionRect(foregroundBox, self.selectionRect), [page boundsForBox:[self displayBox]]);
+            self.selectionPageIndex = [page pageIndex];
+        }
+        [[NSNotificationCenter defaultCenter] postNotificationName:CPDFViewSelectionChangedNotification object:self];
+        [self requiresDisplay];
+    }
+}
+
 @end
 
 @implementation CPDFView (KMExtension)

+ 1 - 1
PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+Action.swift

@@ -2087,13 +2087,13 @@ extension KMMainViewController {
         let windowController = KMCompressWIndowControllerNew(windowNibName: "KMCompressWIndowControllerNew")
         self.view.window?.beginSheet(windowController.window!)
         self.currentWindowController = windowController
+        windowController.password = self.listView.document.password
 //        if let _url = url {
 //            windowController.oriDocumentUrl = self.listView.document.documentURL
 //            windowController.documentURL = _url
 //        } else {
             windowController.documentURL = self.listView.document.documentURL
 //        }
-        windowController.password = self.listView.document.password
 
         windowController.itemClick = { [weak self] in
             self?.view.window?.endSheet((self?.currentWindowController.window)!)

+ 115 - 1
PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+MenuAction.swift

@@ -775,6 +775,110 @@ extension KMMainViewController: KMSystemToolMenuProtocol {
             self.changeAnnotationMode_itemAction(sender: data)
         }
     }
+    
+    func addWatermark(_ sender: Any?) {
+        var item = self.toolbarController.findItem(KMToolbarToolWatermarkItemIdentifier)
+        if item == nil {
+            item = KMToolbarItemView(itemIdentifier: KMToolbarToolWatermarkItemIdentifier)
+        }
+        self.toolbarController.toolbarViewController(self.toolbarController.childToolBarView!, menuItemDidClick: item!, index: 1, info: nil)
+    }
+    
+    func removeWatermark(_ sender: Any?) {
+        var item = self.toolbarController.findItem(KMToolbarToolWatermarkItemIdentifier)
+        if item == nil {
+            item = KMToolbarItemView(itemIdentifier: KMToolbarToolWatermarkItemIdentifier)
+        }
+        self.toolbarController.toolbarViewController(self.toolbarController.childToolBarView!, menuItemDidClick: item!, index: 2, info: nil)
+    }
+    
+    func batchAddWatermark(_ sender: Any?) {
+        var item = self.toolbarController.findItem(KMToolbarToolWatermarkItemIdentifier)
+        if item == nil {
+            item = KMToolbarItemView(itemIdentifier: KMToolbarToolWatermarkItemIdentifier)
+        }
+        self.toolbarController.toolbarViewController(self.toolbarController.childToolBarView!, menuItemDidClick: item!, index: 3, info: nil)
+    }
+    
+    func batchRemoveWatermark(_ sender: Any?) {
+        var item = self.toolbarController.findItem(KMToolbarToolWatermarkItemIdentifier)
+        if item == nil {
+            item = KMToolbarItemView(itemIdentifier: KMToolbarToolWatermarkItemIdentifier)
+        }
+        self.toolbarController.toolbarViewController(self.toolbarController.childToolBarView!, menuItemDidClick: item!, index: 4, info: nil)
+    }
+    
+    func templateWatermark(_ sender: Any?) {
+        var item = self.toolbarController.findItem(KMToolbarToolWatermarkItemIdentifier)
+        if item == nil {
+            item = KMToolbarItemView(itemIdentifier: KMToolbarToolWatermarkItemIdentifier)
+        }
+        self.toolbarController.toolbarViewController(self.toolbarController.childToolBarView!, menuItemDidClick: item!, index: 5, info: nil)
+    }
+    
+    func togglePoster(_ sender: Any?) {
+        KMPrintWindowController.showNewPrintWindowControll(inputData: self.listView.document?.documentURL, inputDocument: nil, inputPageRange: KMPrintPageRange(), printType: .poster)
+    }
+    
+    func toggleMultiple(_ sender: Any?) {
+        KMPrintWindowController.showNewPrintWindowControll(inputData: self.listView.document?.documentURL, inputDocument: nil, inputPageRange: KMPrintPageRange(), printType: .multipage)
+    }
+    
+    func toggleBooklet(_ sender: Any?) {
+        KMPrintWindowController.showNewPrintWindowControll(inputData: self.listView.document?.documentURL, inputDocument: nil, inputPageRange: KMPrintPageRange(), printType: .pamphlet)
+    }
+    
+    func rotateLeft(_ sender: Any?) {
+        Task { @MainActor in
+            let page : CPDFPage = self.listView?.currentPage() ?? CPDFPage()
+            let rotation = page.rotation
+            page.leftRotate()
+            
+            self.rotatePageItems(pageItems: [KMThumbnailPageItem(page: page, rotate: page.rotation, oldRotate: rotation)])
+        }
+    }
+    
+    func rotateRight(_ sender: Any?) {
+        Task { @MainActor in
+            let page : CPDFPage = self.listView?.currentPage() ?? CPDFPage()
+            let rotation = page.rotation
+            page.rightRotate()
+            
+            self.rotatePageItems(pageItems: [KMThumbnailPageItem(page: page, rotate: page.rotation, oldRotate: rotation)])
+        }
+    }
+    
+    func rotateAllLeft(_ sender: Any?) {
+        Task { @MainActor in
+            var pageItems: [KMThumbnailPageItem] = []
+            for index in 0 ... self.listView.document.pageCount - 1 {
+                let page: CPDFPage = self.listView.document.page(at: index)
+                let rotation = page.rotation
+                page.leftRotate()
+                pageItems.append(KMThumbnailPageItem(page: page, rotate: page.rotation, oldRotate: rotation))
+            }
+
+            self.rotatePageItems(pageItems: pageItems)
+        }
+    }
+    
+    func rotateAllRight(_ sender: Any?) {
+        Task { @MainActor in
+            var pageItems: [KMThumbnailPageItem] = []
+            for index in 0 ... self.listView.document.pageCount - 1 {
+                let page: CPDFPage = self.listView.document.page(at: index)
+                let rotation = page.rotation
+                page.leftRotate()
+                pageItems.append(KMThumbnailPageItem(page: page, rotate: page.rotation, oldRotate: rotation))
+            }
+
+            self.rotatePageItems(pageItems: pageItems)
+        }
+    }
+    
+    func autoSelectContent(_ sender: Any?) {
+        self.listView.autoSelectContent(sender)
+    }
 }
 
 // MARK: window Menu
@@ -917,7 +1021,17 @@ extension KMMainViewController: NSMenuItemValidation, NSMenuDelegate {
             }
             return true
         }
-
+        guard let action = menuItem.action else {
+            return false
+        }
+        
+        if KMSystemMenu.isToolSelector(sel: action) {
+            if action == KMSystemMenu.Tool.autoSelectContentSelector {
+                let toolMode = self.listView?.toolMode ?? .none
+                return toolMode == .selectToolMode
+            }
+        }
+        
         return true
     }
 }

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

@@ -45,6 +45,42 @@ import Foundation
     @objc optional func takeSnapshot(_ sender: Any?)
     @objc optional func takeSnapshotSelectContent(_ sender: Any?)
     
+    @objc optional func addWatermark(_ sender: Any?)
+    @objc optional func editWatermark(_ sender: Any?)
+    @objc optional func batchAddWatermark(_ sender: Any?)
+    @objc optional func batchRemoveWatermark(_ sender: Any?)
+    @objc optional func removeWatermark(_ sender: Any?)
+    @objc optional func templateWatermark(_ sender: Any?)
+    
+    @objc optional func addBackground(_ sender: Any?)
+    @objc optional func removeBackground(_ sender: Any?)
+    @objc optional func batchAddBackground(_ sender: Any?)
+    @objc optional func batchRemoveBackground(_ sender: Any?)
+    @objc optional func templateBackground(_ sender: Any?)
+    
+    @objc optional func addHeaderFooter(_ sender: Any?)
+    @objc optional func removeHeaderFooter(_ sender: Any?)
+    @objc optional func batchAddHeaderFooter(_ sender: Any?)
+    @objc optional func batchRemoveHeaderFooter(_ sender: Any?)
+    @objc optional func templateHeaderFooter(_ sender: Any?)
+    
+    @objc optional func addHeaderFooterBates(_ sender: Any?)
+    @objc optional func removeHeaderFooterBates(_ sender: Any?)
+    @objc optional func batchAddBates(_ sender: Any?)
+    @objc optional func batchRemoveBates(_ sender: Any?)
+    @objc optional func templateBates(_ sender: Any?)
+    
+    @objc optional func togglePoster(_ sender: Any?)
+    @objc optional func toggleMultiple(_ sender: Any?)
+    @objc optional func toggleBooklet(_ sender: Any?)
+    
+    @objc optional func rotateRight(_ sender: Any?)
+    @objc optional func rotateLeft(_ sender: Any?)
+    @objc optional func rotateAllRight(_ sender: Any?)
+    @objc optional func rotateAllLeft(_ sender: Any?)
+    
+    @objc optional func autoSelectContent(_ sender: Any?)
+    
 }
 
 extension KMSystemMenu.Tool {
@@ -85,6 +121,44 @@ extension KMSystemMenu.Tool {
     public static let takeSnapshotSelector       = NSSelectorFromString("takeSnapshot:")
     public static let takeSnapshotSelectContentSelector       = NSSelectorFromString("takeSnapshotSelectContent:")
     
+    public static let addWatermarkSelector       = NSSelectorFromString("addWatermark:")
+    public static let editWatermarkSelector       = NSSelectorFromString("editWatermark:")
+    public static let batchAddWatermarkSelector       = NSSelectorFromString("batchAddWatermark:")
+    public static let batchRemoveWatermarkSelector       = NSSelectorFromString("batchRemoveWatermark:")
+    public static let removeWatermarkSelector       = NSSelectorFromString("removeWatermark:")
+    public static let templateWatermarkSelector       = NSSelectorFromString("templateWatermark:")
+    
+//    @objc optional func addBackground(_ sender: Any?)
+//    @objc optional func removeBackground(_ sender: Any?)
+//    @objc optional func batchAddBackground(_ sender: Any?)
+//    @objc optional func batchRemoveBackground(_ sender: Any?)
+//    @objc optional func templateBackground(_ sender: Any?)
+//
+//    @objc optional func addHeaderFooter(_ sender: Any?)
+//    @objc optional func removeHeaderFooter(_ sender: Any?)
+//    @objc optional func batchAddHeaderFooter(_ sender: Any?)
+//    @objc optional func batchRemoveHeaderFooter(_ sender: Any?)
+//    @objc optional func templateHeaderFooter(_ sender: Any?)
+//
+//    @objc optional func addHeaderFooterBates(_ sender: Any?)
+//    @objc optional func removeHeaderFooterBates(_ sender: Any?)
+//    @objc optional func batchAddBates(_ sender: Any?)
+//    @objc optional func batchRemoveBates(_ sender: Any?)
+//    @objc optional func templateBates(_ sender: Any?)
+    
+    
+    public static let togglePosterSelector       = NSSelectorFromString("togglePoster:")
+    public static let toggleMultipleSelector       = NSSelectorFromString("toggleMultiple:")
+    public static let toggleBookletSelector       = NSSelectorFromString("toggleBooklet:")
+    
+    // rotate
+    public static let rotateRightSelector       = NSSelectorFromString("rotateRight:")
+    public static let rotateLeftSelector       = NSSelectorFromString("rotateLeft:")
+    public static let rotateAllRightSelector       = NSSelectorFromString("rotateAllRight:")
+    public static let rotateAllLeftSelector       = NSSelectorFromString("rotateAllLeft:")
+    
+    public static let autoSelectContentSelector       = NSSelectorFromString("autoSelectContent:")
+    
     
     public static func actions() -> [Selector] {
         return [self.textToolSelector, self.scrolToolSelector, self.zoomToolSelector, self.selectToolSelector,
@@ -98,7 +172,11 @@ extension KMSystemMenu.Tool {
                 // crop
                 self.cropAllSelector, self.cropSelector, self.autoCropAllSelector, self.smartAutoCropAllSelector, self.cropOptionsSelector, self.selectToolModelSelector,
                 // snapshot
-                self.takeSnapshotSelector, self.takeSnapshotSelectContentSelector
+                self.takeSnapshotSelector, self.takeSnapshotSelectContentSelector,
+                self.togglePosterSelector, self.toggleMultipleSelector, self.toggleBookletSelector,
+                // rotate
+                self.rotateRightSelector, self.rotateLeftSelector, self.rotateAllLeftSelector, self.rotateAllRightSelector,
+                self.autoSelectContentSelector
         ]
     }
 }