ProgressVC.swift 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. //
  2. // ProgressVC.swift
  3. // KMComponentLibrary
  4. //
  5. // Created by Niehaoyu on 2024/9/6.
  6. //
  7. import Cocoa
  8. import KMComponentLibrary
  9. class ProgressVC: NSViewController {
  10. @IBOutlet weak var progressCircle: ComponentProgressCircle!
  11. @IBOutlet weak var circleSizeBox: NSComboBox!
  12. @IBOutlet weak var circleTypeBox: NSComboBox!
  13. @IBOutlet weak var itemWidthConst: NSLayoutConstraint!
  14. @IBOutlet weak var itemHeightConst: NSLayoutConstraint!
  15. @IBOutlet weak var progressLine: ComponentProgressLine!
  16. @IBOutlet weak var lineTypeBox: NSComboBox!
  17. @IBOutlet weak var progressPopup: ComponentProgressPopup!
  18. var progressTimer: Timer?
  19. override func viewDidLoad() {
  20. super.viewDidLoad()
  21. // Do view setup here.
  22. self.circleSizeBox.selectItem(at: 0)
  23. self.circleTypeBox.selectItem(at: 0)
  24. self.lineTypeBox.selectItem(at: 0)
  25. self.reloadData()
  26. }
  27. func reloadData() {
  28. var size: ComponentSize = .m
  29. if self.circleSizeBox.indexOfSelectedItem == 1 {
  30. size = .s
  31. }
  32. var circleType: componentProgressSubType = .circle_Waiting
  33. if self.circleTypeBox.indexOfSelectedItem == 0 {
  34. } else if self.circleTypeBox.indexOfSelectedItem == 1 {
  35. circleType = .circle_ProgressPercent
  36. } else if self.circleTypeBox.indexOfSelectedItem == 2 {
  37. circleType = .circle_ErrorPercent
  38. } else if self.circleTypeBox.indexOfSelectedItem == 3 {
  39. circleType = .circle_ProgressNoPercent
  40. } else if self.circleTypeBox.indexOfSelectedItem == 4 {
  41. circleType = .circle_ErrorNoPercent
  42. } else if self.circleTypeBox.indexOfSelectedItem == 5 {
  43. circleType = .circle_Success
  44. }
  45. //progressItem
  46. let properties: ComponentProgressProperty = ComponentProgressProperty.init(size: size, progressType: .circle, subType: circleType, progress: 0)
  47. self.progressCircle.properties = properties
  48. itemWidthConst.constant = properties.propertyInfo.viewWidth
  49. itemHeightConst.constant = properties.propertyInfo.viewHeight
  50. if (progressTimer != nil) {
  51. progressTimer?.invalidate()
  52. progressTimer = nil
  53. }
  54. if circleType == .circle_ProgressPercent ||
  55. circleType == .circle_ErrorPercent {
  56. self.progressTimer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(progressTimerAction), userInfo: nil, repeats: true)
  57. }
  58. //Progress Line
  59. var lineType: componentProgressSubType = .line_Progressing
  60. var lineProgress: CGFloat = 0
  61. if self.lineTypeBox.indexOfSelectedItem == 0 {
  62. } else if self.lineTypeBox.indexOfSelectedItem == 1 {
  63. lineType = .line_Error
  64. lineProgress = 1
  65. } else if self.lineTypeBox.indexOfSelectedItem == 2 {
  66. lineType = .line_Success
  67. lineProgress = 1
  68. }
  69. let lineProperties: ComponentProgressProperty = ComponentProgressProperty.init(size: size, progressType: .line, subType: lineType, progress: lineProgress)
  70. self.progressLine.properties = lineProperties
  71. if lineType == .line_Progressing {
  72. self.progressTimer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(progressTimerAction), userInfo: nil, repeats: true)
  73. }
  74. //Progress Popup
  75. let popUpProperties: ComponentProgressProperty = ComponentProgressProperty.init(size: size, progressType: .popup, subType: .popup_Normal, progress: 0, titleString: "Progressing")
  76. self.progressPopup.properties = popUpProperties
  77. }
  78. @IBAction func boxAction(_ sender: Any) {
  79. self.reloadData()
  80. }
  81. @objc func progressTimerAction() {
  82. if self.progressCircle.properties.progressSubType == .circle_ProgressPercent ||
  83. self.progressCircle.properties.progressSubType == .circle_ErrorPercent {
  84. self.progressCircle.properties.progress += 0.01
  85. if self.progressCircle.properties.progress >= 1 {
  86. self.progressCircle.properties.progress = 0
  87. }
  88. self.progressCircle.reloadData()
  89. }
  90. if self.progressLine.properties.progressSubType == .line_Progressing {
  91. self.progressLine.properties.progress += 0.01
  92. if self.progressLine.properties.progress >= 1 {
  93. self.progressLine.properties.progress = 0
  94. }
  95. self.progressLine.reloadData()
  96. }
  97. self.progressPopup.properties.progress += 0.01
  98. if self.progressPopup.properties.progress >= 1 {
  99. self.progressPopup.properties.progress = 0
  100. }
  101. self.progressPopup.reloadData()
  102. }
  103. }