123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659 |
- //
- // KMAnnotationSelectLinkViewController.swift
- // PDF Reader Pro
- //
- // Created by wanjun on 2023/11/23.
- //
- import Cocoa
- let URLPlaceholder = "https://www.pdfreaderpro.com"
- let EmailPlaceholder = "support@pdfreaderpro.com"
- enum KMAnnotationLinkType: UInt {
- case page = 0
- case url
- case email
- }
- @objcMembers class KMAnnotationSelectLinkViewController: NSViewController, NSTextFieldDelegate {
-
- var _annotations: [CPDFAnnotation]?
- var pdfDocument: CPDFDocument?
- weak var _pdfview: CPDFListView?
-
- @IBOutlet var linkPageBox: KMBox!
- @IBOutlet var linkPageImageView: NSImageView!
- @IBOutlet var linkPageLabel: NSTextField!
- @IBOutlet var linkUrlBox: KMBox!
- @IBOutlet var linkUrlImageView: NSImageView!
- @IBOutlet var linkUrlLabel: NSTextField!
- @IBOutlet var linkEmailBox: KMBox!
- @IBOutlet var linkEmailImageView: NSImageView!
- @IBOutlet var linkEmailLabel: NSTextField!
- @IBOutlet var contentBox: NSBox!
- @IBOutlet var contentBoxLayoutConstraint: NSLayoutConstraint!
- @IBOutlet var pageView: NSView!
- @IBOutlet var pageLabel: NSTextField!
- @IBOutlet var inputPageTextField: NSTextField!
- @IBOutlet var allPageLabel: NSTextField!
- @IBOutlet var urlView: NSView!
- @IBOutlet var urlLabel: NSTextField!
- @IBOutlet var inputUrlTextField: NSTextField!
- @IBOutlet var goButton: NSButton!
- @IBOutlet var errorLabel: NSTextField!
- var annotation: CPDFLinkAnnotation?
- var _linkType: KMAnnotationLinkType = .page
- var mouseDownBox: KMBox?
- var pageRecord: String?
- var urlRecord: String?
- var emailRecord: String?
- var startPage: String?
- var isGo: Bool = false
-
- // MARK: Init Methods
-
- deinit {
- NotificationCenter.default.removeObserver(self)
- inputUrlTextField.delegate = nil
- inputPageTextField.delegate = nil
- }
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do view setup here.
-
- pageRecord = ""
- urlRecord = ""
- emailRecord = ""
- linkPageLabel.stringValue = NSLocalizedString("Go To Page", comment: "")
- linkPageLabel.toolTip = NSLocalizedString("Go To Page", comment: "")
- linkPageLabel.textColor = KMAppearance.Layout.h1Color()
- linkUrlLabel.stringValue = NSLocalizedString("Hyperlink", comment: "")
- linkUrlLabel.toolTip = NSLocalizedString("Hyperlink", comment: "")
- linkUrlLabel.textColor = KMAppearance.Layout.h1Color()
- linkEmailLabel.stringValue = NSLocalizedString("Email", comment: "")
- linkEmailLabel.toolTip = NSLocalizedString("Email", comment: "")
- linkEmailLabel.textColor = KMAppearance.Layout.h1Color()
- errorLabel.stringValue = NSLocalizedString("Page number out of range", comment: "")
- errorLabel.textColor = KMAppearance.Status.errColor()
- let boxArr: [KMBox] = [linkPageBox, linkUrlBox, linkEmailBox]
- for box in boxArr {
- box.moveCallback = { [weak self] mouseEntered, mouseBox in
- guard let self = self else { return }
- if mouseEntered {
- if self.mouseDownBox != mouseBox {
- if box == self.linkPageBox {
- self.linkPageBox.fillColor = KMAppearance.Status.selColor()
- self.linkPageImageView.image = NSImage(named: "KMImageNameUXIconPropertybarLinkPageSel")
- self.linkPageLabel.textColor = KMAppearance.Layout.h0Color()
- } else if box == self.linkUrlBox {
- self.linkUrlBox.fillColor = KMAppearance.Status.selColor()
- self.linkUrlImageView.image = NSImage(named: "KMImageNameUXIconPropertybarLinkUrlSel")
- self.linkUrlLabel.textColor = KMAppearance.Layout.h0Color()
- } else if box == self.linkEmailBox {
- self.linkEmailBox.fillColor = KMAppearance.Status.selColor()
- self.linkEmailImageView.image = NSImage(named: "KMImageNameUXIconPropertybarLinkEmailSel")
- self.linkEmailLabel.textColor = KMAppearance.Layout.h0Color()
- }
- }
- } else {
- if self.mouseDownBox != mouseBox {
- box.fillColor = NSColor.clear
- if box == self.linkPageBox {
- self.linkPageImageView.image = NSImage(named: "KMImageNameUXIconPropertybarLinkPage")
- self.linkPageLabel.textColor = KMAppearance.Layout.h1Color()
- } else if box == self.linkUrlBox {
- self.linkUrlImageView.image = NSImage(named: "KMImageNameUXIconPropertybarLinkUrl")
- self.linkUrlLabel.textColor = KMAppearance.Layout.h1Color()
- } else if box == self.linkEmailBox {
- self.linkEmailImageView.image = NSImage(named: "KMImageNameUXIconPropertybarLinkEmail")
- self.linkEmailLabel.textColor = KMAppearance.Layout.h1Color()
- }
- }
- }
- }
-
- box.downCallback = { [weak self] downEntered, mouseBox, event in
- guard let self = self else { return }
- if downEntered {
- if !IAPProductsManager.default().isAvailableAllFunction() {
- if mouseBox == self.linkUrlBox || mouseBox == self.linkEmailBox {
- if mouseBox == self.linkUrlBox {
- let winC = KMPurchaseCompareWindowController.sharedInstance()
- winC?.kEventName = "Reading_WebsiteLink_BuyNow"
- } else if mouseBox == self.linkEmailBox {
- let winC = KMPurchaseCompareWindowController.sharedInstance()
- winC?.kEventName = "Reading_EmailLink_BuyNow"
- }
-
- KMPurchaseCompareWindowController.sharedInstance().showWindow(nil)
- return
- }
- }
-
- if self.mouseDownBox == mouseBox {
- return
- }
-
- var mouseDownInt = 0
- if mouseBox == self.linkPageBox {
- self.inputPageTextField.stringValue = ""
- self.linkType = .page
- mouseDownInt = 0
- } else if mouseBox == self.linkUrlBox {
- self.inputUrlTextField.stringValue = ""
- self.linkType = .url
- mouseDownInt = 1
- } else if mouseBox == self.linkEmailBox {
- self.inputUrlTextField.stringValue = ""
- self.linkType = .email
- mouseDownInt = 2
- }
-
- UserDefaults.standard.set(mouseDownInt, forKey: "kmLinkSelectIndex")
- UserDefaults.standard.synchronize()
-
- self.mouseDownBox = mouseBox
- }
- }
- }
- isGo = true
- pageLabel.stringValue = NSLocalizedString("Page Number:", comment: "")
- pageLabel.textColor = KMAppearance.Layout.h1Color()
- allPageLabel.textColor = KMAppearance.Layout.h2Color()
- goButton.title = NSLocalizedString("Go", comment: "")
- goButton.setTitleColor(KMAppearance.Layout.w0Color())
- goButton.wantsLayer = true
- goButton.layer?.backgroundColor = KMAppearance.Interactive.m0Color().cgColor
- goButton.setTitleColor(KMAppearance.Layout.w0Color())
- inputPageTextField.backgroundColor = KMAppearance.Layout.l1Color()
- inputUrlTextField.backgroundColor = KMAppearance.Layout.l1Color()
- inputPageTextField.wantsLayer = true
- inputUrlTextField.wantsLayer = true
- inputPageTextField.layer?.borderWidth = 1.0
- inputUrlTextField.layer?.borderWidth = 1.0
- inputPageTextField.layer?.borderColor = KMAppearance.Interactive.a0Color().cgColor
- inputUrlTextField.layer?.borderColor = KMAppearance.Interactive.a0Color().cgColor
- inputPageTextField.layer?.cornerRadius = 1.0
- inputUrlTextField.layer?.cornerRadius = 1.0
- // inputUrlTextField.inputContext?.allowedInputSourceLocales = [NSAllRomanInputSourcesLocaleIdentifier]
- let cell = self.inputUrlTextField.cell as? NSTextFieldCell
- cell?.allowedInputSourceLocales = [NSAllRomanInputSourcesLocaleIdentifier]
- if let annotationURL = annotation?.url() {
- var urlString = annotationURL.fileURL.absoluteString
- if annotationURL.hasPrefix("mailto:") {
- linkType = .email
- mouseDownBox = linkEmailBox
- } else {
- linkType = .url
- mouseDownBox = linkUrlBox
- }
- } else {
- linkType = .page
- mouseDownBox = linkPageBox
- }
- }
-
- override func viewDidAppear() {
- super.viewDidAppear()
-
- inputPageTextField.delegate = self
- inputUrlTextField.delegate = self
- if let url = annotation?.url {
- inputUrlTextField.becomeFirstResponder()
- } else {
- inputPageTextField.becomeFirstResponder()
- }
- }
-
- // MARK: Get & Set
-
- var linkType: KMAnnotationLinkType {
- set {
- _linkType = newValue
- contentBoxLayoutConstraint.constant = 46.0
- switch _linkType {
- case .page:
- contentBoxLayoutConstraint.constant = 24.0
- createLinkPageView()
- contentBox.contentView = pageView
- inputPageTextField.becomeFirstResponder()
- case .url:
- createLinkURLView()
- contentBox.contentView = urlView
- inputUrlTextField.becomeFirstResponder()
- case .email:
- createLinkEmailView()
- contentBox.contentView = urlView
- inputUrlTextField.becomeFirstResponder()
- default:
- break
- }
- }
- get {
- return _linkType
- }
- }
-
- weak var pdfview: CPDFListView? {
- set {
- _pdfview = newValue
- // startPage = _pdfview?.currentPage().label
- self.startPage = "\((self._pdfview?.currentPage().pageIndex() ?? 1)+1)"
- }
- get {
- return _pdfview
- }
- }
-
- var annotations: [CPDFAnnotation]? {
- set {
- _annotations = newValue
-
- annotation = _annotations?.first as? CPDFLinkAnnotation
- }
- get {
- return _annotations
- }
- }
- // MARK: Private
-
- func getURLViewHeightLayoutConstraint() -> CGFloat {
- return urlLabel.frame.height + 4 + inputUrlTextField.frame.height
- }
- func getPageViewHeightLayoutConstraint() -> CGFloat {
- return inputPageTextField.frame.height
- }
- func createLinkPageView() {
- annotationLinkSelectBox(linkPageBox)
-
- inputPageTextField.formatter = NumberFormatter()
-
- if pdfDocument!.pageCount > 1 {
- inputPageTextField.placeholderString = "1-\(pdfDocument!.pageCount)"
- } else {
- inputPageTextField.placeholderString = "1"
- }
-
- allPageLabel.stringValue = "/\(pdfDocument!.pageCount)"
-
- if let destination = annotation?.destination() {
- if let page = destination.page() {
- let pageIndex = page.document?.index(for: page) ?? 0
- inputPageTextField.stringValue = "\(pageIndex + 1)"
- pageRecord = "\(pageIndex + 1)"
- }
- }
-
- if inputPageTextField.stringValue.isEmpty {
- inputPageTextField.stringValue = pageRecord!
- }
-
- let pageFloat = Float(inputPageTextField.stringValue) ?? 0
- if pageFloat < 1 || UInt(pageFloat) > self.pdfDocument!.pageCount {
- goButton.layer!.backgroundColor = KMAppearance.Interactive.m0Color().withAlphaComponent(0.4).cgColor
- goButton.setTitleColor(KMAppearance.Layout.w0Color().withAlphaComponent(0.4))
- } else {
- goButton.layer!.backgroundColor = KMAppearance.Interactive.m0Color().cgColor
- goButton.setTitleColor(KMAppearance.Layout.w0Color())
- }
- }
- func createLinkURLView() {
- annotationLinkSelectBox(linkUrlBox)
- urlLabel.stringValue = NSLocalizedString("URL:", comment: "")
- urlLabel.textColor = KMAppearance.Layout.h1Color()
- inputUrlTextField.placeholderString = "https://www.pdfreaderpro.com"
-
- if let annotationURL = annotation?.url() {
- var urlString = annotationURL.fileURL.absoluteString
- if !annotationURL.hasPrefix("mailto:") {
- if urlString.hasPrefix("http://") {
- urlString = String(urlString.suffix(from: urlString.index(urlString.startIndex, offsetBy: 7)))
- } else if urlString.hasPrefix("https://") {
- urlString = String(urlString.suffix(from: urlString.index(urlString.startIndex, offsetBy: 8)))
- }
- inputUrlTextField.stringValue = annotationURL//urlString
- urlRecord = urlString
- }else {
- inputUrlTextField.stringValue = ""
- }
- }else {
- inputUrlTextField.stringValue = ""
- }
-
- if urlRecord!.isEmpty {
- goButton.layer!.backgroundColor = KMAppearance.Interactive.m0Color().withAlphaComponent(0.4).cgColor
- goButton.setTitleColor(KMAppearance.Layout.w0Color().withAlphaComponent(0.4))
- } else {
- goButton.layer!.backgroundColor = KMAppearance.Interactive.m0Color().cgColor
- goButton.setTitleColor(KMAppearance.Layout.w0Color())
- }
- }
-
- func createLinkEmailView() {
- annotationLinkSelectBox(linkEmailBox)
- urlLabel.stringValue = NSLocalizedString("Email:", comment: "")
- urlLabel.textColor = KMAppearance.Layout.h1Color()
- inputUrlTextField.placeholderString = "support@pdfreaderpro.com"
-
- if let annotationURL = annotation?.url() {
- // if let urlString = annotation?.url().fileURL.absoluteString, urlString.hasPrefix("mailto:") {
- // let trimmedString = String(urlString.suffix(from: urlString.index(urlString.startIndex, offsetBy: 7)))
- // inputUrlTextField.stringValue = trimmedString
- // emailRecord = trimmedString
- // }
- var urlString = annotationURL.fileURL.absoluteString
- if annotationURL.hasPrefix("mailto:") {
- let trimmedString = String(urlString.suffix(from: urlString.index(urlString.startIndex, offsetBy: 7)))
- inputUrlTextField.stringValue = annotationURL
- emailRecord = trimmedString
- }
- }else {
- inputUrlTextField.stringValue = ""
- }
-
- if emailRecord!.count > 0 {
- goButton.layer?.backgroundColor = KMAppearance.Interactive.m0Color().cgColor
- goButton.setTitleColor(KMAppearance.Layout.w0Color())
- } else {
- goButton.layer?.backgroundColor = KMAppearance.Interactive.m0Color().withAlphaComponent(0.4).cgColor
- goButton.setTitleColor(KMAppearance.Layout.w0Color().withAlphaComponent(0.4))
- }
- }
-
- func isValidateEmail(_ email: String) -> Bool {
- let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"
- let emailTest = NSPredicate(format: "SELF MATCHES %@", emailRegex)
- return emailTest.evaluate(with: email)
- }
- func judgeWebURL(_ urlString: String) -> String {
- var modifiedURLString = urlString
- if !modifiedURLString.hasPrefix("http://") && !modifiedURLString.hasPrefix("https://") {
- if modifiedURLString.hasPrefix("smb://") {
-
- } else {
- modifiedURLString = "https://" + modifiedURLString
- }
- }
- if modifiedURLString == "https://" {
- modifiedURLString = ""
- }
- return modifiedURLString
- }
- func judgeEmailURL(_ urlString: String) -> String {
- var modifiedURLString = urlString
- if !modifiedURLString.hasPrefix("mailto:") {
- modifiedURLString = "mailto:" + modifiedURLString
- }
- if modifiedURLString == "mailto:" {
- modifiedURLString = ""
- }
- return modifiedURLString
- }
- func annotationLinkSelectBox(_ box: KMBox) {
- if box.isEqual(linkPageBox) {
- linkPageBox.fillColor = KMAppearance.Status.selColor()
- linkUrlBox.fillColor = NSColor.clear
- linkEmailBox.fillColor = NSColor.clear
-
- linkPageImageView.image = NSImage(named: "KMImageNameUXIconPropertybarLinkPageSel")
- linkUrlImageView.image = NSImage(named: "KMImageNameUXIconPropertybarLinkUrl")
- linkEmailImageView.image = NSImage(named: "KMImageNameUXIconPropertybarLinkEmail")
-
- linkPageLabel.textColor = KMAppearance.Layout.h0Color()
- linkUrlLabel.textColor = KMAppearance.Layout.h1Color()
- linkEmailLabel.textColor = KMAppearance.Layout.h1Color()
-
- if let dexPage = Int(pageRecord!), pageRecord!.count >= 1 {
- if dexPage < 1 || dexPage > self.pdfDocument!.pageCount {
- errorLabel.isHidden = false
- } else {
- errorLabel.isHidden = true
- }
- }
- } else if box.isEqual(linkUrlBox) {
- linkUrlBox.fillColor = KMAppearance.Status.selColor()
- linkPageBox.fillColor = NSColor.clear
- linkEmailBox.fillColor = NSColor.clear
-
- linkPageImageView.image = NSImage(named: "KMImageNameUXIconPropertybarLinkPage")
- linkUrlImageView.image = NSImage(named: "KMImageNameUXIconPropertybarLinkUrlSel")
- linkEmailImageView.image = NSImage(named: "KMImageNameUXIconPropertybarLinkEmail")
-
- linkUrlLabel.textColor = KMAppearance.Layout.h0Color()
- linkPageLabel.textColor = KMAppearance.Layout.h1Color()
- linkEmailLabel.textColor = KMAppearance.Layout.h1Color()
-
- errorLabel.isHidden = true
- } else if box.isEqual(linkEmailBox) {
- linkEmailBox.fillColor = KMAppearance.Status.selColor()
- linkPageBox.fillColor = NSColor.clear
- linkUrlBox.fillColor = NSColor.clear
-
- linkPageImageView.image = NSImage(named: "KMImageNameUXIconPropertybarLinkPage")
- linkUrlImageView.image = NSImage(named: "KMImageNameUXIconPropertybarLinkUrl")
- linkEmailImageView.image = NSImage(named: "KMImageNameUXIconPropertybarLinkEmailSel")
-
- linkEmailLabel.textColor = KMAppearance.Layout.h0Color()
- linkPageLabel.textColor = KMAppearance.Layout.h1Color()
- linkUrlLabel.textColor = KMAppearance.Layout.h1Color()
-
- errorLabel.isHidden = true
- }
- }
-
- // MARK: Public Method
-
- // MARK: Action
-
- @IBAction func goButtonAction(_ sender: Any) {
- if linkType == .page {
- guard let pageFloat = Float(inputPageTextField.stringValue) else {
- return
- }
- if pageFloat < 1 || UInt(pageFloat) > self.pdfDocument!.pageCount {
- return
- }
- } else if linkType == .url {
- if urlRecord!.count <= 0 {
- return
- }
- } else if linkType == .email {
- if emailRecord!.count <= 0 {
- return
- }
- }
- goButton.layer?.backgroundColor = KMAppearance.Interactive.m0Color().cgColor
- Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(timered(_:)), userInfo: nil, repeats: false)
- switch linkType {
- case .page:
- guard let activeAnnotation = pdfview?.activeAnnotation as? CPDFLinkAnnotation else { return }
- activeAnnotation.setURL(nil)
- let dexPage: Int
- if isGo {
- isGo = false
- dexPage = Int(inputPageTextField.stringValue) ?? 0
- goButton.title = NSLocalizedString("Go Back", comment: "Tool tip message")
- } else {
- isGo = true
- dexPage = Int(startPage!) ?? 0
- goButton.title = NSLocalizedString("Go", comment: "")
- }
- goButton.setTitleColor(KMAppearance.Layout.w0Color())
- guard dexPage >= 1 && dexPage <= pdfDocument!.pageCount else {
- let alert = NSAlert()
- alert.alertStyle = .critical
- alert.messageText = NSLocalizedString("Invalid page range or the page number is out of range. Please try again.", comment: "")
- alert.runModal()
- return
- }
- let goPage = Int(inputPageTextField.stringValue) ?? 0
- if let page = pdfDocument!.page(at: UInt(goPage - 1)) {
- let bounds = page.bounds(for: .cropBox)
- let destination = CPDFDestination(page: page, at: NSPoint(x: 0, y: bounds.size.height))
- (pdfview?.activeAnnotation as! CPDFLinkAnnotation as CPDFLinkAnnotation).setDestination(destination)
- pdfview!.needsDisplay = true
- }
- if let page = pdfDocument!.page(at: UInt(dexPage - 1)) {
- let bounds = page.bounds(for: .cropBox)
- let dest = CPDFDestination(page: page, at: NSPoint(x: 0, y: bounds.size.height))
- pdfview!.go(to: dest)
- }
- case .url:
- guard let activeAnnotation = pdfview?.activeAnnotation as? CPDFLinkAnnotation else { return }
- activeAnnotation.setDestination(nil)
- let linkUrlPath = judgeWebURL(inputUrlTextField.stringValue)
- activeAnnotation.setURL(linkUrlPath)
- pdfview!.needsDisplay = true
- if let url = (pdfview?.activeAnnotation as! CPDFLinkAnnotation).url() {
- if let data = URL(string: url) {
- NSWorkspace.shared.open(data)
- }
- }
- case .email:
- guard let activeAnnotation = pdfview?.activeAnnotation as? CPDFLinkAnnotation else { return }
- activeAnnotation.setDestination(nil)
- if !isValidateEmail(inputUrlTextField.stringValue) {
- let alert = NSAlert()
- alert.alertStyle = .critical
- alert.messageText = NSLocalizedString("Invalid Email. Please try again.", comment: "")
- alert.runModal()
- return
- }
- let linkUrlPath = judgeEmailURL(inputUrlTextField.stringValue)
- activeAnnotation.setURL(linkUrlPath)
- pdfview!.needsDisplay = true
- if let url = (pdfview?.activeAnnotation as! CPDFLinkAnnotation).url() {
- NSWorkspace.shared.open(URL(string: url)!)
- }
- default:
- break
- }
- }
- @objc func timered(_ timer: Timer) {
- goButton.layer!.backgroundColor = KMAppearance.Interactive.m0Color().cgColor
- goButton.setTitleColor(KMAppearance.Layout.w0Color())
- }
-
- // MARK: NSTextFieldDelegate Methods
-
- @objc func controlTextDidChange(_ notification: Notification) {
- guard let textField = notification.object as? NSTextField else { return }
-
- var string = textField.stringValue.replacingOccurrences(of: "\n", with: "")
- string = string.replacingOccurrences(of: "\r", with: "")
- textField.stringValue = string
- if mouseDownBox!.isEqual(linkPageBox) {
- pageRecord = string
- } else if mouseDownBox!.isEqual(linkUrlBox) {
- urlRecord = string
- } else if mouseDownBox!.isEqual(linkEmailBox) {
- emailRecord = string
- }
- if linkType == KMAnnotationLinkType.page {
- (pdfview?.activeAnnotation as? CPDFLinkAnnotation)?.setURL(nil)
- let dexPage = Int(inputPageTextField.stringValue) ?? 0
- if (dexPage < 1 || dexPage > pdfDocument!.pageCount) && pageRecord!.count > 0 {
- goButton.layer!.backgroundColor = KMAppearance.Interactive.m0Color().withAlphaComponent(0.4).cgColor
- goButton.setTitleColor(KMAppearance.Layout.w0Color().withAlphaComponent(0.4))
- errorLabel.isHidden = false
- return
- } else if pageRecord!.count > 0 {
- goButton.layer!.backgroundColor = KMAppearance.Interactive.m0Color().cgColor
- goButton.setTitleColor(KMAppearance.Layout.w0Color())
- errorLabel.isHidden = true
- } else {
- goButton.layer!.backgroundColor = KMAppearance.Interactive.m0Color().withAlphaComponent(0.4).cgColor
- goButton.setTitleColor(KMAppearance.Layout.w0Color().withAlphaComponent(0.4))
- }
- let pageIndex = UInt(max(dexPage-1, 0))
- let page = pdfDocument!.page(at: pageIndex)
- let bounds = page?.bounds(for: .cropBox) ?? .zero
- let destination = CPDFDestination(page: page, at: NSMakePoint(0, bounds.size.height))
-
- (pdfview?.activeAnnotation as? CPDFLinkAnnotation)?.setDestination(destination)
- pdfview?.setNeedsDisplay(pdfview!.visibleRect)
- } else if linkType == KMAnnotationLinkType.url {
- (pdfview?.activeAnnotation as? CPDFLinkAnnotation)?.setDestination(nil)
- let linkUrlPath: String = judgeWebURL(urlRecord!)
- if linkUrlPath == "" {
- (pdfview?.activeAnnotation as? CPDFLinkAnnotation)?.setURL(nil)
- } else {
- (pdfview?.activeAnnotation as? CPDFLinkAnnotation)?.setURL(linkUrlPath)
- }
-
- if urlRecord!.count > 0 {
- goButton.layer!.backgroundColor = KMAppearance.Interactive.m0Color().cgColor
- goButton.setTitleColor(KMAppearance.Layout.w0Color())
- } else {
- goButton.layer!.backgroundColor = KMAppearance.Interactive.m0Color().withAlphaComponent(0.4).cgColor
- goButton.setTitleColor(KMAppearance.Layout.w0Color().withAlphaComponent(0.4))
- }
- pdfview!.setNeedsDisplay(pdfview!.visibleRect)
- } else if linkType == KMAnnotationLinkType.email {
- (pdfview?.activeAnnotation as? CPDFLinkAnnotation)?.setDestination(nil)
- let linkUrlPath: String = judgeEmailURL(emailRecord!)
- if linkUrlPath == "" {
- (pdfview?.activeAnnotation as? CPDFLinkAnnotation)?.setURL(nil)
- } else {
- (pdfview?.activeAnnotation as? CPDFLinkAnnotation)?.setURL(linkUrlPath)
- }
-
- if emailRecord!.count > 0 {
- goButton.layer!.backgroundColor = KMAppearance.Interactive.m0Color().cgColor
- goButton.setTitleColor(KMAppearance.Layout.w0Color())
- } else {
- goButton.layer!.backgroundColor = KMAppearance.Interactive.m0Color().withAlphaComponent(0.4).cgColor
- goButton.setTitleColor(KMAppearance.Layout.w0Color().withAlphaComponent(0.4))
- }
- pdfview?.setNeedsDisplay(pdfview!.visibleRect)
- }
- }
- }
|