TestCaseCellView.swift 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. //
  2. // TeseCaseCell.swift
  3. // KdanAuto
  4. //
  5. // Created by 朱东勇 on 2022/11/21.
  6. //
  7. import Foundation
  8. import AppKit
  9. public protocol TestCaseCellViewDelegate : NSObjectProtocol {
  10. func selectKeyDidUpdate(_ cell:NSTableCellView?)
  11. }
  12. class TestCaseCellView : NSTableCellView {
  13. @IBOutlet var _titleLbl : NSTextField!
  14. @IBOutlet var _keyContentView : NSView!
  15. @IBOutlet var _sepLine : NSView!
  16. @IBOutlet var _activityView : ActivityView!
  17. @IBOutlet var _toggleBtn : NSButton!
  18. var _keyViews : NSMutableArray!
  19. var _autoTestObj : AutoTest?
  20. var _title : String!
  21. var _checkKeys : NSArray!
  22. var delegate : TestCaseCellViewDelegate?
  23. class func shared() -> TestCaseCellView? {
  24. var objects : NSArray!
  25. Bundle.main.loadNibNamed("TestCaseCellView", owner: nil, topLevelObjects: &objects)
  26. for tView in objects {
  27. if let tv = tView as? TestCaseCellView {
  28. return tv
  29. }
  30. }
  31. return nil
  32. }
  33. override func awakeFromNib() {
  34. _sepLine.wantsLayer = true;
  35. _sepLine.layer?.backgroundColor = NSColor.lightGray.cgColor
  36. }
  37. // Setter & Getter
  38. public func setTitle(_ title:String) {
  39. _title = title;
  40. _titleLbl.stringValue = _title ?? ""
  41. }
  42. public func title() -> String? {
  43. return _title
  44. }
  45. let kTFDefaultHeight = 22.0
  46. public func setCheckKeys(_ keys:NSArray) {
  47. _checkKeys = keys;
  48. if _keyViews == nil {
  49. _keyViews = NSMutableArray()
  50. }
  51. while (_keyViews.count != _checkKeys.count) {
  52. if (_keyViews.count > _checkKeys.count) {
  53. (_keyViews.lastObject as! NSTextField).removeFromSuperview()
  54. _keyViews.removeLastObject()
  55. }else {
  56. let tf = NSTextField.init(frame: CGRectMake(0, 4, 30, kTFDefaultHeight));
  57. _keyContentView.addSubview(tf);
  58. tf.backgroundColor = .clear
  59. _keyViews.add(tf)
  60. }
  61. }
  62. var width = 0.0;
  63. for tf in _keyViews {
  64. let i = _keyViews.index(of: tf)
  65. let tfView = tf as! NSTextField
  66. tfView.stringValue = _checkKeys[i] as! String;
  67. tfView.sizeToFit()
  68. tfView.setFrameOrigin(NSPoint.init(x: width, y: 0))
  69. tfView.setFrameSize(NSSize.init(width: (tfView.frame.size.width.advanced(by: 2.0)), height: kTFDefaultHeight));
  70. tfView.autoresizingMask = .maxXMargin.union(.maxYMargin)
  71. tfView.wantsLayer = true
  72. tfView.layer?.cornerRadius = 8
  73. tfView.layer?.backgroundColor = NSColor.clear.cgColor
  74. tfView.layer?.borderColor = NSColor.lightGray.withAlphaComponent(0.6).cgColor
  75. tfView.layer?.borderWidth = 1
  76. tfView.isEditable = false
  77. width = width + tfView.frame.size.width + 3
  78. }
  79. // _keyContentView.frame = NSRect(x: 0, y: 0, width: width, height: kTFDefaultHeight)
  80. // _keyContentView.setFrameSize(NSSize.init(width: width, height: kTFDefaultHeight))
  81. // update Toggle Btn
  82. if _checkKeys.count == 0 {
  83. _toggleBtn.image = NSImage(named: "Toggle_off.png")
  84. }else if _checkKeys.count != _autoTestObj?.keys().count {
  85. _toggleBtn.image = NSImage(named: "Toggle_half.png")
  86. }else {
  87. _toggleBtn.image = NSImage(named: "Toggle_on.png")
  88. }
  89. }
  90. public func checkKeys() -> NSArray? {
  91. return _checkKeys;
  92. }
  93. public func autoTestObj() -> AutoTest? {
  94. return _autoTestObj
  95. }
  96. public func setAutoTestObj(_ obj: AutoTest?) {
  97. _autoTestObj = obj
  98. // self.setAccessibilityEnabled((_autoTestObj?.isOriginFileExist() == true && _autoTestObj?.isCheckFileExist() == true))
  99. if nil != _autoTestObj {
  100. self.setTitle((_autoTestObj?.name())!)
  101. self.setCheckKeys((_autoTestObj?.selectedKeys())!)
  102. // self.wantsLayer = true
  103. // if _autoTestObj?.isOriginFileExist() == true && _autoTestObj?.isCheckFileExist() == true {
  104. // self.layer?.opacity = 1
  105. // }else {
  106. // self.layer?.opacity = 0.5
  107. // }
  108. }else {
  109. self.setTitle("")
  110. self.setCheckKeys([])
  111. // self.wantsLayer = true
  112. // self.layer?.opacity = 0.5
  113. }
  114. updateStatus()
  115. }
  116. public func updateStatus() {
  117. _activityView.setDegree(_autoTestObj?.degree() ?? 0)
  118. _activityView.setActivityStatus(ActivityStatus(rawValue: (_autoTestObj?.status())!.rawValue) ?? .Normal)
  119. }
  120. // IBAction
  121. @IBAction func toggleAction(_ sender:NSButton) {
  122. if _autoTestObj != nil {
  123. if _checkKeys.count == 0 {
  124. _autoTestObj?.setSelectedKeys((_autoTestObj?.keys())!)
  125. }else if _checkKeys.count != _autoTestObj?.keys().count {
  126. _autoTestObj?.setSelectedKeys((_autoTestObj?.keys())!)
  127. }else {
  128. _autoTestObj?.setSelectedKeys([])
  129. }
  130. self.setCheckKeys((_autoTestObj?.selectedKeys())!)
  131. if delegate != nil {
  132. delegate?.selectKeyDidUpdate(self)
  133. }
  134. }
  135. }
  136. }