KMMergeTableViewCell.swift 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. //
  2. // KMMergeTableViewCell.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by lizhe on 2023/11/8.
  6. //
  7. import Cocoa
  8. typealias KMMergeTableViewCellRemoveAction = (_ view: KMMergeTableViewCell, _ fileModel: KMFileAttribute) -> Void
  9. class KMMergeTableViewCell: NSTableCellView {
  10. @IBOutlet var contentView: NSView!
  11. @IBOutlet weak var pageCountLabel: NSTextField!
  12. @IBOutlet weak var indexLabel: NSTextField!
  13. @IBOutlet weak var fileNameLabel: NSTextField!
  14. @IBOutlet weak var pageRangeLabel: NSTextField!
  15. @IBOutlet weak var sizeLabel: NSTextField!
  16. @IBOutlet weak var fileImageView: NSImageView!
  17. @IBOutlet weak var pageRangeBox: NSComboBox!
  18. var removeAction: KMMergeTableViewCellRemoveAction?
  19. var index: Int = 1 {
  20. didSet {
  21. self.reloadData()
  22. }
  23. }
  24. var fileModel: KMFileAttribute? {
  25. didSet {
  26. self.reloadData()
  27. }
  28. }
  29. // MARK: 初始化
  30. override init(frame frameRect: NSRect) {
  31. super.init(frame: frameRect)
  32. initContentView()
  33. setup()
  34. }
  35. required init?(coder decoder: NSCoder) {
  36. super.init(coder: decoder)
  37. initContentView()
  38. setup()
  39. fatalError("init(coder:) has not been implemented")
  40. }
  41. private func initContentView() {
  42. //绑定xib
  43. let resource = NSNib(nibNamed: String(describing: self.classForCoder.self),
  44. bundle: Bundle(for: self.classForCoder.self))!
  45. resource.instantiate(withOwner: self, topLevelObjects: nil)
  46. addSubview(contentView)
  47. contentView.translatesAutoresizingMaskIntoConstraints = false
  48. NSLayoutConstraint.activate([
  49. contentView.topAnchor.constraint(equalTo: topAnchor),
  50. contentView.leftAnchor.constraint(equalTo: leftAnchor),
  51. contentView.rightAnchor.constraint(equalTo: rightAnchor),
  52. contentView.bottomAnchor.constraint(equalTo: bottomAnchor)])
  53. contentView.updateConstraintsForSubtreeIfNeeded()
  54. }
  55. func setup() {
  56. pageRangeBox.removeAllItems()
  57. pageRangeBox.delegate = self
  58. pageRangeBox.addItems(withObjectValues: [NSLocalizedString("All Pages", comment: ""),
  59. NSLocalizedString("Odd Pages Only", comment: ""),
  60. NSLocalizedString("Even Pages Only", comment: ""),
  61. NSLocalizedString("e.g. 1,3-5,10", comment: "")])
  62. pageRangeBox.placeholderString = NSLocalizedString("e.g. 1,3-5,10", comment: "")
  63. self.updateLanguage()
  64. }
  65. func reloadData() {
  66. guard let fileModel = fileModel else { return }
  67. indexLabel.stringValue = index.description
  68. fileImageView.image = fileModel.fileImage
  69. fileNameLabel.stringValue = fileModel.filePath.lastPathComponent
  70. pageCountLabel.stringValue = "\(fileModel.pdfDocument?.pageCount ?? 0) \(NSLocalizedString("Pages", comment: ""))"
  71. sizeLabel.stringValue = self.fileSizeString(Float(fileModel.fileSize))
  72. if fileModel.pagesType == .all {
  73. pageRangeBox.selectItem(at: 0)
  74. } else if fileModel.pagesType == .odd {
  75. pageRangeBox.selectItem(at: 1)
  76. } else if fileModel.pagesType == .even {
  77. pageRangeBox.selectItem(at: 2)
  78. } else {
  79. pageRangeBox.cell?.stringValue = fileModel.pagesString
  80. }
  81. }
  82. func updateLanguage() {
  83. pageRangeLabel.stringValue = NSLocalizedString("Page Range", comment: "")
  84. }
  85. @IBAction func removeButtonAction(_ sender: Any) {
  86. guard let callBack = removeAction else { return }
  87. guard let fileModel = fileModel else { return }
  88. callBack(self, fileModel)
  89. }
  90. @IBAction func comboBoxAction(_ sender: NSComboBoxCell) {
  91. guard let fileModel = fileModel else { return }
  92. let type = KMPageRange.init(rawValue: sender.indexOfSelectedItem) ?? .all
  93. fileModel.pagesType = type
  94. if type == .custom {
  95. fileModel.pagesString = sender.stringValue
  96. }
  97. }
  98. }
  99. extension KMMergeTableViewCell: NSComboBoxDelegate {
  100. }
  101. extension KMMergeTableViewCell {
  102. func fileSizeString(_ fSize: Float) -> String {
  103. let fileSize = fSize / 1024
  104. let size = fileSize >= 1024 ? (fileSize < 1048576 ? fileSize/1024 : fileSize/1048576.0) : fileSize
  105. let unit = fileSize >= 1024 ? (fileSize < 1048576 ? "M" : "G") : "K"
  106. return String(format: "%0.1f %@", size, unit)
  107. }
  108. }