KMCompressContentView.swift 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  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, _ showView: NSView) -> 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 isDisable: Bool = false {
  20. didSet {
  21. self.reloadData()
  22. }
  23. }
  24. var compressSettingViewWindow: NSWindow?
  25. var faterWindow: NSWindow?
  26. var compressSettingViewController: KMCompressSettingViewController?
  27. var compressAction: KMBatchOperateCompressViewCompressAction?
  28. var popOver: NSPopover!
  29. var selectTypeAction: KMBatchOperateCompressViewSelectTypeBlcok?
  30. var model: KMCompressSettingModel = KMCompressSettingModel(modelsType: .standard) {
  31. didSet {
  32. self.reloadData()
  33. }
  34. }
  35. override func draw(_ dirtyRect: NSRect) {
  36. super.draw(dirtyRect)
  37. // Drawing code here.
  38. }
  39. override func setup() {
  40. updateUI()
  41. updateUILanguage()
  42. reloadData()
  43. }
  44. override func awakeFromNib() {
  45. updateUILanguage()
  46. updateUIThemeColor()
  47. }
  48. override func updateUILanguage() {
  49. self.updateUI()
  50. }
  51. override func updateUIThemeColor() {
  52. settingButton.setTitleColor(NSColor(hex: "#1EB3F9"))
  53. }
  54. func updateUI() {
  55. standardButton.properties = ComponentCheckBoxProperty(size: .s, text: KMLocalizedString("Standard (Recommend)", comment: ""), checkboxType: .normal)
  56. standardButton.setTarget(self, action: #selector(standardButtonAction(_:)))
  57. mobileButton.properties = ComponentCheckBoxProperty(size: .s, text: KMLocalizedString("Mobile", comment: ""), checkboxType: .normal)
  58. mobileButton.setTarget(self, action: #selector(mobileButtonAction(_:)))
  59. mobileWidthConstraint.constant = mobileButton.properties.propertyInfo.viewWidth
  60. customButton.properties = ComponentCheckBoxProperty(size: .s, text: KMLocalizedString("Custom", comment: ""), checkboxType: .normal)
  61. customButton.setTarget(self, action: #selector(customButtonAction(_:)))
  62. customButtonWidthConstraint.constant = customButton.properties.propertyInfo.viewWidth
  63. settingButton.title = KMLocalizedString("Settings")
  64. tipButton.toolTip = KMLocalizedString("This mode is specially adapted for mobile to improve the quality of compression, ensuring greater clarity when viewed on mobile devices.")
  65. }
  66. func reloadData() {
  67. self.updateType(type: model.modelsType)
  68. self.standardButton.properties.isDisabled = self.isDisable
  69. self.standardButton.reloadData()
  70. self.mobileButton.properties.isDisabled = self.isDisable
  71. self.mobileButton.reloadData()
  72. self.customButton.properties.isDisabled = self.isDisable
  73. self.customButton.reloadData()
  74. self.settingButton.isEnabled = !self.isDisable
  75. }
  76. func updateType(type: KMCompressModelsType) {
  77. self.standardButton.properties.checkboxType = .normal
  78. self.mobileButton.properties.checkboxType = .normal
  79. self.customButton.properties.checkboxType = .normal
  80. switch type {
  81. case .standard:
  82. self.standardButton.properties.checkboxType = .selected
  83. case .custom:
  84. self.customButton.properties.checkboxType = .selected
  85. case .mobile:
  86. self.mobileButton.properties.checkboxType = .selected
  87. }
  88. self.standardButton.reloadData()
  89. self.mobileButton.reloadData()
  90. self.customButton.reloadData()
  91. }
  92. }
  93. extension KMCompressContentView {
  94. func standardButtonAction(_ sender: Any) {
  95. self.updateType(type: .standard)
  96. self.model = KMCompressSettingModel(modelsType: .standard)
  97. guard let callBack = selectTypeAction else { return }
  98. callBack(self, model)
  99. }
  100. func mobileButtonAction(_ sender: Any) {
  101. self.updateType(type: .mobile)
  102. self.model = KMCompressSettingModel(modelsType: .mobile)
  103. guard let callBack = selectTypeAction else { return }
  104. callBack(self, model)
  105. }
  106. func customButtonAction(_ sender: Any) {
  107. self.updateType(type: .custom)
  108. self.model = KMCompressSettingModel(modelsType: .custom)
  109. if !KMCompressSettingModel.isSaveCustomData() {
  110. self.settingButtonAction(self.settingButton)
  111. }
  112. guard let callBack = selectTypeAction else { return }
  113. callBack(self, model)
  114. }
  115. @IBAction func settingButtonAction(_ sender: Any) {
  116. compressSettingViewController = KMCompressSettingViewController(nibName: "KMCompressSettingViewController", bundle: nil)
  117. let window = NSWindow(contentViewController: compressSettingViewController!)
  118. window.minSize = CGSizeMake(584, 640)
  119. window.maxSize = CGSizeMake(584, 640)
  120. window.styleMask.remove(.resizable)
  121. compressSettingViewWindow = window
  122. let currentWindow = NSWindow.currentWindow()
  123. faterWindow = currentWindow
  124. currentWindow.beginSheet(window)
  125. compressSettingViewController?.model = self.model
  126. compressSettingViewController?.cancelAction = { resultControler in
  127. currentWindow.endSheet(window)
  128. }
  129. compressSettingViewController?.doneAction = { [unowned self] resultControler in
  130. guard let callBack = compressAction else { return }
  131. callBack(self, self.model, resultControler.view)
  132. }
  133. compressSettingViewController?.modelChangeAction = { [unowned self] resultControler, tModel in
  134. self.updateType(type: tModel.modelsType)
  135. guard let callBack = selectTypeAction else { return }
  136. callBack(self, tModel)
  137. }
  138. }
  139. func closeSettingWindow() {
  140. guard let window = compressSettingViewWindow else { return }
  141. guard let faterWindow = faterWindow else { return }
  142. faterWindow.endSheet(window)
  143. }
  144. }