TestFileCellView.swift 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. //
  2. // TeseCaseCell.swift
  3. // KdanAuto
  4. //
  5. // Created by 朱东勇 on 2022/11/21.
  6. //
  7. import Foundation
  8. import AppKit
  9. enum TestFileType {
  10. case Origin
  11. case Result
  12. case Compare
  13. }
  14. protocol TestFileCellViewDelegate : NSObjectProtocol {
  15. func fileCellNeedReplace(_ cell:TestFileCellView, fileName:String)
  16. func fileCellNeedShowReport(_ cell:TestFileCellView, fileName:String, sender:NSButton)
  17. func fileCellNeedShowInFinder(_ cell:TestFileCellView, fileName:String, type:TestFileType)
  18. func fileCellNeedDelete(_ cell:TestFileCellView, fileName:String)
  19. func fileCellNeedDeleteAll(_ cell:TestFileCellView)
  20. func fileCellNeedCancelConvertTask(_ cell:TestFileCellView, fileName:String)
  21. }
  22. class TestFileCellView : NSTableCellView, NSMenuDelegate {
  23. @IBOutlet var _titleLbl : NSTextField!
  24. @IBOutlet var _sepLine : NSView!
  25. @IBOutlet var _progressView : NSProgressIndicator!
  26. @IBOutlet var _replaceBtn : NSButton!
  27. @IBOutlet var _testReportBtn : NSButton!
  28. var _title : String!
  29. var _isExpad: Bool!
  30. var _typeInfo : NSDictionary!
  31. var _showOriginMenuItem : NSMenuItem!
  32. var _showResultMenuItem : NSMenuItem!
  33. var _showCompareMenuItem : NSMenuItem!
  34. var _cancelMenuItem : NSMenuItem!
  35. var _isActivting : Bool = false;
  36. var _degree : Double = 0
  37. weak public var _delegate : (TestFileCellViewDelegate)?
  38. class func shared() -> TestFileCellView? {
  39. var objects : NSArray!
  40. Bundle.main.loadNibNamed("TestFileCellView", owner: nil, topLevelObjects: &objects)
  41. for tView in objects {
  42. if let tv = tView as? TestFileCellView {
  43. return tv
  44. }
  45. }
  46. return nil
  47. }
  48. override func awakeFromNib() {
  49. _sepLine.wantsLayer = true;
  50. _sepLine.layer?.backgroundColor = NSColor.lightGray.cgColor
  51. let _menu = NSMenu(title: "")
  52. // Show In Finder
  53. _showOriginMenuItem = NSMenuItem.init(title: "在访达中显示[原文件]", action:#selector(self.showInFinder(_:)), keyEquivalent: "")
  54. _showOriginMenuItem.target = self;
  55. _menu.addItem(_showOriginMenuItem)
  56. _showResultMenuItem = NSMenuItem.init(title: "在访达中显示[结果文件]", action:#selector(self.showInFinder(_:)), keyEquivalent: "")
  57. _showResultMenuItem.target = self;
  58. _menu.addItem(_showResultMenuItem)
  59. _showCompareMenuItem = NSMenuItem.init(title: "在访达中显示[对照文件]", action:#selector(self.showInFinder(_:)), keyEquivalent: "")
  60. _showCompareMenuItem.target = self;
  61. _menu.addItem(_showCompareMenuItem)
  62. _menu.addItem(NSMenuItem.separator());
  63. // Cancel Convert Task
  64. _cancelMenuItem = NSMenuItem.init(title: "取消转档任务", action: #selector(self.cancelAction(_:)), keyEquivalent: "")
  65. _cancelMenuItem.isEnabled = false;
  66. _menu.addItem(_cancelMenuItem)
  67. _cancelMenuItem.target = self;
  68. _menu.addItem(NSMenuItem.separator());
  69. // Delete Origin Files
  70. let item1 = NSMenuItem.init(title: "删除", action: #selector(self.deleteActions(_:)), keyEquivalent: "")
  71. _menu.addItem(item1)
  72. item1.target = self;
  73. let deleteAll = NSMenuItem.init(title: "删除全部", action: #selector(self.deleteAllActions(_:)), keyEquivalent: "")
  74. _menu.addItem(deleteAll)
  75. deleteAll.target = self;
  76. self.menu = _menu
  77. self.menu?.delegate = self;
  78. NSEvent.addLocalMonitorForEvents(matching: NSEvent.EventTypeMask.rightMouseUp) { event in
  79. var point = event.locationInWindow;
  80. if (nil != self.window?.contentView) {
  81. point = self.window!.contentView!.convert(point, to: self)
  82. if (event.type == .rightMouseUp && CGRectContainsPoint(self.bounds, point)) {
  83. NSMenu.popUpContextMenu(self.menu!, with: event, for: self)
  84. return nil;
  85. }
  86. }
  87. return event
  88. }
  89. }
  90. // Setter & Getter
  91. public func setTitle(_ title:String) {
  92. _title = title;
  93. _titleLbl.stringValue = _title ?? ""
  94. }
  95. public func title() -> String? {
  96. return _title
  97. }
  98. public func set(_ activiting:Bool) {
  99. _isActivting = activiting;
  100. if (_isActivting) {
  101. _progressView.startAnimation(nil);
  102. _cancelMenuItem.isEnabled = true;
  103. }else {
  104. _progressView.stopAnimation(nil);
  105. _cancelMenuItem.isEnabled = false;
  106. }
  107. _progressView.isHidden = !_isActivting
  108. }
  109. public func fileType() -> String? {
  110. return _title
  111. }
  112. public func setNeedReplaceBtn(_ needReplace:Bool) {
  113. _replaceBtn.isHidden = !needReplace
  114. }
  115. public func setTypeInfo(_ typeInfo:NSDictionary) {
  116. _typeInfo = typeInfo
  117. self.setTitle(_typeInfo["Type"] as! String)
  118. }
  119. public func typeInfo() -> NSDictionary? {
  120. return _typeInfo
  121. }
  122. public func setNeedDegreeBtn(_ needDegree:Bool) {
  123. _testReportBtn.isHidden = !needDegree
  124. if (needDegree) {
  125. self.set(!needDegree)
  126. }
  127. }
  128. public func setDegree(_ degree:Double) {
  129. _degree = degree
  130. if fabs(_degree - 100) > 0.01 {
  131. _testReportBtn.contentTintColor = NSColor.red
  132. }else {
  133. _testReportBtn.contentTintColor = NSColor.gray
  134. }
  135. _testReportBtn.title = NSString(format: "%.0f%%", floor(_degree)) as String
  136. }
  137. // IBActionn
  138. @IBAction func replaceAction(_ sender:NSButton) {
  139. if _delegate != nil {
  140. _delegate?.fileCellNeedReplace(self, fileName: _title)
  141. }
  142. }
  143. @IBAction func showReportAction(_ sender:NSButton) {
  144. if _delegate != nil {
  145. _delegate?.fileCellNeedShowReport(self, fileName: _title, sender: sender)
  146. }
  147. }
  148. @IBAction func showInFinder(_ sender:NSMenuItem) {
  149. if _delegate != nil {
  150. var type = TestFileType.Origin;
  151. if (sender == _showResultMenuItem) {
  152. type = TestFileType.Result
  153. }else if (sender == _showCompareMenuItem) {
  154. type = TestFileType.Compare
  155. }
  156. _delegate?.fileCellNeedShowInFinder(self, fileName: _title, type: type)
  157. }
  158. }
  159. @IBAction func deleteActions(_ sender:NSMenuItem) {
  160. if _delegate != nil {
  161. _delegate?.fileCellNeedDelete(self, fileName: _title)
  162. }
  163. }
  164. @IBAction func deleteAllActions(_ sender:NSMenuItem) {
  165. if _delegate != nil {
  166. _delegate?.fileCellNeedDeleteAll(self)
  167. }
  168. }
  169. @IBAction func cancelAction(_ sender:NSMenuItem) {
  170. if (_delegate != nil) {
  171. _cancelMenuItem.isEnabled = false;
  172. _delegate?.fileCellNeedCancelConvertTask(self, fileName: _title);
  173. }
  174. }
  175. }