PrefWindow // Dynamically render the parser menu.

This commit is contained in:
ShikiSuen 2023-03-31 22:58:12 +08:00
parent 49dd4b1a9a
commit 553b493006
2 changed files with 51 additions and 22 deletions

View File

@ -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

View File

@ -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>