diff --git a/Source/Modules/WindowControllers/CtlPrefWindow.swift b/Source/Modules/WindowControllers/CtlPrefWindow.swift index 8c2f6460..fe766b88 100644 --- a/Source/Modules/WindowControllers/CtlPrefWindow.swift +++ b/Source/Modules/WindowControllers/CtlPrefWindow.swift @@ -18,6 +18,7 @@ private let kWindowTitleHeight: Double = 78 class CtlPrefWindow: NSWindowController, NSWindowDelegate { @IBOutlet var uiLanguageButton: NSPopUpButton! + @IBOutlet var parserButton: NSPopUpButton! @IBOutlet var basicKeyboardLayoutButton: NSPopUpButton! @IBOutlet var selectionKeyComboBox: NSComboBox! @IBOutlet var chkTrad2KangXi: NSButton! @@ -26,7 +27,7 @@ class CtlPrefWindow: NSWindowController, NSWindowDelegate { @IBOutlet var tglControlDevZoneIMKCandidate: NSButton! @IBOutlet var cmbCandidateFontSize: NSPopUpButton! @IBOutlet var chkFartSuppressor: NSButton! - + @IBOutlet var chkRevLookupInCandidateWindow: NSButton! @IBOutlet var btnBrowseFolderForUserPhrases: NSButton! @IBOutlet var txtUserPhrasesFolderPath: NSTextField! @@ -143,27 +144,8 @@ class CtlPrefWindow: NSWindowController, NSWindowDelegate { uiLanguageButton.select(currentLanguageSelectItem) } - var usKeyboardLayoutItem: NSMenuItem? - var chosenBaseKeyboardLayoutItem: NSMenuItem? - - basicKeyboardLayoutButton.menu?.removeAllItems() - - let basicKeyboardLayoutID = PrefMgr.shared.basicKeyboardLayout - - for source in IMKHelper.allowedBasicLayoutsAsTISInputSources { - guard let source = source else { - basicKeyboardLayoutButton.menu?.addItem(NSMenuItem.separator()) - continue - } - let menuItem = NSMenuItem() - menuItem.title = source.vChewingLocalizedName - menuItem.representedObject = source.identifier - if source.identifier == "com.apple.keylayout.US" { usKeyboardLayoutItem = menuItem } - if basicKeyboardLayoutID == source.identifier { chosenBaseKeyboardLayoutItem = menuItem } - basicKeyboardLayoutButton.menu?.addItem(menuItem) - } - - basicKeyboardLayoutButton.select(chosenBaseKeyboardLayoutItem ?? usKeyboardLayoutItem) + refreshBasicKeyboardLayoutMenu() + refreshParserMenu() selectionKeyComboBox.usesDataSource = false selectionKeyComboBox.removeAllItems() @@ -186,6 +168,45 @@ class CtlPrefWindow: NSWindowController, NSWindowDelegate { tfdPETextEditor.string = "" } + func refreshBasicKeyboardLayoutMenu() { + var usKeyboardLayoutItem: NSMenuItem? + var chosenBaseKeyboardLayoutItem: NSMenuItem? + basicKeyboardLayoutButton.menu?.removeAllItems() + let basicKeyboardLayoutID = PrefMgr.shared.basicKeyboardLayout + for source in IMKHelper.allowedBasicLayoutsAsTISInputSources { + guard let source = source else { + basicKeyboardLayoutButton.menu?.addItem(NSMenuItem.separator()) + continue + } + let menuItem = NSMenuItem() + menuItem.title = source.vChewingLocalizedName + menuItem.representedObject = source.identifier + if source.identifier == "com.apple.keylayout.US" { usKeyboardLayoutItem = menuItem } + if basicKeyboardLayoutID == source.identifier { chosenBaseKeyboardLayoutItem = menuItem } + basicKeyboardLayoutButton.menu?.addItem(menuItem) + } + basicKeyboardLayoutButton.select(chosenBaseKeyboardLayoutItem ?? usKeyboardLayoutItem) + } + + func refreshParserMenu() { + var defaultParserItem: NSMenuItem? + var chosenParserItem: NSMenuItem? + parserButton.menu?.removeAllItems() + let basicParserID = PrefMgr.shared.keyboardParser + KeyboardParser.allCases.forEach { item in + if [7, 10].contains(item.rawValue) { + parserButton.menu?.addItem(NSMenuItem.separator()) + } + let menuItem = NSMenuItem() + menuItem.title = item.localizedMenuName + menuItem.tag = item.rawValue + if item.rawValue == 0 { defaultParserItem = menuItem } + if basicParserID == item.rawValue { chosenParserItem = menuItem } + parserButton.menu?.addItem(menuItem) + } + parserButton.select(chosenParserItem ?? defaultParserItem) + } + // 這裡有必要加上這段處理,用來確保藉由偏好設定介面動過的 CNS 開關能夠立刻生效。 // 所有涉及到語言模型開關的內容均需要這樣處理。 @IBAction func toggleCNSSupport(_: Any) { @@ -208,6 +229,12 @@ class CtlPrefWindow: NSWindowController, NSWindowDelegate { } } + @IBAction func updateParserAction(_: Any) { + if let sourceID = parserButton.selectedItem?.tag as? Int { + PrefMgr.shared.keyboardParser = sourceID + } + } + @IBAction func updateBasicKeyboardLayoutAction(_: Any) { if let sourceID = basicKeyboardLayoutButton.selectedItem?.representedObject as? String { PrefMgr.shared.basicKeyboardLayout = sourceID diff --git a/Source/WindowNIBs/Base.lproj/frmPrefWindow.xib b/Source/WindowNIBs/Base.lproj/frmPrefWindow.xib index 40babc17..7c774771 100644 --- a/Source/WindowNIBs/Base.lproj/frmPrefWindow.xib +++ b/Source/WindowNIBs/Base.lproj/frmPrefWindow.xib @@ -24,6 +24,7 @@ + @@ -2041,6 +2042,7 @@ DQ +