Просмотр исходного кода

【2025】【密文】移除密文旧代码

dinglingui 2 месяцев назад
Родитель
Сommit
c60991b19a

+ 4 - 12
PDF Office/PDF Master/Class/Document/KMMainDocument.swift

@@ -870,22 +870,14 @@ typealias KMMainDocumentCloudUploadHanddler = (@escaping(Bool, String)->()) -> (
                     if (mainViewController!.needSave) {
                         if let options = self.mainViewController?.secureOptions, !options.isEmpty {
                             self.mainViewController!.document?.setDocumentAttributes(self.mainViewController?.documentAttribute)
-                            success = self.mainViewController!.document!.write(to: url, withOptions: options)
+                            success = self.mainViewController!.document!.write(to: url, withOptions: options,isSaveFontSubset: false)
                         } else if let flag = self.mainViewController?.removeSecureFlag, flag {
-                            success = self.mainViewController!.document!.writeDecrypt(to: url)
+                            success = self.mainViewController!.document!.writeDecrypt(to: url,isSaveFontSubset: false)
                         } else {
-                            if(mainViewController?.hasEnterRedact() == true) {
-                                success = mainViewController?.redactController.redactPdfView.document?.write(to: url) ?? false
-                            } else {
-                                success = mainViewController!.document!.write(to: url)
-                            }
+                            success = mainViewController!.document!.write(to: url,isSaveFontSubset: false)
                         }
                     } else {
-                        if(mainViewController?.hasEnterRedact() == true) {
-                            success = mainViewController?.redactController.redactPdfView.document?.write(to: url) ?? false
-                        } else {
-                            success = mainViewController!.document!.write(to: url)
-                        }
+                        success = mainViewController!.document!.write(to: url,isSaveFontSubset: false)
                     }
                     self.mainViewController?.needSave = false
                     self.mainViewController?.clearSecureOptions()

Разница между файлами не показана из-за своего большого размера
+ 0 - 2075
PDF Office/PDF Master/Class/PDFTools/PageEdit/Controller/KMPDFEditViewController.swift


+ 0 - 104
PDF Office/PDF Master/Class/PDFTools/PageEdit/Controller/KMPDFEditViewController.xib

@@ -1,104 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22505" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
-    <dependencies>
-        <deployment identifier="macosx"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22505"/>
-        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
-    </dependencies>
-    <objects>
-        <customObject id="-2" userLabel="File's Owner" customClass="KMPDFEditViewController" customModule="PDF_Reader_Pro" customModuleProvider="target">
-            <connections>
-                <outlet property="contentBox" destination="H78-7z-jdm" id="fst-f6-ba8"/>
-                <outlet property="lineBoxView" destination="9X3-1V-DZ8" id="gB1-mA-E7R"/>
-                <outlet property="thumbnailSizeView" destination="Jf5-OZ-sXa" id="Pib-0f-y8b"/>
-                <outlet property="topBarBox" destination="9MH-c6-Ein" id="4yW-J4-TfZ"/>
-                <outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
-                <outlet property="zoomInButton" destination="AzX-4N-uaa" id="JQW-pf-WOr"/>
-                <outlet property="zoomOutButton" destination="nbB-12-iF1" id="owX-0d-ktI"/>
-            </connections>
-        </customObject>
-        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
-        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
-        <customView id="Hz6-mo-xeY">
-            <rect key="frame" x="0.0" y="0.0" width="480" height="272"/>
-            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-            <subviews>
-                <box boxType="custom" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="9MH-c6-Ein">
-                    <rect key="frame" x="0.0" y="232" width="480" height="40"/>
-                    <view key="contentView" id="pnV-ja-GKZ">
-                        <rect key="frame" x="0.0" y="0.0" width="480" height="40"/>
-                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-                    </view>
-                    <constraints>
-                        <constraint firstAttribute="height" constant="40" id="mNT-LH-0ai"/>
-                    </constraints>
-                </box>
-                <box boxType="custom" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="H78-7z-jdm">
-                    <rect key="frame" x="0.0" y="0.0" width="480" height="232"/>
-                    <view key="contentView" id="DN4-I2-diQ">
-                        <rect key="frame" x="0.0" y="0.0" width="480" height="232"/>
-                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-                    </view>
-                </box>
-                <customView translatesAutoresizingMaskIntoConstraints="NO" id="Jf5-OZ-sXa">
-                    <rect key="frame" x="372" y="16" width="88" height="32"/>
-                    <subviews>
-                        <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="nbB-12-iF1">
-                            <rect key="frame" x="14" y="8" width="16" height="16"/>
-                            <buttonCell key="cell" type="bevel" bezelStyle="rounded" image="KMImageNameZoomout" imagePosition="overlaps" alignment="center" imageScaling="proportionallyDown" inset="2" id="wp2-ja-C64">
-                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
-                                <font key="font" metaFont="system"/>
-                            </buttonCell>
-                            <connections>
-                                <action selector="buttonClicked_Smaller:" target="-2" id="cJY-xV-90Q"/>
-                            </connections>
-                        </button>
-                        <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="AzX-4N-uaa">
-                            <rect key="frame" x="58" y="8" width="16" height="16"/>
-                            <buttonCell key="cell" type="bevel" bezelStyle="rounded" image="KMImageNameZoomoin" imagePosition="only" alignment="center" imageScaling="proportionallyDown" inset="2" id="W58-xr-jlL">
-                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
-                                <font key="font" metaFont="system"/>
-                            </buttonCell>
-                            <connections>
-                                <action selector="buttonClicked_Bigger:" target="-2" id="qkv-Xf-5ha"/>
-                            </connections>
-                        </button>
-                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="9X3-1V-DZ8">
-                            <rect key="frame" x="44" y="8" width="1" height="16"/>
-                            <constraints>
-                                <constraint firstAttribute="height" constant="16" id="WhF-bC-cri"/>
-                                <constraint firstAttribute="width" constant="1" id="z0i-An-EC4"/>
-                            </constraints>
-                        </customView>
-                    </subviews>
-                    <constraints>
-                        <constraint firstItem="AzX-4N-uaa" firstAttribute="centerY" secondItem="Jf5-OZ-sXa" secondAttribute="centerY" id="FLY-cM-pLp"/>
-                        <constraint firstAttribute="trailing" secondItem="AzX-4N-uaa" secondAttribute="trailing" constant="14" id="XeC-NF-W4Q"/>
-                        <constraint firstItem="9X3-1V-DZ8" firstAttribute="centerY" secondItem="Jf5-OZ-sXa" secondAttribute="centerY" id="Zbf-w9-sgQ"/>
-                        <constraint firstAttribute="height" constant="32" id="cG1-JH-RdK"/>
-                        <constraint firstAttribute="width" constant="88" id="hE0-8E-4z4"/>
-                        <constraint firstItem="9X3-1V-DZ8" firstAttribute="centerX" secondItem="Jf5-OZ-sXa" secondAttribute="centerX" id="mpO-ur-VNN"/>
-                        <constraint firstItem="nbB-12-iF1" firstAttribute="leading" secondItem="Jf5-OZ-sXa" secondAttribute="leading" constant="14" id="nao-Eg-9su"/>
-                        <constraint firstItem="nbB-12-iF1" firstAttribute="centerY" secondItem="Jf5-OZ-sXa" secondAttribute="centerY" id="upj-OE-YGg"/>
-                    </constraints>
-                </customView>
-            </subviews>
-            <constraints>
-                <constraint firstAttribute="trailing" secondItem="9MH-c6-Ein" secondAttribute="trailing" id="3XF-0A-rcC"/>
-                <constraint firstAttribute="bottom" secondItem="Jf5-OZ-sXa" secondAttribute="bottom" constant="16" id="7tR-XL-PEB"/>
-                <constraint firstAttribute="trailing" secondItem="Jf5-OZ-sXa" secondAttribute="trailing" constant="20" id="LTk-QE-7uv"/>
-                <constraint firstItem="H78-7z-jdm" firstAttribute="top" secondItem="9MH-c6-Ein" secondAttribute="bottom" id="Nhk-9Y-2aa"/>
-                <constraint firstItem="9MH-c6-Ein" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" id="Q7l-UX-efw"/>
-                <constraint firstAttribute="bottom" secondItem="H78-7z-jdm" secondAttribute="bottom" id="QBN-Il-nSW"/>
-                <constraint firstItem="H78-7z-jdm" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" id="edF-ds-Kru"/>
-                <constraint firstItem="9MH-c6-Ein" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" id="hY6-Qt-Ul6"/>
-                <constraint firstAttribute="trailing" secondItem="H78-7z-jdm" secondAttribute="trailing" id="jrv-Ei-UBO"/>
-            </constraints>
-            <point key="canvasLocation" x="235" y="121"/>
-        </customView>
-    </objects>
-    <resources>
-        <image name="KMImageNameZoomoin" width="16" height="16"/>
-        <image name="KMImageNameZoomout" width="16" height="16"/>
-    </resources>
-</document>

+ 0 - 327
PDF Office/PDF Master/Class/PDFTools/Redact/Controller/KMPDFRedactViewController.swift

@@ -1,327 +0,0 @@
-//
-//  KMPDFRedactViewController.swift
-//  PDF Reader Pro
-//
-//  Created by tangchao on 2023/12/18.
-//
-
-import Cocoa
-
-class KMPDFRedactViewController: NSViewController {
-    
-    var scaleFactor: CGFloat = 0 {
-        didSet {
-            self.redactPdfView.scaleFactor = scaleFactor
-        }
-    }
-    
-    var callback: ((Bool, Int, Bool, URL?)->Void)?
-    var titleBack: ((String)->Void)?
-    
-    @IBOutlet var redactPdfView: KMRedactPDFView!
-    
-    @IBOutlet weak var redactTipLabel: NSTextField!
-    @IBOutlet weak var propertiesLabel: NSTextField!
-    @IBOutlet weak var redactTextLabel: NSTextField!
-    @IBOutlet weak var exitBox: KMBox!
-    @IBOutlet weak var applyBox: KMBox!
-    @IBOutlet weak var exitButton: NSButton!
-    @IBOutlet weak var applyButton: NSButton!
-    @IBOutlet weak var toolView: NSView!
-    @IBOutlet weak var redactTextBox: NSBox!
-    @IBOutlet weak var propertiesBox: NSBox!
-    
-    @IBOutlet weak var redactTextButton: KMCustomButton!
-    @IBOutlet weak var propertiesButton: KMCustomButton!
-    
-    @IBOutlet weak var whiteOutBox: NSBox!
-    @IBOutlet weak var whiteOutLabel: NSTextField!
-    @IBOutlet weak var whiteOutButton: KMCustomButton!
-    
-    private var _url: URL?
-    private var url: URL? {
-        get {
-            return self._url
-        }
-    }
-    private var _password: String?
-    private var _indicator: NSProgressIndicator?
-    
-    private var isWhiteOut_ = false
-
-    deinit {
-        KMPrint("KMPDFRedactViewController deinit.")
-        
-        NotificationCenter.default.removeObserver(self)
-        self.redactPdfView.delegate = nil
-    }
-    
-    convenience init(url: URL, password: String?) {
-        self.init()
-        
-        self._url = url
-        self._password = password
-    }
-    
-    override func loadView() {
-        super.loadView()
-        self.isWhiteOut_ = false
-        
-        self.propertiesBox.wantsLayer = true
-        self.redactTextBox.wantsLayer = true
-        self.redactTextBox.fillColor = KMAppearance.Layout.w30Color()
-        self.redactTextBox.layer?.cornerRadius = 6
-        self.redactTextLabel.textColor = KMAppearance.Layout.w0Color()
-        self.propertiesLabel.textColor = KMAppearance.Layout.w0Color()
-        self.redactTextLabel.stringValue = KMLocalizedString("Redact Text")
-        self.propertiesLabel.stringValue = KMLocalizedString("Properties")
-        
-        self.propertiesButton.mouseMoveCallback = { [weak self] mouseEntered in
-            self?.propertiesBox.layer?.cornerRadius = 6
-            if mouseEntered {
-                self?.propertiesBox.fillColor = KMAppearance.Layout.w30Color()
-            } else {
-                self?.propertiesBox.fillColor = .clear
-            }
-        }
-        
-        self.whiteOutBox.wantsLayer = true
-//        self.whiteOutBox.fillColor = KMAppearance.Layout.w30Color()
-        self.whiteOutBox.layer?.cornerRadius = 6
-        self.whiteOutLabel.textColor = KMAppearance.Layout.w0Color()
-        self.whiteOutLabel.stringValue = NSLocalizedString("White Out PDF", comment: "")
-        
-        self.redactTextButton.target = self
-        self.redactTextButton.action = #selector(redactButtonAction)
-        self.whiteOutButton.target = self
-        self.whiteOutButton.action = #selector(whiteOutButtonAction)
-        
-        // Do view setup here.
-        self.redactTipLabel.stringValue = KMLocalizedString("You are under redact mode")
-        self.applyButton.title = KMLocalizedString("Apply")
-        self.exitButton.toolTip = KMLocalizedString("Exit")
-
-        self.exitBox.fillColor = .clear
-        self.exitBox.borderColor = KMAppearance.Layout.w70Color()
-        self.exitBox.borderWidth = 1.0
-        self.exitButton.title = KMLocalizedString("Exit")
-        self.exitButton.setTitleColor(KMAppearance.Layout.w0Color())
-    
-        self.applyButton.setTitleColor(KMAppearance.Interactive.a0Color())
-        self.applyButton.wantsLayer = true
-        
-        self.applyBox.downCallback = { [weak self] downEntered, mouseBox, event in
-            if downEntered {
-                self?.apply_button(nil)
-            }
-        }
-        
-        self.exitBox.downCallback = { [weak self] downEntered, mouseBox, event in
-            if downEntered {
-                self?.exit_button(nil)
-            }
-        }
-
-        self.toolView.wantsLayer = true
-        self.toolView.layer?.backgroundColor = KMAppearance.Interactive.a0Color().cgColor
-        
-        let document = CPDFDocument(url: self.url!)
-        if let pwd = self._password, pwd.isEmpty == false {
-            document?.unlock(withPassword: pwd)
-        }
-        self.redactPdfView.document = document
-    //    self.redactPdfView.scaleFactor = self.scaleFactor;
-        self.redactPdfView.autoScales = true
-        self.redactPdfView.delegate = self
-//        self.redactPdfView.toolMode = .redactToolMode
-        self.redactPdfView.operationType = .redact
-        
-    //    [self.redactPdfView layoutDocumentView];
-
-        let frame = NSMakeRect((self.redactPdfView.frame.size.width-32)/2.0, (self.redactPdfView.frame.size.height-32)/2.0, 32, 32)
-        self._indicator = NSProgressIndicator(frame: frame)
-        self._indicator?.autoresizingMask = [.minXMargin, .maxXMargin, .minYMargin, .maxYMargin]
-        self._indicator?.style = .spinning
-        self._indicator?.controlSize = .regular
-        self._indicator?.isIndeterminate = true
-        self._indicator?.startAnimation(nil)
-        self.redactPdfView.addSubview(self._indicator!)
-        self._indicator?.isHidden = true
-    }
-    
-    override func viewDidLoad() {
-        super.viewDidLoad()
-        
-        NotificationCenter.default.addObserver(self, selector: #selector(showCurrentRedactAnnotationProperties), name: KMRedactPDFView.showCurrentRedactAnnotationNotificationName, object: nil)
-        NotificationCenter.default.addObserver(self, selector: #selector(apply), name: KMRedactPDFView.redactAnnotationApplyNotificationName, object: nil)
-        NotificationCenter.default.addObserver(self, selector: #selector(across), name: KMRedactPDFView.redactAnnotationAcrossNotificationName, object: nil)
-    }
-    
-    func setCurrentPageIndex(_ currentPageIndex: Int) {
-        self.redactPdfView.go(toPageIndex: currentPageIndex, animated: false)
-    }
-    
-    // MARK: - Button Actions
-
-    @IBAction func showProperties_button(_ sender: AnyObject?) {
-        FMTrackEventManager.defaultManager.trackEvent(event: "SubTbr_RedactText", withProperties: ["SubTbr_Btn": "Btn_SubTbr_RedactText_Properties"])
-        
-        let properties = KMRedactPropertiesWindowController()
-        self.km_beginSheet(windowC: properties)
-        properties.callback = { annotation in
-            
-        }
-    }
-
-    @IBAction func apply_button(_ sender: AnyObject?) {
-        var isApply = false
-        for i in 0 ..< self.redactPdfView.document.pageCount {
-            let page = self.redactPdfView.document.page(at: i)
-            for anno in page?.annotations ?? [] {
-                if anno.isKind(of: CPDFRedactAnnotation.self) {
-                     isApply = true
-                 }
-             }
-         }
-        if(self.redactPdfView.newAddAnnotation.count == 0 && !isApply) {
-            return
-        }
-
-        let returnCode = KMAlertTool.runModelForMainThread_r(message: "", informative: KMLocalizedString("This will permanently remove the redacted information from this document. Once you save this document, you won’t be able to retrieve the redacted information."), buttons: [KMLocalizedString("Apply"), KMLocalizedString("Cancel")])
-        if returnCode == .alertFirstButtonReturn {
-            DispatchQueue.main.async {
-                self.saveAsPath()
-            }
-        }
-     }
-    
-    @IBAction func exit_button(_ sender: AnyObject?) {
-        guard let block = self.callback else {
-            return
-        }
-        block(false, self.redactPdfView.currentPageIndex, false, nil)
-     }
-
-    func saveAsPath() {
-        let saveAccessCtr = KMSavePanelAccessoryController()
-        var fileName = self.redactPdfView.document.documentURL.deletingPathExtension().lastPathComponent
-        fileName = String(format: "%@_%@.pdf", fileName, "Redact")
-        let outputSavePanel = NSSavePanel()
-        outputSavePanel.allowedFileTypes = ["pdf"]
-        outputSavePanel.nameFieldStringValue = fileName
-        outputSavePanel.accessoryView = saveAccessCtr.view
-        outputSavePanel.beginSheetModal(for: NSApp.mainWindow!) { result in
-            if result == .OK {
-                self.redactPdfView.document.applyRedactions()
-                self._indicator?.isHidden = false
-                self._indicator?.startAnimation(nil)
-                let savePDFPath = outputSavePanel.url!.path
-
-                let isSuccess = self.redactPdfView.document.write(toFile: savePDFPath)
-                 if (isSuccess) {
-//                     [self.redactPdfView.newAddAnnotation removeAllObjects];
-                     if (saveAccessCtr.openAutomaticButton.state == .on) {
-                         NSDocumentController.shared.km_safe_openDocument(withContentsOf: outputSavePanel.url!, display: true) { _, _, _ in
-                             
-                         }
-                     } else {
-                         KMTools.viewFile(at: savePDFPath)
-                     }
-                 }
-                self._indicator?.stopAnimation(nil)
-                self._indicator?.isHidden = true
-
-                guard let block = self.callback else {
-                    return
-                }
-                block(true, self.redactPdfView.currentPageIndex, false, outputSavePanel.url)
-             }
-         }
-     }
-
-    // MARK: - Button notice
-    
-    @objc func showCurrentRedactAnnotationProperties(_ notice: NSNotification) {
-        guard let pdfview = notice.object as? KMRedactPDFView else {
-            return
-        }
-        if(pdfview == self.redactPdfView) {
-            let properties = KMRedactPropertiesWindowController()
-            properties.readactAnnotation = self.redactPdfView.currentAnnotation
-//            __block KMPDFRedactViewController *weak_self = self;
-            self.km_beginSheet(windowC: properties)
-            properties.callback = { [weak self] annotation in
-                if let page = self?.redactPdfView.currentAnnotation?.page {
-                    if let anno = annotation {
-                        self?.redactPdfView.newAddAnnotation.append(anno)
-                    }
-                    self?.redactPdfView.setNeedsDisplayAnnotationViewFor(page)
-                }
-            }
-        }
-    }
-    
-    @objc func apply(_ notice: NSNotification) {
-        guard let pdfview = notice.object as? KMRedactPDFView else {
-            return
-        }
-        if(pdfview == self.redactPdfView) {
-            self.apply_button(nil)
-        }
-    }
-    
-    @objc func across(_ notice: NSNotification) {
-        guard let pdfview = notice.object as? KMRedactPDFView else {
-            return
-        }
-        
-        if(pdfview == self.redactPdfView) {
-            let pagesWindowController = KMRedactSelectPagesWindowController(document: self.redactPdfView.document)
-            self.km_beginSheet(windowC: pagesWindowController)
-            pagesWindowController.callback = { [unowned self] pages in
-                if pages.count > 0 {
-                    self.redactPdfView.acrossAddAnnotations(pages)
-                }
-            }
-        }
-    }
-    
-    @objc func redactButtonAction(sender : NSButton) {
-        FMTrackEventManager.defaultManager.trackEvent(event: "SubTbr_RedactText", withProperties: ["SubTbr_Btn": "Btn_SubTbr_RedactText_RedactPDF"])
-        
-        self.isWhiteOut_ = false
-        self.redactPdfView.isWhiteOut = false
-        self.updateButtonsState()
-    }
-    
-    @objc func whiteOutButtonAction(sender: NSButton) {
-        FMTrackEventManager.defaultManager.trackEvent(event: "SubTbr_RedactText", withProperties: ["SubTbr_Btn": "Btn_SubTbr_RedactText_WhiteOutPDF"])
-        
-        self.isWhiteOut_ = true
-        self.redactPdfView.isWhiteOut = true
-        self.updateButtonsState()
-    }
-    
-    // MARK: - Private Methods
-    
-    private func updateButtonsState() {
-        if self.isWhiteOut_ {
-            self.whiteOutBox.fillColor = KMAppearance.Layout.w30Color()
-            self.redactTextBox.fillColor = .clear
-        } else {
-            self.redactTextBox.fillColor = KMAppearance.Layout.w30Color()
-            self.whiteOutBox.fillColor = .clear
-        }
-    }
-    
-}
-
-extension KMPDFRedactViewController: CPDFViewDelegate {
-    func pdfViewCurrentPageDidChanged(_ pdfView: CPDFView!) {
-        let fileName = pdfView.document.documentURL.deletingLastPathComponent().lastPathComponent
-        let title = String(format: KMLocalizedString("%@ (page %ld / %ld)"), fileName, pdfView.currentPageIndex+1, pdfView.document.pageCount)
-        if(self.titleBack != nil) {
-            self.titleBack!(title)
-        }
-    }
-}

+ 0 - 278
PDF Office/PDF Master/Class/PDFTools/Redact/Controller/KMPDFRedactViewController.xib

@@ -1,278 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
-    <dependencies>
-        <deployment identifier="macosx"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/>
-        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
-    </dependencies>
-    <objects>
-        <customObject id="-2" userLabel="File's Owner" customClass="KMPDFRedactViewController" customModule="PDF_Reader_Pro" customModuleProvider="target">
-            <connections>
-                <outlet property="applyBox" destination="p57-Ip-T2T" id="yYz-yx-0RG"/>
-                <outlet property="applyButton" destination="jgL-Z5-PR3" id="fHy-NQ-YtV"/>
-                <outlet property="exitBox" destination="dDh-hJ-cIA" id="o57-Zt-G95"/>
-                <outlet property="exitButton" destination="pup-Oa-y3G" id="uAO-zj-9h7"/>
-                <outlet property="propertiesBox" destination="iwX-y1-ea2" id="Bxj-bw-w1v"/>
-                <outlet property="propertiesButton" destination="G4u-HY-WcV" id="j9h-KE-Uqx"/>
-                <outlet property="propertiesLabel" destination="9vB-gG-Xmd" id="EpZ-II-dke"/>
-                <outlet property="redactPdfView" destination="Ljd-Vm-9rM" id="5be-1E-Uob"/>
-                <outlet property="redactTextBox" destination="aoK-i3-jUv" id="UeG-Pz-3fU"/>
-                <outlet property="redactTextButton" destination="ryk-qe-WA4" id="nRS-P5-FLH"/>
-                <outlet property="redactTextLabel" destination="bf1-3b-pkO" id="y8J-XA-3uO"/>
-                <outlet property="redactTipLabel" destination="YU9-ht-l5r" id="Z1O-ZP-7Xa"/>
-                <outlet property="toolView" destination="2S1-Gb-ePE" id="QY0-Kq-JcW"/>
-                <outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
-                <outlet property="whiteOutBox" destination="ilD-02-AHW" id="GeI-cj-oYX"/>
-                <outlet property="whiteOutButton" destination="2kK-qf-LCr" id="C8E-nI-jaH"/>
-                <outlet property="whiteOutLabel" destination="GzX-GG-5zC" id="Whd-wP-ZUf"/>
-            </connections>
-        </customObject>
-        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
-        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
-        <customView id="Hz6-mo-xeY">
-            <rect key="frame" x="0.0" y="0.0" width="1000" height="361"/>
-            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-            <subviews>
-                <customView translatesAutoresizingMaskIntoConstraints="NO" id="2S1-Gb-ePE">
-                    <rect key="frame" x="0.0" y="321" width="1000" height="40"/>
-                    <subviews>
-                        <box boxType="custom" borderType="none" cornerRadius="4" title="Box" titlePosition="noTitle" translatesAutoresizingMaskIntoConstraints="NO" id="aoK-i3-jUv">
-                            <rect key="frame" x="482" y="8" width="81" height="24"/>
-                            <view key="contentView" id="cu2-VR-LMh">
-                                <rect key="frame" x="0.0" y="0.0" width="81" height="24"/>
-                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-                                <subviews>
-                                    <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="UVs-wD-kHf">
-                                        <rect key="frame" x="10" y="2" width="20" height="20"/>
-                                        <constraints>
-                                            <constraint firstAttribute="width" constant="20" id="0fK-DJ-icK"/>
-                                            <constraint firstAttribute="height" constant="20" id="uC1-em-ML9"/>
-                                        </constraints>
-                                        <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="KMImageNameButtonRedactText" id="10J-Vc-p1f"/>
-                                    </imageView>
-                                    <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="bf1-3b-pkO">
-                                        <rect key="frame" x="36" y="4" width="37" height="16"/>
-                                        <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="SQB-JZ-YQd">
-                                            <font key="font" metaFont="system"/>
-                                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
-                                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
-                                        </textFieldCell>
-                                    </textField>
-                                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ryk-qe-WA4" customClass="KMCustomButton" customModule="PDF_Reader_Pro" customModuleProvider="target">
-                                        <rect key="frame" x="0.0" y="0.0" width="81" height="24"/>
-                                        <buttonCell key="cell" type="bevel" bezelStyle="regularSquare" alignment="center" state="on" imageScaling="proportionallyDown" inset="2" id="HKN-QE-F2Y">
-                                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
-                                            <font key="font" metaFont="system"/>
-                                        </buttonCell>
-                                    </button>
-                                </subviews>
-                                <constraints>
-                                    <constraint firstItem="ryk-qe-WA4" firstAttribute="leading" secondItem="cu2-VR-LMh" secondAttribute="leading" id="0ml-x2-817"/>
-                                    <constraint firstAttribute="trailing" secondItem="ryk-qe-WA4" secondAttribute="trailing" id="1xK-nj-ccm"/>
-                                    <constraint firstAttribute="bottom" secondItem="ryk-qe-WA4" secondAttribute="bottom" id="2lW-go-6eQ"/>
-                                    <constraint firstItem="bf1-3b-pkO" firstAttribute="leading" secondItem="UVs-wD-kHf" secondAttribute="trailing" constant="8" id="AVI-KH-18V"/>
-                                    <constraint firstAttribute="trailing" secondItem="bf1-3b-pkO" secondAttribute="trailing" constant="10" id="WRX-4x-oKU"/>
-                                    <constraint firstItem="UVs-wD-kHf" firstAttribute="leading" secondItem="cu2-VR-LMh" secondAttribute="leading" constant="10" id="ZCC-uD-EvM"/>
-                                    <constraint firstItem="bf1-3b-pkO" firstAttribute="centerY" secondItem="UVs-wD-kHf" secondAttribute="centerY" id="fPi-51-EcZ"/>
-                                    <constraint firstItem="ryk-qe-WA4" firstAttribute="top" secondItem="cu2-VR-LMh" secondAttribute="top" id="hHJ-vU-tyU"/>
-                                    <constraint firstItem="UVs-wD-kHf" firstAttribute="centerY" secondItem="cu2-VR-LMh" secondAttribute="centerY" id="zjk-6O-sRF"/>
-                                </constraints>
-                            </view>
-                            <constraints>
-                                <constraint firstAttribute="height" constant="24" id="cDN-lX-Jb8"/>
-                            </constraints>
-                        </box>
-                        <box boxType="custom" borderType="none" cornerRadius="4" title="Box" titlePosition="noTitle" translatesAutoresizingMaskIntoConstraints="NO" id="ilD-02-AHW">
-                            <rect key="frame" x="389" y="8" width="81" height="24"/>
-                            <view key="contentView" id="NxZ-uq-kLH">
-                                <rect key="frame" x="0.0" y="0.0" width="81" height="24"/>
-                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-                                <subviews>
-                                    <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="nqh-33-2zD">
-                                        <rect key="frame" x="10" y="2" width="20" height="20"/>
-                                        <constraints>
-                                            <constraint firstAttribute="width" constant="20" id="MC2-OR-b99"/>
-                                            <constraint firstAttribute="height" constant="20" id="hBV-0T-VJJ"/>
-                                        </constraints>
-                                        <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="KMImageNameButtonRedactWhite" id="oP6-pp-sBC"/>
-                                    </imageView>
-                                    <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="GzX-GG-5zC">
-                                        <rect key="frame" x="36" y="4" width="37" height="16"/>
-                                        <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="QUR-sW-y9x">
-                                            <font key="font" metaFont="system"/>
-                                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
-                                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
-                                        </textFieldCell>
-                                    </textField>
-                                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2kK-qf-LCr" customClass="KMCustomButton" customModule="PDF_Reader_Pro" customModuleProvider="target">
-                                        <rect key="frame" x="0.0" y="0.0" width="81" height="24"/>
-                                        <buttonCell key="cell" type="bevel" bezelStyle="regularSquare" alignment="center" state="on" imageScaling="proportionallyDown" inset="2" id="Xcm-64-c8X">
-                                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
-                                            <font key="font" metaFont="system"/>
-                                        </buttonCell>
-                                    </button>
-                                </subviews>
-                                <constraints>
-                                    <constraint firstItem="GzX-GG-5zC" firstAttribute="centerY" secondItem="nqh-33-2zD" secondAttribute="centerY" id="DDp-WI-zMQ"/>
-                                    <constraint firstItem="GzX-GG-5zC" firstAttribute="leading" secondItem="nqh-33-2zD" secondAttribute="trailing" constant="8" id="Ivn-E7-xDD"/>
-                                    <constraint firstItem="2kK-qf-LCr" firstAttribute="top" secondItem="NxZ-uq-kLH" secondAttribute="top" id="Opf-Nv-Vwi"/>
-                                    <constraint firstAttribute="bottom" secondItem="2kK-qf-LCr" secondAttribute="bottom" id="Rbk-3j-3vO"/>
-                                    <constraint firstItem="2kK-qf-LCr" firstAttribute="leading" secondItem="NxZ-uq-kLH" secondAttribute="leading" id="bdu-63-Ci6"/>
-                                    <constraint firstAttribute="trailing" secondItem="2kK-qf-LCr" secondAttribute="trailing" id="js5-qs-4Ij"/>
-                                    <constraint firstItem="nqh-33-2zD" firstAttribute="centerY" secondItem="NxZ-uq-kLH" secondAttribute="centerY" id="kLT-X8-SnG"/>
-                                    <constraint firstItem="nqh-33-2zD" firstAttribute="leading" secondItem="NxZ-uq-kLH" secondAttribute="leading" constant="10" id="qgm-db-ESl"/>
-                                    <constraint firstAttribute="trailing" secondItem="GzX-GG-5zC" secondAttribute="trailing" constant="10" id="tP7-eB-yUT"/>
-                                </constraints>
-                            </view>
-                            <constraints>
-                                <constraint firstAttribute="height" constant="24" id="MyR-VT-eI8"/>
-                            </constraints>
-                        </box>
-                        <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="YU9-ht-l5r">
-                            <rect key="frame" x="14" y="12" width="60" height="17"/>
-                            <textFieldCell key="cell" lineBreakMode="clipping" title="Edit PDF" id="xwB-CI-KY9">
-                                <font key="font" metaFont="system" size="14"/>
-                                <color key="textColor" red="0.99999600649999998" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                                <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
-                            </textFieldCell>
-                        </textField>
-                        <box boxType="custom" borderWidth="0.0" cornerRadius="1" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="p57-Ip-T2T" customClass="KMBox" customModule="PDF_Reader_Pro" customModuleProvider="target">
-                            <rect key="frame" x="906" y="8" width="79" height="24"/>
-                            <view key="contentView" id="SkL-h8-Tpz">
-                                <rect key="frame" x="0.0" y="0.0" width="79" height="24"/>
-                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-                                <subviews>
-                                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="jgL-Z5-PR3">
-                                        <rect key="frame" x="20" y="4" width="39" height="16"/>
-                                        <buttonCell key="cell" type="bevel" title="Apply" bezelStyle="rounded" alignment="center" imageScaling="proportionallyDown" inset="2" id="Avm-LZ-ePg">
-                                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
-                                            <font key="font" metaFont="system"/>
-                                        </buttonCell>
-                                        <connections>
-                                            <action selector="apply_button:" target="-2" id="e1M-4e-CN2"/>
-                                        </connections>
-                                    </button>
-                                </subviews>
-                                <constraints>
-                                    <constraint firstAttribute="trailing" secondItem="jgL-Z5-PR3" secondAttribute="trailing" constant="20" id="O24-kg-iaR"/>
-                                    <constraint firstItem="jgL-Z5-PR3" firstAttribute="leading" secondItem="SkL-h8-Tpz" secondAttribute="leading" constant="20" id="YiZ-mR-yNH"/>
-                                    <constraint firstItem="jgL-Z5-PR3" firstAttribute="centerY" secondItem="SkL-h8-Tpz" secondAttribute="centerY" id="lxb-En-69V"/>
-                                </constraints>
-                            </view>
-                            <color key="fillColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                        </box>
-                        <box boxType="custom" borderWidth="0.0" cornerRadius="1" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="dDh-hJ-cIA" customClass="KMBox" customModule="PDF_Reader_Pro" customModuleProvider="target">
-                            <rect key="frame" x="827" y="8" width="67" height="24"/>
-                            <view key="contentView" id="qpy-I2-8jU">
-                                <rect key="frame" x="0.0" y="0.0" width="67" height="24"/>
-                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-                                <subviews>
-                                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="pup-Oa-y3G">
-                                        <rect key="frame" x="20" y="4" width="27" height="16"/>
-                                        <buttonCell key="cell" type="bevel" title="Exit" bezelStyle="rounded" alignment="center" imageScaling="proportionallyDown" inset="2" id="TcM-v9-HPa">
-                                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
-                                            <font key="font" metaFont="system"/>
-                                        </buttonCell>
-                                        <connections>
-                                            <action selector="exit_button:" target="-2" id="jp5-Zg-WXB"/>
-                                        </connections>
-                                    </button>
-                                </subviews>
-                                <constraints>
-                                    <constraint firstItem="pup-Oa-y3G" firstAttribute="leading" secondItem="qpy-I2-8jU" secondAttribute="leading" constant="20" id="3fF-7j-K5P"/>
-                                    <constraint firstItem="pup-Oa-y3G" firstAttribute="centerY" secondItem="qpy-I2-8jU" secondAttribute="centerY" id="VpB-D0-d0P"/>
-                                    <constraint firstAttribute="trailing" secondItem="pup-Oa-y3G" secondAttribute="trailing" constant="20" id="k6e-jp-K9d"/>
-                                </constraints>
-                            </view>
-                            <color key="fillColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                        </box>
-                        <box boxType="custom" borderType="none" cornerRadius="4" title="Box" titlePosition="noTitle" translatesAutoresizingMaskIntoConstraints="NO" id="iwX-y1-ea2">
-                            <rect key="frame" x="575" y="8" width="81" height="24"/>
-                            <view key="contentView" id="ZZF-jp-flc">
-                                <rect key="frame" x="0.0" y="0.0" width="81" height="24"/>
-                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-                                <subviews>
-                                    <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="wmd-of-I4h">
-                                        <rect key="frame" x="10" y="2" width="20" height="20"/>
-                                        <constraints>
-                                            <constraint firstAttribute="height" constant="20" id="YcT-7F-lSr"/>
-                                            <constraint firstAttribute="width" constant="20" id="a4d-Wr-CJW"/>
-                                        </constraints>
-                                        <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="KMImageNameButtonRedactProperties" id="ORk-5j-x9i"/>
-                                    </imageView>
-                                    <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="9vB-gG-Xmd">
-                                        <rect key="frame" x="36" y="4" width="37" height="16"/>
-                                        <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="RIY-Ss-doB">
-                                            <font key="font" metaFont="system"/>
-                                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
-                                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
-                                        </textFieldCell>
-                                    </textField>
-                                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="G4u-HY-WcV" customClass="KMCustomButton" customModule="PDF_Reader_Pro" customModuleProvider="target">
-                                        <rect key="frame" x="0.0" y="0.0" width="81" height="24"/>
-                                        <buttonCell key="cell" type="bevel" bezelStyle="regularSquare" alignment="center" state="on" imageScaling="proportionallyDown" inset="2" id="pAw-R5-ae6">
-                                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
-                                            <font key="font" metaFont="system"/>
-                                        </buttonCell>
-                                        <connections>
-                                            <action selector="showProperties_button:" target="-2" id="ak9-cG-D94"/>
-                                        </connections>
-                                    </button>
-                                </subviews>
-                                <constraints>
-                                    <constraint firstItem="wmd-of-I4h" firstAttribute="centerY" secondItem="ZZF-jp-flc" secondAttribute="centerY" id="3qQ-y5-pYZ"/>
-                                    <constraint firstItem="wmd-of-I4h" firstAttribute="leading" secondItem="ZZF-jp-flc" secondAttribute="leading" constant="10" id="54F-VB-DTy"/>
-                                    <constraint firstItem="G4u-HY-WcV" firstAttribute="leading" secondItem="ZZF-jp-flc" secondAttribute="leading" id="607-kv-oZS"/>
-                                    <constraint firstAttribute="bottom" secondItem="G4u-HY-WcV" secondAttribute="bottom" id="I5N-mL-JG8"/>
-                                    <constraint firstItem="9vB-gG-Xmd" firstAttribute="centerY" secondItem="wmd-of-I4h" secondAttribute="centerY" id="KnA-gl-wY3"/>
-                                    <constraint firstAttribute="trailing" secondItem="G4u-HY-WcV" secondAttribute="trailing" id="agX-Gn-XLd"/>
-                                    <constraint firstItem="G4u-HY-WcV" firstAttribute="top" secondItem="ZZF-jp-flc" secondAttribute="top" id="hFT-HB-gbq"/>
-                                    <constraint firstAttribute="trailing" secondItem="9vB-gG-Xmd" secondAttribute="trailing" constant="10" id="iKd-Gb-9CH"/>
-                                    <constraint firstItem="9vB-gG-Xmd" firstAttribute="leading" secondItem="wmd-of-I4h" secondAttribute="trailing" constant="8" id="vAH-9A-ypo"/>
-                                </constraints>
-                            </view>
-                            <constraints>
-                                <constraint firstAttribute="height" constant="24" id="eCk-ic-tUa"/>
-                            </constraints>
-                        </box>
-                    </subviews>
-                    <constraints>
-                        <constraint firstItem="aoK-i3-jUv" firstAttribute="leading" secondItem="ilD-02-AHW" secondAttribute="trailing" constant="12" id="4JF-F3-8bM"/>
-                        <constraint firstItem="YU9-ht-l5r" firstAttribute="centerY" secondItem="2S1-Gb-ePE" secondAttribute="centerY" id="Fvh-Id-qhM"/>
-                        <constraint firstItem="aoK-i3-jUv" firstAttribute="centerY" secondItem="2S1-Gb-ePE" secondAttribute="centerY" id="I0v-ft-szS"/>
-                        <constraint firstAttribute="trailing" secondItem="p57-Ip-T2T" secondAttribute="trailing" constant="15" id="VSh-yG-pTg"/>
-                        <constraint firstItem="dDh-hJ-cIA" firstAttribute="top" secondItem="2S1-Gb-ePE" secondAttribute="top" constant="8" id="WH3-I9-gGf"/>
-                        <constraint firstItem="p57-Ip-T2T" firstAttribute="top" secondItem="2S1-Gb-ePE" secondAttribute="top" constant="8" id="WR2-Qc-g35"/>
-                        <constraint firstAttribute="height" constant="40" id="WUy-y7-LrA"/>
-                        <constraint firstItem="YU9-ht-l5r" firstAttribute="leading" secondItem="2S1-Gb-ePE" secondAttribute="leading" constant="16" id="aT9-aj-pzQ"/>
-                        <constraint firstItem="iwX-y1-ea2" firstAttribute="centerX" secondItem="2S1-Gb-ePE" secondAttribute="centerX" constant="115" id="bXp-VB-JyA"/>
-                        <constraint firstItem="ilD-02-AHW" firstAttribute="centerY" secondItem="2S1-Gb-ePE" secondAttribute="centerY" id="iHZ-bb-mu2"/>
-                        <constraint firstItem="p57-Ip-T2T" firstAttribute="leading" secondItem="dDh-hJ-cIA" secondAttribute="trailing" constant="12" id="iIc-KL-0gR"/>
-                        <constraint firstAttribute="bottom" secondItem="dDh-hJ-cIA" secondAttribute="bottom" constant="8" id="m6o-zI-Wdu"/>
-                        <constraint firstAttribute="bottom" secondItem="p57-Ip-T2T" secondAttribute="bottom" constant="8" id="mtN-jR-bCV"/>
-                        <constraint firstItem="iwX-y1-ea2" firstAttribute="leading" secondItem="aoK-i3-jUv" secondAttribute="trailing" constant="12" id="qqF-pS-UzL"/>
-                        <constraint firstItem="iwX-y1-ea2" firstAttribute="centerY" secondItem="2S1-Gb-ePE" secondAttribute="centerY" id="sWN-bH-6QS"/>
-                    </constraints>
-                </customView>
-                <customView translatesAutoresizingMaskIntoConstraints="NO" id="Ljd-Vm-9rM" customClass="KMRedactPDFView" customModule="PDF_Reader_Pro" customModuleProvider="target">
-                    <rect key="frame" x="0.0" y="0.0" width="1000" height="321"/>
-                </customView>
-            </subviews>
-            <constraints>
-                <constraint firstItem="2S1-Gb-ePE" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" id="8jh-Dz-18G"/>
-                <constraint firstItem="Ljd-Vm-9rM" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" id="9dF-4q-8Uw"/>
-                <constraint firstAttribute="trailing" secondItem="Ljd-Vm-9rM" secondAttribute="trailing" id="Rm0-EU-FOU"/>
-                <constraint firstItem="Ljd-Vm-9rM" firstAttribute="top" secondItem="2S1-Gb-ePE" secondAttribute="bottom" id="YPB-Ng-n7R"/>
-                <constraint firstItem="2S1-Gb-ePE" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" id="bKr-kB-74n"/>
-                <constraint firstAttribute="bottom" secondItem="Ljd-Vm-9rM" secondAttribute="bottom" id="jYf-ow-CxC"/>
-                <constraint firstAttribute="trailing" secondItem="2S1-Gb-ePE" secondAttribute="trailing" id="oJq-Zw-u7u"/>
-            </constraints>
-            <point key="canvasLocation" x="274" y="171.5"/>
-        </customView>
-    </objects>
-    <resources>
-        <image name="KMImageNameButtonRedactProperties" width="20" height="20"/>
-        <image name="KMImageNameButtonRedactText" width="20" height="20"/>
-        <image name="KMImageNameButtonRedactWhite" width="20" height="20"/>
-    </resources>
-</document>

+ 0 - 885
PDF Office/PDF Master/Class/PDFTools/Redact/View/KMRedactPDFView.swift

@@ -1,885 +0,0 @@
-//
-//  KMRedactPDFView.swift
-//  PDF Reader Pro
-//
-//  Created by tangchao on 2023/12/18.
-//
-
-import Cocoa
-
-enum KMPDFRedactViewOperationType: Int {
-    case none = 0 //没有进入任何模式
-    case redact //标记密文模式
-    case editText //文本编辑
-}
-
-
-private let KMPDFViewShowCurrentRedactAnnotation = "KMPDFViewShowCurrentRedactAnnotation"
-private let KMPDFViewRedactAnnotationApply = "KMPDFViewRedactAnnotationApply"
-private let KMPDFViewRedactAnnotationAcross = "KMPDFViewRedactAnnotationAcross"
-
-class KMPDFWhiteOutRedactAnnotation: CPDFRedactAnnotation {
-    
-}
-
-@objcMembers class KMRedactPDFView: CPDFListView {
-    
-    private let MIN_NOTE_SIZE: CGFloat = 8.0
-    
-    static let showCurrentRedactAnnotationNotificationName = Notification.Name(KMPDFViewShowCurrentRedactAnnotation)
-    static let redactAnnotationApplyNotificationName = Notification.Name(KMPDFViewRedactAnnotationApply)
-    static let redactAnnotationAcrossNotificationName = Notification.Name(KMPDFViewRedactAnnotationAcross)
-    
-    var mouseMoveAnnotation: CPDFAnnotation?
-    var currentAnnotation: CPDFRedactAnnotation?
-    var newAddAnnotation: [CPDFAnnotation] = []
-//    var activeAnnotations: [CPDFAnnotation] = []
-    
-    var operationType: KMPDFRedactViewOperationType = .none
-    
-    var isEidtImageModel = false
-    var isEidtTextModel = false
-    
-    var isWhiteOut = false
-    
-    var eventColorChanged: ((NSColor)->Void)?
-    var eventFontChanged: (()->Void)?
-    var exportBtnTaped: ((Int)->Void)?
-    
-    private var _localMonitor: AnyObject?
-
-    override init(frame frameRect: NSRect) {
-        super.init(frame: frameRect)
-        
-        self.operationType = .none
-        self.addTrackingArea()
-        self.initMonitor()
-    }
-    
-    required init?(coder: NSCoder) {
-        super.init(coder: coder)
-        
-        self.operationType = .none
-        self.addTrackingArea()
-        self.initMonitor()
-    }
-    
-    override func draw(_ dirtyRect: NSRect) {
-        super.draw(dirtyRect)
-
-        // Drawing code here.
-    }
-    
-    func resignMonitor() {
-        if let monitor = self._localMonitor {
-            NSEvent.removeMonitor(monitor)
-            self._localMonitor = nil
-        }
-    }
-
-    func addTrackingArea() {
-        self.newAddAnnotation = []
-        self.activeAnnotations = []
-        let trackingArea = NSTrackingArea(rect: self.bounds, options: [.mouseEnteredAndExited, .inVisibleRect, .activeInKeyWindow], owner: self)
-        self.addTrackingArea(trackingArea)
-     }
-    func initMonitor() {
-        let mask: NSEvent.EventTypeMask = .keyDown
-
-        guard _localMonitor == nil else { return }
-        
-        _localMonitor = NSEvent.addLocalMonitorForEvents(matching: mask) { event in
-            // 获取事件的第一个字符
-            let eventChar = event.PDFListViewFirstCharacter()
-            // 获取标准的修饰符标志
-            let modifiers = Self.standardPDFListViewModifierFlags()
-            
-            // 获取当前响应者
-            if let currentResponder = NSApp.keyWindow?.firstResponder, !(currentResponder is NSTextView) {
-                // 如果按下的是删除键,并且没有修饰符,则执行删除操作
-                if (eventChar == NSDeleteCharacter || eventChar == NSDeleteFunctionKey), modifiers == 0 {
-                    self.delete()
-                }
-                
-                // 如果按下的是回车键,并且没有修饰符,则执行图像裁剪完成操作
-                if event.keyCode == 36, modifiers == 0 {
-                    self.corpImageDoneWithEnter()
-                }
-            }
-            
-            // 返回事件以继续处理
-            return event
-        } as AnyObject?
-    }
-    
-    override func menu(for event: NSEvent) -> NSMenu? {
-        var menu = super.menu(for: event)
-//        if (menu == nil) {
-            menu = NSMenu()
-//        }
-        var pagePoint = NSZeroPoint
-//        CPDFPage *page = [self pageAndPoint:&pagePoint forEvent:event nearest:YES];
-        let page = self.pageAndPoint(&pagePoint, for: event, nearest: true)
-//        CPDFAnnotation *annotation = [page annotationAtPoint:pagePoint];
-        let annotation = page?.annotation(at: pagePoint)
-        if let data = annotation, data is CPDFRedactAnnotation && self.operationType == .redact {
-            var item = menu?.insertItem(withTitle: KMLocalizedString("Delete"), action: #selector(deleteAnnotation), target: self, at: 0)
-            item?.representedObject = annotation
-            menu?.insertItem(.separator(), at: 1)
-            item = menu?.insertItem(withTitle: KMLocalizedString("Make Current Properties Default"), action: #selector(setPropertiesDefault), target: self, at: 2)
-            item?.representedObject = annotation
-            
-            _ = menu?.insertItem(withTitle: KMLocalizedString("Properties"), action: #selector(properties), target: self, at: 3)
-            menu?.insertItem(.separator(), at: 4)
-            _ = menu?.insertItem(withTitle: KMLocalizedString("Repeat Mark Across Pages"), action: #selector(repeatMark), target: self, at: 5)
-            _ = menu?.insertItem(withTitle: KMLocalizedString("Apply Redactions"), action: #selector(applyRedact), target: self, at: 6)
-            self.currentAnnotation = annotation as? CPDFRedactAnnotation
-        }
-        return menu
-    }
-    
-    @objc func deleteAnnotation(_ sender: NSMenuItem?) {
-        if let annotation = sender?.representedObject as? CPDFRedactAnnotation {
-            self.remove(annotation)
-//            removeAnnotation(annotation: annotation)
-        }
-    }
-    
-    func removeAnnotation(annotation: CPDFAnnotation) {
-        let annos = NSMutableArray()
-        annos.add(annotation)
-        removeAccosAnnotations(annos)
-    }
-    
-    @objc func setPropertiesDefault(_ sender: NSMenuItem?) {
-        if let annotation = sender?.representedObject as? CPDFRedactAnnotation {
-            KMPDFAnnotationRedactConfig.shared.redactOutlineColor = annotation.borderColor()
-            KMPDFAnnotationRedactConfig.shared.redactFillColor = annotation.interiorColor()
-            KMPDFAnnotationRedactConfig.shared.redactFontColor = annotation.fontColor()
-            KMPDFAnnotationRedactConfig.shared.overlayText = annotation.overlayText().isEmpty == false
-            KMPDFAnnotationRedactConfig.shared.fontSize = Int(annotation.font().pointSize)
-            KMPDFAnnotationRedactConfig.shared.textAlignment = annotation.alignment().rawValue
-            KMPDFAnnotationRedactConfig.shared.overlayTextString = annotation.overlayText()
-        }
-    }
-    
-    @objc func properties() {
-        NotificationCenter.default.post(name: Self.showCurrentRedactAnnotationNotificationName, object: self)
-    }
-    
-    @objc func repeatMark() {
-        NotificationCenter.default.post(name: Self.redactAnnotationAcrossNotificationName, object: self)
-    }
-    
-    @objc func applyRedact() {
-        NotificationCenter.default.post(name: Self.redactAnnotationApplyNotificationName, object: self)
-    }
-    
-    
-    /*
-
-     - (CGSize)getWidthFromText:(NSString *)text WithSize:(NSFont *)font AboutWidth:(CGFloat)width AndHeight:(CGFloat)height
-     {
-        if (!text) {
-            return CGSizeMake(0, 0);
-        }
-        CGRect rect = [text boundingRectWithSize:CGSizeMake(width, height) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:font} context:nil];
-        return rect.size;
-     }
-
-     */
-    
-    override func menuItemsEditing(at point: CGPoint, for page: CPDFPage!) -> [NSMenuItem]! {
-        var menuItems = super.menuItemsEditing(at: point, for: page)
-        if (menuItems == nil) {
-            menuItems = []
-        }
-        if self.isSelectEditCharRange() || self.isSelecteditArea(with: point) {
-            menuItems?.insert(.separator(), at: 0)
-            menuItems?.insert(self.fontColorMenuItem(), at: 0)
-            menuItems?.insert(self.fontSizeMenuItem(), at: 0)
-        }
-        
-        if self.editingArea() != nil {
-            if self.editingArea().isImageArea() {
-                menuItems?.insert(.separator(), at: 0)
-//    //            [menuItems insertObject:[self imageCutMenuItem] atIndex:0];
-//    //            [menuItems insertObject:[self imagePasteMenuItem] atIndex:0];
-//                [menuItems insertObject:[self imageRotateMenuItem] atIndex:0];
-                menuItems?.insert(self.imageExportMenuItem(), at: 0)
-            }
-        }
-        return menuItems
-    }
-    // MARK: - keyDown
-    
-    override func mouseMoved(with event: NSEvent) {
-        self.window?.mouseMoved(with: event)
-        super.mouseMoved(with: event)
-        if(self.operationType != .redact) {
-            return
-        }
-        var pagePoint = NSZeroPoint
-        var page = self.pageAndPoint(&pagePoint, for: event, nearest: true)
-        var fromView: NSView?
-        let newpoint = self.convert(event.locationInWindow, from: fromView)
-        let area = self.areaOfInterest(for: newpoint)
-        if area.contains(.textArea) {
-            NSCursor.iBeam.set()
-        }else{
-            NSCursor.arrow.set()
-        }
-        let newActiveAnnotation = page?.annotation(at: pagePoint)
-        if newActiveAnnotation != nil && newActiveAnnotation is CPDFRedactAnnotation && self.mouseMoveAnnotation == newActiveAnnotation {
-//            if newActiveAnnotation is KMPDFWhiteOutRedactAnnotation {
-//
-//            } else {
-                (newActiveAnnotation as? CPDFRedactAnnotation)?.drawRedactionsAsRedacted = true
-//            }
-            self.setNeedsDisplayAnnotationViewFor(page)
-        } else if self.mouseMoveAnnotation != nil && self.mouseMoveAnnotation is CPDFRedactAnnotation {
-//            if self.mouseMoveAnnotation is KMPDFWhiteOutRedactAnnotation {
-//
-//            } else {
-                (self.mouseMoveAnnotation as? CPDFRedactAnnotation)?.drawRedactionsAsRedacted = false
-//            }
-            self.setNeedsDisplayAnnotationViewFor(page)
-        }
-        self.mouseMoveAnnotation = newActiveAnnotation
-    }
-    
-    override func mouseDown(with event: NSEvent) {
-        var pagePoint = NSZeroPoint
-        if(self.operationType != .redact) {
-            return
-        }
-        var page = self.pageAndPoint(&pagePoint, for: event, nearest: true)
-        let newActiveAnnotation = page?.annotation(at: pagePoint)
-        var fromView: NSView?
-        let newpoint = self.convert(event.locationInWindow, from: fromView)
-        let area = self.areaOfInterest(for: newpoint)
-        self.activeAnnotations.removeAllObjects() //预留
-        if(newActiveAnnotation != nil) {
-            if self.activeAnnotations.contains(newActiveAnnotation!) == false {
-                self.activeAnnotations.add(newActiveAnnotation!)
-            }
-            self.setNeedsDisplayAnnotationViewFor(page)
-            _ = self.doDragMouse(event: event)
-        } else if area.contains(.textArea) {
-            super.mouseDown(with: event)
-            self.doMarkUp(event: event)
-            self.currentSelection = nil
-        } else {
-            self.doRedact(event: event)
-        }
-    }
-
-    func delete() {
-        for anno in self.activeAnnotations {
-            if anno is CPDFRedactAnnotation {
-                self.remove(anno as? CPDFAnnotation)
-            }
-         }
-     }
-
-    func corpImageDoneWithEnter() {
-//         if([self.editingArea isKindOfClass:[CPDFEditImageArea class]]) {
-//             CPDFEditImageArea *editImageArea = (CPDFEditImageArea *)self.editingArea;
-//             if(editImageArea.isCropMode) {
-//                 [self cropEditImageArea:editImageArea withBounds:editImageArea.cropRect];
-//                 [self exitCropWithEditImageArea:editImageArea];
-//             }
-//         }
-     }
-    
-    // MARK: - Rendering
-    
-    func doDragMouse(event: NSEvent) -> Bool {
-        var didDrag = false
-        while (true) {
-            if self.window?.nextEvent(matching: [.leftMouseUp, .leftMouseDragged])?.type == .leftMouseUp {
-                break
-            }
-            didDrag = true
-        }
-        return didDrag
-    }
-    
-    func doMarkUp(event: NSEvent) {
-        let eventMask: NSEvent.EventTypeMask = [.leftMouseUp, .leftMouseDragged]
-        
-        var theEvent: NSEvent = event
-        while (true) {
-            theEvent = self.window!.nextEvent(matching: eventMask)!
-            if theEvent.type == .leftMouseUp {
-                if (self.currentSelection != nil) {
-                    let page = self.currentSelection.page
-                    var annotation = self.addRedactPDFSelection(self.currentSelection)
-//                    if self.isWhiteOut {
-//                        annotation = self.addWhiteRedactPDFSelection(self.currentSelection)
-//                    }
-                    annotation?.setModificationDate(Date())
-                    let userName = KMPreference.shared.author
-                    annotation?.setUserName(userName)
-                    
-//                    annotation?.borderWidth = 10
-                    annotation?.borderWidth = 1
-                    if self.isWhiteOut {
-                        annotation?.setBorderColor(.red)
-                        annotation?.setInteriorColor(.white)
-                    } else {
-                        annotation?.setBorderColor(KMPDFAnnotationRedactConfig.shared.redactOutlineColor)
-                        annotation?.setInteriorColor(KMPDFAnnotationRedactConfig.shared.redactFillColor)
-                    }
-                    annotation?.setFontColor(KMPDFAnnotationRedactConfig.shared.redactFontColor)
-                    if KMPDFAnnotationRedactConfig.shared.overlayText {
-                        annotation?.setAlignment(NSTextAlignment(rawValue: KMPDFAnnotationRedactConfig.shared.textAlignment) ?? .left)
-                        let font = NSFont(name: "Helvetica", size: KMPDFAnnotationRedactConfig.shared.fontSize.cgFloat)
-                        annotation?.setFont(font)
-                        annotation?.setOverlayText(KMPDFAnnotationRedactConfig.shared.overlayTextString)
-                    }
-//                    if self.isWhiteOut {
-//                        annotation?.drawRedactionsAsRedacted = false
-//                    } else {
-                        annotation?.drawRedactionsAsRedacted = false
-//                    }
-                    self.addAnnotation(with: annotation, to: page)
-                    self.newAddAnnotation.append(annotation!)
-                    self.setNeedsDisplayFor(page)
-                }
-                break
-            } else if theEvent.type == .leftMouseDragged {
-                super.mouseDragged(with: theEvent)
-            }
-        }
-    }
-    
-    func doRedact(event: NSEvent) {
-        var point = NSZeroPoint
-        let page = self.pageAndPoint(&point, for: event, nearest: true)
-        let wasMouseCoalescingEnabled = NSEvent.isMouseCoalescingEnabled
-
-        let window = self.window
-        var bezierPath: NSBezierPath?
-        var layer: CAShapeLayer?
-        
-        let boxBounds = page?.bounds ?? .zero
-        let t = CGAffineTransform(scaleX: self.scaleFactor, y: self.scaleFactor).rotated(by: -Double.pi * 0.5 * (page!.rotation.cgFloat / 90.0))
-        layer = CAShapeLayer()
-        layer?.bounds = NSRectToCGRect(boxBounds)
-        layer?.anchorPoint = .zero
-        let posi = self.convert(boxBounds.origin, from: page)
-        layer?.position = NSPointToCGPoint(posi)
-        layer?.setAffineTransform(t)
-        layer?.zPosition = 1.0
-        layer?.masksToBounds = true
-        layer?.fillColor = KMPDFAnnotationRedactConfig.shared.redactFillColor?.cgColor
-//        layer?.strokeColor = CGColorGetConstantColor(kCGColorBlack)
-        layer?.strokeColor = .black
-        layer?.lineJoin = .round
-        layer?.lineCap = .round
-        
-        var lastMouseEvent = event
-        // SKRectEdges
-        var resizeHandle: CRectEdges = [.minYEdgeMask, .maxXEdgeMask]
-        
-        var originalBounds = NSMakeRect(point.x, point.y, 0, 0)
-
-        self.layer?.addSublayer(layer!)
-        
-        var eventMask: NSEvent.EventTypeMask = [.leftMouseUp, .leftMouseDragged]
-        var rect = NSRect.zero
-        var theEvent = event
-        while (true) {
-            theEvent = window!.nextEvent(matching: eventMask)!
-            if theEvent.type == .leftMouseUp {
-                if (rect.size.width < MIN_NOTE_SIZE || rect.size.height < MIN_NOTE_SIZE) {
-                    break
-                }
-                var quadrilateralPoints = NSMutableArray()
-                var annotation = CPDFRedactAnnotation(document: self.document)
-//                if self.isWhiteOut {
-//                    annotation = KMPDFWhiteOutRedactAnnotation(document: self.document)
-//                }
-                var bounds = rect
-                quadrilateralPoints.add(NSValue(point: NSMakePoint(NSMinX(bounds), NSMaxY(bounds))))
-                quadrilateralPoints.add(NSValue(point: NSMakePoint(NSMaxX(bounds), NSMaxY(bounds))))
-                quadrilateralPoints.add(NSValue(point: NSMakePoint(NSMinX(bounds), NSMinY(bounds))))
-                quadrilateralPoints.add(NSValue(point: NSMakePoint(NSMaxX(bounds), NSMinY(bounds))))
-                annotation?.setQuadrilateralPoints(quadrilateralPoints as? [Any] ?? [])
-                                        
-                annotation?.setModificationDate(Date())
-                let userName = KMPreference.shared.author
-                annotation?.setUserName(userName)
-
-//                if ([annotation isKindOfClass:[CPDFRedactAnnotation class]]) {
-//                annotation?.borderWidth = 10
-                annotation?.borderWidth = 1
-                if self.isWhiteOut {
-                    annotation?.setBorderColor(.red)
-                    annotation?.setInteriorColor(.white)
-                } else {
-                    annotation?.setBorderColor(KMPDFAnnotationRedactConfig.shared.redactOutlineColor)
-                    annotation?.setInteriorColor(KMPDFAnnotationRedactConfig.shared.redactFillColor)
-                }
-                annotation?.setFontColor(KMPDFAnnotationRedactConfig.shared.redactFontColor)
-                if KMPDFAnnotationRedactConfig.shared.overlayText {
-                    annotation?.setAlignment(NSTextAlignment(rawValue: KMPDFAnnotationRedactConfig.shared.textAlignment) ?? .left)
-                    let font = NSFont(name: "Helvetica", size: KMPDFAnnotationRedactConfig.shared.fontSize.cgFloat)
-                    annotation?.setFont(font)
-                    annotation?.setOverlayText(KMPDFAnnotationRedactConfig.shared.overlayTextString)
-                }
-                
-//                if self.isWhiteOut {
-//                    annotation?.drawRedactionsAsRedacted = false
-//                } else {
-                    annotation?.drawRedactionsAsRedacted = false
-//                }
-                self.addAnnotation(with: annotation, to: page)
-                self.newAddAnnotation.append(annotation!)
-                break
-            } else if theEvent.type == .leftMouseDragged {
-//                rect = self.doResizeLink(event: lastMouseEvent, fromPoint: point, originalBounds: originalBounds, page: page!, resizeHandle: &resizeHandle)
-                rect = self.doResizeLink(with: lastMouseEvent, from: point, originalBounds: originalBounds, page: page, resizeHandle: &resizeHandle)
-                bezierPath = NSBezierPath(rect: rect)
-                layer?.path = bezierPath?.kmCGPath()
-                lastMouseEvent = theEvent
-            }
-        }
-        
-        layer?.removeFromSuperlayer()
-
-        NSEvent.isMouseCoalescingEnabled = wasMouseCoalescingEnabled
-    }
-
-    func doResizeLink(event: NSEvent, fromPoint originalPagePoint: NSPoint, originalBounds: NSRect, page: CPDFPage, resizeHandle resizeHandlePtr: inout CRectEdges) -> NSRect {
-        let currentPagePoint = self.convert(event.locationInView(self), to: page)
-        
-        var newBounds = originalBounds
-        var pageBounds = page.bounds
-        var relPoint = CPDFListViewSubstractPoints(currentPagePoint, originalPagePoint)
-        var resizeHandle = resizeHandlePtr
-        
-        if (NSEqualSizes(originalBounds.size, NSZeroSize)) {
-            var currentResizeHandle: CRectEdges = .minYEdgeMask
-            if relPoint.x < 0.0 {
-                currentResizeHandle = [.minXEdgeMask]
-            } else {
-                currentResizeHandle = [.maxXEdgeMask]
-            }
-            if relPoint.y <= 0.0 {
-                currentResizeHandle.insert(.minYEdgeMask)
-            } else {
-                currentResizeHandle.insert(.maxYEdgeMask)
-            }
-            if (currentResizeHandle != resizeHandle) {
-                resizeHandlePtr = currentResizeHandle
-                resizeHandle = currentResizeHandle
-            }
-        }
-        let minWidth = MIN_NOTE_SIZE
-        let minHeight = MIN_NOTE_SIZE
-        
-        if resizeHandle.contains(.maxXEdgeMask) {
-            newBounds.size.width += relPoint.x
-            if (NSMaxX(newBounds) > NSMaxX(pageBounds)) {
-                newBounds.size.width = NSMaxX(pageBounds) - NSMinX(newBounds)
-            }
-            if (NSWidth(newBounds) < minWidth) {
-                newBounds.size.width = minWidth
-            }
-        } else if resizeHandle.contains(.minXEdgeMask) {
-            newBounds.origin.x += relPoint.x
-            newBounds.size.width -= relPoint.x
-            if (NSMinX(newBounds) < NSMinX(pageBounds)) {
-                newBounds.size.width = NSMaxX(newBounds) - NSMinX(pageBounds)
-                newBounds.origin.x = NSMinX(pageBounds)
-            }
-            if (NSWidth(newBounds) < minWidth) {
-                newBounds.origin.x = NSMaxX(newBounds) - minWidth
-                newBounds.size.width = minWidth
-            }
-        }
-        
-        if resizeHandle.contains(.maxXEdgeMask) {
-            newBounds.size.height += relPoint.y
-            if (NSMaxY(newBounds) > NSMaxY(pageBounds)) {
-                newBounds.size.height = NSMaxY(pageBounds) - NSMinY(newBounds)
-            }
-            if (NSHeight(newBounds) < minHeight) {
-                newBounds.size.height = minHeight
-            }
-        } else if resizeHandle.contains(.minYEdgeMask) {
-            newBounds.origin.y += relPoint.y
-            newBounds.size.height -= relPoint.y
-            if (NSMinY(newBounds) < NSMinY(pageBounds)) {
-                newBounds.size.height = NSMaxY(newBounds) - NSMinY(pageBounds)
-                newBounds.origin.y = NSMinY(pageBounds)
-            }
-            if (NSHeight(newBounds) < minHeight) {
-                newBounds.origin.y = NSMaxY(newBounds) - minHeight
-                newBounds.size.height = minHeight
-            }
-        }
-        return newBounds
-    }
-    
-    override func validate(_ menuItem: NSMenuItem!) -> Bool {
-        guard let _doc = self.document, _doc.isLocked == false else {
-            return false
-        }
-        let action = menuItem.action
-        if (action == #selector(deleteAnnotation)) {
-            return true
-        } else if (action == #selector(setPropertiesDefault)) {
-            return true
-        } else if (action == #selector(properties)) {
-            return true
-        } else if (action == #selector(repeatMark)) {
-            if(_doc.pageCount == 1) {
-                return false
-            }
-            return true
-        } else if (action == #selector(applyRedact)) {
-            return true
-        } else {
-            return super.validate(menuItem)
-        }
-    }
-    
-    /*
-     #pragma mark -
-
-     - (void)drawPage:(CPDFPage *)page toContext:(CGContextRef)context
-     {
-         [self.activeAnnotations enumerateObjectsUsingBlock:^(CPDFAnnotation *annotation, NSUInteger idx, BOOL * _Nonnull stop) {
-             if (annotation.page && [annotation.page isEqual:page]) {
-                 [annotation drawSelectionHighlightForView:self inContext:context];
-             }
-         }];
-     }
-
-     - (CPDFPage *)pageAndPoint:(NSPoint *)point forEvent:(NSEvent *)event nearest:(BOOL)nearest {
-         NSPoint p = [event locationInView:self];
-         CPDFPage *page = [self pageForPoint:p nearest:nearest];
-         if (page && point)
-             *point = [self convertPoint:p toPage:page];
-         return page;
-     }
-     */
-    
-}
-
-// MARK: - KMExtensions
-
-extension KMRedactPDFView {
-    @objc dynamic func acrossAddAnnotations(_ pages: NSMutableArray) {
-        if(pages.count == 0) {
-            return
-        }
-        var anntations = NSMutableArray()
-        for i in 0 ..< pages.count {
-//            NSUInteger index = [[pages objectAtIndex:i] integerValue];
-            guard let index = (pages.object(at: i) as? NSNumber)?.intValue else {
-                continue
-            }
-            if(index - 1 < self.document.pageCount) {
-//                CPDFPage *page = [[self.document pageAtIndex:index-1] retain];
-                let page = self.document.page(at: UInt(index-1))
-                var annotation = CPDFRedactAnnotation(document: self.document)
-//                if self.isWhiteOut {
-//                    annotation = KMPDFWhiteOutRedactAnnotation(document: self.document)
-//                }
-                if let anno = self.currentAnnotation {
-                    annotation?.setUserName(anno.userName())
-                    annotation?.setModificationDate(anno.modificationDate())
-                    annotation?.setQuadrilateralPoints(anno.quadrilateralPoints())
-                    annotation?.borderWidth = anno.borderWidth
-                    if self.isWhiteOut {
-                        annotation?.setBorderColor(.white)
-                        annotation?.setInteriorColor(.white)
-                    } else {
-                        annotation?.setBorderColor(anno.borderColor())
-                        annotation?.setInteriorColor(anno.interiorColor())
-                    }
-                    annotation?.setFont(anno.font())
-                    annotation?.setOverlayText(anno.overlayText())
-                    annotation?.setFontColor(anno.fontColor())
-                    annotation?.setAlignment(anno.alignment())
-                    
-                    let pageRect = page?.bounds ?? .zero
-                    let annotationRect  = annotation?.bounds ?? .zero
-                    if (NSMaxX(annotationRect) > NSMaxX(pageRect) ||
-                        NSMinX(annotationRect) < NSMinX(pageRect) ||
-                        NSMinY(annotationRect) < NSMinY(pageRect) ||
-                        NSMaxY(annotationRect) > NSMaxY(pageRect) ||
-                        anno.page == page){
-                        continue
-                    }
-                }
-
-                page?.addAnnotation(annotation)
-                anntations.add(annotation as Any)
-                self.setNeedsDisplayAnnotationViewFor(page)
-            }
-        }
-        (self.undoManager?.prepare(withInvocationTarget: self) as AnyObject).removeAccosAnnotations(anntations)
-    }
-    
-    @objc dynamic func removeAccosAnnotations(_ annotations: NSMutableArray) {
-        if(annotations.count == 0){
-            return
-        }
-        var pageIndexs = NSMutableArray()
-        for i in 0 ..< annotations.count {
-            guard let annotation = annotations.object(at: i) as? CPDFRedactAnnotation else {
-                continue
-            }
-            let page = annotation.page
-            let index = self.document.index(for: page)
-            page?.removeAnnotation(annotation)
-            pageIndexs.add(NSNumber(integerLiteral: Int(index)+1))
-            self.setNeedsDisplayAnnotationViewFor(page)
-        }
-        (self.undoManager?.prepare(withInvocationTarget: self) as AnyObject).acrossAddAnnotations(pageIndexs)
-    }
-    
-    /*
-     - (CGFloat)unitWidthOnPage:(CPDFPage *)page
-     {
-         return NSWidth([self convertRect:NSMakeRect(0.0, 0.0, 1.0, 1.0) toPage:page]);
-     }
-
-     - (NSRect)integralRect:(NSRect)rect onPage:(CPDFPage *)page
-     {
-         return [self convertRect:[self convertRect:rect fromPage:page] toPage:page];
-     }
-     
-     - (CPDFAnnotation *)addRedactPDFSelection:(CPDFSelection *)currentSelection
-     {
-         NSMutableArray *quadrilateralPoints = [NSMutableArray array];
-         CPDFRedactAnnotation *annotation = [[CPDFRedactAnnotation alloc] initWithDocument:self.document];
-         for (CPDFSelection *selection in currentSelection.selectionsByLine) {
-             CGRect bounds = selection.bounds;
-             [quadrilateralPoints addObject:[NSValue valueWithPoint:CGPointMake(CGRectGetMinX(bounds), CGRectGetMaxY(bounds))]];
-             [quadrilateralPoints addObject:[NSValue valueWithPoint:CGPointMake(CGRectGetMaxX(bounds), CGRectGetMaxY(bounds))]];
-             [quadrilateralPoints addObject:[NSValue valueWithPoint:CGPointMake(CGRectGetMinX(bounds), CGRectGetMinY(bounds))]];
-             [quadrilateralPoints addObject:[NSValue valueWithPoint:CGPointMake(CGRectGetMaxX(bounds), CGRectGetMinY(bounds))]];
-         }
-         NSString *userName = [[NSUserDefaults standardUserDefaults] stringForKey:@"SKUserName"];
-         [annotation setUserName:userName ? : NSFullUserName()];
-         [annotation setModificationDate:[NSDate date]];
-         [annotation setQuadrilateralPoints:quadrilateralPoints];
-         [annotation setBorderWidth:10];
-         [(CPDFRedactAnnotation *)annotation setBorderColor:[KMPDFAnnotationRedactConfig sharedInstance].redactOutlineColor];
-         [(CPDFRedactAnnotation *)annotation setInteriorColor:[KMPDFAnnotationRedactConfig sharedInstance].redactFillColor];
-         [(CPDFRedactAnnotation *)annotation setFontColor:[KMPDFAnnotationRedactConfig sharedInstance].redactFontColor];
-         if([KMPDFAnnotationRedactConfig sharedInstance].overlayText) {
-             [(CPDFRedactAnnotation *)annotation setAlignment:[KMPDFAnnotationRedactConfig sharedInstance].textAlignment];
-             NSFont* font = [NSFont fontWithName:@"Helvetica" size:[KMPDFAnnotationRedactConfig sharedInstance].fontSize];
-             [(CPDFRedactAnnotation *)annotation setFont:font];
-             [(CPDFRedactAnnotation *)annotation setOverlayText:[KMPDFAnnotationRedactConfig sharedInstance].overlayTextString];
-         }
-         
-         return annotation;
-     }
-     
-     - (void)deleteAnnotation:(NSMenuItem *)item {
-         CPDFRedactAnnotation *annotation = item.representedObject;
-         if(annotation && [annotation isKindOfClass:[CPDFRedactAnnotation class]]) {
-             [annotation retain];
-             CPDFPage *page = [[annotation page] retain];
-             [self setNeedsDisplayAnnotationViewForPage:page];
-             [self removeAnnotation:annotation];
-             [annotation release];
-             [page release];
-         }
-     }
-
-     - (void)addAnnotation:(CPDFAnnotation *)annotation toPage:(CPDFPage *)page
-     {
-         [[[self undoManager] prepareWithInvocationTarget:self] removeAnnotation:annotation];
-         [page addAnnotation:annotation];
-         if([self.newAddAnnotation containsObject:annotation]) {
-             [self.newAddAnnotation removeObject:annotation];
-         } else {
-             [self.newAddAnnotation addObject:annotation];
-         }
-         [self setNeedsDisplayAnnotationViewForPage:page];
-         
-
-     }
-
-     - (void)removeAnnotation:(CPDFAnnotation *)annotation
-     {
-         CPDFAnnotation *wasAnnotation = [annotation retain];
-         CPDFPage *page = [[wasAnnotation page] retain];
-         
-         [[[self undoManager] prepareWithInvocationTarget:self] addAnnotation:wasAnnotation toPage:page];
-         
-         if([self.newAddAnnotation containsObject:annotation]) {
-             [self.newAddAnnotation removeObject:annotation];
-         } else {
-             [self.newAddAnnotation addObject:annotation];
-         }
-         if([self.activeAnnotations containsObject:annotation]) {
-             [self.activeAnnotations removeObject:annotation];
-         }
-         [self setNeedsDisplayAnnotationViewForPage:page];
-         [page removeAnnotation:wasAnnotation];
-
-         [wasAnnotation release];
-         [page release];
-     }
-     */
-}
-
-// MARK: - Event
-
-extension KMRedactPDFView {
-    func fontColorMenuItem() -> NSMenuItem {
-        let fontColorItem = NSMenuItem(title: KMLocalizedString("Text Color"), action: #selector(menuItemEditingClick_FontColor), keyEquivalent: "")
-        fontColorItem.target = self
-        return fontColorItem
-    }
-    
-    @objc func menuItemEditingClick_FontColor(_ sender: NSMenuItem?) {
-        let color = self.editingSelectionFontColor()
-        let cp = NSColorPanel.shared
-        cp.orderFront(nil)
-        cp.setTarget(self)
-        cp.color = color!
-        cp.showsAlpha = false
-        cp.setAction(#selector(fontColorChangeAction))
-    }
-    
-    @objc func fontColorChangeAction(_ sender: AnyObject?) {
-        self.setEditingSelectionFontColor(NSColorPanel.shared.color)
-        guard let callback = self.eventColorChanged else {
-            return
-        }
-        callback(NSColorPanel.shared.color)
-    }
-    
-    func fontSizeMenuItem() -> NSMenuItem {
-        let size = self.editingSelectionFontSize()
-        let fontSizes = self.fontSizes()
-        let submenu = NSMenu()
-        for (i,fontSize) in fontSizes.enumerated() {
-            let fs: CGFloat = fontSize.stringToCGFloat()
-            let item = NSMenuItem(title: String(format: "%d pt", fs), action: #selector(menuItemEditingClick_FontSize), keyEquivalent: "")
-            item.target = self
-            item.tag = i
-            submenu.addItem(item)
-            if (fabsf(Float(fs-size)) < 0.1) {
-                item.state = .on
-            }
-        }
-        
-        let fontSizeItem = NSMenuItem(title: KMLocalizedString("Font Size"), action: nil, keyEquivalent: "")
-        fontSizeItem.submenu = submenu
-        return fontSizeItem
-    }
-    
-    func fontSizes() -> [String] {
-        return ["6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "24", "36", "48", "72", "96", "144", "288"]
-    }
-    
-    @objc func menuItemEditingClick_FontSize(_ item: NSMenuItem) {
-        let fontSize = self.fontSizes()[item.tag].stringToCGFloat()
-        self.setEditingSelectionFontSize(fontSize)
-        guard let callback = self.eventFontChanged else {
-            return
-        }
-        callback()
-    }
-    
-    func imageExportMenuItem() -> NSMenuItem {
-        let submenu = NSMenu()
-        for (i, title) in self.titles().enumerated() {
-            let item = NSMenuItem(title: title, action: #selector(menuItemEditingClick_export), keyEquivalent: "")
-            item.tag = i
-            submenu.addItem(item)
-        }
-        let exportmentItem = NSMenuItem(title: KMLocalizedString("Export"), action: nil, keyEquivalent: "")
-        exportmentItem.submenu = submenu
-        return exportmentItem
-    }
-    
-    func titles() -> [String] {
-        return ["PNG", "JPG", "PDF"]
-    }
-    
-    @objc func menuItemEditingClick_export(_ item: NSMenuItem) {
-        let idx = item.tag
-        guard let callback = self.exportBtnTaped else {
-            return
-        }
-        callback(idx)
-    }
-    
-    func imageRotateMenuItem() -> NSMenuItem {
-        let item = NSMenuItem(title: KMLocalizedString("Rotate"), action: #selector(menuItemEditingClick_RotateImage), keyEquivalent: "")
-        item.target = self
-        return item
-    }
-    
-    @objc func menuItemEditingClick_RotateImage(_ iten: NSMenuItem) {
-        self.rotate(with: self.editingArea() as? CPDFEditImageArea, rotate: 90)
-    }
-    
-    /*
-     - (NSMenuItem *)alightMenuItem {
-         NSMenu *submenu = [[[NSMenu alloc] init] autorelease];
-         
-         NSArray *titles = @[NSLocalizedString(@"Left Alignment"),
-                             NSLocalizedString(@"Right Alignment"),
-                             NSLocalizedString(@"Center"),
-                             NSLocalizedString(@"Justified Alignment"),];
-         NSTextAlignment alignment = [self editingSelectionAlignment];
-         for (NSUInteger i=0; i<titles.count; i++) {
-             NSMenuItem *item = [[[NSMenuItem alloc] initWithTitle:[titles objectAtIndex:i]
-                                                            action:@selector(menuItemEditingClick_alignment:)
-                                                     keyEquivalent:@""] autorelease];
-             if (alignment == i) {
-                 item.state = NSControlStateValueOn;
-             }
-             item.tag = i;
-             [submenu addItem:item];
-         }
-         
-         NSMenuItem *alignmentItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"Text Alignment") action:nil keyEquivalent:@""];
-         alignmentItem.submenu = submenu;
-         
-         return alignmentItem;
-     }
-     
-     - (void)menuItemEditingClick_alignment:(NSMenuItem *)item {
-         [self setCurrentSelectionAlignment:(NSTextAlignment)item.tag];
-     }
-     
-     - (NSMenuItem *)imageCutMenuItem {
-         NSMenuItem *fontColorItem = [[[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"Cut")
-                                                                 action:@selector(menuItemEditingClick_CutImage:)
-                                                          keyEquivalent:@""] autorelease];
-         fontColorItem.target = self;
-         return fontColorItem;
-     }
-
-     - (NSMenuItem *)imagePasteMenuItem {
-         NSMenuItem *fontColorItem = [[[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"Paste")
-                                                                 action:@selector(menuItemEditingClick_PasteImage:)
-                                                          keyEquivalent:@""] autorelease];
-         fontColorItem.target = self;
-         return fontColorItem;
-     }
-     - (void)menuItemEditingClick_CutImage:(NSMenuItem *)item {
-         
-     }
-
-     - (void)menuItemEditingClick_PasteImage:(NSMenuItem *)item {
-         
-     }
-     */
-}
-

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

@@ -2362,7 +2362,7 @@ static inline CPDFAreaOfInterest CAreaOfInterestForResizeHandle(CRectEdges mask,
 
 - (CPDFRedactAnnotation *)addWhiteRedactPDFSelection:(CPDFSelection *)currentSelection {
     NSMutableArray *quadrilateralPoints = [NSMutableArray array];
-    CPDFRedactAnnotation *annotation = [[KMPDFWhiteOutRedactAnnotation alloc] initWithPDFListViewNoteWith:self.document];
+    CPDFRedactAnnotation *annotation = [[CPDFRedactAnnotation alloc] initWithPDFListViewNoteWith:self.document];
     for (CPDFSelection *selection in currentSelection.selectionsByLine) {
         CGRect bounds = selection.bounds;
         CGRect theBounds = CGRectInset(bounds, -2, -3);

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

@@ -568,24 +568,12 @@ extension KMMainViewController: KMSystemPDFMenuProtocol {
         if (self.listView.canZoomIn) {
             self.listView.zoomIn(nil)
         }
-        
-        if self.redactController?.redactPdfView != nil {
-            if (self.redactController?.redactPdfView.canZoomIn) == true {
-                self.redactController?.redactPdfView.zoomIn(nil)
-            }
-        }
     }
     
     func doZoomOut(_ sender: Any?) {
         if (self.listView.canZoomOut) {
             self.listView.zoomOut(nil)
         }
-        
-        if self.redactController?.redactPdfView != nil {
-            if (self.redactController?.redactPdfView.canZoomOut) == true {
-                self.redactController?.redactPdfView.zoomOut(nil)
-            }
-        }
     }
     
     func doMarqueeZoomTool(_ sender: Any?) {
@@ -1184,7 +1172,7 @@ extension KMMainViewController {
             menuItem.action == #selector(menuItemAction_lastPage) ||
             menuItem.action == #selector(menuItemAction_forward) ||
             menuItem.action == #selector(menuItemAction_goback)) {
-            if self.hasEnterPageEdit() {
+            if viewManager.isPageEditMode == true {
                 return false
             }
             if (menuItem.action == #selector(menuItemAction_nextPage)) {

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

@@ -81,9 +81,7 @@ extension KMMainViewController {
     
     override func interfaceThemeDidChanged(_ appearance: NSAppearance.Name) {
         super.interfaceThemeDidChanged(appearance)
-        
-        self.pdfEditController?.interfaceThemeDidChanged(appearance)
-        
+                
     }
 }
 

+ 2 - 221
PDF Office/PDF Master/KMClass/KMPDFViewController/KMMainViewController.swift

@@ -162,9 +162,7 @@ struct KMNMWCFlags {
     
     var currentWindowController: NSWindowController!
     var savedNormalSetup: NSMutableDictionary = NSMutableDictionary()
-        
-    var redactController: KMPDFRedactViewController!
-    
+            
     let CPDFOfficeLeftSidePaneWidthKey = "CPDFOfficeLeftSidePaneWidthKey"
     let CPDFOfficeRightSidePaneWidthKey = "CPDFOfficeRightSidePaneWidthKey"
     
@@ -183,12 +181,6 @@ struct KMNMWCFlags {
     
     var pageNumber: UInt?
     
-    var pdfEditController: KMPDFEditViewController? {
-        get {
-            return self.getPDFEditController()
-        }
-    }
-    
     var autoSaveTimer: Timer?
     private var _documentFirstLoad: Bool = true
     
@@ -4408,100 +4400,6 @@ extension KMMainViewController {
         }
     }
     
-    
-    // MARK: - 标记密文
-    
-    func enterRedact() {
-        if !IAPProductsManager.default().isAvailableAllFunction(){
-            let winC = KMPurchaseCompareWindowController.sharedInstance()
-            winC?.kEventName = "Reading_Redact_BuyNow"
-            winC?.showWindow(nil)
-            return
-        }
-        
-        if self.listView.document?.allowsPrinting == false || self.listView.document?.allowsCopying == false {
-            Task {
-                _ = await KMAlertTool.runModel(message: KMLocalizedString("This is a secured document. Editing is not permitted."))
-            }
-            return
-        }
-        
-        if self.hasEnterRedact() {
-            self.exitRedact()
-            return
-        }
-        
-        
-        let ttsWindowC = KMTTSWindowController.share
-        if ttsWindowC.pdfView?.document?.documentURL.path == self.listView.document?.documentURL.path {
-            if let data = ttsWindowC.window?.isVisible, data {
-                ttsWindowC.stopSpeaking()
-                ttsWindowC.close()
-            }
-        }
-        NSColorPanel.shared.showsAlpha = false
-        
-        redactController = KMPDFRedactViewController(url: self.listView.document!.documentURL, password: self.listView.document?.password)
-        self.addChild(redactController)
-        redactController.view.autoresizingMask = [.width, .height]
-        self.listView.isHidden = true
-        
-        redactController.scaleFactor = self.listView.scaleFactor
-        redactController.titleBack = { [weak self] title in
-            self?.view.window?.title = title
-        }
-        redactController.callback = { [weak self] result, currentPageIndex, saveResult, saveUrl in
-            self?.listView.go(toPageIndex: self!.redactController.redactPdfView.currentPageIndex, animated: false)
-            
-            if result == false { // 退出
-                self?.exitRedact()
-                return
-            }
-            let controller = self?._getPDFRedactController()
-            controller?.redactPdfView.newAddAnnotation.removeAll()
-            self?.exitRedact()
-            if saveResult {
-                let newDocument = CPDFDocument(url: saveUrl)
-                if let data = newDocument?.isLocked, data {
-                    newDocument?.unlock(withPassword: self?.listView.document?.password ?? "")
-                }
-                self?.document = newDocument
-                self?.listView.document = newDocument
-                self?.listView.layoutDocumentView()
-            }
-        }
-        redactController.setCurrentPageIndex(self.listView.currentPageIndex)
-    }
-    
-    func exitRedact() {
-    
-        
-        let controller = self._getPDFRedactController()
-        if let data = controller {
-            if data.redactPdfView.newAddAnnotation.count > 0 {
-                KMAlertTool.runModel(message: "", informative: KMLocalizedString("There are unapplied redactions in this file. Exit will not save redaction."), buttons: [KMLocalizedString("Exit"), KMLocalizedString("Cancel")]) { response in
-                    if response == .alertFirstButtonReturn {
-                        controller?.redactPdfView.newAddAnnotation.removeAll()
-                        self.exitRedact()
-                    }
-                }
-                return
-            }
-        }
-        NSColorPanel.shared.showsAlpha = true
-        controller?.redactPdfView.resignMonitor()
-        
-        controller?.view.removeFromSuperview()
-        controller?.removeFromParent()
-        
-        self.listView.isHidden = false
-        self.listView.annotationType = .unkown
-    }
-    
-    func hasEnterRedact() -> Bool {
-        return self._getPDFRedactController() != nil
-    }
-    
     //MARK: - AI
     
     func showAITypeChooseView(aiConfigType: AIConfigType) -> Void {
@@ -4742,126 +4640,9 @@ extension KMMainViewController {
         }
 #endif
     }
-    
-    // MARK: - 页面编辑
-    
-    open func enterPageEdit(_ pages: [Int] = []) {
-        if let doc = self.listView.document {
-            if doc.allowsCopying == false || doc.allowsPrinting == false {
-                KMBaseWindowController.checkPassword(url: doc.documentURL, type: .owner) { result, pwd in
-                    if result && pwd.isEmpty == false {
-                        self.listView.document?.unlock(withPassword: pwd)
-                        
-                        Task { @MainActor in
-                            self.enterPageEdit(pages)
-                        }
-                    } else {
-                        self.exitPageEdit()
-                    }
-                }
-                return
-            }
-        }
-        //选中page
-        var tPages = pages
-        if tPages.count == 0 {
-            
-        }
-        
-        if (hasEnterPageEdit()) {
-            exitPageEdit()
-            return
-        }
-        
-        
-        
-        
-        let controller = KMPDFEditViewController(self.listView.document)
-        
-        controller.selectedPages = tPages
-        controller.listView = self.listView
-        self.addChild(controller)
-        
-        controller.view.autoresizingMask = [.width,.height]
-        self.listView.isHidden = true
-        
-        controller.itemClick = { [weak self] index, params in
-            if (index == 1) { /// 双击退出
-               
-                DispatchQueue.main.async {
-                    let pageIndex: Int = params.first as! Int
-                    self?.listView.go(toPageIndex: pageIndex, animated: true)
-                }
-            } else if (index == 2) { // 打印
-                self?.showPrintWindow(pageRange: KMPrintPageRange(type: .custom, selectPages: params.first as! [Int]))
-            }
-        }
-        controller.documentEditedCallback = { [weak self] params in
-            self?.recordIsPDFDocumentEdited()
-        }
-        
-        controller.selectionDidChange = { selectedIndexs in
-            var indexSet = IndexSet()
-            for indexPath in selectedIndexs {
-                indexSet.insert(indexPath.item)
-            }
-            if indexSet.count != 0 {
-            }
-        }
-    }
-    
-    open func exitPageEdit() {
-        
-        let editController = getPDFEditController()
-        if (editController == nil) {
-            return
-        }
-        self.listView.annotationType = .highlight
-        
-        // FIXME: - sdk修复插入特定文档crash后,这行代码可以去掉
- 
-        editController?.view.removeFromSuperview()
-        editController?.removeFromParent()
-        
-        self.listView.isHidden = false
-        self.listView.layoutDocumentView()
-        self.view.window?.makeFirstResponder(self.listView)
-        
-        self.listView.annotationType = .unkown
-        
-        self.listView.go(toPageIndex: editController!.listViewCurrentIndex, animated: false)
-        
-         
-    }
-    
-    open func hasEnterPageEdit() -> Bool {
-        return self.getPDFEditController() != nil
-    }
      
     // MARK: - Private Methods
-    
-    private func getPDFEditController() -> KMPDFEditViewController? {
-        var editController: KMPDFEditViewController?
-        for controller in self.children {
-            if (controller.isKind(of: KMPDFEditViewController.self)) {
-                editController = (controller as! KMPDFEditViewController)
-                break
-            }
-        }
-        return editController
-    }
-    
-    private func _getPDFRedactController() -> KMPDFRedactViewController? {
-        var controller: KMPDFRedactViewController?
-        for childC in self.children {
-            if (childC.isKind(of: KMPDFRedactViewController.self)) {
-                controller = (childC as! KMPDFRedactViewController)
-                break
-            }
-        }
-        return controller
-    }
-    
+        
     private func addBackgroundMaskView() {
        
         

+ 0 - 40
PDF Office/PDF Reader Pro.xcodeproj/project.pbxproj

@@ -2376,12 +2376,6 @@
 		BB1E7F302B511079002D9785 /* SKInspectPublicTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1E7F2F2B511079002D9785 /* SKInspectPublicTool.swift */; };
 		BB1E7F312B511079002D9785 /* SKInspectPublicTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1E7F2F2B511079002D9785 /* SKInspectPublicTool.swift */; };
 		BB1E7F322B511079002D9785 /* SKInspectPublicTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1E7F2F2B511079002D9785 /* SKInspectPublicTool.swift */; };
-		BB1EC7FE2967B26700EC0BC3 /* KMPDFEditViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1EC7FC2967B26700EC0BC3 /* KMPDFEditViewController.swift */; };
-		BB1EC7FF2967B26700EC0BC3 /* KMPDFEditViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1EC7FC2967B26700EC0BC3 /* KMPDFEditViewController.swift */; };
-		BB1EC8002967B26700EC0BC3 /* KMPDFEditViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1EC7FC2967B26700EC0BC3 /* KMPDFEditViewController.swift */; };
-		BB1EC8012967B26700EC0BC3 /* KMPDFEditViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB1EC7FD2967B26700EC0BC3 /* KMPDFEditViewController.xib */; };
-		BB1EC8022967B26700EC0BC3 /* KMPDFEditViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB1EC7FD2967B26700EC0BC3 /* KMPDFEditViewController.xib */; };
-		BB1EC8032967B26700EC0BC3 /* KMPDFEditViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB1EC7FD2967B26700EC0BC3 /* KMPDFEditViewController.xib */; };
 		BB234F042BA3D798008B3754 /* KMAIIconGuideView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB234F022BA3D798008B3754 /* KMAIIconGuideView.xib */; };
 		BB234F052BA3D798008B3754 /* KMAIIconGuideView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB234F022BA3D798008B3754 /* KMAIIconGuideView.xib */; };
 		BB234F062BA3D798008B3754 /* KMAIIconGuideView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB234F022BA3D798008B3754 /* KMAIIconGuideView.xib */; };
@@ -2561,15 +2555,6 @@
 		BB3D076C2CD08FDB00EB94DF /* KMSplitPDFViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB3D07682CD08FDB00EB94DF /* KMSplitPDFViewController.xib */; };
 		BB3D076D2CD08FDB00EB94DF /* KMSplitPDFViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB3D07682CD08FDB00EB94DF /* KMSplitPDFViewController.xib */; };
 		BB3D076E2CD08FDB00EB94DF /* KMSplitPDFViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB3D07682CD08FDB00EB94DF /* KMSplitPDFViewController.xib */; };
-		BB3D970A2B2FEAC8007094C8 /* KMPDFRedactViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB3D97092B2FEAC8007094C8 /* KMPDFRedactViewController.swift */; };
-		BB3D970B2B2FEAC8007094C8 /* KMPDFRedactViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB3D97092B2FEAC8007094C8 /* KMPDFRedactViewController.swift */; };
-		BB3D970C2B2FEAC8007094C8 /* KMPDFRedactViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB3D97092B2FEAC8007094C8 /* KMPDFRedactViewController.swift */; };
-		BB3D970E2B2FEAF9007094C8 /* KMPDFRedactViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB3D970D2B2FEAF7007094C8 /* KMPDFRedactViewController.xib */; };
-		BB3D970F2B2FEAF9007094C8 /* KMPDFRedactViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB3D970D2B2FEAF7007094C8 /* KMPDFRedactViewController.xib */; };
-		BB3D97102B2FEAF9007094C8 /* KMPDFRedactViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB3D970D2B2FEAF7007094C8 /* KMPDFRedactViewController.xib */; };
-		BB3D97122B301CF1007094C8 /* KMRedactPDFView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB3D97112B301CF1007094C8 /* KMRedactPDFView.swift */; };
-		BB3D97132B301CF1007094C8 /* KMRedactPDFView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB3D97112B301CF1007094C8 /* KMRedactPDFView.swift */; };
-		BB3D97142B301CF1007094C8 /* KMRedactPDFView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB3D97112B301CF1007094C8 /* KMRedactPDFView.swift */; };
 		BB3D97162B3023C5007094C8 /* KMCustomButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB3D97152B3023C5007094C8 /* KMCustomButton.swift */; };
 		BB3D97172B3023C5007094C8 /* KMCustomButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB3D97152B3023C5007094C8 /* KMCustomButton.swift */; };
 		BB3D97182B3023C5007094C8 /* KMCustomButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB3D97152B3023C5007094C8 /* KMCustomButton.swift */; };
@@ -5513,8 +5498,6 @@
 		BB1D41D22B26D9BD00994EDC /* KMReusable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMReusable.swift; sourceTree = "<group>"; };
 		BB1E7F2B2B4FE2C6002D9785 /* GuideInfoImages.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = GuideInfoImages.xcassets; sourceTree = "<group>"; };
 		BB1E7F2F2B511079002D9785 /* SKInspectPublicTool.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SKInspectPublicTool.swift; sourceTree = "<group>"; };
-		BB1EC7FC2967B26700EC0BC3 /* KMPDFEditViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPDFEditViewController.swift; sourceTree = "<group>"; };
-		BB1EC7FD2967B26700EC0BC3 /* KMPDFEditViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMPDFEditViewController.xib; sourceTree = "<group>"; };
 		BB234F022BA3D798008B3754 /* KMAIIconGuideView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KMAIIconGuideView.xib; sourceTree = "<group>"; };
 		BB234F032BA3D798008B3754 /* KMAIIconGuideView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KMAIIconGuideView.swift; sourceTree = "<group>"; };
 		BB24D4A52977BE6700041659 /* KMRedactConfirmWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMRedactConfirmWindowController.swift; sourceTree = "<group>"; };
@@ -5578,9 +5561,6 @@
 		BB3AD6F829935483004FC1AE /* Reachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Reachability.h; sourceTree = "<group>"; };
 		BB3D07672CD08FDB00EB94DF /* KMSplitPDFViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMSplitPDFViewController.swift; sourceTree = "<group>"; };
 		BB3D07682CD08FDB00EB94DF /* KMSplitPDFViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMSplitPDFViewController.xib; sourceTree = "<group>"; };
-		BB3D97092B2FEAC8007094C8 /* KMPDFRedactViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPDFRedactViewController.swift; sourceTree = "<group>"; };
-		BB3D970D2B2FEAF7007094C8 /* KMPDFRedactViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KMPDFRedactViewController.xib; sourceTree = "<group>"; };
-		BB3D97112B301CF1007094C8 /* KMRedactPDFView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMRedactPDFView.swift; sourceTree = "<group>"; };
 		BB3D97152B3023C5007094C8 /* KMCustomButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMCustomButton.swift; sourceTree = "<group>"; };
 		BB3D97192B3060B5007094C8 /* KMPDFAnnotationRedactConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPDFAnnotationRedactConfig.swift; sourceTree = "<group>"; };
 		BB403BA92B15CA6E00B3106D /* KMBatchConvertOperation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBatchConvertOperation.swift; sourceTree = "<group>"; };
@@ -9774,8 +9754,6 @@
 		BB1EC7FB2967B24100EC0BC3 /* Controller */ = {
 			isa = PBXGroup;
 			children = (
-				BB1EC7FC2967B26700EC0BC3 /* KMPDFEditViewController.swift */,
-				BB1EC7FD2967B26700EC0BC3 /* KMPDFEditViewController.xib */,
 			);
 			path = Controller;
 			sourceTree = "<group>";
@@ -10098,7 +10076,6 @@
 				BB4EEF4B2976544F003A3537 /* KMRedactAligementView.swift */,
 				BBB14A5A2978EBBE00936EDB /* KMRedactMutilPageFlagContentView.swift */,
 				BBB14A6229792D6900936EDB /* KMRedactPageRangeContentView.swift */,
-				BB3D97112B301CF1007094C8 /* KMRedactPDFView.swift */,
 				BB3D97152B3023C5007094C8 /* KMCustomButton.swift */,
 			);
 			path = View;
@@ -10153,8 +10130,6 @@
 		BB3D97082B2FEA9E007094C8 /* Controller */ = {
 			isa = PBXGroup;
 			children = (
-				BB3D97092B2FEAC8007094C8 /* KMPDFRedactViewController.swift */,
-				BB3D970D2B2FEAF7007094C8 /* KMPDFRedactViewController.xib */,
 			);
 			path = Controller;
 			sourceTree = "<group>";
@@ -13084,7 +13059,6 @@
 				BB1B0AC22B4FC6E900889528 /* KMFunctionGuideWindowController.xib in Resources */,
 				BBBE20972B21B1DF00509C4E /* KMPDFInsertWindowController.xib in Resources */,
 				9F00CF542A38657400AC462E /* GoogleService-Info.plist in Resources */,
-				BB1EC8012967B26700EC0BC3 /* KMPDFEditViewController.xib in Resources */,
 				AD1D48132AFB1912007AC1F0 /* KMCompressView.xib in Resources */,
 				BBC5ABDA2D01C411008BA0CB /* KMSignatureListController.xib in Resources */,
 				BBA19F3629ADACC5001A285A /* signPicture_nor.pdf in Resources */,
@@ -13128,7 +13102,6 @@
 				BBE7888D2CBD2463008086E2 /* TabbarDemoVC.xib in Resources */,
 				AD1CA4142A061CCD0070541F /* KMAnnotationScreenColorViewItem.xib in Resources */,
 				9F853A022947137500DF644E /* default-icon.pdf in Resources */,
-				BB3D970E2B2FEAF9007094C8 /* KMPDFRedactViewController.xib in Resources */,
 				BB3D076C2CD08FDB00EB94DF /* KMSplitPDFViewController.xib in Resources */,
 				ADBC2CF5299C7B3E006280C8 /* Print.xcassets in Resources */,
 				F337CC3F2CC78B9400D46AF4 /* KMNThumbnailImage.xcassets in Resources */,
@@ -13418,7 +13391,6 @@
 				9F94747C29FA22700042F949 /* InfoPlist.strings in Resources */,
 				9F1FE4DF29406E4700E952CA /* .gclient in Resources */,
 				AD055E292B70B3C10035F824 /* KMBookmarkController.xib in Resources */,
-				BB3D970F2B2FEAF9007094C8 /* KMPDFRedactViewController.xib in Resources */,
 				BB451A7E2CF59EBC003E1565 /* KMHighlightController.xib in Resources */,
 				BB69C960299116FD0001A9B1 /* plaid.pdf in Resources */,
 				BB8810622B4F74DD00AFA63E /* KMRepeatTrialAlertController.xib in Resources */,
@@ -13560,7 +13532,6 @@
 				BB234F052BA3D798008B3754 /* KMAIIconGuideView.xib in Resources */,
 				BB52F5712CC236A2007418DB /* KMLinkEmailView.xib in Resources */,
 				ADFA8F162B60E02B002595A4 /* KMSecureAlertView.xib in Resources */,
-				BB1EC8022967B26700EC0BC3 /* KMPDFEditViewController.xib in Resources */,
 				9FF371E02C69B93E005F9CC5 /* CAreaSettingWindowController.xib in Resources */,
 				AD1D48532AFB8510007AC1F0 /* KMMergeTableViewCell.xib in Resources */,
 				ADBC2CFF299CA6C7006280C8 /* KMPrintDuplexPrintingSetView.xib in Resources */,
@@ -13951,7 +13922,6 @@
 				BBE788CB2CBD2463008086E2 /* ListVC.xib in Resources */,
 				AD58F41C2B1DAC1500299EE0 /* KMPrintSettingView.xib in Resources */,
 				653647792CDCA47300CDB13E /* KMBatchOperateImageToPDFViewController.xib in Resources */,
-				BB1EC8032967B26700EC0BC3 /* KMPDFEditViewController.xib in Resources */,
 				ADDF83852B391A5D00A81A4E /* DSignatureSaveTypeViewController.xib in Resources */,
 				BBD8EE9B2B8EC86A00EB05FE /* AutoSaveFileItem.xib in Resources */,
 				BBD1F781296F9BE000343885 /* KMPageEditSettingBaseWindowController.xib in Resources */,
@@ -14100,7 +14070,6 @@
 				BB0308612CC7A40A00F4AAC7 /* KMPDFSideBarController.xib in Resources */,
 				BB1B0B092B4FC6E900889528 /* KMGuideCoverView.xib in Resources */,
 				ADE86A8F2B02269400414DFA /* KMRemovePasswordWindowController.xib in Resources */,
-				BB3D97102B2FEAF9007094C8 /* KMPDFRedactViewController.xib in Resources */,
 				BB043F502D018487000244A2 /* KMStampListItem.xib in Resources */,
 				AD1CA4262A061D190070541F /* KMAnnotationScreenAuthorViewItem.xib in Resources */,
 				BB4F7E9B2B0C858D0077EC8C /* KMNoteTypeCollectionViewItem.xib in Resources */,
@@ -14534,7 +14503,6 @@
 				BB981E522AD4F638001988CA /* KMCoverButton.swift in Sources */,
 				9F53D5472AD664C300CCF9D8 /* CPDFListHoverAnnotationViewController.swift in Sources */,
 				BB4A949B2B04B77F00940F8B /* KMOCROperation.swift in Sources */,
-				BB1EC7FE2967B26700EC0BC3 /* KMPDFEditViewController.swift in Sources */,
 				BB5F8A1F29BB15AD00365ADB /* KMEmailSubWindowController.m in Sources */,
 				BB8115FF2992682F0008F536 /* KMSecureLimitAlertView.swift in Sources */,
 				ADDEEA662AD3C4BE00EF675D /* KMPDFSignatureImageView.swift in Sources */,
@@ -14601,7 +14569,6 @@
 				BBBBB4992B6F714000C7205E /* NSObject+OCExtensions.m in Sources */,
 				9F0201792A1B5C0300C9B673 /* KMAIServerConfig.swift in Sources */,
 				BB1969E02B2856A900922736 /* KMSnapshotPDFView.swift in Sources */,
-				BB3D97122B301CF1007094C8 /* KMRedactPDFView.swift in Sources */,
 				9F1FE4F329406E4700E952CA /* FastResizeView.m in Sources */,
 				AD1D483A2AFB81ED007AC1F0 /* KMMergeBlankView.swift in Sources */,
 				9F1FE4FC29406E4700E952CA /* CTTabStripController.m in Sources */,
@@ -15191,7 +15158,6 @@
 				BB04FD0C2B206F3600D80F7B /* KMPlanViewController.swift in Sources */,
 				AD1FE8352BD7C98300AA4A9B /* KMPDFPrintManageWindowController.m in Sources */,
 				AD7D5C9B2B8F20FE006562CD /* synctex_parser.m in Sources */,
-				BB3D970A2B2FEAC8007094C8 /* KMPDFRedactViewController.swift in Sources */,
 				BB1B0ACE2B4FC6E900889528 /* KMFunctionGuideMultiController.swift in Sources */,
 				9F1FE49929406E4700E952CA /* NewTabButton.m in Sources */,
 				9FCFECA82AD243C900EAD2CB /* KMBlankView.swift in Sources */,
@@ -15326,7 +15292,6 @@
 				BBF729902B1960FF00576AC5 /* KMCompressOperationQueue.swift in Sources */,
 				BB9599CC2B3184230062D346 /* KMRedactSelectPagesWindowController.swift in Sources */,
 				656C1E3E2CD0745200295F82 /* KMConvertExcelSettingView.swift in Sources */,
-				BB3D97132B301CF1007094C8 /* KMRedactPDFView.swift in Sources */,
 				BB853C7E2AF8B5D6009C20C1 /* KMBatchOperateAddPasswordViewController.swift in Sources */,
 				BBE788AC2CBD2463008086E2 /* CheckBoxVC.swift in Sources */,
 				BBE068A32CDDF149000512BC /* KMBatesTemplateItem.swift in Sources */,
@@ -15547,7 +15512,6 @@
 				BB6013892AD3A3CB00A76FB2 /* CPDFWidgetAnnotation+PDFListView.swift in Sources */,
 				ADAAC1652BD645DB001F2DA6 /* KMRecommondPopWindow.m in Sources */,
 				BBF729A82B19627500576AC5 /* KMRemoveBackgroundOperationQueue.swift in Sources */,
-				BB1EC7FF2967B26700EC0BC3 /* KMPDFEditViewController.swift in Sources */,
 				BB5F8A2029BB15AD00365ADB /* KMEmailSubWindowController.m in Sources */,
 				BB981E562AD4F638001988CA /* KMPageIndicator.swift in Sources */,
 				AD055E4B2B72346E0035F824 /* KMBookmarkSheetView.swift in Sources */,
@@ -15700,7 +15664,6 @@
 				F3A65ECE2CDF19C300F00102 /* KMNThumDecorationView.swift in Sources */,
 				89D2D2FC294C806000BFF5FE /* KMPDFThumbnailItem.swift in Sources */,
 				BBBE68152CC7C02800358B31 /* KMPDFViewManager.swift in Sources */,
-				BB3D970B2B2FEAC8007094C8 /* KMPDFRedactViewController.swift in Sources */,
 				AD8E489E2D1542510055D3E6 /* KMOCRAreaView.swift in Sources */,
 				ADDF83302B391A5C00A81A4E /* NSGeometry+PDFListView.m in Sources */,
 				6578517E2CFEE4850023D640 /* KMNSearchReplaceSearchItemView.swift in Sources */,
@@ -16273,7 +16236,6 @@
 				BB83B8EE2BA8415A00EFF584 /* KMPageEditExtractWindowController.swift in Sources */,
 				AD1D48232AFB6BBA007AC1F0 /* KMMergeView.swift in Sources */,
 				BB403BAC2B15CA6E00B3106D /* KMBatchConvertOperation.swift in Sources */,
-				BB1EC8002967B26700EC0BC3 /* KMPDFEditViewController.swift in Sources */,
 				9FB220F32B1863C800A5B208 /* KMAnnotationFromSignature.swift in Sources */,
 				AD1D480A2AFB18DA007AC1F0 /* KMCompressWindowController.swift in Sources */,
 				ADDF83252B391A5C00A81A4E /* CDSDrawView.m in Sources */,
@@ -16945,7 +16907,6 @@
 				ADAFDA2D2AE8DE1B00F084BC /* KMAdvertisementCache.swift in Sources */,
 				BB7BC4DA2AD3D6B700D6BEE6 /* PDFListView+KMExtensions.swift in Sources */,
 				BB2F78A82D01F9EF00F6B636 /* KMCreateSignWindowController.swift in Sources */,
-				BB3D970C2B2FEAC8007094C8 /* KMPDFRedactViewController.swift in Sources */,
 				BBB7B48F2A0384E100B58A5A /* NSCollectionViewItem+KMExtension.swift in Sources */,
 				BB0B30612D098AD8003F54D3 /* CPDFEditArea_Extension.swift in Sources */,
 				BB96A0B22AFCD56100559E24 /* KMToolCompareWindowController.swift in Sources */,
@@ -17067,7 +17028,6 @@
 				9FCFEC862AD0EF6700EAD2CB /* KMCustomButtonPopMenuViewController.swift in Sources */,
 				BB7289E22B8838D8004B53B5 /* KMDataManager.swift in Sources */,
 				BB4F7E8B2B0C55E70077EC8C /* KMFilterAuthorLabel.swift in Sources */,
-				BB3D97142B301CF1007094C8 /* KMRedactPDFView.swift in Sources */,
 				ADE86AF92B0AF59A00414DFA /* KMCompareContentSettingView.swift in Sources */,
 				BBE068942CDDF127000512BC /* KMBatesPropertyController.swift in Sources */,
 				BBF729A92B19627500576AC5 /* KMRemoveBackgroundOperationQueue.swift in Sources */,