TestFileCellView.swift 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. //
  2. // TeseCaseCell.swift
  3. // KdanAuto
  4. //
  5. // Created by 朱东勇 on 2022/11/21.
  6. //
  7. import Foundation
  8. import AppKit
  9. protocol TestFileCellViewDelegate : NSObjectProtocol {
  10. func fileCellNeedReplace(_ cell:TestFileCellView, fileName:String)
  11. func fileCellNeedShowReport(_ cell:TestFileCellView, fileName:String, sender:NSButton)
  12. func fileCellNeedShowInFinder(_ cell:TestFileCellView, fileName:String)
  13. func fileCellNeedDelete(_ cell:TestFileCellView, fileName:String)
  14. }
  15. class TestFileCellView : NSTableCellView, NSMenuDelegate {
  16. @IBOutlet var _titleLbl : NSTextField!
  17. @IBOutlet var _sepLine : NSView!
  18. @IBOutlet var _progressView : NSProgressIndicator!
  19. @IBOutlet var _replaceBtn : NSButton!
  20. @IBOutlet var _testReportBtn : NSButton!
  21. var _title : String!
  22. var _isExpad: Bool!
  23. var _typeInfo : NSDictionary!
  24. var _isActivting : Bool = false;
  25. var _degree : Double = 0
  26. weak public var _delegate : (TestFileCellViewDelegate)?
  27. class func shared() -> TestFileCellView? {
  28. var objects : NSArray!
  29. Bundle.main.loadNibNamed("TestFileCellView", owner: nil, topLevelObjects: &objects)
  30. for tView in objects {
  31. if let tv = tView as? TestFileCellView {
  32. return tv
  33. }
  34. }
  35. return nil
  36. }
  37. override func awakeFromNib() {
  38. _sepLine.wantsLayer = true;
  39. _sepLine.layer?.backgroundColor = NSColor.lightGray.cgColor
  40. let _menu = NSMenu(title: "")
  41. let item = NSMenuItem.init(title: "在访达中显示", action:#selector(self.showInFinder(_:)), keyEquivalent: "")
  42. item.target = self;
  43. _menu.addItem(item)
  44. let item1 = NSMenuItem.init(title: "删除", action: #selector(self.deleteActions(_:)), keyEquivalent: "")
  45. _menu.addItem(item1)
  46. item1.target = self;
  47. self.menu = _menu
  48. self.menu?.delegate = self;
  49. NSEvent.addLocalMonitorForEvents(matching: NSEvent.EventTypeMask.rightMouseUp) { event in
  50. if (event.type == .rightMouseUp) {
  51. NSMenu.popUpContextMenu(self.menu!, with: event, for: self)
  52. return nil;
  53. }
  54. return event
  55. }
  56. }
  57. // Setter & Getter
  58. public func setTitle(_ title:String) {
  59. _title = title;
  60. _titleLbl.stringValue = _title ?? ""
  61. }
  62. public func title() -> String? {
  63. return _title
  64. }
  65. public func set(_ activiting:Bool) {
  66. _isActivting = activiting;
  67. if (_isActivting) {
  68. _progressView.startAnimation(nil);
  69. }else {
  70. _progressView.stopAnimation(nil);
  71. }
  72. _progressView.isHidden = !_isActivting
  73. }
  74. public func fileType() -> String? {
  75. return _title
  76. }
  77. public func setNeedReplaceBtn(_ needReplace:Bool) {
  78. _replaceBtn.isHidden = !needReplace
  79. }
  80. public func setTypeInfo(_ typeInfo:NSDictionary) {
  81. _typeInfo = typeInfo
  82. self.setTitle(_typeInfo["Type"] as! String)
  83. }
  84. public func typeInfo() -> NSDictionary? {
  85. return _typeInfo
  86. }
  87. public func setNeedDegreeBtn(_ needDegree:Bool) {
  88. _testReportBtn.isHidden = !needDegree
  89. if (needDegree) {
  90. self.set(!needDegree)
  91. }
  92. }
  93. public func setDegree(_ degree:Double) {
  94. _degree = degree
  95. if fabs(_degree - 100) > 0.01 {
  96. _testReportBtn.contentTintColor = NSColor.red
  97. }else {
  98. _testReportBtn.contentTintColor = NSColor.gray
  99. }
  100. _testReportBtn.title = NSString(format: "%.0f%%", _degree) as String
  101. }
  102. // IBActionn
  103. @IBAction func replaceAction(_ sender:NSButton) {
  104. if _delegate != nil {
  105. _delegate?.fileCellNeedReplace(self, fileName: _title)
  106. }
  107. }
  108. @IBAction func showReportAction(_ sender:NSButton) {
  109. if _delegate != nil {
  110. _delegate?.fileCellNeedShowReport(self, fileName: _title, sender: sender)
  111. }
  112. }
  113. @IBAction func showInFinder(_ sender:NSMenuItem) {
  114. if _delegate != nil {
  115. _delegate?.fileCellNeedShowInFinder(self, fileName: _title)
  116. }
  117. }
  118. @IBAction func deleteActions(_ sender:NSMenuItem) {
  119. if _delegate != nil {
  120. _delegate?.fileCellNeedDelete(self, fileName: _title)
  121. }
  122. }
  123. }