TestFileCellView.swift 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  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 _replaceBtn : NSButton!
  19. @IBOutlet var _testReportBtn : NSButton!
  20. var _title : String!
  21. var _isExpad: Bool!
  22. var _typeInfo : NSDictionary!
  23. var _degree : Double = 0
  24. weak public var _delegate : (TestFileCellViewDelegate)?
  25. class func shared() -> TestFileCellView? {
  26. var objects : NSArray!
  27. Bundle.main.loadNibNamed("TestFileCellView", owner: nil, topLevelObjects: &objects)
  28. for tView in objects {
  29. if let tv = tView as? TestFileCellView {
  30. return tv
  31. }
  32. }
  33. return nil
  34. }
  35. override func awakeFromNib() {
  36. _sepLine.wantsLayer = true;
  37. _sepLine.layer?.backgroundColor = NSColor.lightGray.cgColor
  38. let _menu = NSMenu(title: "")
  39. let item = NSMenuItem.init(title: "在访达中显示", action:#selector(self.showInFinder(_:)), keyEquivalent: "")
  40. item.target = self;
  41. _menu.addItem(item)
  42. let item1 = NSMenuItem.init(title: "删除", action: #selector(self.deleteActions(_:)), keyEquivalent: "")
  43. _menu.addItem(item1)
  44. item1.target = self;
  45. self.menu = _menu
  46. self.menu?.delegate = self;
  47. NSEvent.addLocalMonitorForEvents(matching: NSEvent.EventTypeMask.rightMouseUp) { event in
  48. if (event.type == .rightMouseUp) {
  49. NSMenu.popUpContextMenu(self.menu!, with: event, for: self)
  50. return nil;
  51. }
  52. return event
  53. }
  54. }
  55. // Setter & Getter
  56. public func setTitle(_ title:String) {
  57. _title = title;
  58. _titleLbl.stringValue = _title ?? ""
  59. }
  60. public func title() -> String? {
  61. return _title
  62. }
  63. public func fileType() -> String? {
  64. return _title
  65. }
  66. public func setNeedReplaceBtn(_ needReplace:Bool) {
  67. _replaceBtn.isHidden = !needReplace
  68. }
  69. public func setTypeInfo(_ typeInfo:NSDictionary) {
  70. _typeInfo = typeInfo
  71. self.setTitle(_typeInfo["Type"] as! String)
  72. }
  73. public func typeInfo() -> NSDictionary? {
  74. return _typeInfo
  75. }
  76. public func setNeedDegreeBtn(_ needDegree:Bool) {
  77. _testReportBtn.isHidden = !needDegree
  78. }
  79. public func setDegree(_ degree:Double) {
  80. _degree = degree
  81. if fabs(_degree - 100) > 0.01 {
  82. _testReportBtn.contentTintColor = NSColor.red
  83. }else {
  84. _testReportBtn.contentTintColor = NSColor.gray
  85. }
  86. _testReportBtn.title = NSString(format: "%.0f%%", _degree) as String
  87. }
  88. // IBActionn
  89. @IBAction func replaceAction(_ sender:NSButton) {
  90. if _delegate != nil {
  91. _delegate?.fileCellNeedReplace(self, fileName: _title)
  92. }
  93. }
  94. @IBAction func showReportAction(_ sender:NSButton) {
  95. if _delegate != nil {
  96. _delegate?.fileCellNeedShowReport(self, fileName: _title, sender: sender)
  97. }
  98. }
  99. @IBAction func showInFinder(_ sender:NSMenuItem) {
  100. if _delegate != nil {
  101. _delegate?.fileCellNeedShowInFinder(self, fileName: _title)
  102. }
  103. }
  104. @IBAction func deleteActions(_ sender:NSMenuItem) {
  105. if _delegate != nil {
  106. _delegate?.fileCellNeedDelete(self, fileName: _title)
  107. }
  108. }
  109. }