|
@@ -126,6 +126,8 @@ class KMToolbarViewController: NSViewController, NSTextFieldDelegate {
|
|
|
@IBOutlet var zoomButton: NSPopUpButton!
|
|
|
@IBOutlet var zoomView: NSView!
|
|
|
@IBOutlet weak var zoomTextField: NSTextField!
|
|
|
+
|
|
|
+ var searchField: NSSearchField = NSSearchField()
|
|
|
var pdfView : CPDFListView = CPDFListView()
|
|
|
var shareButton = KMToolbarClickButton()
|
|
|
private var bottomLine = NSView()
|
|
@@ -519,7 +521,7 @@ class KMToolbarViewController: NSViewController, NSTextFieldDelegate {
|
|
|
KMPrint("按下 enter")
|
|
|
self.delegate?.toolbarViewController?(self, zoomSting: self.zoomTextField.stringValue)
|
|
|
} else if let _ = control as? NSSearchField {
|
|
|
- self.delegate?.toolbarViewController?(self, searchAction: control.stringValue, forward: true)
|
|
|
+ self.searchPDFKey(control.stringValue)
|
|
|
}
|
|
|
}
|
|
|
return true
|
|
@@ -528,11 +530,6 @@ class KMToolbarViewController: NSViewController, NSTextFieldDelegate {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- @objc func toggleCaseInsensitiveSearch(_ sender: NSMenuItem) {
|
|
|
- var value = KMDataManager.ud_integer(forKey: SKCaseInsensitiveSearchKey)
|
|
|
- KMDataManager.ud_set(value == 0 ? 1 : 0, forKey: SKCaseInsensitiveSearchKey)
|
|
|
- }
|
|
|
-
|
|
|
// MARK: - Private Methods
|
|
|
|
|
|
private func _itemSetPromptFlag(item: KMToolbarItemView?) {
|
|
@@ -1295,9 +1292,9 @@ extension KMToolbarViewController {
|
|
|
searchView.sendsSearchStringImmediately = true
|
|
|
searchView.drawsBackground = false
|
|
|
searchView.delegate = self
|
|
|
- let menu = NSMenu()
|
|
|
- let searchItem = menu.addItem(title: KMLocalizedString("Ignore Case", "Menu item title"), action: #selector(toggleCaseInsensitiveSearch), target: self)
|
|
|
- (searchView.cell as? NSSearchFieldCell)?.searchMenuTemplate = menu
|
|
|
+ self.searchField = searchView
|
|
|
+
|
|
|
+ self.refreshSearchBarMenu()
|
|
|
|
|
|
boxView.addSubview(searchView)
|
|
|
let titleLabel = NSTextField(labelWithString: NSLocalizedString("Search", comment: ""))
|
|
@@ -2115,3 +2112,100 @@ extension KMToolbarViewController {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+extension KMToolbarViewController {
|
|
|
+ func refreshSearchBarMenu() {
|
|
|
+ let words = UserDefaults.standard.array(forKey: "kmDocumentSearchWordArrays") as? [String] ?? []
|
|
|
+ let searchMenu = NSMenu()
|
|
|
+
|
|
|
+ for word in words {
|
|
|
+ var truncatedWord = word
|
|
|
+ if word.count > 15 {
|
|
|
+ truncatedWord = String(word.prefix(15)) + "..."
|
|
|
+ }
|
|
|
+ let item = searchMenu.addItem(withTitle: truncatedWord, action: #selector(searchPDFKeyWord(_:)), keyEquivalent: "")
|
|
|
+ item.representedObject = word
|
|
|
+ }
|
|
|
+
|
|
|
+ let attributes: [NSAttributedString.Key: Any] = [.font: NSFont(name: "Helvetica", size: 12.0)!]
|
|
|
+
|
|
|
+ if !words.isEmpty {
|
|
|
+ let attributedString = NSAttributedString(string: NSLocalizedString("Search History", comment: ""), attributes: attributes)
|
|
|
+ let item = NSMenuItem()
|
|
|
+ item.attributedTitle = attributedString
|
|
|
+ searchMenu.insertItem(item, at: 0)
|
|
|
+ searchMenu.addItem(NSMenuItem.separator())
|
|
|
+
|
|
|
+ let attributedString1 = NSAttributedString(string: NSLocalizedString("Clear Search History", comment: ""), attributes: attributes)
|
|
|
+ let item1 = NSMenuItem()
|
|
|
+ item1.attributedTitle = attributedString1
|
|
|
+ item1.action = #selector(clearSearchWordHistory(_:))
|
|
|
+ item1.target = self
|
|
|
+ searchMenu.addItem(item1)
|
|
|
+
|
|
|
+ searchMenu.insertItem(NSMenuItem.separator(), at: 0)
|
|
|
+ }
|
|
|
+
|
|
|
+ let attributedString2 = NSAttributedString(string: NSLocalizedString("Ignore Case", comment: ""), attributes: attributes)
|
|
|
+ let ignoreItem = NSMenuItem()
|
|
|
+ ignoreItem.attributedTitle = attributedString2
|
|
|
+ ignoreItem.action = #selector(toggleCaseInsensitiveSearch)
|
|
|
+ ignoreItem.target = self
|
|
|
+ searchMenu.insertItem(ignoreItem, at: 0)
|
|
|
+
|
|
|
+ (self.searchField.cell as? NSSearchFieldCell)?.searchMenuTemplate = searchMenu
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @objc func toggleCaseInsensitiveSearch(_ sender: NSMenuItem) {
|
|
|
+ var value = KMDataManager.ud_integer(forKey: SKCaseInsensitiveSearchKey)
|
|
|
+ KMDataManager.ud_set(value == 0 ? 1 : 0, forKey: SKCaseInsensitiveSearchKey)
|
|
|
+
|
|
|
+ let caseInsensitive = UserDefaults.standard.bool(forKey: "SKCaseInsensitiveFindKey")
|
|
|
+ UserDefaults.standard.set(!caseInsensitive, forKey: "SKCaseInsensitiveFindKey")
|
|
|
+ }
|
|
|
+
|
|
|
+ @objc func searchPDFKeyWord(_ item: NSMenuItem) {
|
|
|
+ guard let word = item.representedObject as? String else {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ self.searchPDFKey(word)
|
|
|
+ }
|
|
|
+
|
|
|
+ func searchPDFKey(_ string: String) {
|
|
|
+ self.searchField.stringValue = string
|
|
|
+ self.delegate?.toolbarViewController?(self, searchAction: string, forward: true)
|
|
|
+
|
|
|
+ let word = string
|
|
|
+ var words = UserDefaults.standard.array(forKey: "kmDocumentSearchWordArrays") as? [String] ?? []
|
|
|
+ var mutableWords = words
|
|
|
+
|
|
|
+ if let index = mutableWords.firstIndex(of: word) {
|
|
|
+ mutableWords.remove(at: index)
|
|
|
+ }
|
|
|
+
|
|
|
+ mutableWords.insert(word, at: 0)
|
|
|
+
|
|
|
+ if mutableWords.count > 10 {
|
|
|
+ mutableWords.removeLast()
|
|
|
+ }
|
|
|
+
|
|
|
+ UserDefaults.standard.set(mutableWords, forKey: "kmDocumentSearchWordArrays")
|
|
|
+ UserDefaults.standard.synchronize()
|
|
|
+
|
|
|
+ refreshSearchBarMenu()
|
|
|
+ }
|
|
|
+
|
|
|
+ @objc func clearSearchWordHistory(_ sender: Any) {
|
|
|
+ UserDefaults.standard.removeObject(forKey: "kmDocumentSearchWordArrays")
|
|
|
+ UserDefaults.standard.synchronize()
|
|
|
+
|
|
|
+ refreshSearchBarMenu()
|
|
|
+ }
|
|
|
+
|
|
|
+// @IBAction func toggleCaseInsensitiveFind(_ sender: Any) {
|
|
|
+// let caseInsensitive = UserDefaults.standard.bool(forKey: "SKCaseInsensitiveFindKey")
|
|
|
+// UserDefaults.standard.set(!caseInsensitive, forKey: "SKCaseInsensitiveFindKey")
|
|
|
+// }
|
|
|
+}
|