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 {
|
class CtlPrefWindow: NSWindowController, NSWindowDelegate {
|
||||||
@IBOutlet var uiLanguageButton: NSPopUpButton!
|
@IBOutlet var uiLanguageButton: NSPopUpButton!
|
||||||
|
@IBOutlet var parserButton: NSPopUpButton!
|
||||||
@IBOutlet var basicKeyboardLayoutButton: NSPopUpButton!
|
@IBOutlet var basicKeyboardLayoutButton: NSPopUpButton!
|
||||||
@IBOutlet var selectionKeyComboBox: NSComboBox!
|
@IBOutlet var selectionKeyComboBox: NSComboBox!
|
||||||
@IBOutlet var chkTrad2KangXi: NSButton!
|
@IBOutlet var chkTrad2KangXi: NSButton!
|
||||||
|
@ -26,7 +27,7 @@ class CtlPrefWindow: NSWindowController, NSWindowDelegate {
|
||||||
@IBOutlet var tglControlDevZoneIMKCandidate: NSButton!
|
@IBOutlet var tglControlDevZoneIMKCandidate: NSButton!
|
||||||
@IBOutlet var cmbCandidateFontSize: NSPopUpButton!
|
@IBOutlet var cmbCandidateFontSize: NSPopUpButton!
|
||||||
@IBOutlet var chkFartSuppressor: NSButton!
|
@IBOutlet var chkFartSuppressor: NSButton!
|
||||||
|
|
||||||
@IBOutlet var chkRevLookupInCandidateWindow: NSButton!
|
@IBOutlet var chkRevLookupInCandidateWindow: NSButton!
|
||||||
@IBOutlet var btnBrowseFolderForUserPhrases: NSButton!
|
@IBOutlet var btnBrowseFolderForUserPhrases: NSButton!
|
||||||
@IBOutlet var txtUserPhrasesFolderPath: NSTextField!
|
@IBOutlet var txtUserPhrasesFolderPath: NSTextField!
|
||||||
|
@ -143,27 +144,8 @@ class CtlPrefWindow: NSWindowController, NSWindowDelegate {
|
||||||
uiLanguageButton.select(currentLanguageSelectItem)
|
uiLanguageButton.select(currentLanguageSelectItem)
|
||||||
}
|
}
|
||||||
|
|
||||||
var usKeyboardLayoutItem: NSMenuItem?
|
refreshBasicKeyboardLayoutMenu()
|
||||||
var chosenBaseKeyboardLayoutItem: NSMenuItem?
|
refreshParserMenu()
|
||||||
|
|
||||||
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)
|
|
||||||
|
|
||||||
selectionKeyComboBox.usesDataSource = false
|
selectionKeyComboBox.usesDataSource = false
|
||||||
selectionKeyComboBox.removeAllItems()
|
selectionKeyComboBox.removeAllItems()
|
||||||
|
@ -186,6 +168,45 @@ class CtlPrefWindow: NSWindowController, NSWindowDelegate {
|
||||||
tfdPETextEditor.string = ""
|
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 開關能夠立刻生效。
|
// 這裡有必要加上這段處理,用來確保藉由偏好設定介面動過的 CNS 開關能夠立刻生效。
|
||||||
// 所有涉及到語言模型開關的內容均需要這樣處理。
|
// 所有涉及到語言模型開關的內容均需要這樣處理。
|
||||||
@IBAction func toggleCNSSupport(_: Any) {
|
@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) {
|
@IBAction func updateBasicKeyboardLayoutAction(_: Any) {
|
||||||
if let sourceID = basicKeyboardLayoutButton.selectedItem?.representedObject as? String {
|
if let sourceID = basicKeyboardLayoutButton.selectedItem?.representedObject as? String {
|
||||||
PrefMgr.shared.basicKeyboardLayout = sourceID
|
PrefMgr.shared.basicKeyboardLayout = sourceID
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
<outlet property="cmbPEInputModeMenu" destination="y5f-AO-wKG" id="hW9-zZ-t8S"/>
|
<outlet property="cmbPEInputModeMenu" destination="y5f-AO-wKG" id="hW9-zZ-t8S"/>
|
||||||
<outlet property="lblCurrentlySpecifiedUserDataFolder" destination="REC-r4-T7m" id="eEq-XN-mMq"/>
|
<outlet property="lblCurrentlySpecifiedUserDataFolder" destination="REC-r4-T7m" id="eEq-XN-mMq"/>
|
||||||
<outlet property="lblUserPhraseFolderChangeDescription" destination="FUV-qx-xkC" id="2vI-Wk-s0S"/>
|
<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="selectionKeyComboBox" destination="uHU-aL-du7" id="cEx-Ui-Phc"/>
|
||||||
<outlet property="tfdPETextEditor" destination="kSG-dz-P2N" id="aiA-EA-Isg"/>
|
<outlet property="tfdPETextEditor" destination="kSG-dz-P2N" id="aiA-EA-Isg"/>
|
||||||
<outlet property="tglControlDevZoneIMKCandidate" destination="MQ1-z8-Yf1" id="qRk-OO-iUU"/>
|
<outlet property="tglControlDevZoneIMKCandidate" destination="MQ1-z8-Yf1" id="qRk-OO-iUU"/>
|
||||||
|
@ -2041,6 +2042,7 @@ DQ
|
||||||
</items>
|
</items>
|
||||||
</menu>
|
</menu>
|
||||||
<connections>
|
<connections>
|
||||||
|
<action selector="updateParserAction:" target="-2" id="Vbo-gW-rwU"/>
|
||||||
<binding destination="32" name="selectedTag" keyPath="values.KeyboardParser" id="8MX-rF-6Lp"/>
|
<binding destination="32" name="selectedTag" keyPath="values.KeyboardParser" id="8MX-rF-6Lp"/>
|
||||||
</connections>
|
</connections>
|
||||||
</popUpButtonCell>
|
</popUpButtonCell>
|
||||||
|
|
Loading…
Reference in New Issue