KMHomeOpenView.swift 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. //
  2. // KMHomeOpenView.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by Niehaoyu on 2024/10/8.
  6. //
  7. import Cocoa
  8. import KMComponentLibrary
  9. @objc protocol KMHomeOpenViewDelegate: AnyObject {
  10. @objc optional func homeOpenViewDidChooseFileURLs(_ view: KMHomeOpenView?, _ urls:[URL])
  11. }
  12. class KMHomeOpenView: BaseXibView {
  13. @IBOutlet weak var contendView: NSView!
  14. @IBOutlet weak var openFileButton: ComponentButton!
  15. @IBOutlet weak var createFileDropdown: ComponentDropdown!
  16. var groupView: ComponentGroup!
  17. var createWC: KMURLCreatePDFWindowController = KMURLCreatePDFWindowController(windowNibName: "KMURLCreatePDFWindowController")
  18. weak open var delegate: KMHomeOpenViewDelegate?
  19. override func draw(_ dirtyRect: NSRect) {
  20. super.draw(dirtyRect)
  21. // Drawing code here.
  22. }
  23. public required init?(coder decoder: NSCoder) {
  24. super.init(coder: decoder)
  25. }
  26. override init(frame frameRect: NSRect) {
  27. super.init(frame: frameRect)
  28. }
  29. public override func awakeFromNib() {
  30. super.awakeFromNib()
  31. self.setUpButtonProperty()
  32. }
  33. func setUpButtonProperty() {
  34. openFileButton.properties = ComponentButtonProperty(type: .primary,
  35. size: .m,
  36. state: .normal,
  37. buttonText: KMLocalizedString("Open Files", comment: ""))
  38. openFileButton.setTarget(self, action: #selector(openFileAction(_:)))
  39. createFileDropdown.properties = ComponentDropdownProperty(type: .default_defaultTertiary,
  40. size: .m,
  41. state: .normal,
  42. split: false,
  43. disabled: false,
  44. text: KMLocalizedString("Create PDF", comment: ""))
  45. createFileDropdown.componentDelegate = self
  46. }
  47. //MARK: - GroupView
  48. func showGroupView() {
  49. var viewHeight: CGFloat = 8
  50. var menuItemArr: [ComponentMenuitemProperty] = []
  51. for i in ["New From File", "New Blank Page", "New From Web Page", "New From Clipboard", " ", "Import From Scanner"] {
  52. if i == " " {
  53. let property: ComponentMenuitemProperty = ComponentMenuitemProperty.divider()
  54. menuItemArr.append(property)
  55. viewHeight += 8
  56. } else {
  57. let properties_Menuitem: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false, itemSelected: false, isDisabled: false, leftIcon: false, rightIcon: false, keyEquivalent: nil, text: KMLocalizedString(i, comment: ""))
  58. menuItemArr.append(properties_Menuitem)
  59. viewHeight += 36
  60. }
  61. }
  62. if groupView == nil {
  63. groupView = ComponentGroup.createFromNib(in: ComponentLibrary.shared.componentBundle())
  64. }
  65. groupView.groupDelegate = self
  66. groupView?.frame = CGRectMake(310, 0, CGRectGetWidth(self.bounds), viewHeight)
  67. groupView.updateGroupInfo(menuItemArr)
  68. groupView?.showWithPoint(createFileDropdown.frame.origin, inView: self)
  69. createFileDropdown.properties.state = .pressed
  70. createFileDropdown.reloadData()
  71. }
  72. func removeGroupView() {
  73. if groupView != nil {
  74. groupView.removeFromSuperview()
  75. }
  76. createFileDropdown.properties.state = .normal
  77. createFileDropdown.reloadData()
  78. }
  79. //MARK: - Action
  80. @objc func openFileAction(_ sender: NSView) {
  81. let openPanel = NSOpenPanel()
  82. openPanel.allowedFileTypes = ["pdf", "PDF"]
  83. openPanel.allowsMultipleSelection = false
  84. openPanel.beginSheetModal(for: self.window!) { [weak self] result in
  85. if result == NSApplication.ModalResponse.OK {
  86. if let url = openPanel.url {
  87. self?.delegate?.homeOpenViewDidChooseFileURLs?(self, [url])
  88. }
  89. }
  90. }
  91. }
  92. func newFromFile() {
  93. let openPanel = NSOpenPanel()
  94. openPanel.allowedFileTypes = KMImageToPDFMethod.supportedImageTypes()
  95. //MARK: 允许多选还是单选,如果是付费用户允许多选
  96. openPanel.allowsMultipleSelection = true
  97. openPanel.message = KMLocalizedString("Select images to create a new document. To select multiple files press cmd ⌘ button on keyboard and click on the target files one by one.")
  98. if IAPProductsManager.default().isAvailableAllFunction(){
  99. openPanel.allowsMultipleSelection = true
  100. }else{
  101. openPanel.allowsMultipleSelection = false
  102. }
  103. openPanel.beginSheetModal(for: NSWindow.currentWindow()) {[weak self] result in
  104. if result == NSApplication.ModalResponse.OK {
  105. let urls = openPanel.urls as [URL]
  106. self?.delegate?.homeOpenViewDidChooseFileURLs?(self, urls)
  107. }
  108. }
  109. }
  110. func newBlankPage() {
  111. let panel = NSSavePanel()
  112. panel.allowedFileTypes = ["pdf"]
  113. let resp = panel.runModal()
  114. if resp != .OK {
  115. return
  116. }
  117. let saveUrl = panel.url!
  118. let pdfDocument = CPDFDocument()
  119. pdfDocument?.insertPage(CGSize(width: 595, height: 842), at: 0)
  120. pdfDocument?.write(toFile: saveUrl.path)
  121. self.delegate?.homeOpenViewDidChooseFileURLs?(self, [saveUrl])
  122. }
  123. func newFromWebPage() {
  124. createWC.own_beginSheetModal(for: self.window) { string in
  125. }
  126. }
  127. func newFromClipboard() {
  128. }
  129. func importFromScanner() {
  130. let vc = KMDeviceBrowserWindowController.shared
  131. vc.type = .scanner
  132. vc.importScannerFileCallback = { [weak self] (url: NSURL) -> Void in
  133. self?.delegate?.homeOpenViewDidChooseFileURLs?(self, [url as URL])
  134. }
  135. vc.showWindow(nil)
  136. vc.window?.center()
  137. }
  138. }
  139. //MARK: - ComponentDropdownDelegate
  140. extension KMHomeOpenView: ComponentDropdownDelegate {
  141. func componentDropdownDidShowMenuItem(dropdown: ComponentDropdown) {
  142. self.showGroupView()
  143. }
  144. }
  145. //MARK: - ComponentGroupDelegate
  146. extension KMHomeOpenView: ComponentGroupDelegate {
  147. func componentGroupDidDismiss(group: ComponentGroup?) {
  148. self.removeGroupView()
  149. }
  150. func componentGroupDidSelect(group: ComponentGroup?, menuItemProperty: ComponentMenuitemProperty?) {
  151. if let selItem = menuItemProperty {
  152. let index = group?.menuItemArr.firstIndex(of: selItem)
  153. if index == 0 {
  154. self.newFromFile()
  155. } else if index == 1 {
  156. self.newBlankPage()
  157. } else if index == 2 {
  158. self.newFromWebPage()
  159. } else if index == 3 {
  160. self.newFromClipboard()
  161. } else if index == 5 {
  162. self.importFromScanner()
  163. }
  164. }
  165. }
  166. }