KMBookmark.swift 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. //
  2. // KMBookmark.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by lizhe on 2024/2/5.
  6. //
  7. import Cocoa
  8. enum KMBookmarkType: Int {
  9. case bookmark = 0
  10. case folder
  11. case session
  12. case separator
  13. }
  14. class KMBookmark: NSObject {
  15. var properties: NSDictionary?
  16. var bookmarkType: KMBookmarkType = .bookmark
  17. var label: String = ""
  18. var icon: NSImage = NSImage()
  19. var alternateIcon: NSImage = NSImage()
  20. var fileURL: URL?
  21. var pageIndex: UInt = 0
  22. var pageNumber: NSNumber = 0
  23. var documentSetup: [String: String] = [:]//文档
  24. var parent: KMBookmark?
  25. var children: [KMBookmark] = [] //子
  26. static func bookmark(url: URL, pageIndex: UInt, label: String) -> KMBookmark {
  27. var bookmark = KMBookmark()
  28. bookmark.fileURL = url
  29. bookmark.pageIndex = pageIndex
  30. bookmark.label = label
  31. return bookmark
  32. }
  33. func initWithProperties(properties: NSDictionary) -> KMBookmark {
  34. return KMBookmark()
  35. }
  36. static func bookmark(properties: NSDictionary) -> KMBookmark {
  37. return KMBookmark()
  38. }
  39. // - (id)initWithProperties:(NSDictionary *)dictionary {
  40. // NSString *type = [dictionary objectForKey:TYPE_KEY];
  41. // if ([type isEqualToString:SEPARATOR_STRING]) {
  42. // return (id)[[SKSeparatorBookmark alloc] init];
  43. // } else if ([type isEqualToString:FOLDER_STRING] || [type isEqualToString:SESSION_STRING]) {
  44. // Class bookmarkClass = [type isEqualToString:FOLDER_STRING] ? [SKFolderBookmark class] : [SKSessionBookmark class];
  45. // NSMutableArray *newChildren = [NSMutableArray array];
  46. // SKBookmark *child;
  47. // for (NSDictionary *dict in [dictionary objectForKey:CHILDREN_KEY]) {
  48. // if ((child = [[SKBookmark alloc] initWithProperties:dict])) {
  49. // [newChildren addObject:child];
  50. // [child release];
  51. // } else
  52. // NSLog(@"Failed to read child bookmark: %@", dict);
  53. // }
  54. // return (id)[[bookmarkClass alloc] initFolderWithChildren:newChildren label:[dictionary objectForKey:LABEL_KEY]];
  55. // } else if ([dictionary objectForKey:@"windowFrame"]) {
  56. // return (id)[[SKFileBookmark alloc] initWithSetup:dictionary label:[dictionary objectForKey:LABEL_KEY]];
  57. // } else {
  58. // NSNumber *pageIndex = [dictionary objectForKey:PAGEINDEX_KEY];
  59. // return (id)[[SKFileBookmark alloc] initWithAliasData:[dictionary objectForKey:ALIASDATA_KEY] pageIndex:(pageIndex ? [pageIndex unsignedIntegerValue] : NSNotFound) label:[dictionary objectForKey:LABEL_KEY]];
  60. // }
  61. // }
  62. }
  63. //MARK: Folder
  64. class KMFolderBookmark: KMBookmark {
  65. override var bookmarkType: KMBookmarkType {
  66. get {
  67. return .folder
  68. }
  69. set {
  70. }
  71. }
  72. override func initWithProperties(properties: NSDictionary) -> KMBookmark {
  73. return KMFolderBookmark()
  74. }
  75. static func bookmarkRoot(childrenProperties: NSArray) -> KMFolderBookmark {
  76. var bookmark = KMFolderBookmark()
  77. var childs: [KMBookmark] = []
  78. for setup in childrenProperties {
  79. let bookmark = KMBookmark()
  80. bookmark.documentSetup = setup as! [String : String]
  81. childs.append(bookmark)
  82. }
  83. bookmark.children = childs
  84. bookmark.label = NSLocalizedString("Bookmarks Menu", comment: "")
  85. return bookmark
  86. }
  87. // - (id)initRootWithChildrenProperties:(NSArray *)childrenProperties {
  88. // NSMutableArray *aChildren = [NSMutableArray array];
  89. // SKBookmark *child;
  90. // for (NSDictionary *dict in childrenProperties) {
  91. // if ((child = [[SKBookmark alloc] initWithProperties:dict])) {
  92. // [aChildren addObject:child];
  93. // [child release];
  94. // }
  95. // }
  96. // return (id)[[SKRootBookmark alloc] initFolderWithChildren:aChildren label:NSLocalizedString(@"Bookmarks Menu", @"Menu item title")];
  97. // }
  98. }
  99. //MARK: Session
  100. class KMSessionBookmark: KMBookmark {
  101. override var bookmarkType: KMBookmarkType {
  102. get {
  103. return .session
  104. }
  105. set {
  106. }
  107. }
  108. static func bookmarkSession(setups: NSArray, label: String) -> KMSessionBookmark {
  109. var bookmark = KMSessionBookmark()
  110. var childs: [KMBookmark] = []
  111. for setup in setups {
  112. let bookmark = KMBookmark()
  113. bookmark.documentSetup = setup as! [String : String]
  114. childs.append(bookmark)
  115. }
  116. bookmark.children = childs
  117. bookmark.label = label
  118. return bookmark
  119. }
  120. override func initWithProperties(properties: NSDictionary) -> KMBookmark {
  121. return KMSessionBookmark()
  122. }
  123. }
  124. //MARK: Separator
  125. class KMSeparatorBookmark: KMBookmark {
  126. override var bookmarkType: KMBookmarkType {
  127. get {
  128. return .separator
  129. }
  130. set {
  131. }
  132. }
  133. override func initWithProperties(properties: NSDictionary) -> KMBookmark {
  134. return KMSeparatorBookmark()
  135. }
  136. }