// // KMNBotaHeaderSearchView.swift // PDF Reader Pro // // Created by User-Tangchao on 2024/11/13. // import Cocoa import KMComponentLibrary class KMNBotaHeaderSearchView: NSView, NibLoadable { @IBOutlet weak var leftBox: NSBox! @IBOutlet weak var searchBox: NSBox! @IBOutlet weak var rightBox: NSBox! @IBOutlet weak var bottomLine: NSView! var itemClick: KMCommonClickBlock? var valueDidChange: KMValueDidChangeBlock? var ignoreCase = false private var groupView_: ComponentGroup? private lazy var searchButton_: ComponentButton = { let view = ComponentButton() view.properties = ComponentButtonProperty(type: .text_gray, size: .xxxs, state: .normal, onlyIcon: true, icon: NSImage(named: "KMImageNameBotaSearch")) return view }() private lazy var input_: NSTextField = { let view = NSTextField() view.drawsBackground = false view.isBordered = false view.placeholderString = KMLocalizedString("Search") return view }() private lazy var closeButton_: ComponentButton = { let view = ComponentButton() view.properties = ComponentButtonProperty(type: .text_gray_low, size: .xxs, state: .normal, onlyIcon: true, icon: NSImage(named: "KMImageNameBotaClose")) return view }() var input: NSTextField { get { return input_ } } override func draw(_ dirtyRect: NSRect) { super.draw(dirtyRect) // Drawing code here. } override func awakeFromNib() { super.awakeFromNib() leftBox.borderWidth = 0 leftBox.contentView = searchButton_ searchButton_.setTarget(self, action: #selector(_searchAction)) searchBox.borderWidth = 0 searchBox.contentView = input_ input_.delegate = self rightBox.borderWidth = 0 rightBox.contentView = closeButton_ closeButton_.setTarget(self, action: #selector(_closeAction)) } func clearInputData() { input_.stringValue = "" } @objc private func _searchAction() { itemClick?(1, searchButton_) } @objc private func _closeAction() { itemClick?(2) } } extension KMNBotaHeaderSearchView: NSTextFieldDelegate { func controlTextDidChange(_ obj: Notification) { if input_.isEqual(to: obj.object) { valueDidChange?(input_,[.newKey : input_.stringValue]) } } } extension KMNBotaHeaderSearchView: ComponentGroupDelegate { func componentGroupDidSelect(group: ComponentGroup?, menuItemProperty: ComponentMenuitemProperty?) { ignoreCase = !ignoreCase KMPrint("componentGroupDidSelect \(ignoreCase)") itemClick?(1) } func componentGroupDidDismiss(group: ComponentGroup?) { searchButton_.properties.state = .normal searchButton_.reloadData() } }