KMAnnotationModel.swift 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. //
  2. // KMAnnotationModel.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by tangchao on 2024/4/3.
  6. //
  7. import Cocoa
  8. class KMAnnotationModel: NSObject {
  9. weak var anno: CPDFAnnotation?
  10. }
  11. class KMBotaAnnotationBaseModel: KMAnnotationModel {
  12. var isExpand = false
  13. }
  14. class KMBotaAnnotationModel: KMBotaAnnotationBaseModel {
  15. var showPage = true
  16. var showTime = true
  17. var showAuthor = true
  18. var foldType: KMFoldType = .none
  19. var foldH: CGFloat = 30
  20. func isFold() -> Bool {
  21. if self.foldType == .unfold {
  22. return false
  23. }
  24. return true
  25. }
  26. func canFold() -> Bool {
  27. guard let data = self.anno else {
  28. return false
  29. }
  30. if data is CPDFMarkupAnnotation {
  31. return true
  32. }
  33. if data is CPDFTextAnnotation {
  34. return true
  35. }
  36. return false
  37. }
  38. }
  39. class KMBotaAnnotationFooterModel: KMBotaAnnotationBaseModel {
  40. }
  41. class KMBotaAnnotationSectionModel: NSObject {
  42. var items: [KMBotaAnnotationBaseModel] = []
  43. var itemCount: Int {
  44. get {
  45. return self.items.count
  46. }
  47. }
  48. var isExpand = true
  49. }
  50. class KMAnnotationListModel: NSObject {
  51. var datas: [KMBotaAnnotationSectionModel] = []
  52. // 默认全部折叠
  53. var foldType: KMFoldType {
  54. set {
  55. for model in self.canFoldModel() {
  56. if newValue != .none {
  57. model.foldType = newValue
  58. }
  59. }
  60. }
  61. get {
  62. let canFolds = self.canFoldModel()
  63. if canFolds.isEmpty {
  64. return .none
  65. }
  66. // 是否全部折叠
  67. var isAll = true
  68. for model in canFolds {
  69. if model.isFold() == false {
  70. isAll = false
  71. break
  72. }
  73. }
  74. if isAll {
  75. return .fold
  76. }
  77. // 是否全部展开
  78. for model in canFolds {
  79. if model.isFold() {
  80. isAll = false
  81. break
  82. }
  83. }
  84. return isAll ? .unfold : .none
  85. }
  86. }
  87. func canFoldModel() -> [KMBotaAnnotationModel] {
  88. var models: [KMBotaAnnotationModel] = []
  89. for model in self.datas {
  90. for itemM in model.items {
  91. if let data = itemM as? KMBotaAnnotationModel {
  92. if data.canFold() {
  93. models.append(data)
  94. }
  95. }
  96. }
  97. }
  98. return models
  99. }
  100. func isAllFold() -> Bool {
  101. for model in self.canFoldModel() {
  102. if model.isFold() == false {
  103. return false
  104. }
  105. }
  106. return true
  107. }
  108. }