TestCaseCellView.swift 6.1 KB

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