KMConvertPageRangeSettingItemView.swift 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. //
  2. // KMConvertPageRangeSettingItemView.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by tangchao on 2022/12/6.
  6. //
  7. import Cocoa
  8. import KMComponentLibrary
  9. typealias KMConvertPageRangeSettingItemViewTextDidEndEditing = (_ textString: String) -> ()
  10. class KMConvertPageRangeSettingItemView: KMConvertBaseView {
  11. @IBOutlet weak var titleLabel: NSTextField!
  12. @IBOutlet weak var pageSizeComboBox: NSComboBox!
  13. @IBOutlet weak var pageSizeBox: NSBox!
  14. @IBOutlet weak var pagesizeBoxHeight: NSLayoutConstraint!
  15. var pageSizeVC: KMDesignSelect?
  16. var pageRangeValue: String = ""
  17. var itemClick: KMCommonClickBlock?
  18. var textDidEndEditingCallback: KMConvertPageRangeSettingItemViewTextDidEndEditing?
  19. var isTextDidEndCallback: Bool = false
  20. var pageCount = 0
  21. private lazy var pageRangeView_: ComponentSelect = {
  22. let view = ComponentSelect()
  23. view.properties = ComponentSelectProperties(size: .s,
  24. state: .normal,
  25. isDisabled: false,
  26. isError: false,
  27. leftIcon: false,
  28. placeholder: nil,
  29. errorText: nil,
  30. creatable: false,
  31. text: KMLocalizedString("Odd Pages Only", comment: ""))
  32. view.delegate = self
  33. return view
  34. }()
  35. override func initSubViews() {
  36. super.initSubViews()
  37. // self.pageSizeVC = KMDesignSelect.init(withType: .Combox)
  38. //// self.pageSizeBox.contentView = self.pageSizeVC!.view
  39. // self.pageSizeVC?.removeAllItems()
  40. // self.pageSizeVC?.addItems(withObjectValues: [KMTools.pageRangeTypeString(pageRange: .all),
  41. // KMTools.pageRangeTypeString(pageRange: .current),
  42. // KMTools.pageRangeTypeString(pageRange: .odd),
  43. // KMTools.pageRangeTypeString(pageRange: .even),
  44. // KMTools.pageRangeTypeString(pageRange: .custom)])
  45. // self.pageSizeVC?.selectItem(at: 0)
  46. // self.pageSizeVC?.editable = false //默认属性,初始化可不设置
  47. // self.pageSizeVC?.delete = self
  48. // self.pageSizeVC?.placeholderString = NSLocalizedString("eg. 1,3-5,10", comment: "")
  49. // self.pageSizeVC?.updateUI()
  50. self.pageSizeBox.contentView = self.pageRangeView_
  51. let strings = [KMTools.pageRangeTypeString(pageRange: .all),
  52. KMTools.pageRangeTypeString(pageRange: .current),
  53. KMTools.pageRangeTypeString(pageRange: .odd),
  54. KMTools.pageRangeTypeString(pageRange: .even),
  55. KMTools.pageRangeTypeString(pageRange: .custom)]
  56. var menuItemArr: [ComponentMenuitemProperty] = []
  57. for str in strings {
  58. let itemProperty: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false,
  59. itemSelected: false,
  60. isDisabled: false,
  61. keyEquivalent: nil,
  62. text: str)
  63. menuItemArr.append(itemProperty)
  64. }
  65. pageRangeView_.updateMenuItemsArr(menuItemArr)
  66. pageRangeView_.selectItemAtIndex(0)
  67. pageRangeView_.properties.creatable = false
  68. pageRangeView_.properties.text = ""
  69. // KMNTools.parseIndexPathsSet(indexSets: selectionIndexPaths)
  70. pageRangeView_.reloadData()
  71. }
  72. override func initDefaultVlaue() {
  73. super.initDefaultVlaue()
  74. self.pageSizeBox.fillColor = .clear
  75. self.titleLabel.stringValue = NSLocalizedString("Page Range", comment: "")
  76. self.titleLabel.textColor = NSColor.km_init(hex: "#616469")
  77. self.titleLabel.font = .SFProTextSemiboldFont(12)
  78. }
  79. }
  80. extension KMConvertPageRangeSettingItemView: KMSelectPopButtonDelegate {
  81. func km_controlTextDidChange(_ obj: KMDesignSelect) {
  82. if let vc = self.pageSizeVC {
  83. self.pageRangeValue = vc.stringValue
  84. }
  85. }
  86. func km_controlTextDidEndEditing(_ obj: KMDesignSelect) {
  87. guard let vc = self.pageSizeVC else {
  88. return
  89. }
  90. if (!self.isTextDidEndCallback) {
  91. return
  92. }
  93. if (vc.indexOfSelectedItem != (vc.numberOfItems-1)) {
  94. /// 其他item切换
  95. return
  96. }
  97. guard let callback = self.textDidEndEditingCallback else {
  98. return
  99. }
  100. callback(vc.stringValue)
  101. }
  102. func km_comboBoxSelectionDidChange(_ obj: KMDesignSelect) {
  103. guard let vc = self.pageSizeVC else {
  104. return
  105. }
  106. let index = vc.indexOfSelectedItem
  107. if index < 0 {
  108. return
  109. }
  110. if index == vc.numberOfItems-1 {
  111. self.pageSizeVC?.editable = true
  112. DispatchQueue.main.async {
  113. self.pageSizeVC?.stringValue = ""
  114. }
  115. self.window?.makeFirstResponder(self.pageSizeVC?.textField)
  116. } else {
  117. self.window?.makeFirstResponder(nil)
  118. self.pageSizeVC?.editable = false
  119. }
  120. guard let callback = self.itemClick else {
  121. return
  122. }
  123. callback(index)
  124. }
  125. func km_SelectPopoverWillShow(_ obj: KMDesignSelect) {
  126. if (self.pageCount <= 1) {
  127. self.pageSizeVC?.disItems = [KMTools.pageRangeTypeString(pageRange: .even)]
  128. } else {
  129. self.pageSizeVC?.disItems = []
  130. }
  131. }
  132. }
  133. extension KMConvertPageRangeSettingItemView: ComponentSelectDelegate {
  134. func componentSelectDidSelect(view: ComponentSelect?, menuItemProperty: ComponentMenuitemProperty?) {
  135. // if(view == splitRangeSelect) {
  136. // let pageRangeSelectIndex = splitRangeSelect.indexOfSelect()
  137. // var isEditIndex:Int = 2
  138. //
  139. // if(orgDocument?.pageCount ?? 0 <= 1) {
  140. // isEditIndex = 1
  141. // }
  142. // if (pageRangeSelectIndex == isEditIndex) {
  143. // splitRangeSelect.properties.text = ""
  144. //
  145. // splitRangeSelect.properties.placeholder = KMLocalizedString("e.g. 1,3-5,10")
  146. // splitRangeSelect.properties.creatable = true
  147. // } else {
  148. // splitRangeSelect.properties.placeholder = ""
  149. // splitRangeSelect.properties.creatable = false
  150. // }
  151. // splitRangeSelect.reloadData()
  152. //
  153. //
  154. // }
  155. }
  156. }