KMCompressContentView.swift 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. //
  2. // KMCompressContentView.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by lizhe on 2024/11/18.
  6. //
  7. import Cocoa
  8. import KMComponentLibrary
  9. typealias KMBatchOperateCompressViewSelectTypeBlcok = (_ view: KMCompressContentView, _ model: KMCompressSettingModel) -> Void
  10. class KMCompressContentView: BaseXibView {
  11. @IBOutlet weak var standardButton: ComponentRadio!
  12. @IBOutlet weak var mobileButton: ComponentRadio!
  13. @IBOutlet weak var customButton: ComponentRadio!
  14. @IBOutlet weak var tipButton: ComponentToolTipsHelp!
  15. @IBOutlet weak var settingButton: NSButton!
  16. @IBOutlet weak var mobileWidthConstraint: NSLayoutConstraint!
  17. @IBOutlet weak var customButtonWidthConstraint: NSLayoutConstraint!
  18. var compressSettingViewController: KMCompressSettingViewController?
  19. var popOver: NSPopover!
  20. var selectTypeAction: KMBatchOperateCompressViewSelectTypeBlcok?
  21. var model: KMCompressSettingModel = KMCompressSettingModel(modelsType: .standard) {
  22. didSet {
  23. self.reloadData()
  24. }
  25. }
  26. override func draw(_ dirtyRect: NSRect) {
  27. super.draw(dirtyRect)
  28. // Drawing code here.
  29. }
  30. override func setup() {
  31. updateUI()
  32. updateUILanguage()
  33. reloadData()
  34. }
  35. override func updateUILanguage() {
  36. standardButton.properties.text = KMLocalizedString("Standard (Recommend)", comment: "")
  37. mobileButton.properties.text = KMLocalizedString("Mobile", comment: "")
  38. customButton.properties.text = KMLocalizedString("Custom", comment: "")
  39. settingButton.stringValue = KMLocalizedString("Setting", comment: "")
  40. tipButton.toolTip = KMLocalizedString("This mode is specifically tuned for mobile devices to improve compression quality and ensure clear viewing on mobile devices.", comment: "")
  41. }
  42. override func updateUIThemeColor() {
  43. settingButton.setTitleColor(NSColor(hex: "#1EB3F9"))
  44. }
  45. func updateUI() {
  46. standardButton.properties = ComponentCheckBoxProperty(size: .s, text: KMLocalizedString("Standard (Recommend)", comment: ""), checkboxType: .normal)
  47. standardButton.setTarget(self, action: #selector(standardButtonAction(_:)))
  48. mobileButton.properties = ComponentCheckBoxProperty(size: .s, text: KMLocalizedString("Mobile", comment: ""), checkboxType: .normal)
  49. mobileButton.setTarget(self, action: #selector(mobileButtonAction(_:)))
  50. mobileWidthConstraint.constant = mobileButton.properties.propertyInfo.viewWidth
  51. customButton.properties = ComponentCheckBoxProperty(size: .s, text: KMLocalizedString("Custom", comment: ""), checkboxType: .normal)
  52. customButton.setTarget(self, action: #selector(customButtonAction(_:)))
  53. customButtonWidthConstraint.constant = mobileButton.properties.propertyInfo.viewWidth
  54. // self.tipButton.mouseMoveCallback = {[unowned self] mouseEntered in
  55. // if mouseEntered {
  56. // let tipString = KMLocalizedString("This mode is specifically tuned for mobile devices to improve compression quality and ensure clear viewing on mobile devices.", comment: "")
  57. //
  58. // let popViewController = KMToolbarItemPopViewController.init()
  59. // if self.popOver == nil {
  60. // self.popOver = NSPopover.init()
  61. // }
  62. // self.popOver.contentViewController = popViewController
  63. // self.popOver.animates = false
  64. // self.popOver.behavior = .semitransient
  65. // self.popOver.contentSize = (popViewController.view.frame.size)
  66. // self.popOver.setBackgroundColor(NSColor(hex: "#000000").withAlphaComponent(0.9))
  67. // popViewController.updateWithHelpTip(helpTip: tipString)
  68. // self.popOver.show(relativeTo: self.tipButton.frame, of: self.tipButton.superview!, preferredEdge: .maxY)
  69. // } else {
  70. // self.popOver.close()
  71. // }
  72. // }
  73. }
  74. func reloadData() {
  75. self.updateType(type: model.modelsType)
  76. }
  77. func updateType(type: KMCompressModelsType) {
  78. self.standardButton.properties.checkboxType = .normal
  79. self.mobileButton.properties.checkboxType = .normal
  80. self.customButton.properties.checkboxType = .normal
  81. switch type {
  82. case .standard:
  83. self.standardButton.properties.checkboxType = .selected
  84. case .custom:
  85. self.customButton.properties.checkboxType = .selected
  86. case .mobile:
  87. self.mobileButton.properties.checkboxType = .selected
  88. }
  89. self.standardButton.reloadData()
  90. self.mobileButton.reloadData()
  91. self.customButton.reloadData()
  92. }
  93. }
  94. extension KMCompressContentView {
  95. func standardButtonAction(_ sender: Any) {
  96. self.updateType(type: .standard)
  97. self.model = KMCompressSettingModel(modelsType: .standard)
  98. guard let callBack = selectTypeAction else { return }
  99. callBack(self, model)
  100. }
  101. func mobileButtonAction(_ sender: Any) {
  102. self.updateType(type: .mobile)
  103. self.model = KMCompressSettingModel(modelsType: .mobile)
  104. guard let callBack = selectTypeAction else { return }
  105. callBack(self, model)
  106. }
  107. func customButtonAction(_ sender: Any) {
  108. self.updateType(type: .custom)
  109. self.model = KMCompressSettingModel(modelsType: .custom)
  110. guard let callBack = selectTypeAction else { return }
  111. callBack(self, model)
  112. }
  113. @IBAction func settingButtonAction(_ sender: Any) {
  114. compressSettingViewController = KMCompressSettingViewController(nibName: "KMCompressSettingViewController", bundle: nil)
  115. let window = NSWindow(contentViewController: compressSettingViewController!)
  116. window.minSize = CGSizeMake(624, 513)
  117. window.maxSize = CGSizeMake(624, 513)
  118. window.styleMask.remove(.resizable)
  119. let currentWindow = NSWindow.currentWindow()
  120. currentWindow.beginSheet(window)
  121. compressSettingViewController?.model = self.model
  122. compressSettingViewController?.cancelAction = { resultControler in
  123. currentWindow.endSheet(window)
  124. }
  125. compressSettingViewController?.doneAction = { resultControler in
  126. currentWindow.endSheet(window)
  127. }
  128. }
  129. }