KMBatchOCRView.swift 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. //
  2. // KMBatchOCRView.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by lizhe on 2025/1/8.
  6. //
  7. import Cocoa
  8. import KMComponentLibrary
  9. class KMBatchOCRView: KMBatchSettingItemView {
  10. @IBOutlet weak var titleLabel: NSTextField!
  11. @IBOutlet weak var titleContentView: NSView!
  12. @IBOutlet weak var ocrPageView: KMOCRPageView!
  13. @IBOutlet weak var applyButton: ComponentButton!
  14. @IBOutlet weak var cancelButton: ComponentButton!
  15. @IBOutlet weak var reportButton: ComponentButton!
  16. var groupView: ComponentGroup!
  17. var model: KMOCRModel = KMOCRModel()
  18. override func draw(_ dirtyRect: NSRect) {
  19. super.draw(dirtyRect)
  20. // Drawing code here.
  21. }
  22. override func setup() {
  23. self.titleContentView.border(ComponentLibrary.shared.getComponentColorFromKey("colorBorder/divider"), 0.5, 0)
  24. applyButton.properties = ComponentButtonProperty(type: .primary, size: .m, showRightIcon: true, buttonText: KMLocalizedString("Apply"), keepPressState: false)
  25. applyButton.properties.propertyInfo.rightIcon_nor = NSImage(named: "arrowDown")
  26. applyButton.properties.propertyInfo.rightIcon_press = NSImage(named: "arrowDown_press")
  27. applyButton.setTarget(self, action: #selector(saveButtonClicked(_:)))
  28. applyButton.properties.buttonText = KMLocalizedString("Save as PDF")
  29. applyButton.properties.showRightIcon = true
  30. ocrPageView.type = .batch
  31. model.pageRangeType = .all
  32. model.saveAsPDF = true
  33. self.cancelButton.properties = ComponentButtonProperty(type: .primary,
  34. size: .m,
  35. state: .normal,
  36. buttonText: KMLocalizedString("Cancel"),
  37. keepPressState: false)
  38. self.cancelButton.setTarget(self, action: #selector(cancelButtonAction))
  39. self.cancelButton.reloadData()
  40. self.cancelButton.isHidden = true
  41. reportButton.isHidden = false
  42. reportButton.properties = ComponentButtonProperty(type: .text_gray, size: .xxs, onlyIcon: true, icon: NSImage(named: "tools_report"), keepPressState: false)
  43. reportButton.toolTip = KMLocalizedString("If you have any feedback or suggestions for improvements to the OCR feature, please contact us.")
  44. reportButton.setTarget(self, action: #selector(reportButtonAction))
  45. }
  46. //MARK: - GroupView
  47. func showGroupView() {
  48. var viewHeight: CGFloat = 8
  49. var menuItemArr: [ComponentMenuitemProperty] = []
  50. for i in ["Save as PDF", "Save as TXT"] {
  51. if i == " " {
  52. let property: ComponentMenuitemProperty = ComponentMenuitemProperty.divider()
  53. menuItemArr.append(property)
  54. viewHeight += 8
  55. } else {
  56. let properties_Menuitem: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false,
  57. itemSelected: false,
  58. isDisabled: false,
  59. keyEquivalent: nil,
  60. text: KMLocalizedString(i))
  61. menuItemArr.append(properties_Menuitem)
  62. viewHeight += 36
  63. }
  64. }
  65. if groupView == nil {
  66. groupView = ComponentGroup.createFromNib(in: ComponentLibrary.shared.componentBundle())
  67. }
  68. groupView.groupDelegate = self
  69. groupView?.frame = CGRectMake(310, 0, CGRectGetWidth(applyButton.bounds), viewHeight)
  70. groupView.updateGroupInfo(menuItemArr)
  71. var point = self.convert(applyButton.frame.origin, to: nil)
  72. point.y += applyButton.bounds.size.height + 4
  73. groupView.showWithPoint(point, relativeTo: applyButton)
  74. applyButton.properties.state = .pressed
  75. applyButton.reloadData()
  76. }
  77. func removeGroupView() {
  78. if groupView != nil {
  79. groupView.removeFromSuperview()
  80. }
  81. applyButton.properties.state = .normal
  82. applyButton.reloadData()
  83. }
  84. override func bacthProcessingNotification() {
  85. self.ocrPageView.isDisabled = self.isDisable
  86. self.applyButton.properties.isDisabled = self.isDisable
  87. self.applyButton.reloadData()
  88. self.updateCancelButtonState()
  89. }
  90. func updateCancelButtonState() {
  91. if self.isDisable {
  92. self.applyButton.isHidden = true
  93. self.cancelButton.isHidden = false
  94. } else {
  95. self.applyButton.isHidden = false
  96. self.cancelButton.isHidden = true
  97. }
  98. }
  99. }
  100. //MARK: Action
  101. extension KMBatchOCRView {
  102. @objc func saveButtonClicked(_ sender: ComponentButton) {
  103. showGroupView()
  104. }
  105. @objc func cancelButtonAction() {
  106. self.cancelAction?(self)
  107. self.updateCancelButtonState()
  108. }
  109. func reportButtonAction() {
  110. let help = KMUserFeekbackHanddler()
  111. help.showFeekbackWindow(with: KMLocalizedString("Propose a New Feature", comment: ""))
  112. }
  113. }
  114. extension KMBatchOCRView: ComponentGroupDelegate {
  115. func componentGroupDidDismiss(group: ComponentGroup?) {
  116. removeGroupView()
  117. applyButton.properties.state = .normal
  118. applyButton.reloadData()
  119. }
  120. func componentGroupDidSelect(group: ComponentGroup?, menuItemProperty: ComponentMenuitemProperty?) {
  121. if KMMemberInfo.shared.isLogin == false {
  122. KMLoginWindowsController.shared.showWindow(nil)
  123. return
  124. }
  125. if menuItemProperty?.text == KMLocalizedString("Save as PDF") {
  126. model.saveType = .PDF
  127. } else if menuItemProperty?.text == KMLocalizedString("Save as TXT") {
  128. model.saveType = .TXT
  129. }
  130. guard let callBack = batchExport else { return }
  131. callBack(self, model)
  132. }
  133. }