// // KMHomeContentView.swift // PDF Master // // Created by lizhe on 2023/10/27. // import Cocoa typealias KMHomeContentViewHistoryDidSelect = (_ view: KMHomeContentView, _ url: KMHomeHistoryListViewModel) -> Void typealias KMHomeContentViewHistoryShowPathAction = (_ view: KMHomeContentView, _ url: KMHomeHistoryListViewModel) -> Void typealias KMHomeContentViewHistoryrRemoveFileAction = (_ view: KMHomeContentView, _ url: KMHomeHistoryListViewModel) -> Void typealias KMHomeContentViewHistoryrRemoveAllFileAction = (_ view: KMHomeContentView) -> Void typealias KMHomeContentViewQucikToolsDidSelect = (_ view: KMHomeContentView, _ item: KMQucikToolsModel) -> Void typealias KMHomeContentViewQucikToolsAddAction = (_ view: KMHomeContentView, _ item: KMQucikToolsModel) -> Void typealias KMHomeContentViewQucikToolsRemoveAction = (_ view: KMHomeContentView, _ item: KMQucikToolsModel) -> Void enum KMHomeQucikToolsShowType { case expand case collapse } class KMHomeContentView: KMBaseXibView { @IBOutlet weak var qucikToolsLabel: NSTextField! @IBOutlet weak var qucikToolsView: KMQucikToolsView! @IBOutlet weak var leftButton: NSButton! @IBOutlet weak var pageLabel: NSTextField! @IBOutlet weak var rightButton: NSButton! @IBOutlet weak var moreButton: KMButton! @IBOutlet weak var qucikToolsConstraintHeight: NSLayoutConstraint! @IBOutlet weak var recentlyLabel: NSTextField! @IBOutlet weak var historyListView: KMHomeHistoryListView! @IBOutlet weak var horizontalButton: KMButton! @IBOutlet weak var verticalButton: KMButton! @IBOutlet weak var cleanButton: KMButton! var historyDidSelect: KMHomeContentViewHistoryDidSelect? var historyShowPathAction: KMHomeContentViewHistoryShowPathAction? var historyRemoveFileAction: KMHomeContentViewHistoryrRemoveFileAction? var historyRemoveAllFileAction: KMHomeContentViewHistoryrRemoveAllFileAction? var qucikToolsDidSelect: KMHomeContentViewQucikToolsDidSelect? var qucikToolsAddAction: KMHomeContentViewQucikToolsAddAction? var qucikToolsRemoveAction: KMHomeContentViewQucikToolsRemoveAction? var qucikToolsType: KMHomeQucikToolsShowType = .expand { didSet { self.qucikToolsView.type = qucikToolsType if qucikToolsType == .collapse { self.qucikToolsConstraintHeight.constant = 166 } else { self.qucikToolsConstraintHeight.constant = 262 } } } override func draw(_ dirtyRect: NSRect) { super.draw(dirtyRect) // Drawing code here. self.setup() } override func setup() { self.pageLabel.textColor = KMAppearance.Layout.h0Color() self.qucikToolsView.didSelect = { [unowned self] view, item in guard let callBack = qucikToolsDidSelect else { return } callBack(self, item) } self.qucikToolsView.pageChange = { [unowned self] view in self.updatePageLabel() } self.qucikToolsView.addAction = { [unowned self] view, item in self.qucikToolsAddAction?(self, item) } self.qucikToolsView.removeAction = { [unowned self] view, item in self.qucikToolsRemoveAction?(self, item) } self.historyListView.didSelect = { [unowned self] view, item in guard let callBack = historyDidSelect else { return } callBack(self, item) } self.historyListView.removeFileAction = { [unowned self] view, item in guard let callBack = historyRemoveFileAction else { return } callBack(self, item) } self.historyListView.showPathAction = { [unowned self] view, item in guard let callBack = historyShowPathAction else { return } callBack(self, item) } cleanButton.mouseMoveCallback = { [unowned self] enter in if enter { self.cleanButton.image = NSImage(named: "KMImageNameHomeDeletHor") } else { self.cleanButton.image = NSImage(named: "KMImageNameHomeDeletNor") } } moreButton.mouseMoveCallback = { [unowned self] enter in if enter { self.moreButton.image = NSImage(named: "KMImageNameUXIconHomeMorePre") } else { self.moreButton.image = NSImage(named: "KMImageNameUXIconHomeMoreNor") } } self.updatePageLabel() self.updateRecentlyListState() } func updatePageLabel() { self.pageLabel.stringValue = "\(qucikToolsView.currentPage()) / \(qucikToolsView.pageCount())" } func updateRecentlyListState() { let showType = self.historyListView.showType if showType == .horizontal { verticalButton.image = NSImage(named: "KMImageNameUXIconHomeViewthumbnailNor") horizontalButton.image = NSImage(named: "KMImageNameUXIconHomeViewlistPre") } else if showType == .vertical { verticalButton.image = NSImage(named: "KMImageNameUXIconHomeViewthumbnailPre") horizontalButton.image = NSImage(named: "KMImageNameUXIconHomeViewlistNor") } } } //MARK: Action extension KMHomeContentView { @IBAction func leftButtonAction(_ sender: Any) { self.qucikToolsView.previousPage() } @IBAction func rightButtonAction(_ sender: Any) { self.qucikToolsView.nextPage() } @IBAction func moreButtonAction(_ sender: NSButton) { let collapse = NSLocalizedString("Collapse All", comment: "") let quickTools = NSLocalizedString("Manage Quick Tools", comment: "") let expand = NSLocalizedString("Expand All", comment: "") var array: [String] = [] if qucikToolsType == .expand { array = [collapse, quickTools] } else { array = [expand, quickTools] } let vc: KMHomePopViewController = KMHomePopViewController().initWithPopViewDataArr(array) let createFilePopover: NSPopover = NSPopover.init() createFilePopover.contentViewController = vc createFilePopover.delegate = self createFilePopover.animates = true createFilePopover.behavior = .semitransient createFilePopover.setValue(true, forKey: "shouldHideAnchor") createFilePopover.show(relativeTo: CGRect(x: sender.bounds.origin.x, y: 10, width: sender.bounds.size.width, height: sender.bounds.size.height), of: sender, preferredEdge: .maxY) // vc.customBoxWidthLayoutConstraint.constant = sender.frame.width vc.downCallback = { [unowned self] (downEntered: Bool, count: String) -> Void in if downEntered { createFilePopover.close() if count == collapse { self.qucikToolsType = .collapse } else if count == expand { self.qucikToolsType = .expand } else if count == quickTools { let homeQuickToolsWindowController: KMHomeQuickToolsWindowController = KMHomeQuickToolsWindowController.sharedHomeQuickTools homeQuickToolsWindowController.window?.center() NSWindow.currentWindow().addChildWindow(homeQuickToolsWindowController.window!, ordered: NSWindow.OrderingMode.above) homeQuickToolsWindowController.dataChange = { [unowned self] controller in self.qucikToolsView.reloadData() } } } } } @IBAction func horizontalButtonAction(_ sender: Any) { self.historyListView.showType = .horizontal self.updateRecentlyListState() } @IBAction func verticalButtonAction(_ sender: Any) { self.historyListView.showType = .vertical self.updateRecentlyListState() } @IBAction func cleanButtonAction(_ sender: Any) { guard let callBack = historyRemoveAllFileAction else { return } callBack(self) } } extension KMHomeContentView: NSPopoverDelegate { }