Jelajahi Sumber

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

# Conflicts:
#	PDF Office/PDF Master/KMClass/Tools/CustomViews/Control/KMThumbnailView.swift
niehaoyu 2 bulan lalu
induk
melakukan
0f566a36f9

+ 0 - 140
PDF Office/PDF Master/Class/PDFTools/PageEdit/View/KMPageEditThumbnailView.swift

@@ -1,140 +0,0 @@
-//
-//  KMPageEditThumbnailView.swift
-//  PDF Reader Pro
-//
-//  Created by tangchao on 2023/1/6.
-//
-
-import Cocoa
-
-typealias KMPageEditThumbnailViewSelectionDidChange = (_ selectedIndexs: Set<IndexPath>) -> ()
-class KMPageEditThumbnailView: KMPDFThumbnailView {
-    var selectionDidChange: KMPageEditThumbnailViewSelectionDidChange?
-    
-    private let defaultItemSize = NSMakeSize(208, 294)
-    private var defaultThumbnailSzie: NSSize?
-    
-    var area: NSTrackingArea?
-    
-    override var selectionIndexPaths: Set<IndexPath> {
-        get {
-            return super.selectionIndexPaths
-        }
-        set {
-            super.selectionIndexPaths = newValue
-
-            // 通知外面
-            guard let callback = self.selectionDidChange else {
-                return
-            }
-            callback(self.collectionView.selectionIndexPaths)
-        }
-    }
-    
-    override func initDefaultValue() {
-        super.initDefaultValue()
-        
-        self.itemSize = NSMakeSize(208, 294)
-        self.defaultThumbnailSzie = self.thumbnailSzie
-        self.isShowPageSize = true
-        
-        self.collectionView.km.register(cell: KMPageEditThumbnailItem.self)
-        self.collectionView.allowsMultipleSelection = true
-    }
-    
-    func selectPages(at indexpaths: Set<IndexPath>) {
-        self.selectionIndexPaths = indexpaths
-    }
-    
-    public func canZoomOut() -> Bool {
-        return self.itemSize.width <= self.defaultItemSize.width
-    }
-    
-    public func zoomOut() {
-        if (self.canZoomOut() == false) {
-            return
-        }
-        let indexpaths = self.collectionView.selectionIndexPaths
-
-        if (self.itemSize.width < self.defaultItemSize.width) {
-            self.itemSize = self.defaultItemSize
-            self.thumbnailSzie = self.defaultThumbnailSzie!
-        } else if (self.itemSize.width == self.defaultItemSize.width) {
-            self.itemSize = NSSize(width: self.defaultItemSize.width*1.5, height: self.defaultItemSize.height*1.5)
-            self.thumbnailSzie = NSSize(width: self.defaultThumbnailSzie!.width*1.5, height: self.defaultThumbnailSzie!.height*1.5)
-        }
-        
-        self.reloadData()
-        self.collectionView.selectionIndexPaths = indexpaths
-    }
-    
-    public func canZoomIn() -> Bool {
-        return self.itemSize.width >= self.defaultItemSize.width
-    }
-    public func zoomIn() {
-        if (self.canZoomIn() == false) {
-            return
-        }
-        let indexpaths = self.collectionView.selectionIndexPaths
-
-        if (self.itemSize.width > self.defaultItemSize.width) {
-            self.itemSize = self.defaultItemSize
-            self.thumbnailSzie = self.defaultThumbnailSzie!
-        } else if (self.itemSize.width == self.defaultItemSize.width) {
-            self.itemSize = NSSize(width: self.defaultItemSize.width*0.5, height: self.defaultItemSize.height*0.5)
-            self.thumbnailSzie = NSSize(width: self.defaultThumbnailSzie!.width*0.5, height: self.defaultThumbnailSzie!.height*0.5)
-        }
-        
-        self.reloadData()
-        self.collectionView.selectionIndexPaths = indexpaths
-    }
-    
-    override func updateTrackingAreas() {
-        super.updateTrackingAreas()
-
-        if let _area = self.area, _area.rect.isEmpty == false {
-            if (_area.rect.equalTo(self.bounds)) {
-                return
-            }
-        }
-        
-        if (self.area != nil) {
-            self.removeTrackingArea(self.area!)
-            self.area = nil
-        }
-        
-        self.area = NSTrackingArea(rect: self.bounds, options: [.mouseEnteredAndExited, .mouseMoved, .activeAlways], owner: self)
-        self.addTrackingArea(self.area!)
-//        self.addTrackingRect(self.bounds, owner: self, userData: nil, assumeInside: false)
-    }
-    
-    override func mouseMoved(with event: NSEvent) {
-        super.mouseMoved(with: event)
-        
-        self.window?.mouseMoved(with: event)
-    }
-}
-
-extension KMPageEditThumbnailView {
-    override func collectionView(_ collectionView: NSCollectionView, didSelectItemsAt indexPaths: Set<IndexPath>) {
-        super.collectionView(collectionView, didSelectItemsAt: indexPaths)
-        
-        DispatchQueue.main.async {
-            guard let callback = self.selectionDidChange else {
-                return
-            }
-            callback(collectionView.selectionIndexPaths)
-        }
-    }
-    
-    override func collectionView(_ collectionView: NSCollectionView, didDeselectItemsAt indexPaths: Set<IndexPath>) {
-        super.collectionView(collectionView, didDeselectItemsAt: indexPaths)
-    
-        DispatchQueue.main.async {
-            guard let callback = self.selectionDidChange else {
-                return
-            }
-            callback(collectionView.selectionIndexPaths)
-        }
-    }
-}

File diff ditekan karena terlalu besar
+ 0 - 1217
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Thumbnail/Base/KMPDFThumbViewBaseController.swift


+ 0 - 303
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Thumbnail/KMPDFThumbnailItem.swift

@@ -1,303 +0,0 @@
-//
-//  KMPDFThumbnailItem.swift
-//  PDF Reader Pro
-//
-//  Created by lxy on 2022/12/16.
-//
-
-import Cocoa
-
-let pageBoxBorder = 5
-let textBoxSpace = 2
-let textLabelHeight = 15
-
-typealias KMPDFThumbnailItemMouseDown = (_ view: KMPDFThumbnailItem, _ event: NSEvent) -> Void
-typealias KMPDFThumbnailItemHover = (_ view: KMPDFThumbnailItem, _ mouseEntered: Bool) -> Void
-typealias KMPDFThumbnailItemRightMouseDown = (_ view: KMPDFThumbnailItem, _ event: NSEvent) -> Void
-
-class KMPDFThumbnailItem: NSCollectionViewItem {
-   lazy var pageBox : NSView = {
-       let pageBox = NSView()
-       pageBox.wantsLayer = true
-//       pageBox.layer?.borderWidth = 1
-//       pageBox.layer?.borderColor = NSColor.km_init(hex: "#CED0D4").cgColor
-//       pageBox.layer?.cornerRadius = 2.0
-//       pageBox.layer?.masksToBounds = true
-       
-       return pageBox
-   }()
-    
-    lazy var textBox : NSView = {
-        let textBox = NSView()
-        
-        return textBox
-    }()
-    
-    lazy var pageTextLabel : NSTextField = {
-        let pageTextLabel = NSTextField()
-        pageTextLabel.isEditable = false
-        pageTextLabel.isBordered = false
-        pageTextLabel.isSelectable = false
-        pageTextLabel.drawsBackground = false
-        pageTextLabel.font = NSFont.SFProTextRegularFont(14)
-        pageTextLabel.textColor = NSColor.km_init(hex: "#252629")
-        return pageTextLabel
-    }()
-    
-    lazy var pageSizeTextLabel : NSTextField = {
-        let pageSizeTextLabel = NSTextField()
-        pageSizeTextLabel.isEditable = false
-        pageSizeTextLabel.isBordered = false
-        pageSizeTextLabel.drawsBackground = false
-        pageSizeTextLabel.font = NSFont.SFProTextRegularFont(14)
-        pageSizeTextLabel.textColor = NSColor.km_init(hex: "#252629")
-        return pageSizeTextLabel
-    }()
-    
-    lazy var pageView = KMPDFThumbnialPageView()
-    
-    var page : CPDFPage = CPDFPage() {
-        didSet {
-            self.pageView.page = page
-            self.updatePageState(page: page)
-        }
-    }
-    
-    var thumbnailView : KMPDFThumbnailView = KMPDFThumbnailView()
-    
-    var mouseDownAction: KMPDFThumbnailItemMouseDown?
-    var rightMouseDownAction: KMPDFThumbnailItemRightMouseDown?
-    var hoverCallBack: KMPDFThumbnailItemHover?
-    
-    var contentBox: KMBox?
-    
-    //注释状态
-    var annotationShowState: KMAnnotationViewShowType = .none {
-        didSet {
-            if self.annotationShowState == .hidden {
-                for annotation in self.page.annotations {
-                    if annotation.annotationShouldDisplay() == false {
-                        annotation.setHidden(true)
-                    }
-
-                }
-            } else {
-                for annotation in self.page.annotations {
-                    annotation.setHidden(false)
-                }
-            }
-        }
-    }
-    
-    var hover: Bool = false {
-        didSet {
-            self.updateItemState()
-        }
-    }
-    
-    override init(nibName nibNameOrNil: NSNib.Name?, bundle nibBundleOrNil: Bundle?) {
-        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
-    }
-    
-    required init?(coder: NSCoder) {
-        fatalError("init(coder:) has not been implemented")
-    }
-    
-    override func viewDidLoad() {
-        super.viewDidLoad()
-        
-        self.view.addSubview(self.pageBox)
-        self.view.wantsLayer = true
-        self.view.layer?.cornerRadius = 8.0
-        self.view.layer?.masksToBounds = true
-        self.view.layer?.borderWidth = 1.0
-        
-        self.isSelected = false
-        
-        self.pageBox.addSubview(pageView)
-        
-        self.view.addSubview(self.textBox)
-        self.textBox.addSubview(self.pageTextLabel)
-        self.textBox.addSubview(self.pageSizeTextLabel)
-        
-        self.addContentBox()
-    }
-    
-    //MARK: Accessors
-    override var isSelected: Bool {
-        get {
-            return super.isSelected
-        }
-        set {
-            super.isSelected = newValue
-//            if (newValue) {
-//                self.view.layer?.backgroundColor = NSColor.km_init(hex: "#CED0D4", alpha: 0.6).cgColor
-//                self.view.layer?.borderColor = NSColor.km_init(hex: "#CED0D4").cgColor
-//            } else {
-//                self.view.layer?.backgroundColor = NSColor.clear.cgColor
-//                self.view.layer?.borderColor = NSColor.clear.cgColor
-//            }
-            self.updateItemState()
-        }
-    }
-    
-    func updatePageState(page: CPDFPage!) {
-        if page != nil {
-            let index = page.document.index(for: page) + 1
-            self.pageTextLabel.stringValue = "\(index)"
-            
-            let bounds = self.page.bounds
-            let rect = self.page.bounds(for: .cropBox)
-            let width = KMPageSizeTool.conversion(withUnit: "mm", value: rect.width/595*210)
-            let height = KMPageSizeTool.conversion(withUnit: "mm", value: rect.height/842*297)
-//            if page.rotation == 90 || page.rotation == 270 {
-//                self.pageSizeTextLabel.stringValue = "\(Int(bounds.size.height))*\(Int(bounds.size.width)) mm"
-//            } else {
-//                self.pageSizeTextLabel.stringValue = "\(Int(bounds.size.width))*\(Int(bounds.size.height)) mm"
-//            }
-            if (page.rotation == 90 || page.rotation == 270 || page.rotation == -90 || page.rotation == -270) {
-                self.pageSizeTextLabel.stringValue = String(format: "%.f * %.f \(NSLocalizedString("mm", comment: ""))", height.stringToCGFloat(), width.stringToCGFloat())
-            } else {
-                self.pageSizeTextLabel.stringValue = String(format: "%.f * %.f \(NSLocalizedString("mm", comment: ""))", width.stringToCGFloat(), height.stringToCGFloat())
-            }
-            
-            self.updateFrame()
-            self.updateItemState()
-        }
-    }
-    
-    class func sizeToFit(size:NSSize,page:CPDFPage,isShow:Bool) -> CGFloat {
-        var height = 0
-        var bounds = page.bounds
-        let transform = page.transform()
-        bounds = bounds.applying(transform)
-        
-        var newSize = CGSize(width: size.width, height: size.height)
-        if bounds.size.width > bounds.size.height {
-            newSize.height = size.width * bounds.size.height / bounds.size.width
-        } else {
-            newSize.width = size.height * bounds.size.width / bounds.size.height
-        }
-        
-        height = height + Int(size.height) + pageBoxBorder
-        
-        if isShow {
-            height = height + 30 + textBoxSpace
-        } else {
-            height = height + 15 + textBoxSpace
-        }
-        
-        return CGFloat(height)
-    }
-        
-    func updateFrame () {
-        let viewWidth: CGFloat = NSWidth(self.view.bounds)
-        let viewHeight: CGFloat = NSHeight(self.view.bounds)
-        
-        let border: CGFloat = CGFloat(pageBoxBorder)
-        var bounds = self.page.bounds
-        let transform = self.page.transform()
-        bounds = bounds.applying(transform)
-        
-        var size = self.thumbnailView.thumbnailSzie
-        if bounds.size.width > bounds.size.height {
-            if (bounds.size.width > 0) {
-                size.height = size.width * bounds.size.height / bounds.size.width
-            }
-        } else {
-            if (bounds.size.height > 0) {
-                size.width = size.height * bounds.size.width / bounds.size.height
-            }
-        }
-        size.width =  size.width + CGFloat(border)
-        size.height =  size.height + CGFloat(border)
-        
-        let height = textLabelHeight
-        let labelSize = NSMakeSize(size.width, CGFloat(MAXFLOAT))
-        if self.thumbnailView.isShowPageSize == false {
-            let pageTextLabelSize = self.pageTextLabel.sizeThatFits(labelSize)
-            self.pageSizeTextLabel.sizeToFit()
-            let pageSizeTextLabelSize = self.pageSizeTextLabel.frame.size
-            let width = max(pageTextLabelSize.width, pageSizeTextLabelSize.width) + 5
-            
-            self.pageSizeTextLabel.isHidden = false
-            self.pageSizeTextLabel.frame = NSMakeRect((width - pageSizeTextLabelSize.width) / 2.0, 6, pageSizeTextLabelSize.width, CGFloat(height));
-            self.pageTextLabel.frame = NSMakeRect((width - pageTextLabelSize.width) / 2.0, self.pageSizeTextLabel.frame.maxY+5, pageTextLabelSize.width, CGFloat(height));
-            let textBoxHeight: CGFloat = 44
-            self.textBox.frame = NSMakeRect((self.view.frame.size.width - width) / 2.0, CGFloat(textBoxSpace), width, textBoxHeight)
-        } else {
-            let pageTextLabelSize = self.pageTextLabel.sizeThatFits(labelSize)
-            let width = pageTextLabelSize.width + 5
-            self.pageSizeTextLabel.isHidden = true
-            self.pageTextLabel.frame = NSMakeRect((width - pageTextLabelSize.width) / 2.0, 6, pageTextLabelSize.width, CGFloat(height));
-            let textBoxHeight: CGFloat = 22
-            self.textBox.frame = NSMakeRect((self.view.frame.size.width - width) / 2.0, CGFloat(textBoxSpace), width, textBoxHeight)
-        }
-        
-        let margin: CGFloat = 16
-        let pageBoxY: CGFloat = self.textBox.frame.maxY+5
-        let pageBoxW: CGFloat = viewWidth-margin*2
-        let pageBoxH: CGFloat = viewHeight-pageBoxY-margin
-        self.pageBox.frame = NSMakeRect(margin, pageBoxY, pageBoxW, pageBoxH)
-        
-        var pageX: CGFloat = (NSWidth(self.pageBox.frame)-size.width)*0.5
-        if (pageX < 0) {
-            let tempWidth = size.width + pageX * 2
-            let scale = tempWidth / size.width
-            size.width = size.width * scale
-            size.height = size.height * scale
-        }
-        
-        pageX = (NSWidth(self.pageBox.frame)-size.width)*0.5
-        let pageY: CGFloat = (NSHeight(self.pageBox.frame)-size.height)*0.5
-        self.pageView.frame = NSMakeRect(pageX, pageY, size.width, size.height)
-    }
-    
-    func updateItemState() {
-        if isSelected {
-            self.view.layer?.backgroundColor = NSColor.km_init(hex: "#CED0D4", alpha: 0.6).cgColor
-            self.view.layer?.borderColor = NSColor.km_init(hex: "#CED0D4").cgColor
-        } else if hover {
-            self.view.layer?.backgroundColor = NSColor.km_init(hex: "#EDEEF0").cgColor
-            self.view.layer?.borderColor = NSColor.clear.cgColor
-        } else {
-            self.view.layer?.backgroundColor = NSColor.clear.cgColor
-            self.view.layer?.borderColor = NSColor.clear.cgColor
-        }
-    }
-    
-    
-    func addContentBox() {
-        if self.contentBox == nil {
-            let rect = self.view.bounds
-            self.contentBox?.wantsLayer = true
-            self.contentBox?.layer?.masksToBounds = true
-            self.contentBox = KMBox(frame: rect)
-            self.contentBox?.borderWidth = 0
-//                self.box?.borderColor = NSColor.km_init(hex: "#EDEEF0")
-            self.contentBox?.layer?.cornerRadius = 8
-            self.contentBox?.boxType = .custom
-            self.view.addSubview(self.contentBox!, positioned: NSWindow.OrderingMode.below, relativeTo: self.view)
-            self.contentBox?.autoresizingMask = [.width, .height]
-            self.contentBox?.moveCallback = { [unowned self] (mouseEntered, mouseBox) in
-                self.hoverCallBack?(self, mouseEntered)
-            }
-            
-            self.contentBox?.rightDownCallback = { [unowned self] (downEntered, mouseBox, event) in
-                self.rightMouseDownAction?(self, event)
-            }
-        }
-    }
-    
-    override func mouseMoved(with event: NSEvent) {
-        super.mouseMoved(with: event)
-    }
-    
-    override func mouseDown(with event: NSEvent) {
-        super.mouseDown(with: event)
-        guard let callBack = mouseDownAction else { return }
-        callBack(self, event)
-    }
-}
-
-extension KMPDFThumbnailItem: KMReusable {}

+ 0 - 22
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Thumbnail/KMPDFThumbnailItem.xib

@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
-    <dependencies>
-        <deployment identifier="macosx"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/>
-        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
-    </dependencies>
-    <objects>
-        <customObject id="-2" userLabel="File's Owner" customClass="KMPDFThumbnailItem" customModule="PDF_Master" customModuleProvider="target">
-            <connections>
-                <outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
-            </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="263" height="351"/>
-            <autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
-            <point key="canvasLocation" x="23.5" y="-32.5"/>
-        </customView>
-    </objects>
-</document>

+ 0 - 444
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Thumbnail/KMPDFThumbnailView.swift

@@ -1,444 +0,0 @@
-//
-//  KMPDFThumbnailView.swift
-//  PDF Reader Pro
-//
-//  Created by lxy on 2022/12/15.
-//
-
-class KMPDFThumbnailView: KMThumbnailView {
-    var document: CPDFDocument?
-    var isShowPageSize = false
-    var thumbnailSzie = NSZeroSize
-    
-    //标记线
-    var isNeedMarkerLine: Bool = false
-    var markerLineView: NSView = NSView()
-    var markBeginIndexes: IndexSet = IndexSet()
-    //注释状态
-    var annotationShowState: KMAnnotationViewShowType = .none {
-        didSet {
-            self.collectionView.reloadData()
-        }
-    }
-    //悬浮
-    var hoverIndex: Int = -1
-    
-    var filePromiseQueue: OperationQueue = {
-        let queue = OperationQueue()
-        return queue
-    }()
-    
-    fileprivate var dragFilePath: String?
-    fileprivate var dragFlag = false
-    fileprivate var dragIn = false
-    
-    var limit = false
-    
-    override func initDefaultValue() {
-        super.initDefaultValue()
-        
-        self.wantsLayer = true
-        self.layer?.backgroundColor = NSColor.km_init(hex: "#F7F8FA").cgColor
-        
-        self.thumbnailSzie = CGSize(width: 120, height: 155)
-        self.minimumLineSpacing = 8
-        self.collectionView.km.register(cell: KMPDFThumbnailItem.self)
-        
-        self.collectionView.registerForDraggedTypes(NSFilePromiseReceiver.readableDraggedTypes.map { NSPasteboard.PasteboardType($0) })
-        self.collectionView.setDraggingSourceOperationMask([.copy, .delete], forLocal: false)
-    }
-    
-    override func initSubViews() {
-        super.initSubViews()
-        
-        self.markerLineView.wantsLayer = true
-        self.markerLineView.layer?.backgroundColor = NSColor.km_init(hex: "#1770F4").cgColor
-        self.markerLineView.frame = NSMakeRect(0, 0, 100, 2)
-        self.collectionView.addSubview(markerLineView)
-        self.hiddenMarkerLineView()
-        self.markerLineView.isHidden = true
-    }
-}
-
-extension KMPDFThumbnailView {
-    override func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> NSSize {
-        if let size_ = self.delegate?.thumbnailView?(thumbanView: self, sizeForItemAt: indexPath) {
-            return size_
-        }
-        
-        var height: CGFloat = 0
-        if let page = self.document?.page(at: UInt(indexPath.item)) {
-            height = KMPDFThumbnailItem.sizeToFit(size: self.thumbnailSzie, page: page, isShow: self.isShowPageSize)
-        }
-        
-        return NSMakeSize(collectionView.frame.size.width - 20, height)
-    }
-    
-    override func collectionView(_ collectionView: NSCollectionView, numberOfItemsInSection section: Int) -> Int {
-        if let count = self.document?.pageCount {
-            return Int(count)
-        }
-        return 0
-    }
-    
-    override func collectionView(_ collectionView: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem {
-        if let item = self.delegate?.thumbnailView?(thumbanView: self, itemForRepresentedObjectAt: indexPath) {
-            return item
-        }
-
-        let cellView: KMPDFThumbnailItem = collectionView.km.dequeueReusableCell(for: indexPath)
-        cellView.thumbnailView = self
-        if let page_ = self.document?.page(at: UInt(indexPath.item)) {
-            cellView.page = page_
-        }
-        cellView.annotationShowState = self.annotationShowState
-        if indexPath.item == hoverIndex {
-            cellView.hover = true
-        } else {
-            cellView.hover = false
-        }
-        
-        cellView.mouseDownAction = { [unowned self] (view, event) in
-            self.delegate?.thumbnailView?(thumbanView: self, didSelectItemAt: indexPath, object: event)
-        }
-        
-        cellView.rightMouseDownAction = { [unowned self] (view, event) in
-            self.delegate?.thumbnailView?(thumbanView: self, rightMouseDidClick: indexPath, item: view, object: event)
-        }
-        
-        cellView.hoverCallBack = { [unowned self] view, mouseEntered in
-            if let _ = self.collectionView.item(at: hoverIndex)?.view {
-                let tempCell = self.collectionView.item(at: hoverIndex) as? KMPDFThumbnailItem
-                tempCell?.hover = false
-            }
-            
-            if mouseEntered {
-                hoverIndex = indexPath.item
-                if let _ = self.collectionView.item(at: hoverIndex)?.view {
-                    let tempCell = self.collectionView.item(at: hoverIndex) as? KMPDFThumbnailItem
-                    tempCell?.hover = true
-                }
-            } else {
-                hoverIndex = -1
-            }
-        }
-        
-        return cellView
-    }
-    
-    override func collectionView(_ collectionView: NSCollectionView, draggingSession session: NSDraggingSession, willBeginAt screenPoint: NSPoint, forItemsAt indexes: IndexSet) {
-        if self.isNeedMarkerLine {
-            self.markBeginIndexes = collectionView.selectionIndexes
-        }
-        
-        // 将拖拽的page插入临时路径(文档)
-        var indexs = IndexSet()
-        for indexpath in self.dragedIndexPaths {
-            indexs.insert(indexpath.item)
-        }
-        // 清空临时数据
-        if let _path = self.dragTempFilePath, FileManager.default.fileExists(atPath: _path) {
-            try?FileManager.default.removeItem(atPath: _path)
-        }
-            
-        // 重置拖拽标识
-        self.dragFlag = false
-        if (indexs.count > 0) {
-            let document = CPDFDocument()
-            document?.importPages(indexs, from: self.document, at: 0)
-            if let data = self.dragTempFloderPath, !FileManager.default.fileExists(atPath: data) {
-                try?FileManager.default.createDirectory(atPath: data, withIntermediateDirectories: false)
-            }
-            if let data = self.dragTempFilePath, !FileManager.default.fileExists(atPath: data) {
-                FileManager.default.createFile(atPath: data, contents: nil)
-            }
-            
-            if let data = self.dragTempFilePath {
-                if (self.limit) {
-//                    let _ = KMTools.saveWatermarkDocument(document: document!, to: URL(fileURLWithPath: data))
-                } else {
-                    document?.write(to: URL(fileURLWithPath: data))
-                }
-            }
-            self.dragFilePath = self.dragTempFilePath
-        }
-
-        return super.collectionView(collectionView, draggingSession: session, willBeginAt: screenPoint, forItemsAt: indexes)
-    }
-    
-    override func collectionView(_ collectionView: NSCollectionView, validateDrop draggingInfo: NSDraggingInfo, proposedIndexPath proposedDropIndexPath: AutoreleasingUnsafeMutablePointer<NSIndexPath>, dropOperation proposedDropOperation: UnsafeMutablePointer<NSCollectionView.DropOperation>) -> NSDragOperation {
-        if self.isNeedMarkerLine {
-            KMPrint(collectionView)
-//            if self.markBeginIndexes.count != 0 {
-//                if !self.markBeginIndexes.contains(proposedDropIndexPath.pointee.item) {
-                    //标记线
-//                    if collectionView == self.collectionView {
-                        if (self.collectionView.item(at: proposedDropIndexPath.pointee.item) != nil) {
-                            var rect = self.collectionView.frameForItem(at: proposedDropIndexPath.pointee.item)
-    //                        KMPrint("标记线范围 \(rect)")
-                            rect.size.height = 2
-                            self.markerLineView.frame = rect
-                            self.markerLineView.isHidden = false
-                        } else {
-                            let count = self.collectionView.numberOfItems(inSection: 0)
-                            if proposedDropIndexPath.pointee.item == count {
-                                var rect = self.collectionView.frameForItem(at: count - 1)
-        //                        KMPrint("标记线范围 \(rect)")
-                                rect.origin.y += rect.size.height
-                                rect.size.height = 2
-                                self.markerLineView.frame = rect
-                                self.markerLineView.isHidden = false
-                            }
-                        }
-////                    }
-////                }
-                        print(proposedDropIndexPath.pointee.item)
-//            }
-        }
-//        debugPrint("移动中")
-        if !KMThumbnailManager.manager.dragCollectionViews.contains(collectionView) {
-            KMThumbnailManager.manager.dragCollectionViews.append(collectionView)
-        }
-
-        return super.collectionView(collectionView, validateDrop: draggingInfo, proposedIndexPath: proposedDropIndexPath, dropOperation: proposedDropOperation)
-    }
-    
-    override func collectionView(_ collectionView: NSCollectionView, acceptDrop draggingInfo: NSDraggingInfo, indexPath: IndexPath, dropOperation: NSCollectionView.DropOperation) -> Bool {
-        self.hiddenMarkerLineView()
-        self.markBeginIndexes = IndexSet()
-        self.dragIn = true
-        
-        let pboard = draggingInfo.draggingPasteboard
-        if (pboard.availableType(from: [self.localForDraggedTypes]) != nil) {
-            guard let dragIndexPath = self.dragedIndexPaths.first else {
-                return false
-            }
-            guard let document = self.document else {
-                return false
-            }
-            let dragIndex = dragIndexPath.item
-            let toIndex = max(0, indexPath.item)
-            if dragIndex < 0 || dragIndex > document.pageCount {
-                return false
-            }
-            if (toIndex >= document.pageCount) {
-                return false
-            }
-
-            if dragIndex == toIndex {
-                return false
-            }
-
-            return super.collectionView(collectionView, acceptDrop: draggingInfo, indexPath: indexPath, dropOperation: dropOperation)
-        } else if (pboard.availableType(from: [.localDraggedTypes]) != nil) {
-            if let data = draggingInfo.draggingSource as? NSCollectionView, data.isEqual(to: collectionView) {
-//                Swift.debugPrint("当前文件拖拽")
-                return super.collectionView(collectionView, acceptDrop: draggingInfo, indexPath: indexPath, dropOperation: dropOperation)
-            } else {
-//                Swift.debugPrint("不同文件拖拽")
-                if let _urlString = self.dragTempFilePath {
-                    self.delegate?.thumbnailView?(thumbanView: self, didDragAddFiles: [URL(fileURLWithPath: _urlString)], indexpath: indexPath)
-                }
-            }
-        } else if ((pboard.availableType(from: [.fileURL])) != nil) {
-            if let should = self.delegate?.thumbnailView?(thumbanView: self, shouldAcceptDrop: draggingInfo, indexPath: indexPath, dropOperation: dropOperation), !should {
-                return should
-            }
-            
-            guard let pbItems = pboard.pasteboardItems else {
-                return false
-            }
-            
-            //获取url
-            var array: [URL] = []
-            for item in pbItems {
-                guard let data = item.string(forType: .fileURL), let _url = URL(string: data) else {
-                    continue
-                }
-                let type = _url.pathExtension.lowercased()
-                if let _allowedFileTypes = self.kmAllowedFileTypes {
-                    if (_allowedFileTypes.contains(type)) {
-                        array.append(_url)
-                    }
-                } else {
-                    array.append(_url)
-                }
-            }
-            
-            self.delegate?.thumbnailView?(thumbanView: self, didDragAddFiles: array, indexpath: indexPath)
-        }
-        
-        return false
-    }
-    
-    func collectionView(_ collectionView: NSCollectionView,
-                        pasteboardWriterForItemAt indexPath: IndexPath) -> NSPasteboardWriting? {
-        if let can = self.delegate?.thumbnailView?(thumbanView: self, canPasteboardWriterForItemAt: indexPath), !can {
-            return nil
-        }
-        
-        if let provider = self.delegate?.thumbnailView?(thumbanView: self, pasteboardWriterForItemAt: indexPath) {
-            return provider
-        }
-        
-        var provider: NSFilePromiseProvider?
-
-        // 创建数据提供者
-        let fileExtension = "pdf"
-        if #available(macOS 11.0, *) {
-            if let typeIdentifier = UTType(filenameExtension: fileExtension) {
-                provider = KMFilePromiseProvider(fileType: typeIdentifier.identifier, delegate: self)
-            }
-        } else {
-            if let typeIdentifier =
-                UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, fileExtension as CFString, nil) {
-                provider = KMFilePromiseProvider(fileType: typeIdentifier.takeRetainedValue() as String, delegate: self)
-            }
-        }
-        
-        // 记录拖拽索引
-        self.dragedIndexPaths.append(indexPath)
-        do {
-            if let _url = self.document?.documentURL {
-                let data = try NSKeyedArchiver.archivedData(withRootObject: indexPath, requiringSecureCoding: false)
-                provider?.userInfo = [KMFilePromiseProvider.UserInfoKeys.urlKey: _url,
-                                      KMFilePromiseProvider.UserInfoKeys.indexPathKey: data]
-            } else {
-                let data = try NSKeyedArchiver.archivedData(withRootObject: indexPath, requiringSecureCoding: false)
-                provider?.userInfo = [KMFilePromiseProvider.UserInfoKeys.indexPathKey: data]
-            }
-        } catch {
-            fatalError("failed to archive indexPath to pasteboard")
-        }
-        return provider
-    }
-    
-    override func collectionView(_ collectionView: NSCollectionView, draggingSession session: NSDraggingSession, endedAt screenPoint: NSPoint, dragOperation operation: NSDragOperation) {
-//        if let _ = session.draggingPasteboard.availableType(from: [.localDraggedTypes]) {
-//            Swift.debugPrint("本地拖拽")
-//        } else {
-        if (!self.dragIn) {
-            var indexpaths = Set<IndexPath>()
-            for indexpath in self.dragedIndexPaths {
-                indexpaths.insert(indexpath)
-            }
-            // 清空数据
-            self.dragedIndexPaths.removeAll()
-            // 刷新数据
-            self.reloadData()
-            // 重新选中数据
-            self.selectionIndexPaths = indexpaths
-        } else {
-            Swift.debugPrint("拖入文件 或 本地拖拽")
-        }
-        self.dragIn = false
-        
-        self.hiddenMarkerLineView()
-        self.markBeginIndexes = IndexSet()
-//        }
-        
-        super.collectionView(collectionView, draggingSession: session, endedAt: screenPoint, dragOperation: operation)
-    }
-}
-
-extension KMPDFThumbnailView {
-    func hiddenMarkerLineView() {
-        for item in KMThumbnailManager.manager.dragCollectionViews {
-            let view = item.superview?.superview?.superview as? KMPDFThumbnailView
-            view?.markerLineView.isHidden = true
-        }
-        KMThumbnailManager.manager.dragCollectionViews.removeAll()
-    }
-}
-
-// MARK: - KMExtensions
-
-extension KMPDFThumbnailView {
-    var dragTempFloderPath: String? {
-        get {
-            return NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.applicationSupportDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).last?.stringByAppendingPathComponent(Bundle.main.bundleIdentifier ?? "").stringByAppendingPathComponent("KMPDFThumbnailView_Drag_Temp")
-        }
-    }
-    var dragTempFilePath: String? {
-        get {
-            return self.dragTempFloderPath?.stringByAppendingPathComponent("drag_tmp.pdf")
-        }
-    }
-}
-
-// MARK: - NSFilePromiseProviderDelegate
-
-extension KMPDFThumbnailView: NSFilePromiseProviderDelegate {
-    func filePromiseProvider(_ filePromiseProvider: NSFilePromiseProvider, fileNameForType fileType: String) -> String {
-        var fileName: String = "Untitle"
-        if let _string = self.document?.documentURL.deletingPathExtension().lastPathComponent {
-            fileName = _string
-        }
-        fileName.append(" pages")
-        var indexs = IndexSet()
-        for indexpath in self.dragedIndexPaths {
-            indexs.insert(indexpath.item)
-        }
-        fileName.append(" ")
-        fileName.append(KMPageRangeTools.newParseSelectedIndexs(selectedIndex: indexs.sorted()))
-        fileName.append(".pdf")
-        
-        return fileName
-    }
-    
-    func filePromiseProvider(_ filePromiseProvider: NSFilePromiseProvider,
-                             writePromiseTo url: URL,
-                             completionHandler: @escaping (Error?) -> Void) {
-        do {
-            /** Copy the file to the location provided to you. You always do a copy, not a move.
-             It's important you call the completion handler.
-             */
-            if let _urlString = self.dragFilePath, !self.dragFlag {
-                self.dragFlag = true
-                if let should = self.delegate?.thumbnailView?(thumbanView: self, shouldPasteboardWriterForItemAt: IndexPath(item: 0, section: 0)), !should {
-                    completionHandler(nil)
-                    return 
-                }
-                
-                try FileManager.default.copyItem(at: URL(fileURLWithPath: _urlString), to: url)
-            }
-            
-            completionHandler(nil)
-        } catch let error {
-            OperationQueue.main.addOperation {
-                if let win = self.window {
-                    self.presentError(error, modalFor: win,
-                                      delegate: nil, didPresent: nil, contextInfo: nil)
-                }
-            }
-            completionHandler(error)
-        }
-    }
-    
-    /** You should provide a non main operation queue (e.g. one you create) via this function.
-        This way you don't stall the main thread while writing the promise file.
-    */
-    func operationQueue(for filePromiseProvider: NSFilePromiseProvider) -> OperationQueue {
-        return self.filePromiseQueue
-    }
-    
-    // Utility function to return a PhotoItem object from the NSFilePromiseProvider.
-//    func photoFromFilePromiserProvider(filePromiseProvider: NSFilePromiseProvider) -> CPDFPage? {
-//        var result: CPDFPage?
-//        if let userInfo = filePromiseProvider.userInfo as? [String: AnyObject] {
-//            do {
-//                if let indexPathData = userInfo[KMFilePromiseProvider.UserInfoKeys.indexPathKey] as? Data {
-//                    if let indexPath =
-//                        try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(indexPathData) as? IndexPath {
-//                        result = self.document?.page(at: UInt(indexPath.item))
-//                        }
-//                }
-//            } catch {
-//                fatalError("failed to unarchive indexPath from promise provider.")
-//            }
-//        }
-//        return result
-//    }
-}
-
-

+ 36 - 8
PDF Office/PDF Master/KMClass/KMNPDFPageEdit/KMNThumbnailView/KMNThumbnailBaseViewController.swift

@@ -58,7 +58,21 @@ class KMNThumbnailBaseViewController: KMNBaseViewController,NSCollectionViewDele
         return queue
     }()
     
+    var dragTempFloderPath: String  {
+        get {
+            var cachesDir = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first!
+            cachesDir =  cachesDir.appendingPathComponent("PageEdit_Pasteboard")
+
+            return cachesDir.path
+        }
+    }
+    
     fileprivate var dragFilePath: String?
+    var dragTempFilePath: String? {
+        get {
+            return self.dragTempFloderPath.stringByAppendingPathComponent("drag_tmp.pdf")
+        }
+    }
     fileprivate var dragFlag = false
     
     public var thumbnails:[KMNThumbnail] = []
@@ -497,11 +511,10 @@ class KMNThumbnailBaseViewController: KMNBaseViewController,NSCollectionViewDele
             tFileName = String(tFileName.prefix(50))
         }
         
-        var cachesDir = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first!
-        cachesDir =  cachesDir.appendingPathComponent("PageEdit_Pasteboard")
+        let cachesDir = dragTempFloderPath
         let fileManager = FileManager.default
-        if !fileManager.fileExists(atPath: cachesDir.path) {
-            try? FileManager.default.createDirectory(atPath: cachesDir.path, withIntermediateDirectories: true, attributes: nil)
+        if !fileManager.fileExists(atPath: cachesDir) {
+            try? FileManager.default.createDirectory(atPath: cachesDir, withIntermediateDirectories: true, attributes: nil)
         }
         docmentName = "\(docmentName)\(tFileName)"
         if docmentName.count > 50 {
@@ -520,11 +533,19 @@ class KMNThumbnailBaseViewController: KMNBaseViewController,NSCollectionViewDele
             let writePDFDocument = CPDFDocument()
             writePDFDocument?.importPages(indexs, from: self.showDocument, at: 0)
             
-            let filePathURL = cachesDir.appendingPathComponent(docmentName).appendingPathExtension("pdf")
-            let success = writePDFDocument?.write(to: filePathURL, isSaveFontSubset:false)
+            let tFileName = docmentName + ".pdf"
+            
+            let filePathtPath = cachesDir + tFileName
+            let success = writePDFDocument?.write(to: NSURL(fileURLWithPath: filePathtPath) as URL?, isSaveFontSubset:false)
             
             if(success == true) {
-                self.dragFilePath = filePathURL.path
+                let tFilePath = self.dragTempFloderPath.stringByAppendingPathComponent("drag_tmp.pdf")
+                if FileManager.default.fileExists(atPath: tFilePath) {
+                    try? FileManager.default.removeItem(atPath: tFilePath)
+                }
+              let zz = try? FileManager.default.copyItem(atPath: filePathtPath, toPath: tFilePath)
+
+                self.dragFilePath = filePathtPath
             }
         }
     }
@@ -569,7 +590,14 @@ class KMNThumbnailBaseViewController: KMNBaseViewController,NSCollectionViewDele
         if dragLocalityPages.count != 0 {
             movePages(dragPages: dragLocalityPages, destinationDex: indexPath.item)
             return true
-        } else if ((pboard.availableType(from: [.fileURL])) != nil) {
+        } else if(pboard.availableType(from: [.localDraggedTypes]) != nil) {
+            let index = indexPath.item
+            if let _urlString = self.dragTempFilePath {
+                insertFromFilePath(fileNames: [_urlString], formDex: 0, indexDex: UInt(index), selectIndexs: []) { newSelectIndexs in
+                }
+            }
+
+        }  else if ((pboard.availableType(from: [.fileURL])) != nil) {
             let index = indexPath.item
             
             guard let pbItems = pboard.pasteboardItems else {

+ 7 - 19
PDF Office/PDF Master/KMClass/PDFListView/WindowController/KMNPopAnnotationWindowController.swift

@@ -133,33 +133,21 @@ class KMNPopAnnotationWindowController: KMNBaseWindowController {
             popType = annotationPopType
             if annotationPopType == .generaAnnotation {
                 let newColor = annotationPopMode.annotationColor()
-                let oldColor = annotationColor
-                if !CPDFListView.isTheSameColor(newColor, anotherColor: oldColor) {
-                    annotationColor = newColor
-                }
+                annotationColor = newColor
+
             } else if(annotationPopType == .shapeAnnotation) {
                 let newColor = annotationPopMode.annotationColor()
-                let oldColor = annotationColor
-                if !CPDFListView.isTheSameColor(newColor, anotherColor: oldColor) {
-                    annotationColor = newColor
-                }
+                annotationColor = newColor
             } else if(annotationPopType == .freeTextAnnotation) {
                 let newColor = annotationPopMode.annotationFontColor()
-                
-                let oldColor = fontColor
-                if !CPDFListView.isTheSameColor(newColor, anotherColor: oldColor) {
-                    fontColor = newColor
-                }
+                fontColor = newColor
+
                 
                 let alignment = annotationPopMode.annotationAlignment()
-                if(alignment != self.fontAlight) {
-                    fontAlight = alignment
-                }
+                fontAlight = alignment
                 
                 let font = annotationPopMode.annotationFontName()
-                if(font?.familyName != compdfFont?.familyName || font?.styleName != compdfFont?.styleName) {
-                    compdfFont = font
-                }
+                compdfFont = font
             } else if annotationPopType == .linkAnnotation {
                 if annotationPopMode.annotation != nil {
                     linkAnnotation = annotationPopMode.annotation as! CPDFLinkAnnotation

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

@@ -362,15 +362,6 @@
 		89752DF62938A236003FF08E /* PublicKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89752DF52938A236003FF08E /* PublicKey.swift */; };
 		89752DF72938A236003FF08E /* PublicKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89752DF52938A236003FF08E /* PublicKey.swift */; };
 		89752DF82938A236003FF08E /* PublicKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89752DF52938A236003FF08E /* PublicKey.swift */; };
-		89D2D2E2294C452B00BFF5FE /* KMPDFThumbnailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89D2D2E1294C452B00BFF5FE /* KMPDFThumbnailView.swift */; };
-		89D2D2E3294C452B00BFF5FE /* KMPDFThumbnailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89D2D2E1294C452B00BFF5FE /* KMPDFThumbnailView.swift */; };
-		89D2D2E4294C452B00BFF5FE /* KMPDFThumbnailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89D2D2E1294C452B00BFF5FE /* KMPDFThumbnailView.swift */; };
-		89D2D2FB294C806000BFF5FE /* KMPDFThumbnailItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89D2D2F9294C806000BFF5FE /* KMPDFThumbnailItem.swift */; };
-		89D2D2FC294C806000BFF5FE /* KMPDFThumbnailItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89D2D2F9294C806000BFF5FE /* KMPDFThumbnailItem.swift */; };
-		89D2D2FD294C806000BFF5FE /* KMPDFThumbnailItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89D2D2F9294C806000BFF5FE /* KMPDFThumbnailItem.swift */; };
-		89D2D2FE294C806000BFF5FE /* KMPDFThumbnailItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = 89D2D2FA294C806000BFF5FE /* KMPDFThumbnailItem.xib */; };
-		89D2D2FF294C806000BFF5FE /* KMPDFThumbnailItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = 89D2D2FA294C806000BFF5FE /* KMPDFThumbnailItem.xib */; };
-		89D2D300294C806000BFF5FE /* KMPDFThumbnailItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = 89D2D2FA294C806000BFF5FE /* KMPDFThumbnailItem.xib */; };
 		89D2D308295A83B500BFF5FE /* KMEditPDFTextPropertyViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89D2D306295A83B500BFF5FE /* KMEditPDFTextPropertyViewController.swift */; };
 		89D2D309295A83B500BFF5FE /* KMEditPDFTextPropertyViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89D2D306295A83B500BFF5FE /* KMEditPDFTextPropertyViewController.swift */; };
 		89D2D30A295A83B500BFF5FE /* KMEditPDFTextPropertyViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89D2D306295A83B500BFF5FE /* KMEditPDFTextPropertyViewController.swift */; };
@@ -2620,9 +2611,6 @@
 		BB2EDF6D296ECE17003BCF58 /* KMPageEditInsertDirectionItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2EDF65296ECE17003BCF58 /* KMPageEditInsertDirectionItemView.swift */; };
 		BB2EDF6E296ECE17003BCF58 /* KMPageEditInsertDirectionItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2EDF65296ECE17003BCF58 /* KMPageEditInsertDirectionItemView.swift */; };
 		BB2EDF6F296ECE17003BCF58 /* KMPageEditInsertDirectionItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2EDF65296ECE17003BCF58 /* KMPageEditInsertDirectionItemView.swift */; };
-		BB2EDF70296ECE17003BCF58 /* KMPageEditThumbnailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2EDF66296ECE17003BCF58 /* KMPageEditThumbnailView.swift */; };
-		BB2EDF71296ECE17003BCF58 /* KMPageEditThumbnailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2EDF66296ECE17003BCF58 /* KMPageEditThumbnailView.swift */; };
-		BB2EDF72296ECE17003BCF58 /* KMPageEditThumbnailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2EDF66296ECE17003BCF58 /* KMPageEditThumbnailView.swift */; };
 		BB2EDF73296ECE17003BCF58 /* KMPageEditThumbnailItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB2EDF67296ECE17003BCF58 /* KMPageEditThumbnailItem.xib */; };
 		BB2EDF74296ECE17003BCF58 /* KMPageEditThumbnailItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB2EDF67296ECE17003BCF58 /* KMPageEditThumbnailItem.xib */; };
 		BB2EDF75296ECE17003BCF58 /* KMPageEditThumbnailItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB2EDF67296ECE17003BCF58 /* KMPageEditThumbnailItem.xib */; };
@@ -3087,9 +3075,6 @@
 		BB6B43662A04919200E02B54 /* KMBaseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB6B43652A04919200E02B54 /* KMBaseViewController.swift */; };
 		BB6B43672A04919200E02B54 /* KMBaseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB6B43652A04919200E02B54 /* KMBaseViewController.swift */; };
 		BB6B43682A04919200E02B54 /* KMBaseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB6B43652A04919200E02B54 /* KMBaseViewController.swift */; };
-		BB6B436B2A04935000E02B54 /* KMPDFThumbViewBaseController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB6B436A2A04935000E02B54 /* KMPDFThumbViewBaseController.swift */; };
-		BB6B436C2A04935000E02B54 /* KMPDFThumbViewBaseController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB6B436A2A04935000E02B54 /* KMPDFThumbViewBaseController.swift */; };
-		BB6B436D2A04935000E02B54 /* KMPDFThumbViewBaseController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB6B436A2A04935000E02B54 /* KMPDFThumbViewBaseController.swift */; };
 		BB6B49A52D02A072003ECD26 /* KMPDFSignatureDrawView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB6B49A42D02A072003ECD26 /* KMPDFSignatureDrawView.swift */; };
 		BB6B49A62D02A072003ECD26 /* KMPDFSignatureDrawView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB6B49A42D02A072003ECD26 /* KMPDFSignatureDrawView.swift */; };
 		BB6B49A72D02A072003ECD26 /* KMPDFSignatureDrawView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB6B49A42D02A072003ECD26 /* KMPDFSignatureDrawView.swift */; };
@@ -3673,9 +3658,6 @@
 		BBB789C62BE8BF2400F7E09C /* AIRedoConfirmView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB789802BE8BF2300F7E09C /* AIRedoConfirmView.swift */; };
 		BBB789C72BE8BF2400F7E09C /* AIRedoConfirmView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB789802BE8BF2300F7E09C /* AIRedoConfirmView.swift */; };
 		BBB789C82BE8BF2400F7E09C /* AIRedoConfirmView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB789802BE8BF2300F7E09C /* AIRedoConfirmView.swift */; };
-		BBB7B4892A033F6200B58A5A /* KMThumbnailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB7B4882A033F6200B58A5A /* KMThumbnailView.swift */; };
-		BBB7B48A2A033F6200B58A5A /* KMThumbnailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB7B4882A033F6200B58A5A /* KMThumbnailView.swift */; };
-		BBB7B48B2A033F6200B58A5A /* KMThumbnailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB7B4882A033F6200B58A5A /* KMThumbnailView.swift */; };
 		BBB7B48D2A0384E100B58A5A /* NSCollectionViewItem+KMExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB7B48C2A0384E100B58A5A /* NSCollectionViewItem+KMExtension.swift */; };
 		BBB7B48E2A0384E100B58A5A /* NSCollectionViewItem+KMExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB7B48C2A0384E100B58A5A /* NSCollectionViewItem+KMExtension.swift */; };
 		BBB7B48F2A0384E100B58A5A /* NSCollectionViewItem+KMExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB7B48C2A0384E100B58A5A /* NSCollectionViewItem+KMExtension.swift */; };
@@ -4835,9 +4817,6 @@
 		89752DA32936ECD5003FF08E /* Masonry.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Masonry.framework; sourceTree = "<group>"; };
 		89752DAD2936F505003FF08E /* KMCustomButtonPopMenuViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KMCustomButtonPopMenuViewController.xib; sourceTree = "<group>"; };
 		89752DF52938A236003FF08E /* PublicKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PublicKey.swift; sourceTree = "<group>"; };
-		89D2D2E1294C452B00BFF5FE /* KMPDFThumbnailView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KMPDFThumbnailView.swift; sourceTree = "<group>"; };
-		89D2D2F9294C806000BFF5FE /* KMPDFThumbnailItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPDFThumbnailItem.swift; sourceTree = "<group>"; };
-		89D2D2FA294C806000BFF5FE /* KMPDFThumbnailItem.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMPDFThumbnailItem.xib; sourceTree = "<group>"; };
 		89D2D306295A83B500BFF5FE /* KMEditPDFTextPropertyViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMEditPDFTextPropertyViewController.swift; sourceTree = "<group>"; };
 		89D9895728FD21E6003A3E87 /* KMAnnotationCollectionView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KMAnnotationCollectionView.swift; sourceTree = "<group>"; };
 		89D9896228FD23AE003A3E87 /* PDFKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PDFKit.framework; path = System/Library/Frameworks/PDFKit.framework; sourceTree = SDKROOT; };
@@ -5693,7 +5672,6 @@
 		BB2EDF53296E815E003BCF58 /* KMPageEditBaseItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPageEditBaseItemView.swift; sourceTree = "<group>"; };
 		BB2EDF64296ECE17003BCF58 /* KMPageEditInsertTypeItemView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KMPageEditInsertTypeItemView.swift; sourceTree = "<group>"; };
 		BB2EDF65296ECE17003BCF58 /* KMPageEditInsertDirectionItemView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KMPageEditInsertDirectionItemView.swift; sourceTree = "<group>"; };
-		BB2EDF66296ECE17003BCF58 /* KMPageEditThumbnailView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KMPageEditThumbnailView.swift; sourceTree = "<group>"; };
 		BB2EDF67296ECE17003BCF58 /* KMPageEditThumbnailItem.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KMPageEditThumbnailItem.xib; sourceTree = "<group>"; };
 		BB2EDF69296ECE17003BCF58 /* KMPageEditThumbnailItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KMPageEditThumbnailItem.swift; sourceTree = "<group>"; };
 		BB2F18452A0C7E250003F65E /* KMConvertBaseView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMConvertBaseView.swift; sourceTree = "<group>"; };
@@ -5878,7 +5856,6 @@
 		BB69C95A299116FD0001A9B1 /* plaid.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = plaid.pdf; sourceTree = "<group>"; };
 		BB69C95B299116FD0001A9B1 /* horizontal_line.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = horizontal_line.pdf; sourceTree = "<group>"; };
 		BB6B43652A04919200E02B54 /* KMBaseViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBaseViewController.swift; sourceTree = "<group>"; };
-		BB6B436A2A04935000E02B54 /* KMPDFThumbViewBaseController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPDFThumbViewBaseController.swift; sourceTree = "<group>"; };
 		BB6B49A42D02A072003ECD26 /* KMPDFSignatureDrawView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPDFSignatureDrawView.swift; sourceTree = "<group>"; };
 		BB6B49A82D02A07B003ECD26 /* KMPDFSignatureDrawView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMPDFSignatureDrawView.xib; sourceTree = "<group>"; };
 		BB6B49AE2D02D054003ECD26 /* KMPDFSignatureInputView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPDFSignatureInputView.swift; sourceTree = "<group>"; };
@@ -6110,7 +6087,6 @@
 		BBB7897D2BE8BF2300F7E09C /* AIChatView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AIChatView.xib; sourceTree = "<group>"; };
 		BBB7897F2BE8BF2300F7E09C /* AIRedoConfirmView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AIRedoConfirmView.xib; sourceTree = "<group>"; };
 		BBB789802BE8BF2300F7E09C /* AIRedoConfirmView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AIRedoConfirmView.swift; sourceTree = "<group>"; };
-		BBB7B4882A033F6200B58A5A /* KMThumbnailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMThumbnailView.swift; sourceTree = "<group>"; };
 		BBB7B48C2A0384E100B58A5A /* NSCollectionViewItem+KMExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSCollectionViewItem+KMExtension.swift"; sourceTree = "<group>"; };
 		BBB7B4902A03AD2A00B58A5A /* KMPDFEditToolbar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPDFEditToolbar.swift; sourceTree = "<group>"; };
 		BBB9428A2BA2CB6A00542373 /* KMAdsInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KMAdsInfo.swift; sourceTree = "<group>"; };
@@ -7165,9 +7141,6 @@
 			children = (
 				AD8DD2A12A9C358F007CC9D0 /* Manager */,
 				BB6B43692A04927300E02B54 /* Base */,
-				89D2D2E1294C452B00BFF5FE /* KMPDFThumbnailView.swift */,
-				89D2D2F9294C806000BFF5FE /* KMPDFThumbnailItem.swift */,
-				89D2D2FA294C806000BFF5FE /* KMPDFThumbnailItem.xib */,
 			);
 			path = Thumbnail;
 			sourceTree = "<group>";
@@ -10986,7 +10959,6 @@
 		BB6B43692A04927300E02B54 /* Base */ = {
 			isa = PBXGroup;
 			children = (
-				BB6B436A2A04935000E02B54 /* KMPDFThumbViewBaseController.swift */,
 				BB09477D2C1A9E50005C4DEE /* KMPDFThumbBaseModel.swift */,
 			);
 			path = Base;
@@ -11504,7 +11476,6 @@
 				BB981E502AD4F637001988CA /* KMCoverButton.swift */,
 				BB981E512AD4F638001988CA /* KMPageIndicator.swift */,
 				BBA5429B29F13A140041BAD0 /* KMMemorandumPattern.swift */,
-				BBB7B4882A033F6200B58A5A /* KMThumbnailView.swift */,
 				BB0A550F2A302DB700B6E84B /* KMTextField.swift */,
 				BB0A55132A3052F800B6E84B /* KMCustomTextField.swift */,
 				BBDA8A682A31B50C006A2C4E /* KMCustomStepperView.swift */,
@@ -13282,7 +13253,6 @@
 				BBAC26AC2AFE31F400563A08 /* KMBatchOperateAddPasswordViewController.xib in Resources */,
 				ADB2D6FD294882B70029D2B3 /* KMTextFieldStepperView.xib in Resources */,
 				BB69C95F299116FD0001A9B1 /* plaid.pdf in Resources */,
-				89D2D2FE294C806000BFF5FE /* KMPDFThumbnailItem.xib in Resources */,
 				BBD14F5A2CDA02640077D52E /* KMEditToolbarView.xib in Resources */,
 				BB52F5782CC236B6007418DB /* KMLinkWebView.xib in Resources */,
 				651961AB2D07DD4A007A4324 /* KMBookMarkViewController.xib in Resources */,
@@ -13678,7 +13648,6 @@
 				BB8810892B4F7C2200AFA63E /* KMVerificationAlertViewController.xib in Resources */,
 				BB11B1F62D23BC370071D599 /* KMPasswordInputWindowController.xib in Resources */,
 				BB716D5C2CDDB6F9009787ED /* KMHeaderTemplateItem.xib in Resources */,
-				89D2D2FF294C806000BFF5FE /* KMPDFThumbnailItem.xib in Resources */,
 				BBA9223C2B4E97540061057A /* KMPurchaseLimitWindowController.xib in Resources */,
 				BB0FE0352B734DD1001E0F88 /* AIConfigWindowController.xib in Resources */,
 				AD1FE8392BD7C98300AA4A9B /* KMPDFPrintManageWindowController.xib in Resources */,
@@ -14419,7 +14388,6 @@
 				AD8B59962D2B777700150EA6 /* KMBatchRemoveView.xib in Resources */,
 				BB183DD32B4EAD5400F99C7E /* Ubuntu-Medium.ttf in Resources */,
 				ADE3C1B029A4779E00793B13 /* KMPrintAccessoryController.xib in Resources */,
-				89D2D300294C806000BFF5FE /* KMPDFThumbnailItem.xib in Resources */,
 				F325FD5D2D2BA00D00832097 /* LeftSideView.xib in Resources */,
 				655B91BB2CCB47690080AE6E /* KMNPreView.xib in Resources */,
 				653647C12CDCA5DE00CDB13E /* KMBatchOperateSplitViewController.xib in Resources */,
@@ -14660,7 +14628,6 @@
 				BBD4267F2B4FCF1500AC8660 /* KMTextFieldCell.swift in Sources */,
 				BB031B842C47BB090099F7AD /* KMUserListItemView.swift in Sources */,
 				BBE788C02CBD2463008086E2 /* ControllerVC.swift in Sources */,
-				89D2D2FB294C806000BFF5FE /* KMPDFThumbnailItem.swift in Sources */,
 				F3D395672CBD2C6D000C6729 /* KMNCustomAlertView.swift in Sources */,
 				BB9599CB2B3184230062D346 /* KMRedactSelectPagesWindowController.swift in Sources */,
 				BBEF0F9A2B84A4C200A3E102 /* KMBrowserWindowController+PPTMode.swift in Sources */,
@@ -15221,10 +15188,8 @@
 				BBFD225D2CBE16AB00DA4ABD /* KMHistoryEmptyView.swift in Sources */,
 				AD07BCB52D02CBB20075054B /* KMCompressSettingCellModel.swift in Sources */,
 				BBE7891D2CBD2464008086E2 /* SegmentedVC.swift in Sources */,
-				BB6B436B2A04935000E02B54 /* KMPDFThumbViewBaseController.swift in Sources */,
 				BB88E43B294023CB002B3655 /* KMDocumentModel.swift in Sources */,
 				AD1D48212AFB6BBA007AC1F0 /* KMMergeView.swift in Sources */,
-				89D2D2E2294C452B00BFF5FE /* KMPDFThumbnailView.swift in Sources */,
 				BB10FAE52AFE039E00F18D65 /* KMPDFEditPageRangeWindowController.swift in Sources */,
 				BB9599C32B31647B0062D346 /* KMRedactPropertiesWindowController.swift in Sources */,
 				ADD1B6B729420B2300C3FFF7 /* KMPrintChooseView.swift in Sources */,
@@ -15252,7 +15217,6 @@
 				F325FD452D27A88E00832097 /* KMLeftSideViewController+Note.swift in Sources */,
 				BBE788F32CBD2464008086E2 /* TreeVC.swift in Sources */,
 				AD1FE82F2BD7C98300AA4A9B /* KMBookletParameterModel.m in Sources */,
-				BBB7B4892A033F6200B58A5A /* KMThumbnailView.swift in Sources */,
 				BBB3FF9C2B56852700145C4A /* NSDocument+KMExtensions.swift in Sources */,
 				BB671A012AD2D2A0003D44D5 /* CPDFStampAnnotation+PDFListView.swift in Sources */,
 				BB451A9A2CF59F4C003E1565 /* KMPenController.swift in Sources */,
@@ -15361,7 +15325,6 @@
 				BBE788C32CBD2463008086E2 /* EmptyVC.swift in Sources */,
 				9F1FE4F029406E4700E952CA /* BackgroundGradientView.m in Sources */,
 				BB5A9D6A2CB6521400F64C1F /* KMPDFToolbarController.swift in Sources */,
-				BB2EDF70296ECE17003BCF58 /* KMPageEditThumbnailView.swift in Sources */,
 				AD8B59432D2B777700150EA6 /* KMBatchSecurityView.swift in Sources */,
 				BB183DDD2B4EBE1B00F99C7E /* KMTrialSuccessController.swift in Sources */,
 				ADDF83862B391A5D00A81A4E /* DSignatureCreateInfoViewController.swift in Sources */,
@@ -15787,7 +15750,6 @@
 				ADFCEB562B4FBADB0001EBAF /* KMFirebaseRemoteConfig.swift in Sources */,
 				BB955EC62CD8ED0F0042FDE1 /* KMNWatermarkTemplateItem.swift in Sources */,
 				AD8DD2A42A9C35B2007CC9D0 /* KMThumbnailManager.swift in Sources */,
-				89D2D2E3294C452B00BFF5FE /* KMPDFThumbnailView.swift in Sources */,
 				BB6B4C0D292F62B20071CA06 /* KMPDFThumbnialPageView.swift in Sources */,
 				9F8539D72943180000DF644E /* KMTabAppearance.swift in Sources */,
 				BB451AAB2CF59F68003E1565 /* KMNoteController.swift in Sources */,
@@ -15986,7 +15948,6 @@
 				AD7D5CC32B9566D0006562CD /* KMBookmarkOutlineView.swift in Sources */,
 				BBFA1CCE2B609E890053AD4A /* KMScreenShotMaskWindowController.swift in Sources */,
 				F3A65ECE2CDF19C300F00102 /* KMNThumDecorationView.swift in Sources */,
-				89D2D2FC294C806000BFF5FE /* KMPDFThumbnailItem.swift in Sources */,
 				BBBE68152CC7C02800358B31 /* KMPDFViewManager.swift in Sources */,
 				AD8E489E2D1542510055D3E6 /* KMOCRAreaView.swift in Sources */,
 				ADDF83302B391A5C00A81A4E /* NSGeometry+PDFListView.m in Sources */,
@@ -16217,7 +16178,6 @@
 				AD8E48DA2D1BE54F0055D3E6 /* KMOCRProgressView.swift in Sources */,
 				BB88107D2B4F7A1F00AFA63E /* KMActivityALertViewController.m in Sources */,
 				BBEB0DE12CE36B47004C67BF /* KMRightSideController.swift in Sources */,
-				BB6B436C2A04935000E02B54 /* KMPDFThumbViewBaseController.swift in Sources */,
 				ADAC0DE62AC2B04900FD4F52 /* KMNoteTypeImageView.swift in Sources */,
 				BB9AEB562D0FC9F3004BF8D2 /* FormsDigitalSignController.swift in Sources */,
 				BBFBE74628DD7DB7008B2335 /* AppDelegate.swift in Sources */,
@@ -16265,7 +16225,6 @@
 				656C1E532CD0D27D00295F82 /* KMConvertHtmlSettingView.swift in Sources */,
 				BB981E532AD4F638001988CA /* KMCoverButton.swift in Sources */,
 				BB5F8A0F29BB04F000365ADB /* GBDeviceInfo_OSX.m in Sources */,
-				BBB7B48A2A033F6200B58A5A /* KMThumbnailView.swift in Sources */,
 				BBB7B48E2A0384E100B58A5A /* NSCollectionViewItem+KMExtension.swift in Sources */,
 				9FCFEC852AD0EF6700EAD2CB /* KMCustomButtonPopMenuViewController.swift in Sources */,
 				AD7D5C932B8F20FE006562CD /* synctex_parser_utils.m in Sources */,
@@ -16405,7 +16364,6 @@
 				BB6719FA2AD2CC05003D44D5 /* CPDFSignatureWidgetAnnotation+PDFListView.swift in Sources */,
 				BB1E7F312B511079002D9785 /* SKInspectPublicTool.swift in Sources */,
 				F33B30482D0B22410073DD1B /* KMNPopOperationWindowController.swift in Sources */,
-				BB2EDF71296ECE17003BCF58 /* KMPageEditThumbnailView.swift in Sources */,
 				BB3A668D2B06FD0100575343 /* KMBotaEnum.swift in Sources */,
 				BBE788F42CBD2464008086E2 /* TreeVC.swift in Sources */,
 				ADE3C1EE29A5AFB100793B13 /* KMRequestServerManager.swift in Sources */,
@@ -16743,7 +16701,6 @@
 				6515591B2CCA6E3100C0F0D9 /* KMConvertWordWindowController.swift in Sources */,
 				F367D4E12CFD62DB00B0BB4E /* KMNPopAnnotationWindowController.swift in Sources */,
 				BB03D6962B021124008C9976 /* NSSegmentedControl+KMExtension.swift in Sources */,
-				89D2D2E4294C452B00BFF5FE /* KMPDFThumbnailView.swift in Sources */,
 				BBE788CE2CBD2463008086E2 /* NavigationDemoVC.swift in Sources */,
 				F325FD2F2D27991A00832097 /* KMNoteReplyCellView.swift in Sources */,
 				653647CA2CDCA5DE00CDB13E /* KMBatchOperateWindowController.swift in Sources */,
@@ -17029,7 +16986,6 @@
 				F3A0F86F2CCA118D00E7373F /* KMNTools.swift in Sources */,
 				657851642CFEA3C40023D640 /* KMBotaSearchViewController.swift in Sources */,
 				F35B484D29A4903300756255 /* NSPointerArray+PDFListView.m in Sources */,
-				89D2D2FD294C806000BFF5FE /* KMPDFThumbnailItem.swift in Sources */,
 				BB6F46CD2CF5E605003FCC3C /* CPDFAnnotationConfig.swift in Sources */,
 				BBFBE74928DD7DB8008B2335 /* ViewController.swift in Sources */,
 				BB6719F72AD2C949003D44D5 /* CPDFRedactAnnotation+PDFListView.swift in Sources */,
@@ -17089,7 +17045,6 @@
 				ADD1B6BD29420B4A00C3FFF7 /* KMPrintPreviewView.swift in Sources */,
 				651675D52CE3312000019A20 /* KMBOTAOutlineRowView.swift in Sources */,
 				BB5A9D5A2CB6521400F64C1F /* SettingsGeneralView.swift in Sources */,
-				BB6B436D2A04935000E02B54 /* KMPDFThumbViewBaseController.swift in Sources */,
 				BB1E7F322B511079002D9785 /* SKInspectPublicTool.swift in Sources */,
 				F367D4DC2CFC2F5B00B0BB4E /* KMNAnnotationPopMode.swift in Sources */,
 				AD7D5CA22B8F34EC006562CD /* SKPDFSynchronizer.m in Sources */,
@@ -17340,7 +17295,6 @@
 				65157BA22D02DD790005F3A8 /* KMNBotaAnnotationModel.swift in Sources */,
 				65EF3A7F2C81C1F500CCFC8F /* KMVerificationRSA.swift in Sources */,
 				ADDF83822B391A5D00A81A4E /* DSignatureSaveFolderViewController.swift in Sources */,
-				BBB7B48B2A033F6200B58A5A /* KMThumbnailView.swift in Sources */,
 				BB031B5F2C47BB080099F7AD /* KMUserFbHelpPopController.swift in Sources */,
 				651675C32CE3312000019A20 /* KMCustomOutlineView.swift in Sources */,
 				BBE7891C2CBD2464008086E2 /* ModalVC.swift in Sources */,
@@ -17508,7 +17462,6 @@
 				ADDF83B22B391A5D00A81A4E /* KMDSignatureManager.m in Sources */,
 				ADDEEA802AD3FB1D00EF675D /* KMImageAccessoryController.swift in Sources */,
 				65AED4B52CAA55A8005C44B3 /* KMMergeViewModel.swift in Sources */,
-				BB2EDF72296ECE17003BCF58 /* KMPageEditThumbnailView.swift in Sources */,
 				9F1FE3E0293EE51F00E952CA /* KMMainDocument.swift in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;

+ 107 - 0
PDF Office/PDF Reader Pro.xcodeproj/xcuserdata/kdanmobile.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -3102,6 +3102,21 @@
                   endingLineNumber = "4999"
                   offsetFromSymbolStart = "3800">
                </Location>
+               <Location
+                  uuid = "4E0E8246-D746-4D5F-A4A2-89C78AEA0880 - 39037c5fdb3a8f55"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "PDF_Reader_Pro.KMMainViewController.pdfViewEditingAddTextArea(_: Swift.Optional&lt;__C.CPDFView&gt;, add: Swift.Optional&lt;__C.CPDFPage&gt;, add: __C.CGRect) -&gt; ()"
+                  moduleName = "PDF Reader Pro"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "4999"
+                  endingLineNumber = "4999"
+                  offsetFromSymbolStart = "1356">
+               </Location>
             </Locations>
          </BreakpointContent>
       </BreakpointProxy>
@@ -3770,6 +3785,21 @@
                   endingLineNumber = "532"
                   offsetFromSymbolStart = "164">
                </Location>
+               <Location
+                  uuid = "CF044D5D-2F15-4C77-889B-8C01FED95379 - f6a6bd4a99ca09e9"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "PDF_Reader_Pro.KMHeaderPropertyController.componentSelectDidSelect(view: Swift.Optional&lt;KMComponentLibrary.ComponentSelect&gt;, menuItemProperty: Swift.Optional&lt;KMComponentLibrary.ComponentMenuitemProperty&gt;) -&gt; ()"
+                  moduleName = "PDF Reader Pro"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/HeaderFooter/Views/KMHeaderPropertyController.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "532"
+                  endingLineNumber = "532"
+                  offsetFromSymbolStart = "2868">
+               </Location>
             </Locations>
          </BreakpointContent>
       </BreakpointProxy>
@@ -4276,6 +4306,38 @@
             endingLineNumber = "452"
             landmarkName = "mouseDown(with:)"
             landmarkType = "7">
+            <Locations>
+               <Location
+                  uuid = "626E5EF8-2CC6-4D02-B390-C354A08082C0 - 414df1a2839a9829"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "closure #1 (Swift.Optional&lt;Swift.String&gt;) -&gt; () in PDF_Reader_Pro.KMHeaderPropertyController.componentButtonClicked(KMComponentLibrary.ComponentButton) -&gt; ()"
+                  moduleName = "PDF Reader Pro"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/HeaderFooter/Views/KMHeaderPropertyController.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "452"
+                  endingLineNumber = "452"
+                  offsetFromSymbolStart = "408">
+               </Location>
+               <Location
+                  uuid = "626E5EF8-2CC6-4D02-B390-C354A08082C0 - 28a9cd60df4b377e"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "closure #1 @Swift.MainActor () -&gt; () in closure #1 (Swift.Optional&lt;Swift.String&gt;) -&gt; () in PDF_Reader_Pro.KMHeaderPropertyController.componentButtonClicked(KMComponentLibrary.ComponentButton) -&gt; ()"
+                  moduleName = "PDF Reader Pro"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/HeaderFooter/Views/KMHeaderPropertyController.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "452"
+                  endingLineNumber = "452"
+                  offsetFromSymbolStart = "88">
+               </Location>
+            </Locations>
          </BreakpointContent>
       </BreakpointProxy>
       <BreakpointProxy
@@ -4886,6 +4948,21 @@
                   endingLineNumber = "6000"
                   offsetFromSymbolStart = "916">
                </Location>
+               <Location
+                  uuid = "55D287D3-1501-491A-A540-B8728475A83C - 38aaec8ba186bbf2"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "-[CPDFListView(Event) menuItemClick_ChangeFont:]"
+                  moduleName = "PDF Reader Pro"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/Class/PDFWindowController/PDFListView/CPDFKitExtensions/CPDFListViewExtension/CPDFListView+Event.m"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "6001"
+                  endingLineNumber = "6001"
+                  offsetFromSymbolStart = "396">
+               </Location>
             </Locations>
          </BreakpointContent>
       </BreakpointProxy>
@@ -5106,6 +5183,36 @@
                   endingLineNumber = "4790"
                   offsetFromSymbolStart = "80">
                </Location>
+               <Location
+                  uuid = "7EA5A061-399F-4EE9-B9C0-16DCE1F7448F - b0afbb940b057722"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "PDF_Reader_Pro.KMMainViewController.pdfViewScaleDidChanged(Swift.Optional&lt;__C.CPDFView&gt;) -&gt; ()"
+                  moduleName = "PDF Reader Pro"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "4790"
+                  endingLineNumber = "4790"
+                  offsetFromSymbolStart = "2672">
+               </Location>
+               <Location
+                  uuid = "7EA5A061-399F-4EE9-B9C0-16DCE1F7448F - b0afbb940b057722"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "PDF_Reader_Pro.KMMainViewController.pdfViewScaleDidChanged(Swift.Optional&lt;__C.CPDFView&gt;) -&gt; ()"
+                  moduleName = "PDF Reader Pro"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "4790"
+                  endingLineNumber = "4790"
+                  offsetFromSymbolStart = "2908">
+               </Location>
             </Locations>
          </BreakpointContent>
       </BreakpointProxy>