Browse Source

【2025】【Edit】裁剪模块完善

niehaoyu 4 weeks ago
parent
commit
9824da102c

+ 24 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/EditTool/Crop/Views/KMCropPropertyController.swift

@@ -60,6 +60,8 @@ class KMCropPropertyController: NSViewController {
     
     public var pdfView: CPDFListView?
     
+    public var pageBounds: CGRect = .zero
+    
     var pageCropBounds: CGRect = .zero
     
     override func viewDidLoad() {
@@ -89,6 +91,26 @@ class KMCropPropertyController: NSViewController {
         }
     }
     
+    public func recoverEnable() -> Bool {
+        guard let pdfView = self.pdfView else {
+            return false
+        }
+        
+        //PageRange
+        if CGRectEqualToRect(pdfView.selectionRect, self.pageBounds) {
+             
+        } else {
+            return true
+        }
+        
+        return false
+    }
+    
+    public func cropEnable() -> Bool {
+        return cropButton.properties.isDisabled ? false : true
+        
+    }
+    
     func setupProperty() {
         //White Margin
         whiteMarginLabel.stringValue = KMLocalizedString("Crop White Margins")
@@ -244,6 +266,8 @@ class KMCropPropertyController: NSViewController {
             cropButton.properties.isDisabled = false
         }
         cropButton.reloadData()
+        
+        self.pageBounds = pageBounds
     }
     
     //MARK: - Action

+ 28 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/KMMainViewController.swift

@@ -3909,6 +3909,31 @@ extension KMMainViewController: KMPDFToolbarControllerDelegate {
     }
     
     //MARK: -点击工具栏按钮
+    func kmPDFToolbarControllerDidToolbarItemClickedEnable(_ controller: KMPDFToolbarController, _ itemIdentifier: String) -> Bool {
+        if viewManager.subToolMode == .Edit_Crop && itemIdentifier == KMPDFToolbar_edit_crop_Identifier {
+            if rightSideController?.edit_cropController?.cropEnable() == true {
+                
+                let alert = NSAlert()
+                alert.messageText = KMLocalizedString("There are unapplied settings, do you want to apply them?", comment: "")
+                alert.informativeText = KMLocalizedString("If not, the changes will be lost.", comment: "")
+                alert.addButton(withTitle: KMLocalizedString("Apply", comment: ""))
+                alert.addButton(withTitle: KMLocalizedString("Cancel", comment: ""))
+                let result = alert.runModal()
+                if (result == .alertFirstButtonReturn) {
+                    //Apply
+                    if let button = self.rightSideController?.edit_cropController?.cropButton {
+                        self.rightSideController?.edit_cropController?.cropButtonClicked(button)
+                    }
+                } else if (result == .alertSecondButtonReturn) {
+                    //Cancel
+                    return true
+                }
+                return false
+            }
+        }
+        return true
+    }
+    
     func kmPDFToolbarControllerDidToolbarItemClicked(_ controller: KMPDFToolbarController, _ itemIdentifier: String) {
         
         print("toolbar点击", itemIdentifier)
@@ -4451,6 +4476,7 @@ extension KMMainViewController: KMRightSideControllerDelegate {
     //裁剪模块
     func kmRightSideControllerDidRevertCropInfo(_ controller: KMRightSideController) {
         if let cropVC = cropController {
+            cropVC.selectionRect = rightSideController?.edit_cropController?.pageBounds ?? CGRectZero
             cropVC.reloadSelectionRect()
             
             self.kmCropControllerDidChangedSelectionOrMagnification(cropVC)
@@ -4866,6 +4892,8 @@ extension KMMainViewController: KMCropControllerDelegate {
                 cropVC.pdfView = controller.pdfView
             }
             cropVC.reloadData()
+            
+            rightSideController?.reloadRightButtonState()
         }
     }
     

+ 13 - 1
PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/KMRightSideController.swift

@@ -608,7 +608,7 @@ class KMRightSideController: NSViewController {
         
     }
     
-    func reloadTopRightButtonInfo() {
+    private func reloadTopRightButtonInfo() {
         headerRightButton.isHidden = true
         
         if contentViewController is KMStampListController {
@@ -748,6 +748,18 @@ class KMRightSideController: NSViewController {
         reloadData()
         
     }
+    
+    public func reloadRightButtonState() {
+        if let cropPropertyVC = contentViewController as? KMCropPropertyController {
+            headerRightButton.properties = ComponentButtonProperty(type: .text_gray, size: .xxs, onlyIcon: true, icon: NSImage(named: "icon_recover"), keepPressState: false)
+            if cropPropertyVC.recoverEnable() {
+                headerRightButton.properties.isDisabled = false
+            } else {
+                headerRightButton.properties.isDisabled = true
+            }
+            headerRightButton.reloadData()
+        }
+    }
 
     //MARK: - Action
     @objc func headerRightButtonClicked(_ button: ComponentButton) {

+ 16 - 10
PDF Office/PDF Master/KMClass/KMPDFViewController/Toolbar/KMPDFSecToolbarController.swift

@@ -10,19 +10,21 @@ import KMComponentLibrary
 
 @objc protocol KMPDFSecToolbarControllerDelegate: AnyObject {
     
+    @objc optional func kmPDFSecToolbarControllerDidItemClickedEnable(_ controller: KMPDFSecToolbarController, _ property: Any) -> Bool
+    
     @objc optional func kmPDFSecToolbarControllerDidItemClicked(_ controller: KMPDFSecToolbarController, _ property: Any)
- 
+    
     @objc optional func kmPDFSecToolbarControllerDidSelectTextDidBeginEditing(_ controller: KMPDFSecToolbarController, _ view: ComponentSelect)
- 
+    
     @objc optional func kmPDFSecToolbarControllerDidSelectTextDidChange(_ controller: KMPDFSecToolbarController, _ view: ComponentSelect)
- 
+    
     @objc optional func kmPDFSecToolbarControllerDidSelectTextDidEndEditing(_ controller: KMPDFSecToolbarController, _ view: ComponentSelect)
- 
+    
     
 }
 
 class KMPDFSecToolbarController: NSViewController {
-
+    
     @IBOutlet var contendBox: NSBox!
     
     @IBOutlet var infoContendView: NSView!
@@ -84,7 +86,7 @@ class KMPDFSecToolbarController: NSViewController {
         
         NSObject.cancelPreviousPerformRequests(withTarget: self, selector: #selector(setUpHidePropertys), object: nil)
         self.perform(#selector(setUpHidePropertys), with: nil, afterDelay: 0.35)
-
+        
     }
     
     override func viewDidLoad() {
@@ -417,7 +419,7 @@ class KMPDFSecToolbarController: NSViewController {
         propertysWidthValue = itemXvalue
         contendViewWidthConst.constant = propertysWidthValue
         contendLeftConst.constant = CGRectGetWidth(view.frame)/2 - propertysWidthValue/2
-         
+        
     }
     
     func setupRightView() {
@@ -457,7 +459,7 @@ class KMPDFSecToolbarController: NSViewController {
         itemXvalue -= 12
         
         rightContendViewWidthConst.constant = itemXvalue
-         
+        
     }
     
     func reloadMainview() {
@@ -501,13 +503,17 @@ class KMPDFSecToolbarController: NSViewController {
                         item.properties.state = .pressed
                         item.reloadData()
                     }
-                } 
+                }
             }
         }
     }
     
     //MARK: -
     @objc func buttonClicked(_ sender: ComponentButton) {
+        if delegate?.kmPDFSecToolbarControllerDidItemClickedEnable?(self, sender.properties) == false {
+            return
+        }
+        
         let subToolMode = returnSubToolModeWithID(sender.properties.identifier)
         if subToolMode != .None {
             if viewManager?.subToolMode == subToolMode {
@@ -520,7 +526,7 @@ class KMPDFSecToolbarController: NSViewController {
         }
         
         refreshToolbarModeInfo()
-         
+        
         delegate?.kmPDFSecToolbarControllerDidItemClicked?(self, sender.properties)
         
     }

+ 12 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/Toolbar/KMPDFToolbarController.swift

@@ -17,6 +17,7 @@ import KMComponentLibrary
     @objc optional func kmPDFToolbarControllerDidToolModeChanged(_ controller: KMPDFToolbarController)
     
     //非一级工具栏按钮点击调用
+    @objc optional func kmPDFToolbarControllerDidToolbarItemClickedEnable(_ controller: KMPDFToolbarController, _ itemIdentifier: String) -> Bool
     @objc optional func kmPDFToolbarControllerDidToolbarItemClicked(_ controller: KMPDFToolbarController, _ itemIdentifier: String)
     
     //结束页面编辑
@@ -1153,6 +1154,17 @@ extension KMPDFToolbarController: ComponentTabsDelegate {
 
 //MARK: - KMPDFSecToolbarControllerDelegate:二级工具栏
 extension KMPDFToolbarController: KMPDFSecToolbarControllerDelegate {
+    func kmPDFSecToolbarControllerDidItemClickedEnable(_ controller: KMPDFSecToolbarController, _ property: Any) -> Bool {
+        if let value = property as? ComponentButtonProperty {
+            return delegate?.kmPDFToolbarControllerDidToolbarItemClickedEnable?(self, value.identifier) ?? true
+        } else if let value = property as? ComponentMenuitemProperty {
+            return delegate?.kmPDFToolbarControllerDidToolbarItemClickedEnable?(self, value.identifier) ?? true
+        } else if let value = property as? ComponentDropdownToolProperty {
+            return delegate?.kmPDFToolbarControllerDidToolbarItemClickedEnable?(self, value.identifier) ?? true
+        }
+        return true
+    }
+    
     func kmPDFSecToolbarControllerDidItemClicked(_ controller: KMPDFSecToolbarController, _ property: Any) {
         if let value = property as? ComponentButtonProperty {
             delegate?.kmPDFToolbarControllerDidToolbarItemClicked?(self, value.identifier)