KMDesignStepperView.swift 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. //
  2. // KMDesignStepperView.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by tangchao on 2023/6/8.
  6. //
  7. // 步进器 组件
  8. class KMDesignStepperView: KMDesignBaseView {
  9. private var _stepperView: KMCustomStepperView?
  10. weak var delegate: KMTextFieldDelegate?
  11. override var kmEnabled: Bool {
  12. get {
  13. return super.kmEnabled
  14. }
  15. set {
  16. super.kmEnabled = newValue
  17. self._stepperView?.kmEnabled = newValue
  18. }
  19. }
  20. var minValue: Double = CGFloat.leastNormalMagnitude {
  21. didSet {
  22. self._stepperView?.minValue = self.minValue
  23. }
  24. }
  25. var maxValue: Double = CGFloat.greatestFiniteMagnitude {
  26. didSet {
  27. self._stepperView?.maxValue = self.maxValue
  28. }
  29. }
  30. var increment: Double = 1 {
  31. didSet {
  32. self._stepperView?.increment = self.increment
  33. }
  34. }
  35. var autorepeat = true {
  36. didSet {
  37. self._stepperView?.autorepeat = self.autorepeat
  38. }
  39. }
  40. var kmValue: Double {
  41. get {
  42. if let value = self._stepperView?.kmValue {
  43. return value
  44. }
  45. return 0
  46. }
  47. set {
  48. self._stepperView?.kmValue = newValue
  49. }
  50. }
  51. override func initSubViews() {
  52. super.initSubViews()
  53. self._stepperView = KMCustomStepperView()
  54. self._stepperView?.delegate = self
  55. self.addSubview(self._stepperView!)
  56. self._stepperView?.hoverAction = { [unowned self] sender, action in
  57. if (!self.canHover()) {
  58. return
  59. }
  60. if (action == .enter) {
  61. self.state = .Hov
  62. } else if (action == .exit) {
  63. self.state = .Norm
  64. }
  65. }
  66. self._stepperView?.rightHoverAction = { [unowned self] button, action in
  67. if (action == .enter) {
  68. button.wantsLayer = true
  69. } else if (action == .exit) {
  70. button.wantsLayer = true
  71. button.layer?.backgroundColor = .clear
  72. }
  73. }
  74. }
  75. override func initDefaultValue() {
  76. super.initDefaultValue()
  77. self._stepperView?.horizontalDividerHeight = self.horDividerHeight()
  78. self._stepperView?.horizontalDividerColor = self.horDividerColor()
  79. self._stepperView?.verticalDividerWidth = self.verDividerWidth()
  80. self._stepperView?.verticalDividerColor = self.verDividerColor()
  81. self.state = .Norm
  82. }
  83. override func layout() {
  84. super.layout()
  85. let width: CGFloat = NSWidth(self.bounds)
  86. let heigth: CGFloat = NSHeight(self.bounds)
  87. let y: CGFloat = (heigth - self.height) * 0.5
  88. self._stepperView?.frame = NSMakeRect(0, y, width, self.height)
  89. }
  90. override func find_bgToken(state: KMDesignTokenState) -> KMDesignTokenKey {
  91. if (state == .Norm) {
  92. return "stepper.bg.norm"
  93. } else if (state == .Hov) {
  94. return "stepper.bg.hov"
  95. } else if (state == .Focus) {
  96. return "stepper.bg.focus"
  97. } else if (state == .Disabled) {
  98. return "stepper.bg.dis"
  99. }
  100. return KMDesignTokenNone
  101. }
  102. override func find_textToken(state: KMDesignTokenState) -> KMDesignTokenKey {
  103. if (state == .Norm) {
  104. return "stepper.mac-text.def"
  105. } else if (state == .Hov) {
  106. return "stepper.mac-text.def"
  107. } else if (state == .Focus) {
  108. return "stepper.mac-text.def"
  109. } else if (state == .Disabled) {
  110. return "stepper.mac-text.dis"
  111. }
  112. return KMDesignTokenNone
  113. }
  114. func find_arrowBgToken(state: KMDesignTokenState) -> KMDesignTokenKey {
  115. if (state == .Norm) {
  116. return "stepper.arrow.bg.def"
  117. } else if (state == .Hov) {
  118. return "stepper.arrow.bg.hov"
  119. } else if (state == .Focus) {
  120. return "stepper.arrow.bg.def"
  121. } else if (state == .Disabled) {
  122. return "stepper.arrow.bg.def"
  123. }
  124. return KMDesignTokenNone
  125. }
  126. override func updateUI(state: KMDesignTokenState) {
  127. super.updateUI(state: state)
  128. self._stepperView?.backgroundView.layer?.backgroundColor = self.fillColor.cgColor
  129. self._stepperView?.backgroundView.layer?.borderWidth = self.borderWidth
  130. self._stepperView?.backgroundView.layer?.borderColor = self.borderColor.cgColor
  131. self._stepperView?.backgroundView.layer?.cornerRadius = self.borderRadius
  132. self._stepperView?.textField.textColor = self.textColor
  133. if let _font = NSFont(name: self.fontName, size: self.fontSize) {
  134. self._stepperView?.textField.font = _font
  135. }
  136. }
  137. }
  138. extension KMDesignStepperView: KMTextFieldDelegate {
  139. func km_didBecomeFirstResponder(textField: AnyObject) {
  140. if (textField.isEqual(to: self._stepperView)) {
  141. self.state = .Focus
  142. }
  143. self.delegate?.km_didBecomeFirstResponder(textField: self)
  144. }
  145. func km_controlTextShouldBeginEditing(textField: AnyObject) -> Bool {
  146. if let should = self.delegate?.km_controlTextShouldBeginEditing(textField: self) {
  147. return should
  148. }
  149. return true
  150. }
  151. func km_controlTextDidBeginEditing(textField: AnyObject) {
  152. self.delegate?.km_controlTextDidBeginEditing(textField: self)
  153. }
  154. func km_controlTextDidChange(textField: AnyObject) {
  155. self.delegate?.km_controlTextDidChange(textField: self)
  156. }
  157. func km_controlTextShouldEndEditing(textField: AnyObject) -> Bool {
  158. if let should = self.delegate?.km_controlTextShouldEndEditing(textField: self) {
  159. return should
  160. }
  161. return true
  162. }
  163. func km_controlTextDidEndEditing(textField: AnyObject) {
  164. if (textField.isEqual(to: self._stepperView)) {
  165. self.state = .Norm
  166. }
  167. self.delegate?.km_controlTextDidEndEditing(textField: self)
  168. }
  169. }