KMCompressContentView.swift 6.9 KB

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