KMMergeTableViewCell.swift 4.5 KB

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