feat: use searchable themed translation language picker

This commit is contained in:
2026-10-18 18:00:04 +02:00
parent cd47828ddb
commit fa3591adf8
6 changed files with 370 additions and 105 deletions
+8 -16
View File
@@ -220,23 +220,15 @@ final class TranslationController: NSViewController {
}
private func chooseLanguage(source: Bool) {
let menu = NSMenu(title: source ? "Source language" : "Target language")
for code in Self.languages {
let item = NSMenuItem(title: languageName(code), action: #selector(languageSelected(_:)), keyEquivalent: "")
item.target = self
item.representedObject = code
item.tag = source ? 0 : 1
item.state = code == (source ? sourceLanguage : targetLanguage) ? .on : .off
menu.addItem(item)
actions.selectLanguage = { [weak self] code in
guard let self else { return }
self.setLanguages(source: source ? code : self.sourceLanguage,
target: source ? self.targetLanguage : code)
}
menu.popUp(positioning: menu.items.first { $0.state == .on },
at: NSPoint(x: 0, y: languageButton.bounds.maxY), in: languageButton)
}
@objc private func languageSelected(_ item: NSMenuItem) {
guard let code = item.representedObject as? String else { return }
setLanguages(source: item.tag == 0 ? code : sourceLanguage,
target: item.tag == 1 ? code : targetLanguage)
actions.showLanguages(Self.languages.map { (code: $0, name: languageName($0)) },
selected: source ? sourceLanguage : targetLanguage,
source: source, relativeTo: actionsButton)
translateButton.keyEquivalent = actions.isShown ? "" : "\r"
}
func setLanguages(source: String, target: String) {