|
@@ -7,91 +7,6 @@
|
|
|
|
|
|
import Cocoa
|
|
|
|
|
|
-@objc enum KMToolbarViewType : Int {
|
|
|
- case None
|
|
|
- case Main
|
|
|
- case Annatiton
|
|
|
- case Page
|
|
|
- case Conversion
|
|
|
- case ScanOCR
|
|
|
- case editPDF
|
|
|
- case Form
|
|
|
- case FillSign
|
|
|
- case Tool
|
|
|
- case redact
|
|
|
- case Move
|
|
|
- case Magnify
|
|
|
- case Select
|
|
|
- case SelectZoom
|
|
|
- case LeftPanel
|
|
|
- case RightPanel
|
|
|
- case viewSetting
|
|
|
- case AITools
|
|
|
-
|
|
|
- func isToolMode() -> Bool {
|
|
|
- return (self == .Move || self == .Magnify || self == .Select || self == .SelectZoom)
|
|
|
- }
|
|
|
-
|
|
|
- func itemIdentifier() -> String {
|
|
|
- if (self == .Annatiton) {
|
|
|
- return KMDocumentAnnotationToolbarItemIdentifier
|
|
|
- } else if (self == .Page) {
|
|
|
- return KMDocumentPageToolbarItemIdentifier
|
|
|
- } else if (self == .Conversion) {
|
|
|
- return KMDocumentConversonToolbarItemIdentifier
|
|
|
- } else if (self == .ScanOCR) {
|
|
|
- return KMDocumentScanOCRToolbarItemIdentifier
|
|
|
- } else if (self == .editPDF) {
|
|
|
- return KMDocumentEditToolbarItemIdentifier
|
|
|
- } else if (self == .Form) {
|
|
|
- return KMDocumentFormToolbarItemIdentifier
|
|
|
- } else if (self == .FillSign) {
|
|
|
- return KMDocumentFillSginToolbarItemIdentifier
|
|
|
- } else if (self == .Tool) {
|
|
|
- return KMDocumentToolToolbarItemIdentifier
|
|
|
- } else if (self == .Move) {
|
|
|
- return KMToolbarMoveToolModeItemIdentifier
|
|
|
- } else if (self == .Magnify) {
|
|
|
- return KMToolbarMagnifyToolModeItemIdentifier
|
|
|
- } else if (self == .Select) {
|
|
|
- return KMToolbarSelectToolModeItemIdentifier
|
|
|
- } else if (self == .SelectZoom) {
|
|
|
- return KMToolbarZoomToSelectionItemIdentifier
|
|
|
- } else if (self == .LeftPanel) {
|
|
|
- return KMLeftControlToolbarItemIdentifier
|
|
|
- } else if (self == .RightPanel) {
|
|
|
- return KMRightControlToolbarItemIdentifier
|
|
|
- }
|
|
|
- return ""
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-@objc enum KMToolbarType: Int {
|
|
|
- /// conversion
|
|
|
- case word = 3000
|
|
|
- case excel = 3001
|
|
|
- case ppt = 3002
|
|
|
- case rtf = 3003
|
|
|
- case csv = 3004
|
|
|
- case html = 3005
|
|
|
- case conversion_text = 3006
|
|
|
- case conversion_image = 3007
|
|
|
-
|
|
|
- /// tool
|
|
|
- case compress = 8000
|
|
|
- case merge = 8001
|
|
|
- case fileCompare = 8002
|
|
|
- case secure = 8003
|
|
|
- case redact = 8004
|
|
|
- case watermark = 8005
|
|
|
- case background = 8006
|
|
|
- case headerAndFooter = 8007
|
|
|
- case bates = 8008
|
|
|
- case crop = 8009
|
|
|
- case comparison = 8010
|
|
|
- case aiTools = 8011
|
|
|
-}
|
|
|
-
|
|
|
@objc protocol KMToolbarViewControllerDelegate {
|
|
|
@objc optional func changeAnnotationModeAction(item:KMToolbarClickButton)
|
|
|
@objc optional func showPDFLayoutModeAction(show:Bool)
|
|
@@ -121,15 +36,16 @@ import Cocoa
|
|
|
|
|
|
class KMToolbarViewController: NSViewController, NSTextFieldDelegate {
|
|
|
|
|
|
- var toolbar : KMToolbarView?
|
|
|
- var toolbarType : KMToolbarViewType = KMToolbarViewType.None
|
|
|
- var toolbarItems : [String : Any] = [:]
|
|
|
- @IBOutlet weak var mainWindowController : MainWindowController!
|
|
|
- open weak var delegate: KMToolbarViewControllerDelegate?
|
|
|
@IBOutlet var zoomButton: NSPopUpButton!
|
|
|
@IBOutlet var zoomView: NSView!
|
|
|
@IBOutlet weak var zoomTextField: NSTextField!
|
|
|
|
|
|
+ @IBOutlet weak var mainWindowController : MainWindowController!
|
|
|
+
|
|
|
+ var toolbar : KMToolbarView?
|
|
|
+ var toolbarType : KMToolbarViewType = KMToolbarViewType.None
|
|
|
+ var toolbarItems : [String : Any] = [:]
|
|
|
+ open weak var delegate: KMToolbarViewControllerDelegate?
|
|
|
var searchField: NSSearchField = NSSearchField()
|
|
|
weak var pdfView: CPDFListView?
|
|
|
var shareButton = KMToolbarClickButton()
|
|
@@ -194,8 +110,19 @@ class KMToolbarViewController: NSViewController, NSTextFieldDelegate {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // MARK: Action
|
|
|
+ override func interfaceThemeDidChanged(_ appearance: NSAppearance.Name) {
|
|
|
+ super.interfaceThemeDidChanged(appearance)
|
|
|
+
|
|
|
+ self.toolbar?.appearance = .init(named: appearance)
|
|
|
+ self.bottomLine.wantsLayer = true
|
|
|
+ if KMAppearance.isDarkMode() {
|
|
|
+ self.bottomLine.layer?.backgroundColor = NSColor.km_init(hex: "#393B3E", alpha: 1).cgColor
|
|
|
+ } else {
|
|
|
+ self.bottomLine.layer?.backgroundColor = NSColor.km_init(hex: "#0000001A").cgColor
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+ // MARK: - IBAction
|
|
|
@IBAction func changeAnnotationMode(item: KMToolbarClickButton) {
|
|
|
self.delegate?.changeAnnotationModeAction?(item: item)
|
|
|
if item.isKind(of: KMToolbarClickButton.self) {
|
|
@@ -232,6 +159,98 @@ class KMToolbarViewController: NSViewController, NSTextFieldDelegate {
|
|
|
self._itemSetPromptFlag(item: item.clickObject as? KMToolbarItemView)
|
|
|
}
|
|
|
|
|
|
+ @IBAction func showPDFLayoutMode(sender: KMToolbarClickButton) {
|
|
|
+ if let item = sender.clickObject as? KMToolbarItemView {
|
|
|
+ item.isSelected = !item.isSelected
|
|
|
+ self.delegate?.showPDFLayoutModeAction?(show: true)
|
|
|
+ self._itemSetPromptFlag(item: item)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @IBAction func zoomModelSelectButtonAction(_ sender: NSPopUpButton) {
|
|
|
+ self.delegate?.toolbarViewController?(self, zoomModel: sender.selectedTag())
|
|
|
+ for item in sender.itemArray {
|
|
|
+ item.state = .off
|
|
|
+ }
|
|
|
+ sender.selectedItem?.state = .on
|
|
|
+ }
|
|
|
+
|
|
|
+ @IBAction func zoomPDFViewButtonAction(sender:KMToolbarClickButton) {
|
|
|
+ if sender.tag == 0 {
|
|
|
+ self.delegate?.changePDFViewZoomOutAction?()
|
|
|
+ } else if sender.tag == 1 {
|
|
|
+ self.delegate?.changePDFViewZoomInAction?()
|
|
|
+ } else if sender.tag == 2 {
|
|
|
+ self.delegate?.changePDFViewGotoBackAction?()
|
|
|
+ } else if sender.tag == 3 {
|
|
|
+ self.delegate?.changePDFViewGoToForwardAction?()
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @IBAction func aiTranslationButtonAction(sender:KMToolbarClickButton) {
|
|
|
+ self.delegate?.aiTranslationPDFFileAction?()
|
|
|
+ }
|
|
|
+
|
|
|
+ @IBAction func shareButtonAction(sender:KMToolbarClickButton) {
|
|
|
+ FMTrackEventManager.defaultManager.lynxTrackEvent(event: "OnbrdTop", withProperties: ["OnbrdTop_Tbr" : "OnbrdTop_Tbr_Share"])
|
|
|
+ self.shareButton = sender
|
|
|
+ let menu = NSMenu()
|
|
|
+ menu.addItem(withTitle: NSLocalizedString("Document", comment: ""), action: #selector(shareViaWithDocument), target: self)
|
|
|
+ menu.addItem(withTitle: NSLocalizedString("Flattened Copy", comment: ""), action: #selector(shareViaWithFlatten), target: self)
|
|
|
+ menu.addItem(withTitle: NSLocalizedString("Original PDF", comment: ""), action: #selector(shareViaWithOriginalPDF), target: self)
|
|
|
+ menu.popUp(positioning: nil, at: NSPoint(x: sender.frame.origin.x, y: sender.frame.origin.y-10), in: sender.superview)
|
|
|
+
|
|
|
+ self.delegate?.toolbarViewController?(self, shareAction: sender.clickObject as! KMToolbarItemView)
|
|
|
+ }
|
|
|
+
|
|
|
+ @IBAction func shareViaWithDocument(sender:NSMenuItem) {
|
|
|
+ self.delegate?.toolbarViewController?(self, shareDocument: sender)
|
|
|
+ }
|
|
|
+
|
|
|
+ @IBAction func shareViaWithFlatten(sender:NSMenuItem) {
|
|
|
+ self.delegate?.toolbarViewController?(self, shareFlatten: sender)
|
|
|
+ }
|
|
|
+
|
|
|
+ @IBAction func shareViaWithOriginalPDF(sender:NSMenuItem) {
|
|
|
+ self.delegate?.toolbarViewController?(self, shareOriginalPDF: sender)
|
|
|
+ }
|
|
|
+
|
|
|
+ @objc func mergeMenuItemAction(sender: KMToolbarClickButton) {
|
|
|
+ self.delegate?.toolbarViewController?(self, clickChaildToolType: .merge, toolbar: sender.clickObject as! KMToolbarItemView)
|
|
|
+ }
|
|
|
+
|
|
|
+ @IBAction func scanOCRModelSelect(sender:KMToolbarClickButton) {
|
|
|
+ self.delegate?.toolbarViewController?(self, scanOCRModel: sender.tag)
|
|
|
+ }
|
|
|
+
|
|
|
+ // Form 对齐
|
|
|
+ @IBAction func formsAlignmentAction(sender:KMToolbarClickButton) {
|
|
|
+ if sender.tag == 0 {
|
|
|
+ self.pdfView?.formsAnnotationAlign(.left)
|
|
|
+ } else if sender.tag == 1 {
|
|
|
+ self.pdfView?.formsAnnotationAlign(.vertical)
|
|
|
+ } else if sender.tag == 2 {
|
|
|
+ self.pdfView?.formsAnnotationAlign(.right)
|
|
|
+ } else if sender.tag == 3 {
|
|
|
+ self.pdfView?.formsAnnotationAlign(.top)
|
|
|
+ } else if sender.tag == 4 {
|
|
|
+ self.pdfView?.formsAnnotationAlign(.horizontally)
|
|
|
+ } else if sender.tag == 5 {
|
|
|
+ self.pdfView?.formsAnnotationAlign(.bottom)
|
|
|
+ } else if sender.tag == 6 {
|
|
|
+ self.pdfView?.formsAnnotationAlign(.disHorizontally)
|
|
|
+ } else if sender.tag == 7 {
|
|
|
+ self.pdfView?.formsAnnotationAlign(.disVertical)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // Form 更多操作
|
|
|
+ @IBAction func formsMoreOperationAction(sender:KMToolbarClickButton) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ //MARK: - ItemAction
|
|
|
@objc private func _itemAction(_ item: KMToolbarClickButton) {
|
|
|
if item.clickObject?.itemIdentifier == KMAnnotationImageToolbarItemIdentifier || item.clickObject?.itemIdentifier == KMAnnotationTableToolbarItemIdentifier {
|
|
|
self.pdfView?.toolMode = .textToolMode
|
|
@@ -308,14 +327,6 @@ class KMToolbarViewController: NSViewController, NSTextFieldDelegate {
|
|
|
self._itemSetPromptFlag(itemIdentifier: KMToolbarComparisonItemIdentifier)
|
|
|
}
|
|
|
|
|
|
- @IBAction func showPDFLayoutMode(sender: KMToolbarClickButton) {
|
|
|
- if let item = sender.clickObject as? KMToolbarItemView {
|
|
|
- item.isSelected = !item.isSelected
|
|
|
- self.delegate?.showPDFLayoutModeAction?(show: true)
|
|
|
- self._itemSetPromptFlag(item: item)
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
@objc func cropMenuAction(item: KMToolbarItemView) {
|
|
|
self.delegate?.toolbarViewController?(self, clickChaildToolType: .crop, toolbar: item)
|
|
|
}
|
|
@@ -469,83 +480,6 @@ class KMToolbarViewController: NSViewController, NSTextFieldDelegate {
|
|
|
self._itemSetPromptFlag(itemIdentifier: KMToolbarConversionCreatePDFItemIdentifier)
|
|
|
}
|
|
|
|
|
|
- @IBAction func zoomModelSelectButtonAction(_ sender: NSPopUpButton) {
|
|
|
- self.delegate?.toolbarViewController?(self, zoomModel: sender.selectedTag())
|
|
|
- for item in sender.itemArray {
|
|
|
- item.state = .off
|
|
|
- }
|
|
|
- sender.selectedItem?.state = .on
|
|
|
- }
|
|
|
-
|
|
|
- @IBAction func zoomPDFViewButtonAction(sender:KMToolbarClickButton) {
|
|
|
- if sender.tag == 0 {
|
|
|
- self.delegate?.changePDFViewZoomOutAction?()
|
|
|
- } else if sender.tag == 1 {
|
|
|
- self.delegate?.changePDFViewZoomInAction?()
|
|
|
- } else if sender.tag == 2 {
|
|
|
- self.delegate?.changePDFViewGotoBackAction?()
|
|
|
- } else if sender.tag == 3 {
|
|
|
- self.delegate?.changePDFViewGoToForwardAction?()
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- @IBAction func aiTranslationButtonAction(sender:KMToolbarClickButton) {
|
|
|
- self.delegate?.aiTranslationPDFFileAction?()
|
|
|
- }
|
|
|
-
|
|
|
- @IBAction func shareButtonAction(sender:KMToolbarClickButton) {
|
|
|
- FMTrackEventManager.defaultManager.lynxTrackEvent(event: "OnbrdTop", withProperties: ["OnbrdTop_Tbr" : "OnbrdTop_Tbr_Share"])
|
|
|
- self.shareButton = sender
|
|
|
- let menu = NSMenu()
|
|
|
- menu.addItem(withTitle: NSLocalizedString("Document", comment: ""), action: #selector(shareViaWithDocument), target: self)
|
|
|
- menu.addItem(withTitle: NSLocalizedString("Flattened Copy", comment: ""), action: #selector(shareViaWithFlatten), target: self)
|
|
|
- menu.addItem(withTitle: NSLocalizedString("Original PDF", comment: ""), action: #selector(shareViaWithOriginalPDF), target: self)
|
|
|
- menu.popUp(positioning: nil, at: NSPoint(x: sender.frame.origin.x, y: sender.frame.origin.y-10), in: sender.superview)
|
|
|
-
|
|
|
- self.delegate?.toolbarViewController?(self, shareAction: sender.clickObject as! KMToolbarItemView)
|
|
|
- }
|
|
|
-
|
|
|
- @IBAction func shareViaWithDocument(sender:NSMenuItem) {
|
|
|
- self.delegate?.toolbarViewController?(self, shareDocument: sender)
|
|
|
- }
|
|
|
-
|
|
|
- @IBAction func shareViaWithFlatten(sender:NSMenuItem) {
|
|
|
- self.delegate?.toolbarViewController?(self, shareFlatten: sender)
|
|
|
- }
|
|
|
-
|
|
|
- @IBAction func shareViaWithOriginalPDF(sender:NSMenuItem) {
|
|
|
- self.delegate?.toolbarViewController?(self, shareOriginalPDF: sender)
|
|
|
- }
|
|
|
-
|
|
|
- @objc func mergeMenuItemAction(sender: KMToolbarClickButton) {
|
|
|
- self.delegate?.toolbarViewController?(self, clickChaildToolType: .merge, toolbar: sender.clickObject as! KMToolbarItemView)
|
|
|
- }
|
|
|
-
|
|
|
- @IBAction func scanOCRModelSelect(sender:KMToolbarClickButton) {
|
|
|
- self.delegate?.toolbarViewController?(self, scanOCRModel: sender.tag)
|
|
|
- }
|
|
|
-
|
|
|
- // Form 对齐
|
|
|
- @IBAction func formsAlignmentAction(sender:KMToolbarClickButton) {
|
|
|
- if sender.tag == 0 {
|
|
|
- self.pdfView?.formsAnnotationAlign(.left)
|
|
|
- } else if sender.tag == 1 {
|
|
|
- self.pdfView?.formsAnnotationAlign(.vertical)
|
|
|
- } else if sender.tag == 2 {
|
|
|
- self.pdfView?.formsAnnotationAlign(.right)
|
|
|
- } else if sender.tag == 3 {
|
|
|
- self.pdfView?.formsAnnotationAlign(.top)
|
|
|
- } else if sender.tag == 4 {
|
|
|
- self.pdfView?.formsAnnotationAlign(.horizontally)
|
|
|
- } else if sender.tag == 5 {
|
|
|
- self.pdfView?.formsAnnotationAlign(.bottom)
|
|
|
- } else if sender.tag == 6 {
|
|
|
- self.pdfView?.formsAnnotationAlign(.disHorizontally)
|
|
|
- } else if sender.tag == 7 {
|
|
|
- self.pdfView?.formsAnnotationAlign(.disVertical)
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
@objc private func _alignmentAction(sender: NSMenuItem) {
|
|
|
if let data = self._currentItemView {
|
|
|
self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
|
|
@@ -554,11 +488,6 @@ class KMToolbarViewController: NSViewController, NSTextFieldDelegate {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // Form 更多操作
|
|
|
- @IBAction func formsMoreOperationAction(sender:KMToolbarClickButton) {
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
func toolbarItemFindItemIdentifiers(value : String) -> KMToolbarItemView{
|
|
|
for item in self.toolbarItems {
|
|
|
if item.key == value {
|
|
@@ -568,6 +497,24 @@ class KMToolbarViewController: NSViewController, NSTextFieldDelegate {
|
|
|
return KMToolbarItemView()
|
|
|
}
|
|
|
|
|
|
+ // MARK: - Private Methods
|
|
|
+
|
|
|
+ private func _itemSetPromptFlag(item: KMToolbarItemView?) {
|
|
|
+ if let item_ = item {
|
|
|
+ if let identifier = item_.promptIdentifier {
|
|
|
+ item?.isShowPrompt = false
|
|
|
+ KMDataManager.ud_set(true, forKey: identifier)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private func _itemSetPromptFlag(itemIdentifier: String?) {
|
|
|
+ let item = self.toolbarItemFindItemIdentifiers(value: itemIdentifier ?? "")
|
|
|
+ self._itemSetPromptFlag(item: item)
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //MARK: - NSControl Delegate
|
|
|
func controlTextDidEndEditing(_ obj: Notification) {
|
|
|
let textField = obj.object as? NSTextField
|
|
|
if textField == self.zoomTextField {
|
|
@@ -596,34 +543,6 @@ class KMToolbarViewController: NSViewController, NSTextFieldDelegate {
|
|
|
return false
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- // MARK: - Private Methods
|
|
|
-
|
|
|
- private func _itemSetPromptFlag(item: KMToolbarItemView?) {
|
|
|
- if let item_ = item {
|
|
|
- if let identifier = item_.promptIdentifier {
|
|
|
- item?.isShowPrompt = false
|
|
|
- KMDataManager.ud_set(true, forKey: identifier)
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private func _itemSetPromptFlag(itemIdentifier: String?) {
|
|
|
- let item = self.toolbarItemFindItemIdentifiers(value: itemIdentifier ?? "")
|
|
|
- self._itemSetPromptFlag(item: item)
|
|
|
- }
|
|
|
-
|
|
|
- override func interfaceThemeDidChanged(_ appearance: NSAppearance.Name) {
|
|
|
- super.interfaceThemeDidChanged(appearance)
|
|
|
-
|
|
|
- self.toolbar?.appearance = .init(named: appearance)
|
|
|
- self.bottomLine.wantsLayer = true
|
|
|
- if KMAppearance.isDarkMode() {
|
|
|
- self.bottomLine.layer?.backgroundColor = NSColor.km_init(hex: "#393B3E", alpha: 1).cgColor
|
|
|
- } else {
|
|
|
- self.bottomLine.layer?.backgroundColor = NSColor.km_init(hex: "#0000001A").cgColor
|
|
|
- }
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
// MARK: - Public Methods
|
|
@@ -2286,6 +2205,7 @@ extension KMToolbarViewController {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+//MARK: - NSMenuItemValidation
|
|
|
extension KMToolbarViewController: NSMenuItemValidation {
|
|
|
func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {
|
|
|
if menuItem.action == #selector(toggleCaseInsensitiveSearch) {
|
|
@@ -2307,6 +2227,7 @@ extension KMToolbarViewController: NSMenuItemValidation {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+//MARK: - Enable & Disable
|
|
|
extension KMToolbarViewController {
|
|
|
func isEnable(isEnable: Bool = true) {
|
|
|
for item in toolbarItems {
|
|
@@ -2344,6 +2265,7 @@ extension KMToolbarViewController {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+//MARK: - Search
|
|
|
extension KMToolbarViewController {
|
|
|
func refreshSearchBarMenu() {
|
|
|
let words = UserDefaults.standard.array(forKey: "kmDocumentSearchWordArrays") as? [String] ?? []
|