KMConvertPageRangeSettingItemView.swift 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. //
  2. // KMConvertPageRangeSettingItemView.swift
  3. // PDF Master
  4. //
  5. // Created by tangchao on 2022/12/6.
  6. //
  7. import Cocoa
  8. typealias KMConvertPageRangeSettingItemViewTextDidEndEditing = (_ textString: String) -> ()
  9. class KMConvertPageRangeSettingItemView: NSView, NibLoadable {
  10. @IBOutlet weak var titleLabel: NSTextField!
  11. @IBOutlet weak var pageSizeComboBox: NSComboBox!
  12. @IBOutlet weak var pageSizeBox: NSBox!
  13. @IBOutlet weak var pagesizeBoxHeight: NSLayoutConstraint!
  14. var pageSizeVC: KMDesignSelect!
  15. var pageRangeValue: String = ""
  16. var itemClick: KMCommonClickBlock?
  17. var textDidEndEditingCallback: KMConvertPageRangeSettingItemViewTextDidEndEditing!
  18. var isTextDidEndCallback: Bool = false
  19. var pageCount = 0
  20. static var nibName: String? {
  21. return "KMConvertBaseWindowController"
  22. }
  23. static func createFromNib(in bundle: Bundle = Bundle.main) -> Self? {
  24. guard let nibName = nibName else { return nil }
  25. var topLevelArray: NSArray? = nil
  26. bundle.loadNibNamed(NSNib.Name(nibName), owner: nil, topLevelObjects: &topLevelArray)
  27. guard let results = topLevelArray else { return nil }
  28. let views = Array<Any>(results).filter { $0 is Self }
  29. return views.last as? Self
  30. }
  31. override func awakeFromNib() {
  32. super.awakeFromNib()
  33. pageSizeVC = KMDesignSelect.init(withType: .Combox)
  34. pageSizeBox.fillColor = .clear
  35. pageSizeBox.contentView = pageSizeVC.view
  36. pageSizeVC.removeAllItems()
  37. pageSizeVC.addItems(withObjectValues: [KMTools.pageRangeTypeString(pageRange: .all),
  38. KMTools.pageRangeTypeString(pageRange: .current),
  39. KMTools.pageRangeTypeString(pageRange: .odd),
  40. KMTools.pageRangeTypeString(pageRange: .even),
  41. KMTools.pageRangeTypeString(pageRange: .custom)])
  42. pageSizeVC.selectItem(at: 0)
  43. pageSizeVC.editable = false //默认属性,初始化可不设置
  44. pageSizeVC.delete = self
  45. pageSizeVC.placeholderString = NSLocalizedString("eg. 1,3-5,10", comment: "")
  46. titleLabel.stringValue = NSLocalizedString("Page Range", comment: "")
  47. titleLabel.textColor = NSColor(hex: "#616469")
  48. titleLabel.font = .SFProTextSemibold(12)
  49. pageSizeVC.updateUI()
  50. }
  51. }
  52. extension KMConvertPageRangeSettingItemView: KMSelectPopButtonDelegate {
  53. func km_controlTextDidChange(_ obj: KMDesignSelect) {
  54. if pageSizeVC != obj {
  55. return
  56. }
  57. self.pageRangeValue = pageSizeVC.stringValue
  58. }
  59. func km_controlTextDidEndEditing(_ obj: KMDesignSelect) {
  60. if pageSizeVC != obj {
  61. return
  62. }
  63. if (!self.isTextDidEndCallback) {
  64. return
  65. }
  66. if (self.pageSizeVC.indexOfSelectedItem != (self.pageSizeVC.numberOfItems-1)) {
  67. /// 其他item切换
  68. return
  69. }
  70. guard let callback = textDidEndEditingCallback else {
  71. return
  72. }
  73. callback(pageSizeVC.stringValue)
  74. }
  75. func km_comboBoxSelectionDidChange(_ obj: KMDesignSelect) {
  76. if pageSizeVC != obj {
  77. return
  78. }
  79. let index = pageSizeVC.indexOfSelectedItem
  80. if index < 0 {
  81. return
  82. }
  83. if index == pageSizeVC.numberOfItems-1 {
  84. pageSizeVC.editable = true
  85. DispatchQueue.main.async { [self] in
  86. pageSizeVC.stringValue = ""
  87. }
  88. self.window?.makeFirstResponder(pageSizeVC.textField)
  89. } else {
  90. self.window?.makeFirstResponder(nil)
  91. pageSizeVC.editable = false
  92. }
  93. guard let callback = itemClick else {
  94. return
  95. }
  96. callback(index)
  97. }
  98. func km_SelectPopoverWillShow(_ obj: KMDesignSelect) {
  99. if (self.pageCount <= 1) {
  100. self.pageSizeVC.disItems = [KMTools.pageRangeTypeString(pageRange: .even)]
  101. } else {
  102. self.pageSizeVC.disItems = []
  103. }
  104. }
  105. }