KMHomeOpenView.swift 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  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. class KMHomeOpenView: BaseXibView {
  10. @IBOutlet weak var contendView: NSView!
  11. @IBOutlet weak var openFileButton: ComponentButton!
  12. @IBOutlet weak var createFileDropdown: ComponentDropdown!
  13. var groupView: ComponentGroup!
  14. override func draw(_ dirtyRect: NSRect) {
  15. super.draw(dirtyRect)
  16. // Drawing code here.
  17. }
  18. public required init?(coder decoder: NSCoder) {
  19. super.init(coder: decoder)
  20. }
  21. override init(frame frameRect: NSRect) {
  22. super.init(frame: frameRect)
  23. }
  24. public override func awakeFromNib() {
  25. super.awakeFromNib()
  26. self.setUpButtonProperty()
  27. }
  28. func setUpButtonProperty() {
  29. openFileButton.properties = ComponentButtonProperty(type: .primary,
  30. size: .m,
  31. state: .normal,
  32. buttonText: KMLocalizedString("Open Files", comment: ""))
  33. openFileButton.setTarget(self, action: #selector(openFileAction(_:)))
  34. createFileDropdown.properties = ComponentDropdownProperty(type: .default_defaultTertiary,
  35. size: .m,
  36. state: .normal,
  37. split: false,
  38. disabled: false,
  39. text: KMLocalizedString("Create PDF", comment: ""))
  40. createFileDropdown.componentDelegate = self
  41. }
  42. //MARK: - GroupView
  43. func showGroupView() {
  44. var viewHeight: CGFloat = 8
  45. var menuItemArr: [ComponentMenuitemProperty] = []
  46. for i in ["New From File", "New Blank Page", "New From Web Page", "New From Clipboard", " ", "Import From Scanner"] {
  47. if i == " " {
  48. let property: ComponentMenuitemProperty = ComponentMenuitemProperty.divider()
  49. menuItemArr.append(property)
  50. viewHeight += 8
  51. } else {
  52. let properties_Menuitem: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false, itemSelected: false, isDisabled: false, leftIcon: false, rightIcon: false, keyEquivalent: nil, text: KMLocalizedString(i, comment: ""))
  53. menuItemArr.append(properties_Menuitem)
  54. viewHeight += 36
  55. }
  56. }
  57. if groupView == nil {
  58. groupView = ComponentGroup.createFromNib(in: ComponentLibrary.shared.componentBundle())
  59. }
  60. groupView.groupDelegate = self
  61. groupView?.frame = CGRectMake(310, 0, CGRectGetWidth(self.bounds), viewHeight)
  62. groupView.updateGroupInfo(menuItemArr)
  63. groupView?.showWithPoint(createFileDropdown.frame.origin, inView: self)
  64. createFileDropdown.properties.state = .pressed
  65. createFileDropdown.reloadData()
  66. }
  67. func removeGroupView() {
  68. if groupView != nil {
  69. groupView.removeFromSuperview()
  70. }
  71. createFileDropdown.properties.state = .normal
  72. createFileDropdown.reloadData()
  73. }
  74. //MARK: - Action
  75. @objc func openFileAction(_ sender: NSView) {
  76. let openPanel = NSOpenPanel()
  77. openPanel.allowedFileTypes = ["pdf", "PDF"]
  78. openPanel.allowsMultipleSelection = false
  79. openPanel.beginSheetModal(for: self.window!) { result in
  80. if result == NSApplication.ModalResponse.OK {
  81. if let url = openPanel.url {
  82. }
  83. }
  84. }
  85. }
  86. func newFromFile() {
  87. let createWC: KMCreatePDFWindowController = KMCreatePDFWindowController(windowNibName: "KMCreatePDFWindowController")
  88. self.window?.beginSheet(createWC.window!, completionHandler: { result in
  89. })
  90. }
  91. func newBlankPage() {
  92. let panel = NSSavePanel()
  93. panel.allowedFileTypes = ["pdf"]
  94. let resp = panel.runModal()
  95. if resp != .OK {
  96. return
  97. }
  98. let saveUrl = panel.url!
  99. let pdfDocument = CPDFDocument()
  100. pdfDocument?.insertPage(CGSize(width: 595, height: 842), at: 0)
  101. pdfDocument?.write(toFile: saveUrl.path)
  102. }
  103. func newFromWebPage() {
  104. let createWC: KMCreatePDFWindowController = KMCreatePDFWindowController(windowNibName: "KMCreatePDFWindowController")
  105. self.window?.beginSheet(createWC.window!, completionHandler: { result in
  106. })
  107. }
  108. func newFromClipboard() {
  109. }
  110. func importFromScanner() {
  111. let vc = KMDeviceBrowserWindowController.shared
  112. vc.window?.center()
  113. vc.type = .scanner
  114. vc.importScannerFileCallback = { [weak self] (url: NSURL) -> Void in
  115. }
  116. vc.showWindow(NSApp.mainWindow)
  117. }
  118. }
  119. //MARK: - ComponentDropdownDelegate
  120. extension KMHomeOpenView: ComponentDropdownDelegate {
  121. func componentDropdownDidShowMenuItem(dropdown: ComponentDropdown) {
  122. self.showGroupView()
  123. }
  124. }
  125. //MARK: - ComponentGroupDelegate
  126. extension KMHomeOpenView: ComponentGroupDelegate {
  127. func componentGroupDidDismiss(group: ComponentGroup?) {
  128. self.removeGroupView()
  129. }
  130. func componentGroupDidSelect(group: ComponentGroup?, menuItemProperty: ComponentMenuitemProperty?) {
  131. if let selItem = menuItemProperty {
  132. let index = group?.menuItemArr.firstIndex(of: selItem)
  133. if index == 0 {
  134. self.newFromFile()
  135. } else if index == 1 {
  136. self.newBlankPage()
  137. } else if index == 2 {
  138. self.newFromWebPage()
  139. } else if index == 3 {
  140. self.newFromClipboard()
  141. } else if index == 5 {
  142. self.importFromScanner()
  143. }
  144. }
  145. }
  146. }