浏览代码

【2025】【Edit】Link模块自测完善

niehaoyu 3 月之前
父节点
当前提交
16bfb70021

+ 40 - 0
PDF Office/PDF Master/Class/PDFWindowController/PDFListView/CPDFKitExtensions/CPDFAnnotationExtensions/CPDFLinkAnnotation+PDFListView.swift

@@ -17,6 +17,27 @@ import Foundation
 
 // MARK: - override
 @objc extension CPDFLinkAnnotation {
+    convenience init(PDFListViewNoteWith document: CPDFDocument, page: CPDFPage) {
+        self.init(document: document)
+        
+        if CPDFLinkAnnotation.default_Add_LinkType() == .Page {
+            let bounds = page.bounds(for: .cropBox)
+            let destination = CPDFDestination(page: page, at: NSPoint(x: 0, y: bounds.size.height))
+            self.setDestination(destination)
+            
+            self.setURL(nil)
+            
+        } else if CPDFLinkAnnotation.default_Add_LinkType() == .Web {
+            self.setDestination(nil)
+            self.setURL("")
+            
+        } else if CPDFLinkAnnotation.default_Add_LinkType() == .Email {
+            self.setDestination(nil)
+            self.setURL("")
+            
+        }
+    }
+    
     override func keysForValuesToObserveForUndo() -> Set<AnyHashable>! {
         if (CPDFLinkAnnotation._l2_keys == nil) {
             CPDFLinkAnnotation._l2_keys = super.keysForValuesToObserveForUndo()
@@ -99,3 +120,22 @@ import Foundation
     }
     
 }
+
+//MARK: - Default Data
+extension CPDFLinkAnnotation {
+    class func default_Add_LinkType() -> PDFLinkType {
+        if let index = CPDFAnnotationConfig.getDefaultIntValue(forKey: CLinkNoteTypeKey) {
+            return PDFLinkType(rawValue: index) ?? .Page
+        }
+        return .Page
+    }
+}
+
+
+//MARK: - Update DefaultData
+extension CPDFLinkAnnotation {
+    class func updateDefault_AddLinkType(_ index: Int) {
+        CPDFAnnotationConfig.setDefaultIntValue(index, toKey: CLinkNoteTypeKey)
+    }
+    
+}

+ 1 - 1
PDF Office/PDF Master/Class/PDFWindowController/PDFListView/CPDFListView.m

@@ -789,7 +789,7 @@ NSNotificationName const CPDFListViewDisplayModeChangeNotification = @"CPDFListV
             }
                 break;
             case CAnnotationTypeLink:
-                annotation = [[CPDFLinkAnnotation alloc] initWithPDFListViewNoteWith:self.document];
+                annotation = [[CPDFLinkAnnotation alloc] initWithPDFListViewNoteWith:self.document page:page];
                 annotation.bounds = bounds;
                 break;
             case CAnnotationTypeTextField:

+ 3 - 0
PDF Office/PDF Master/Class/PDFWindowController/PDFListView/CStringConstants.h

@@ -93,6 +93,9 @@ extern NSString *CArrowNoteLineStyleKey;
 extern NSString *CArrowNoteStartStyleKey;
 extern NSString *CArrowNoteEndStyleKey;
 
+//Eraser
+extern NSString *CLinkNoteTypeKey;
+
 //Form
 extern NSString *CAnnotationTextWidgetLineStyleKey;
 extern NSString *CAnnotationTextWidgetLineWidthKey;

+ 3 - 0
PDF Office/PDF Master/Class/PDFWindowController/PDFListView/CStringConstants.m

@@ -93,6 +93,9 @@ NSString *CArrowNoteDashPatternKey = @"CArrowNoteDashPatternKey";
 NSString *CArrowNoteStartStyleKey = @"CArrowNoteStartStyle";
 NSString *CArrowNoteEndStyleKey = @"CArrowNoteEndStyle";
 
+//Eraser
+NSString *CLinkNoteTypeKey = @"CLinkNoteTypeKey";
+
 //Form
 NSString *CAnnotationTextWidgetLineStyleKey = @"CAnnotationTextWidgetLineStyle";
 NSString *CAnnotationTextWidgetLineWidthKey = @"CAnnotationTextWidgetLineWidthKey";

+ 140 - 73
PDF Office/PDF Master/KMClass/KMPDFViewController/EditTool/KMLinkViewController/KMLinkViewController.swift

@@ -22,8 +22,16 @@ import KMComponentLibrary
     case MultiSelect   //Popup弹窗
 }
 
-@objcMembers class KMLinkViewController: NSViewController {
+/**
+ 未选中注释:修改默认添加类型。
+ 选中注释:
+ - 切换类型:判断类型->修改显示信息。
+ - 输入文字:修改跳转内容。
+ */
 
+//MARK: - KMLinkViewController
+@objcMembers class KMLinkViewController: NSViewController {
+    
     @IBOutlet var contendBox: NSBox!
     @IBOutlet var infoContendView: NSView!
     
@@ -32,29 +40,26 @@ import KMComponentLibrary
     
     @IBOutlet var typeContendView: NSView!
     @IBOutlet var linkPageView: KMLinkPageView!
-    
     @IBOutlet var linkEmailView: KMLinkEmailView!
-    
     @IBOutlet var linkWebView: KMLinkWebView!
-     
-    private var _annotations: [CPDFLinkAnnotation] = []
+    
+    @IBOutlet var emptyContendView: ComponentEmpty!
     
     private weak var _pdfView: CPDFListView? = nil
     
-    private var annotation: CPDFLinkAnnotation? = nil
+    private var annotations: [CPDFLinkAnnotation] = []
+    private var current_Annotation: CPDFLinkAnnotation? = nil
     
     var multiController: KMNAlignmentController = KMNAlignmentController.init() //注释多选界面
     
     let pageProperty = ComponentTabsProperty(tabsType: .underline_Fill, state: .normal, showIcon: false, title: NSLocalizedString("Page", comment: ""))
     let webProperty = ComponentTabsProperty(tabsType: .underline_Fill, state: .normal, showIcon: false, title: NSLocalizedString("Web", comment: ""))
     let emailProperty = ComponentTabsProperty(tabsType: .underline_Fill, state: .normal, showIcon: false, title: NSLocalizedString("Email", comment: ""))
-     
+    
     public override func viewDidLoad() {
         super.viewDidLoad()
         // Do view setup here.
         
-        pdfLinkType = .Page
-
         setUpUI()
         
     }
@@ -63,13 +68,6 @@ import KMComponentLibrary
         
         contendBox.fillColor = ComponentLibrary.shared.getComponentColorFromKey("colorBg/layout-middle")
         
-        if pdfLinkType == .Page {
-            pageProperty.state = .pressed
-        } else if pdfLinkType == .Web {
-            webProperty.state = .pressed
-        } else if pdfLinkType == .Email {
-            emailProperty.state = .pressed
-        }
         
         tabsView.updateItemProperty([pageProperty, webProperty, emailProperty])
         tabsView.delegate = self
@@ -81,16 +79,17 @@ import KMComponentLibrary
         linkEmailView.delegate = self
         
         multiController.delegate = self
+        
+        emptyContendView.properties = ComponentEmptyProperty(emptyType: .noLink,
+                                                             text: KMLocalizedString("Add Link"),
+                                                             subText: KMLocalizedString("Select an area or text on the page to add a link."))
     }
     
     
     //MARK: - Setter
     var pdfLinkType: PDFLinkType = .Page {
         didSet {
-            
             view.window?.makeFirstResponder(nil)
-            
-            reloadData()
         }
     }
     
@@ -103,67 +102,128 @@ import KMComponentLibrary
         }
     }
     
-    var annotations: [CPDFLinkAnnotation] {
-        get {
-            return _annotations
+    //MARK: - func
+    public func reloadData() {
+        guard let pdfView = self.pdfView else {
+            return
         }
-        set {
-            _annotations = newValue
-            
-            if _annotations.isEmpty == false {
-                annotation = _annotations.first
-            } else {
-                annotation = nil
+        
+        typeContendView.isHidden = true
+        emptyContendView.isHidden = true
+        multiController.view.isHidden = true
+        
+        tabsBGView.isHidden = false
+        
+        let pdfAnnotations: [CPDFAnnotation] = pdfView.activeAnnotations as? [CPDFAnnotation] ?? []
+        var linkAnnotations: [CPDFLinkAnnotation] = []
+        for annotation in pdfAnnotations {
+            if annotation is CPDFLinkAnnotation {
+                linkAnnotations.append((annotation as! CPDFLinkAnnotation))
             }
         }
-    }
-    
-    //MARK: - func
-    public func reloadData() {
-        infoContendView.isHidden = false
+        annotations = linkAnnotations
+        current_Annotation = nil
         
         if annotations.count == 0 {
-            infoContendView.isHidden = true
-        } else if annotations.count > 1 {
-            multiController.view.frame = CGRectMake((CGRectGetWidth(infoContendView.frame) - 232)/2, CGRectGetHeight(infoContendView.frame)-112, 232, 112)
-            multiController.view.autoresizingMask = [.width, .maxYMargin]
-            infoContendView.addSubview(multiController.view)
+            emptyContendView.isHidden = false
             
-            multiController.view.isHidden = false
-            tabsBGView.isHidden = true
-            typeContendView.isHidden = true
+        } else if annotations.count == 1 {
             
-            if annotations.count > 2 {
-                multiController.aligHorizontalXButton.properties.isDisabled = false
-                multiController.aligVerticalYButton.properties.isDisabled = false
-            } else {
-                multiController.aligHorizontalXButton.properties.isDisabled = true
-                multiController.aligVerticalYButton.properties.isDisabled = true
-            }
-            multiController.aligHorizontalXButton.reloadData()
-            multiController.aligVerticalYButton.reloadData()
+            current_Annotation = annotations.first
             
-        } else {
             multiController.view.isHidden = true
-            tabsBGView.isHidden = false
             typeContendView.isHidden = false
             
             linkPageView.isHidden = true
             linkEmailView.isHidden = true
             linkWebView.isHidden = true
             
+            if let url = current_Annotation?.url() {
+                if url.hasPrefix("mailto:") {
+                    pdfLinkType = .Email
+                } else {
+                    pdfLinkType = .Web
+                }
+            } else if let _ = current_Annotation?.destination() {
+                pdfLinkType = .Page
+            }
+            
             if pdfLinkType == .Page {
                 linkPageView.isHidden = false
                 linkPageView.pdfView = pdfView
-                linkPageView.annotation = annotation
+                linkPageView.annotation = current_Annotation
                 linkPageView.reloadData()
-                
             } else if pdfLinkType == .Web {
                 linkWebView.isHidden = false
-                
+                linkWebView.annotation = current_Annotation
             } else if pdfLinkType == .Email {
                 linkEmailView.isHidden = false
-                
+                linkEmailView.annotation = current_Annotation
+            }
+            
+        } else {
+            multiController.view.frame = CGRectMake((CGRectGetWidth(infoContendView.frame) - 232)/2, CGRectGetHeight(infoContendView.frame)-112, 232, 112)
+            multiController.view.autoresizingMask = [.width, .maxYMargin]
+            infoContendView.addSubview(multiController.view)
+            
+            multiController.view.isHidden = false
+            tabsBGView.isHidden = true
+            
+            if annotations.count > 2 {
+                multiController.aligHorizontalXButton.properties.isDisabled = false
+                multiController.aligVerticalYButton.properties.isDisabled = false
+            } else {
+                multiController.aligHorizontalXButton.properties.isDisabled = true
+                multiController.aligVerticalYButton.properties.isDisabled = true
+            }
+            multiController.aligHorizontalXButton.reloadData()
+            multiController.aligVerticalYButton.reloadData()
+        }
+        
+        pageProperty.state = .normal
+        webProperty.state = .normal
+        emailProperty.state = .normal
+        if pdfLinkType == .Page {
+            pageProperty.state = .pressed
+        } else if pdfLinkType == .Web {
+            webProperty.state = .pressed
+        } else if pdfLinkType == .Email {
+            emailProperty.state = .pressed
+        }
+        tabsView.refreshItems()
+        
+    }
+    
+    func pdfLinkTypeChanged() {
+        guard let _ = current_Annotation else {
+            return
+        }
+        linkPageView.isHidden = true
+        linkEmailView.isHidden = true
+        linkWebView.isHidden = true
+        
+        if pdfLinkType == .Page {
+            linkPageView.isHidden = false
+            linkPageView.reloadData()
+        } else if pdfLinkType == .Web {
+            linkWebView.isHidden = false
+            linkWebView.annotation = current_Annotation
+            
+            if let url = current_Annotation?.url() {
+                if url.hasPrefix("mailto:") == true {
+                    linkWebView.inputTextarea.properties.text = ""
+                    linkWebView.inputTextarea.reloadData()
+                }
+            }
+        } else if pdfLinkType == .Email {
+            linkEmailView.isHidden = false
+            linkEmailView.annotation = current_Annotation
+            
+            if let url = current_Annotation?.url() {
+                if url.hasPrefix("mailto:") == false {
+                    linkEmailView.inputTextarea.properties.text = ""
+                    linkEmailView.inputTextarea.reloadData()
+                }
             }
         }
     }
@@ -187,36 +247,37 @@ extension KMLinkViewController: ComponentTabsDelegate {
         } else if property == emailProperty {
             pdfLinkType = .Email
         }
-        DispatchQueue.main.async {
-            self.reloadData()
+        
+        if let annotation = current_Annotation {
+            pdfLinkTypeChanged()
         }
         
+        CPDFLinkAnnotation.updateDefault_AddLinkType(pdfLinkType.rawValue)
+        
     }
 }
 
 //MARK: - KMLinkPageViewDelegate
 extension KMLinkViewController: KMLinkPageViewDelegate {
     func kmLinkPageViewDidGoToPage(_ view: KMLinkPageView, _ pageIndex: Int) {
-        if let page = pdfView?.document.page(at: UInt(pageIndex-1)) {
+        if let _ = pdfView?.document.page(at: UInt(pageIndex-1)) {
             pdfView?.go(toPageIndex: pageIndex-1, animated: false)
         }
     }
     
     func kmLinkPageViewDidChangeDestination(_ view: KMLinkPageView, _ pageIndex: Int) {
-        guard let activiteAnno = annotation else {
+        guard let activiteAnno = current_Annotation else {
             return
         }
         activiteAnno.setURL(nil)
-
+        
         if let page = pdfView?.document.page(at: UInt(pageIndex-1)) {
-             
             let bounds = page.bounds(for: .cropBox)
             let destination = CPDFDestination(page: page, at: NSPoint(x: 0, y: bounds.size.height))
             activiteAnno.setDestination(destination)
-            
         }
         
-        if let page = pdfView?.document.page(at: UInt(pageIndex-1)) {
+        if let _ = pdfView?.document.page(at: UInt(pageIndex-1)) {
             pdfView?.go(toPageIndex: pageIndex-1, animated: false)
         }
     }
@@ -225,14 +286,14 @@ extension KMLinkViewController: KMLinkPageViewDelegate {
 //MARK: - KMLinkPageViewDelegate
 extension KMLinkViewController: KMLinkWebViewDelegate {
     func kmLinkWebViewDidGo(_ view: KMLinkWebView, _ webString: String) {
-        guard let activeAnnotation = annotation else {
+        guard let activeAnnotation = current_Annotation else {
             return
         }
         activeAnnotation.setDestination(nil)
-
+        
         let linkUrlPath = KMNTools.judgeWebURL(webString)
         activeAnnotation.setURL(linkUrlPath)
-
+        
         if let url = activeAnnotation.url() {
             if let data = URL(string: url) {
                 NSWorkspace.shared.open(data)
@@ -242,10 +303,10 @@ extension KMLinkViewController: KMLinkWebViewDelegate {
     
 }
 
-//MARK: - KMLinkPageViewDelegate
+//MARK: - KMLinkEmailViewDelegate
 extension KMLinkViewController: KMLinkEmailViewDelegate {
     func kmLinkEmailViewDidGo(_ view: KMLinkEmailView, _ emailString: String) {
-        guard let activeAnnotation = annotation else {
+        guard let activeAnnotation = current_Annotation else {
             return
         }
         
@@ -257,10 +318,10 @@ extension KMLinkViewController: KMLinkEmailViewDelegate {
             return
         }
         activeAnnotation.setDestination(nil)
-
+        
         let linkUrlPath = KMNTools.judgeEmailURL(emailString)
         activeAnnotation.setURL(linkUrlPath)
-
+        
         if let url = activeAnnotation.url() {
             NSWorkspace.shared.open(URL(string: url)!)
         }
@@ -271,10 +332,16 @@ extension KMLinkViewController: KMLinkEmailViewDelegate {
 //MARK: - KMNAlignmentControllerDelegate
 extension KMLinkViewController: KMNAlignmentControllerDelegate {
     func alignmentControllerDidClick(_ controller: KMNAlignmentController, _ alignmentType: KMPDFActiveFormsAlignType) {
-         
+        
         pdfView?.change(annotations, alignmentType: alignmentType)
         
         pdfView?.setNeedsDisplayForVisiblePages()
         
     }
 }
+
+
+//MARK: - KMLinkViewController Class Method
+extension KMLinkViewController {
+    
+}

+ 10 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/EditTool/KMLinkViewController/KMLinkViewController.xib

@@ -9,6 +9,7 @@
         <customObject id="-2" userLabel="File's Owner" customClass="KMLinkViewController" customModule="PDF_Reader_Pro" customModuleProvider="target">
             <connections>
                 <outlet property="contendBox" destination="Bzd-YZ-Zid" id="JQz-zd-VGU"/>
+                <outlet property="emptyContendView" destination="EeL-33-ZdH" id="M15-7N-kGG"/>
                 <outlet property="infoContendView" destination="lR7-es-a1N" id="DC3-7G-pDh"/>
                 <outlet property="linkEmailView" destination="r4k-oX-xpP" id="2BQ-cZ-Tdv"/>
                 <outlet property="linkPageView" destination="x7p-Hb-EyP" id="a2Z-MU-Fi6"/>
@@ -68,8 +69,16 @@
                                             </customView>
                                         </subviews>
                                     </customView>
+                                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="EeL-33-ZdH" customClass="ComponentEmpty" customModule="KMComponentLibrary">
+                                        <rect key="frame" x="15" y="113" width="232" height="200"/>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="200" id="5ue-EF-OHS"/>
+                                            <constraint firstAttribute="width" constant="232" id="QJB-sU-JsU"/>
+                                        </constraints>
+                                    </customView>
                                 </subviews>
                                 <constraints>
+                                    <constraint firstItem="EeL-33-ZdH" firstAttribute="centerX" secondItem="lR7-es-a1N" secondAttribute="centerX" id="6gT-NB-DgZ"/>
                                     <constraint firstItem="ZTL-oi-jx1" firstAttribute="top" secondItem="lR7-es-a1N" secondAttribute="top" id="9U3-Xj-md9"/>
                                     <constraint firstItem="BK6-TZ-Fw8" firstAttribute="leading" secondItem="lR7-es-a1N" secondAttribute="leading" id="9e3-rL-cop"/>
                                     <constraint firstItem="BK6-TZ-Fw8" firstAttribute="top" secondItem="ZTL-oi-jx1" secondAttribute="bottom" id="EjE-4W-UuH"/>
@@ -77,6 +86,7 @@
                                     <constraint firstItem="ZTL-oi-jx1" firstAttribute="leading" secondItem="lR7-es-a1N" secondAttribute="leading" id="Lve-BD-Vdk"/>
                                     <constraint firstAttribute="trailing" secondItem="BK6-TZ-Fw8" secondAttribute="trailing" id="lgz-Fx-dS6"/>
                                     <constraint firstAttribute="trailing" secondItem="ZTL-oi-jx1" secondAttribute="trailing" id="u7T-xk-Mvv"/>
+                                    <constraint firstItem="EeL-33-ZdH" firstAttribute="centerY" secondItem="lR7-es-a1N" secondAttribute="centerY" id="vWz-fb-Ons"/>
                                 </constraints>
                             </customView>
                         </subviews>

+ 30 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/EditTool/KMLinkViewController/Views/KMLinkEmailView/KMLinkEmailView.swift

@@ -22,6 +22,12 @@ public class KMLinkEmailView: BaseXibView {
     
     weak open var delegate: KMLinkEmailViewDelegate?
     
+    var annotation: CPDFLinkAnnotation? = nil {
+        didSet {
+            reloadData()
+        }
+    }
+    
     //MARK: - func
     public override func draw(_ dirtyRect: NSRect) {
         super.draw(dirtyRect)
@@ -64,6 +70,23 @@ public class KMLinkEmailView: BaseXibView {
         
     }
     
+    func reloadData() {
+        guard let annotation = self.annotation else {
+            return
+        }
+        if var urlString = annotation.url() {
+            if urlString.hasPrefix("mailto:") {
+                urlString = urlString.substring(form: 7)
+            }
+             inputTextarea.properties.text = urlString
+        } else {
+            inputTextarea.properties.text = ""
+        }
+        inputTextarea.reloadData()
+        
+    }
+    
+    //MARK: - Action
     @objc func buttonClicked(_ sender: NSView) {
         delegate?.kmLinkEmailViewDidGo?(self, inputTextarea.properties.text)
         
@@ -90,6 +113,13 @@ extension KMLinkEmailView: ComponentTextareaDelegate {
         } else {
             goButton.isHidden = true
         }
+        
+        if let annotation = self.annotation {
+            let linkUrlPath = KMNTools.judgeEmailURL(view.properties.text)
+            annotation.setURL(linkUrlPath)
+            
+            annotation.setDestination(nil)
+        }
     }
     
     public func componentTextareaTextDidEndEditing(_ view: ComponentTextarea) {

+ 26 - 2
PDF Office/PDF Master/KMClass/KMPDFViewController/EditTool/KMLinkViewController/Views/KMLinkWebView/KMLinkWebView.swift

@@ -22,6 +22,12 @@ public class KMLinkWebView: BaseXibView {
     
     weak open var delegate: KMLinkWebViewDelegate?
     
+    var annotation: CPDFLinkAnnotation? = nil {
+        didSet {
+            reloadData()
+        }
+    }
+    
     //MARK: - func
     public override func draw(_ dirtyRect: NSRect) {
         super.draw(dirtyRect)
@@ -44,8 +50,6 @@ public class KMLinkWebView: BaseXibView {
         self.setUpUI()
     }
     
-    
-    
     func setUpUI() {
         
         inputTextarea.properties = ComponentTextareaProperty(size: .m,
@@ -66,7 +70,19 @@ public class KMLinkWebView: BaseXibView {
         
     }
     
+    func reloadData() {
+        guard let annotation = self.annotation else {
+            return
+        }
+        if let urlString = annotation.url() {
+            inputTextarea.properties.text = urlString
+        } else {
+            inputTextarea.properties.text = ""
+        }
+        inputTextarea.reloadData()
+    }
     
+    //MARK: - Action
     @objc func buttonClicked(_ sender: NSView) {
         delegate?.kmLinkWebViewDidGo?(self, inputTextarea.properties.text)
     }
@@ -92,6 +108,14 @@ extension KMLinkWebView: ComponentTextareaDelegate {
         } else {
             goButton.isHidden = true
         }
+        
+        if let annotation = self.annotation {
+            let linkUrlPath = KMNTools.judgeWebURL(view.properties.text)
+            annotation.setURL(linkUrlPath)
+            
+            annotation.setDestination(nil)
+        }
+        
     }
     
     public func componentTextareaTextDidEndEditing(_ view: ComponentTextarea) {

+ 0 - 7
PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/KMRightSideController.swift

@@ -503,13 +503,6 @@ class KMRightSideController: NSViewController {
                 if (contentViewController as! KMLinkViewController).pdfView != self.pdfView {
                     (contentViewController as! KMLinkViewController).pdfView = self.pdfView
                 }
-                var linkAnnotations: [CPDFLinkAnnotation] = []
-                for annotation in annotations {
-                    if annotation is CPDFLinkAnnotation {
-                        linkAnnotations.append((annotation as! CPDFLinkAnnotation))
-                    }
-                }
-                (contentViewController as! KMLinkViewController).annotations = linkAnnotations
                 (contentViewController as! KMLinkViewController).reloadData()
             } else if viewManager?.subToolMode == .Edit_Crop && (contentViewController is KMCropPropertyController) {
                 (contentViewController as! KMCropPropertyController).reloadData()

+ 45 - 48
PDF Office/PDF Reader Pro.xcodeproj/xcuserdata/kdanmobile.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -3058,6 +3058,21 @@
                   endingLineNumber = "4108"
                   offsetFromSymbolStart = "6980">
                </Location>
+               <Location
+                  uuid = "92759DD6-8CD9-4B54-BF74-D83EF6A6D5A5 - 541e1e6252d673d1"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "closure #3 (Swift.Bool, Swift.Int, Swift.Bool, Swift.Optional&lt;Foundation.URL&gt;) -&gt; () in PDF_Reader_Pro.KMMainViewController.enterRedact() -&gt; ()"
+                  moduleName = "PDF Reader Pro"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "4108"
+                  endingLineNumber = "4108"
+                  offsetFromSymbolStart = "332">
+               </Location>
             </Locations>
          </BreakpointContent>
       </BreakpointProxy>
@@ -3121,6 +3136,21 @@
                   endingLineNumber = "4440"
                   offsetFromSymbolStart = "1620">
                </Location>
+               <Location
+                  uuid = "4E0E8246-D746-4D5F-A4A2-89C78AEA0880 - 4236ac58ecce8b3e"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "PDF_Reader_Pro.KMMainViewController.enterPageEdit(Swift.Array&lt;Swift.Int&gt;) -&gt; ()"
+                  moduleName = "PDF Reader Pro"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "4440"
+                  endingLineNumber = "4440"
+                  offsetFromSymbolStart = "2020">
+               </Location>
             </Locations>
          </BreakpointContent>
       </BreakpointProxy>
@@ -3988,54 +4018,6 @@
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "EC5F266C-972D-48C4-9C57-371FABD7DE24"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "PDF Master/KMClass/KMPDFViewController/EditTool/KMLinkViewController/Views/KMLinkEmailView/KMLinkEmailView.swift"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "74"
-            endingLineNumber = "74"
-            landmarkName = "mouseDown(with:)"
-            landmarkType = "7">
-            <Locations>
-               <Location
-                  uuid = "EC5F266C-972D-48C4-9C57-371FABD7DE24 - a24d26e00a946ba8"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "PDF_Reader_Pro.KMLinkEmailView.mouseDown(with: __C.NSEvent) -&gt; ()"
-                  moduleName = "PDF Reader Pro"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/EditTool/KMLinkViewController/Views/KMLinkEmailView/KMLinkEmailView.swift"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "75"
-                  endingLineNumber = "75"
-                  offsetFromSymbolStart = "116">
-               </Location>
-               <Location
-                  uuid = "EC5F266C-972D-48C4-9C57-371FABD7DE24 - a24d26e00a94684f"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "PDF_Reader_Pro.KMLinkEmailView.mouseDown(with: __C.NSEvent) -&gt; ()"
-                  moduleName = "PDF Reader Pro"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/EditTool/KMLinkViewController/Views/KMLinkEmailView/KMLinkEmailView.swift"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "74"
-                  endingLineNumber = "74"
-                  offsetFromSymbolStart = "56">
-               </Location>
-            </Locations>
-         </BreakpointContent>
-      </BreakpointProxy>
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
@@ -4415,6 +4397,21 @@
                   endingLineNumber = "1135"
                   offsetFromSymbolStart = "3144">
                </Location>
+               <Location
+                  uuid = "E82D6160-482C-43EB-9E78-7C3112283FF8 - a255660825042b7"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "PDF_Reader_Pro.KMNPopOperationWindowController.componentCColorDidChooseColor(__C.NSView, Swift.Optional&lt;__C.NSColor&gt;) -&gt; ()"
+                  moduleName = "PDF Reader Pro"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/PDFListView/WindowController/KMNPopOperationWindowController.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "1136"
+                  endingLineNumber = "1136"
+                  offsetFromSymbolStart = "2696">
+               </Location>
             </Locations>
          </BreakpointContent>
       </BreakpointProxy>