KMHomeOpenView.swift 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  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. //选择文件
  11. @objc optional func homeOpenViewDidChooseFileURL(_ view: KMHomeOpenView?, _ url:URL)
  12. }
  13. class KMHomeOpenView: BaseXibView {
  14. @IBOutlet weak var contendView: NSView!
  15. @IBOutlet weak var openFileButton: ComponentButton!
  16. @IBOutlet var createFileButton: ComponentButton!
  17. var groupView: ComponentGroup!
  18. var createWC: KMURLCreatePDFWindowController = KMURLCreatePDFWindowController(windowNibName: "KMURLCreatePDFWindowController")
  19. weak open var delegate: KMHomeOpenViewDelegate?
  20. //MARK: - func
  21. override func draw(_ dirtyRect: NSRect) {
  22. super.draw(dirtyRect)
  23. // Drawing code here.
  24. }
  25. public required init?(coder decoder: NSCoder) {
  26. super.init(coder: decoder)
  27. }
  28. override init(frame frameRect: NSRect) {
  29. super.init(frame: frameRect)
  30. }
  31. public override func awakeFromNib() {
  32. super.awakeFromNib()
  33. setUpButtonProperty()
  34. }
  35. override func updateUILanguage() {
  36. super.updateUILanguage()
  37. openFileButton.properties.buttonText = KMLocalizedString("Open Files")
  38. openFileButton.reloadData()
  39. createFileButton.properties.buttonText = KMLocalizedString("Create PDF")
  40. createFileButton.reloadData()
  41. }
  42. override func updateUIThemeColor() {
  43. super.updateUIThemeColor()
  44. }
  45. func setUpButtonProperty() {
  46. openFileButton.properties = ComponentButtonProperty(type: .primary,
  47. size: .m,
  48. state: .normal,
  49. buttonText: KMLocalizedString("Open Files"),
  50. keepPressState: false)
  51. openFileButton.setTarget(self, action: #selector(openFileAction(_:)))
  52. createFileButton.properties = ComponentButtonProperty(type: .default_tertiary,
  53. size: .m,
  54. showRightIcon: true,
  55. buttonText: KMLocalizedString("Create PDF"))
  56. createFileButton.properties.propertyInfo.rightIcon_nor = NSImage(named: "arrowDown_black")
  57. createFileButton.properties.propertyInfo.rightIcon_press = NSImage(named: "arrowDown_press")
  58. createFileButton.reloadData()
  59. createFileButton.setTarget(self, action: #selector(createFileAction(_:)))
  60. }
  61. //MARK: - GroupView
  62. func showGroupView() {
  63. var viewHeight: CGFloat = 8
  64. var menuItemArr: [ComponentMenuitemProperty] = []
  65. for i in ["New From Images", "New Blank Page", "New From Web Page", "New From Clipboard", " ", "Import From Scanner"] {
  66. if i == " " {
  67. let property: ComponentMenuitemProperty = ComponentMenuitemProperty.divider()
  68. menuItemArr.append(property)
  69. viewHeight += 8
  70. } else {
  71. let properties_Menuitem: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false,
  72. itemSelected: false,
  73. isDisabled: false,
  74. keyEquivalent: nil,
  75. text: KMLocalizedString(i))
  76. menuItemArr.append(properties_Menuitem)
  77. viewHeight += 36
  78. }
  79. }
  80. if groupView == nil {
  81. groupView = ComponentGroup.createFromNib(in: ComponentLibrary.shared.componentBundle())
  82. }
  83. groupView.groupDelegate = self
  84. groupView?.frame = CGRectMake(310, 0, CGRectGetWidth(self.bounds), viewHeight)
  85. groupView.updateGroupInfo(menuItemArr)
  86. var point = convert(createFileButton.frame.origin, to: nil)
  87. point.y -= viewHeight
  88. groupView.showWithPoint(point, relativeTo: createFileButton)
  89. createFileButton.properties.state = .pressed
  90. createFileButton.reloadData()
  91. }
  92. func removeGroupView() {
  93. if groupView != nil {
  94. groupView.removeFromSuperview()
  95. }
  96. createFileButton.properties.state = .normal
  97. createFileButton.reloadData()
  98. }
  99. //MARK: - Action
  100. @objc func openFileAction(_ sender: NSView) {
  101. let openPanel = NSOpenPanel()
  102. openPanel.allowedFileTypes = ["pdf", "PDF"]
  103. openPanel.allowsMultipleSelection = false
  104. openPanel.beginSheetModal(for: self.window!) { [weak self] result in
  105. if result == NSApplication.ModalResponse.OK {
  106. if let url = openPanel.url {
  107. self?.delegate?.homeOpenViewDidChooseFileURL?(self, url)
  108. }
  109. }
  110. }
  111. }
  112. @objc func createFileAction(_ sender: NSView) {
  113. showGroupView()
  114. }
  115. }
  116. //MARK: - ComponentDropdownDelegate
  117. extension KMHomeOpenView: ComponentDropdownDelegate {
  118. func componentDropdownDidShowMenuItem(dropdown: ComponentDropdown) {
  119. showGroupView()
  120. }
  121. }
  122. //MARK: - ComponentGroupDelegate
  123. extension KMHomeOpenView: ComponentGroupDelegate {
  124. func componentGroupDidDismiss(group: ComponentGroup?) {
  125. removeGroupView()
  126. }
  127. func componentGroupDidSelect(group: ComponentGroup?, menuItemProperty: ComponentMenuitemProperty?) {
  128. if let selItem = menuItemProperty {
  129. let index = group?.menuItemArr.firstIndex(of: selItem)
  130. if index == 0 {
  131. if let _windowC = NSApp.mainWindow?.windowController as? KMBrowserWindowController {
  132. _windowC.newFromImageFile()
  133. }
  134. } else if index == 1 {
  135. if let _windowC = NSApp.mainWindow?.windowController as? KMBrowserWindowController {
  136. _windowC.newBlankPage()
  137. }
  138. } else if index == 2 {
  139. if let _windowC = NSApp.mainWindow?.windowController as? KMBrowserWindowController {
  140. _windowC.newFromWebPage()
  141. }
  142. } else if index == 3 {
  143. if let _windowC = NSApp.mainWindow?.windowController as? KMBrowserWindowController {
  144. _windowC.newFromClipboard()
  145. }
  146. } else if index == 5 {
  147. if let _windowC = NSApp.mainWindow?.windowController as? KMBrowserWindowController {
  148. _windowC.importFromScanner()
  149. }
  150. }
  151. }
  152. }
  153. }