KMPageRangeSelectView.swift 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. //
  2. // KMPageRangeSelectView.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by Niehaoyu on 2024/11/21.
  6. //
  7. import Cocoa
  8. import KMComponentLibrary
  9. class KMPageRangeSelectView: NSView {
  10. var pageSelectView: ComponentSelect = ComponentSelect()
  11. override init(frame frameRect: NSRect) {
  12. super.init(frame: frameRect)
  13. setUp()
  14. }
  15. required init?(coder: NSCoder) {
  16. super.init(coder: coder)
  17. setUp()
  18. }
  19. func setUp() {
  20. pageSelectView.frame = self.bounds
  21. pageSelectView.autoresizingMask = [.width, .height]
  22. self.addSubview(pageSelectView)
  23. pageSelectView.properties = ComponentSelectProperties(size: .s,
  24. state: .normal,
  25. placeholder: KMLocalizedString("e.g. 1,3-5,10"),
  26. errorText: nil,
  27. creatable: false,
  28. text: KMLocalizedString("All Pages"),
  29. regexString: "0123456789,-")
  30. pageSelectView.delegate = self
  31. let menuItemString:[String] = [KMLocalizedString("Current Page"),
  32. KMLocalizedString("All Pages"),
  33. KMLocalizedString("Odd Pages Only"),
  34. KMLocalizedString("Even Pages Only"),
  35. KMLocalizedString("e.g. 1,3-5,10")]
  36. var menuItemArr: [ComponentMenuitemProperty] = []
  37. for language in menuItemString {
  38. let itemProperty: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false,
  39. itemSelected: false,
  40. isDisabled: false,
  41. keyEquivalent: nil,
  42. text: language,
  43. identifier: language)
  44. menuItemArr.append(itemProperty)
  45. }
  46. pageSelectView.updateMenuItemsArr(menuItemArr)
  47. pageSelectView.selectItemAtIndex(0)
  48. }
  49. //MARK: - Get
  50. func getSelectedPageString(_ document: CPDFDocument, _ pageIndexs: [Int]) -> String {
  51. var pages = [Int]()
  52. if pageSelectView.indexOfSelect() == 1 {
  53. pages = Array(0..<Int(document.pageCount))
  54. } else if pageSelectView.indexOfSelect() == 2 {
  55. pages = Array(stride(from: 0, to: Int(document.pageCount), by: 2))
  56. } else if pageSelectView.indexOfSelect() == 3 {
  57. pages = Array(stride(from: 1, to: Int(document.pageCount), by: 2))
  58. } else {
  59. pages = pageIndexs.map { $0 - 1 }
  60. }
  61. let pageIndexString = pages.isEmpty ? "" : pages.map { "\($0)" }.joined(separator: ",")
  62. return pageIndexString
  63. }
  64. func getSelectedPageIndex(_ document: CPDFDocument) -> ([Int], Bool) {
  65. let pageRangeSelectIndex = pageSelectView.indexOfSelect()
  66. let fileAttribute = KMNFileAttribute()
  67. fileAttribute.pdfDocument = document
  68. fileAttribute.password = document.password ?? ""
  69. if pageRangeSelectIndex == 0 {
  70. } else if pageRangeSelectIndex == 1 {
  71. fileAttribute.bAllPage = true
  72. fileAttribute.pagesType = .AllPages
  73. } else if pageRangeSelectIndex == 2 {
  74. fileAttribute.bAllPage = false
  75. fileAttribute.pagesType = .OnlyOdd
  76. } else {
  77. if(document.pageCount <= 1) {
  78. fileAttribute.bAllPage = false
  79. fileAttribute.pagesType = .PagesString
  80. fileAttribute.pagesString = pageSelectView.properties.text ?? ""
  81. } else {
  82. fileAttribute.bAllPage = false
  83. if(pageRangeSelectIndex == 2) {
  84. fileAttribute.pagesType = .OnlyEven
  85. } else {
  86. fileAttribute.bAllPage = false
  87. fileAttribute.pagesType = .PagesString
  88. fileAttribute.pagesString = pageSelectView.properties.text ?? ""
  89. }
  90. }
  91. }
  92. let pageIndex = fileAttribute.fetchSelectPages()
  93. return (pageIndex, pageRangeSelectIndex == 0)
  94. }
  95. }
  96. extension KMPageRangeSelectView: ComponentSelectDelegate {
  97. func componentSelectDidSelect(view: ComponentSelect?, menuItemProperty: ComponentMenuitemProperty?) {
  98. if menuItemProperty?.identifier == KMLocalizedString("e.g. 1,3-5,10") {
  99. view?.properties.creatable = true
  100. view?.properties.text = ""
  101. } else {
  102. view?.properties.creatable = false
  103. }
  104. view?.reloadData()
  105. }
  106. }