PrefWindow // Dynamically render the parser menu.
This commit is contained in:
parent
49dd4b1a9a
commit
553b493006
|
@ -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!
|
||||
|
@ -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
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
<outlet property="cmbPEInputModeMenu" destination="y5f-AO-wKG" id="hW9-zZ-t8S"/>
|
||||
<outlet property="lblCurrentlySpecifiedUserDataFolder" destination="REC-r4-T7m" id="eEq-XN-mMq"/>
|
||||
<outlet property="lblUserPhraseFolderChangeDescription" destination="FUV-qx-xkC" id="2vI-Wk-s0S"/>
|
||||
<outlet property="parserButton" destination="3" id="jhm-hs-Rsn"/>
|
||||
<outlet property="selectionKeyComboBox" destination="uHU-aL-du7" id="cEx-Ui-Phc"/>
|
||||
<outlet property="tfdPETextEditor" destination="kSG-dz-P2N" id="aiA-EA-Isg"/>
|
||||
<outlet property="tglControlDevZoneIMKCandidate" destination="MQ1-z8-Yf1" id="qRk-OO-iUU"/>
|
||||
|
@ -2041,6 +2042,7 @@ DQ
|
|||
</items>
|
||||
</menu>
|
||||
<connections>
|
||||
<action selector="updateParserAction:" target="-2" id="Vbo-gW-rwU"/>
|
||||
<binding destination="32" name="selectedTag" keyPath="values.KeyboardParser" id="8MX-rF-6Lp"/>
|
||||
</connections>
|
||||
</popUpButtonCell>
|
||||
|
|
Loading…
Reference in New Issue