123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- //
- // KMCropController.swift
- // PDF Reader Pro
- //
- // Created by Niehaoyu on 2024/11/20.
- //
- import Cocoa
- import KMComponentLibrary
- @objc protocol KMCropControllerDelegate: AnyObject {
-
- @objc optional func kmCropControllerDidCrop(_ controller: KMCropController, _ cropRect: CGRect, _ view: KMPageRangeSelectView)
-
- @objc optional func kmCropControllerDidCropSeparate(_ controller: KMCropController, _ view: KMPageRangeSelectView)
-
- @objc optional func kmCropControllerDidCropAuto(_ controller: KMCropController, _ view: KMPageRangeSelectView)
-
- @objc optional func kmCropControllerDidChangedSelectionOrMagnification(_ controller: KMCropController)
-
- @objc optional func kmCropControllerDidResetController(_ controller: KMCropController)
-
- @objc optional func kmCropControllerDidExitController(_ controller: KMCropController)
-
- @objc optional func kmCropControllerDidApplyController(_ controller: KMCropController)
- }
- class KMCropController: NSViewController {
-
- @IBOutlet var contendView: NSView!
-
- @IBOutlet var preInfoView: NSView!
- @IBOutlet var propertyInfoView: NSView!
-
- private var documentPreview: KMEditDocumentController = KMEditDocumentController.init()
-
- private var coverController: KMCropCoverController?
-
- var pdfView: CPDFListView? {
- get {
- return documentPreview.pdfView
- }
- }
- var pdfDocument: CPDFDocument?
- var selectionRect: CGRect = .zero
-
- weak open var delegate: KMCropControllerDelegate?
-
- private var groupListMenuGroup: ComponentGroup? = ComponentGroup.createFromNib(in: ComponentLibrary.shared.componentBundle())
-
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do view setup here.
-
- setup()
- }
-
- func setup() {
- view.wantsLayer = true
- view.layer?.backgroundColor = ComponentLibrary.shared.getComponentColorFromKey("colorBg/layout-middle").cgColor
-
- documentPreview.view.frame = preInfoView.bounds
- documentPreview.view.autoresizingMask = [.width, .height]
- documentPreview.pdfView.pdfListViewDelegate = self
- documentPreview.pdfView.delegate = self
- preInfoView.addSubview(documentPreview.view)
-
- hiddenPropertyView(false)
- }
-
- func reloadData() {
- guard let pdfDocument = pdfDocument else {
- return
- }
-
- documentPreview.pdfDocument = pdfDocument
- documentPreview.reloadData()
-
- documentPreview.pdfView.toolMode = .CCropToolMode
- documentPreview.pdfView.selectionPageIndex = 0
-
- reloadSelectionRect()
- }
-
- func hiddenPropertyView(_ hidden: Bool) {
-
- }
-
- func reloadSelectionRect() {
- guard let pdfDocument = pdfDocument else {
- return
- }
- if CGRectEqualToRect(selectionRect, CGRectZero) {
- let page = pdfDocument.page(at: 0)
- let bounds = page?.bounds ?? CGRectZero
-
- selectionRect = bounds
- } else {
-
- }
- documentPreview.pdfView.selectionRect = selectionRect
- documentPreview.pdfView.selectionPageIndex = 0
- documentPreview.pdfView.setNeedsDisplayForVisiblePages()
- }
-
- }
- //MARK: - CPDFListViewDelegate
- extension KMCropController: CPDFListViewDelegate {
- func pdfListViewChangedSelectionOrMagnification(_ pdfListView: CPDFListView!) {
- KMCropManager.defaultManager.cropSeparateOn = false
- KMCropManager.defaultManager.cropAutoOn = false
- KMCropManager.defaultManager.cropRect = pdfView?.selectionRect
-
- delegate?.kmCropControllerDidChangedSelectionOrMagnification?(self)
- }
-
- func pdfListViewDidSelectionEnd(_ pdfListView: CPDFListView!) {
-
- }
-
- func pdfListViewMenu(forEvent pdfListView: CPDFListView!, for theEvent: NSEvent!, click menu: AutoreleasingUnsafeMutablePointer<NSMenu?>!, isMoveSelectAnno: Bool) {
- let point = self.view.convert(theEvent.locationInWindow, from: self.view)
-
- var items: [(String, String)] = []
- items.append(("Apply", PDFViewMenuIdentifier_Edit_Apply))
- items.append(("Reset", PDFViewMenuIdentifier_Edit_Reset))
- items.append(("Exit", PDFViewMenuIdentifier_Edit_Exit))
-
- var viewHeight: CGFloat = 8
- var menuItemArr: [ComponentMenuitemProperty] = []
-
- for (i, value) in items {
- if value.count == 0 {
- let property: ComponentMenuitemProperty = ComponentMenuitemProperty.divider()
- menuItemArr.append(property)
- viewHeight += 8
- } else {
- let properties_Menuitem: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false,
- itemSelected: false,
- keyEquivalent: nil,
- text: KMLocalizedString(i),
- identifier: value,representedObject: point)
- menuItemArr.append(properties_Menuitem)
- if(value == PDFViewMenuIdentifier_Edit_Exit) {
- properties_Menuitem.keyEquivalent = "ESC"
- }
- viewHeight += 36
- }
- }
-
- groupListMenuGroup?.pagePoint = point
- groupListMenuGroup?.groupDelegate = self
- groupListMenuGroup?.frame = CGRectMake(0, 0, 180, viewHeight)
- groupListMenuGroup?.updateGroupInfo(menuItemArr)
-
- groupListMenuGroup?.showWithPoint(CGPoint(x: point.x, y: point.y - viewHeight), relativeTo: nil, withWindow: pdfListView.window)
- }
-
- func pdfListViewIsSupportSelecton(_ theEvent: NSEvent!, mouseType: KMPDFViewMouseType) -> Bool {
- return true
- }
- }
- //MARK: - ComponentGroupDelegate
- extension KMCropController: ComponentGroupDelegate {
- func componentGroupDidSelect(group: ComponentGroup?, menuItemProperty: ComponentMenuitemProperty?) {
- if menuItemProperty?.identifier == PDFViewMenuIdentifier_Edit_Apply {
- delegate?.kmCropControllerDidApplyController?(self)
- } else if (menuItemProperty?.identifier == PDFViewMenuIdentifier_Edit_Exit) {
- delegate?.kmCropControllerDidExitController?(self)
- } else if (menuItemProperty?.identifier == PDFViewMenuIdentifier_Edit_Reset) {
- delegate?.kmCropControllerDidResetController?(self)
- }
- }
- }
- extension KMCropController: CPDFViewDelegate {
- func pdfViewDocumentDidLoaded(_ pdfView: CPDFView!) {
- DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.3) {
- self.reloadSelectionRect()
-
- self.delegate?.kmCropControllerDidChangedSelectionOrMagnification?(self)
- }
- }
- }
- //MARK: - KMCropPropertyControllerDelegate
- extension KMCropController: KMCropPropertyControllerDelegate {
- func kmCropControllerDidCrop(_ controller: KMCropPropertyController, _ cropRect: CGRect, _ view: KMPageRangeSelectView) {
- delegate?.kmCropControllerDidCrop?(self, cropRect, view)
- }
-
- func kmCropControllerDidCropAuto(_ controller: KMCropPropertyController, _ view: KMPageRangeSelectView) {
- delegate?.kmCropControllerDidCropAuto?(self, view)
- }
-
- func kmCropControllerDidCropSeparate(_ controller: KMCropPropertyController, _ view: KMPageRangeSelectView) {
- delegate?.kmCropControllerDidCropSeparate?(self, view)
- }
-
- func kmCropControllerDidCropInfoUpdated(_ controller: KMCropPropertyController) {
- delegate?.kmCropControllerDidChangedSelectionOrMagnification?(self)
- }
- }
|