KMCompressContentView.swift 6.2 KB

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