Browse Source

【2025】【Edit】水印&贝茨码列表支持右键操作

niehaoyu 1 month ago
parent
commit
f5ccea44a7

+ 115 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/EditTool/Bates/Views/KMBatesTemplateController.swift

@@ -34,6 +34,9 @@ class KMBatesTemplateController: NSViewController {
 
     var selectedDataModel: KMBatesModel?
     
+    var groupView: ComponentGroup?
+    var editCell: KMBatesTemplateItem?
+    
     override func viewDidLoad() {
         super.viewDidLoad()
         // Do view setup here.
@@ -133,6 +136,76 @@ class KMBatesTemplateController: NSViewController {
             delegate?.templateControllerDidAddData?(self)
         }
     }
+    
+    override func rightMouseUp(with event: NSEvent) {
+        super.rightMouseUp(with: event)
+        
+        var items: [String] = []
+        var point = self.view.convert(event.locationInWindow, from: nil)
+        let collectionPoint = self.view.convert(point, to: collectionView)
+        
+        self.editCell = nil
+        
+        if let indexPath = self.collectionView.indexPathForItem(at: collectionPoint) {
+            let cellView = collectionView.item(at: indexPath) as? KMBatesTemplateItem
+            self.editCell = cellView
+            items.append(KMLocalizedString("Rename"))
+            items.append(KMLocalizedString("Edit"))
+            items.append(KMLocalizedString("Delete"))
+            items.append(KMLocalizedString("Remove All"))
+            
+            self.showGroupView(items, event.locationInWindow)
+        }
+    }
+    
+    func showRenameWindow() {
+        let saveWindow: KMWatermarkSaveWindow = KMWatermarkSaveWindow(windowNibName: "KMWatermarkSaveWindow")
+        if let item = self.editCell, let name = item.dataModel?.name {
+            saveWindow.nameValue = name
+        } else {
+            saveWindow.nameValue = ""
+        }
+        saveWindow.saveHandler = {[weak self] string in
+            guard let weakSelf = self else { return }
+            DispatchQueue.main.async {
+                weakSelf.editCell?.dataModel?.name = string ?? ""
+                if let model = weakSelf.editCell?.dataModel, KMBatesManager.defaultManager.updateTemplate(model) {
+                    weakSelf.reloadData()
+                }
+            }
+        }
+        saveWindow.own_beginSheetModal(for: view.window) { string in
+            
+        }
+        saveWindow.titleLabel.stringValue = KMLocalizedString("Rename")
+    }
+    
+    func showGroupView(_ items: [String], _ point: CGPoint) {
+        var viewHeight: CGFloat = 8
+        var menuItemArr: [ComponentMenuitemProperty] = []
+        for i in items {
+            let properties_Menuitem: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false,
+                                                                                           itemSelected: false,
+                                                                                           isDisabled: false,
+                                                                                           keyEquivalent: nil,
+                                                                                           text: KMLocalizedString(i),
+                                                                                           identifier: i)
+            menuItemArr.append(properties_Menuitem)
+            viewHeight += 36
+        }
+        
+        if groupView == nil {
+            groupView = ComponentGroup.createFromNib(in: ComponentLibrary.shared.componentBundle())
+        }
+        groupView?.groupDelegate = self
+        var viewPoint = point
+        viewPoint.y -= viewHeight
+
+        groupView?.frame = CGRectMake(310, 0, 200, viewHeight)
+        groupView?.updateGroupInfo(menuItemArr)
+        groupView?.showWithPoint(viewPoint, relativeTo: nil)
+         
+    }
 }
 
 //MARK: - NSCollectionViewDelegate, NSCollectionViewDataSource
@@ -238,4 +311,46 @@ extension KMBatesTemplateController: KMBatesTemplateItemDelegate {
             }
         }
     }
+    
+    func kmBatesTemplateItemDidDeleteAllItems() {
+        let alert = NSAlert()
+        alert.alertStyle = .critical
+        alert.messageText = String(format: KMLocalizedString("Are you sure you want to remove All Datas?"))
+        alert.addButton(withTitle: KMLocalizedString("Delete"))
+        alert.addButton(withTitle: KMLocalizedString("Cancel"))
+        
+        alert.beginSheetModal(for: NSApp.mainWindow!) { (response) in
+            if response == .alertFirstButtonReturn {
+                let _ = KMBatesManager.defaultManager.deleteAllTemplate()
+                if let _ = self.selectedDataModel {
+                    self.selectedDataModel = nil
+                    
+                    self.delegate?.templateControllerDidSelectedChanged?(self)
+                }
+                self.reloadData()
+            }
+        }
+    }
+}
+
+
+//MARK: - ComponentGroupDelegate
+extension KMBatesTemplateController: ComponentGroupDelegate {
+    func componentGroupDidSelect(group: ComponentGroup?, menuItemProperty: ComponentMenuitemProperty?) {
+        if menuItemProperty?.identifier == KMLocalizedString("Rename") {
+            self.showRenameWindow()
+        } else if menuItemProperty?.identifier == KMLocalizedString("Edit") {
+            if let cell = self.editCell {
+                self.kmBatesTemplateItemDidEdit(cell)
+            }
+        } else if menuItemProperty?.identifier == KMLocalizedString("Delete") {
+            if let cell = self.editCell {
+                self.kmBatesTemplateItemDidDelete(cell)
+            }
+        } else if menuItemProperty?.identifier == KMLocalizedString("Remove All") {
+            self.kmBatesTemplateItemDidDeleteAllItems()
+            
+        }
+    }
+    
 }

+ 116 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/EditTool/Watermark/Views/Templates/KMNWatermarkTemplateController.swift

@@ -34,6 +34,9 @@ class KMNWatermarkTemplateController: NSViewController {
     
     var selectedWatermark: KMWatermarkModel?
     
+    var groupView: ComponentGroup?
+    var editCell: KMNWatermarkTemplateItem?
+    
     override func viewDidLoad() {
         super.viewDidLoad()
         // Do view setup here.
@@ -134,6 +137,76 @@ class KMNWatermarkTemplateController: NSViewController {
             delegate?.templateControllerDidAddWatermarkData?(self)
         }
     }
+    
+    override func rightMouseUp(with event: NSEvent) {
+        super.rightMouseUp(with: event)
+        
+        var items: [String] = []
+        var point = self.view.convert(event.locationInWindow, from: nil)
+        let collectionPoint = self.view.convert(point, to: collectionView)
+        
+        self.editCell = nil
+        
+        if let indexPath = self.collectionView.indexPathForItem(at: collectionPoint) {
+            let cellView = collectionView.item(at: indexPath) as? KMNWatermarkTemplateItem
+            self.editCell = cellView
+            items.append(KMLocalizedString("Rename"))
+            items.append(KMLocalizedString("Edit"))
+            items.append(KMLocalizedString("Delete"))
+            items.append(KMLocalizedString("Remove All"))
+            
+            self.showGroupView(items, event.locationInWindow)
+        }
+    }
+    
+    func showRenameWindow() {
+        let saveWindow: KMWatermarkSaveWindow = KMWatermarkSaveWindow(windowNibName: "KMWatermarkSaveWindow")
+        if let item = self.editCell, let name = item.watermark?.watermarkName {
+            saveWindow.nameValue = name
+        } else {
+            saveWindow.nameValue = ""
+        }
+        saveWindow.saveHandler = {[weak self] string in
+            guard let weakSelf = self else { return }
+            DispatchQueue.main.async {
+                weakSelf.editCell?.watermark?.watermarkName = string ?? ""
+                if let model = weakSelf.editCell?.watermark, KMWatermarkManager.defaultManager.updateWatermark(watermark: model) {
+                    weakSelf.reloadData()
+                }
+            }
+        }
+        saveWindow.own_beginSheetModal(for: view.window) { string in
+            
+        }
+        saveWindow.titleLabel.stringValue = KMLocalizedString("Rename")
+    }
+    
+    func showGroupView(_ items: [String], _ point: CGPoint) {
+        var viewHeight: CGFloat = 8
+        var menuItemArr: [ComponentMenuitemProperty] = []
+        for i in items {
+            let properties_Menuitem: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false,
+                                                                                           itemSelected: false,
+                                                                                           isDisabled: false,
+                                                                                           keyEquivalent: nil,
+                                                                                           text: KMLocalizedString(i),
+                                                                                           identifier: i)
+            menuItemArr.append(properties_Menuitem)
+            viewHeight += 36
+        }
+        
+        if groupView == nil {
+            groupView = ComponentGroup.createFromNib(in: ComponentLibrary.shared.componentBundle())
+        }
+        groupView?.groupDelegate = self
+        var viewPoint = point
+        viewPoint.y -= viewHeight
+
+        groupView?.frame = CGRectMake(310, 0, 200, viewHeight)
+        groupView?.updateGroupInfo(menuItemArr)
+        groupView?.showWithPoint(viewPoint, relativeTo: nil)
+         
+    }
 }
 
 //MARK: - NSCollectionViewDelegate, NSCollectionViewDataSource
@@ -211,4 +284,47 @@ extension KMNWatermarkTemplateController: kmNWatermarkTemplateItemDelegate {
             }
         }
     }
+    
+    func kmNWatermarkTemplateItemDidDeleteAll() {
+        let alert = NSAlert()
+        alert.alertStyle = .critical
+        alert.messageText = String(format: KMLocalizedString("Are you sure you want to remove All the watermarks?"))
+        alert.addButton(withTitle: KMLocalizedString("Delete"))
+        alert.addButton(withTitle: KMLocalizedString("Cancel"))
+        
+        alert.beginSheetModal(for: NSApp.mainWindow!) { (response) in
+            if response == .alertFirstButtonReturn {
+                let _ = KMWatermarkManager.defaultManager.removeAllWatermark()
+                if let _ = self.selectedWatermark {
+                    self.selectedWatermark = nil
+                    
+                    self.delegate?.templateControllerDidSelectedChanged?(self)
+                }
+                self.reloadData()
+            }
+        }
+    }
+    
+}
+
+
+//MARK: - ComponentGroupDelegate
+extension KMNWatermarkTemplateController: ComponentGroupDelegate {
+    func componentGroupDidSelect(group: ComponentGroup?, menuItemProperty: ComponentMenuitemProperty?) {
+        if menuItemProperty?.identifier == KMLocalizedString("Rename") {
+            self.showRenameWindow()
+        } else if menuItemProperty?.identifier == KMLocalizedString("Edit") {
+            if let cell = self.editCell {
+                self.kmNWatermarkTemplateItemDidEdit(cell)
+            }
+        } else if menuItemProperty?.identifier == KMLocalizedString("Delete") {
+            if let cell = self.editCell {
+                self.kmNWatermarkTemplateItemDidDelete(cell)
+            }
+        } else if menuItemProperty?.identifier == KMLocalizedString("Remove All") {
+            self.kmNWatermarkTemplateItemDidDeleteAll()
+            
+        }
+    }
+    
 }