KMHomeOpenView.swift 7.1 KB

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