Hiraku: MUI Selector // phase 1: Implementing function.

This commit is contained in:
Hiraku 2022-01-24 22:19:17 +08:00
parent 56d6f545c7
commit 5866ee7692
3 changed files with 57 additions and 0 deletions

View File

@ -11,6 +11,7 @@
<outlet property="basisKeyboardLayoutButton" destination="124" id="135"/>
<outlet property="fontSizePopUpButton" destination="90" id="108"/>
<outlet property="selectionKeyComboBox" destination="uHU-aL-du7" id="cEx-Ui-Phc"/>
<outlet property="uiLanguageButton" destination="oS6-u5-7dP" id="V3u-XK-z7G"/>
<outlet property="window" destination="1" id="30"/>
</connections>
</customObject>
@ -106,6 +107,9 @@
</items>
</menu>
</popUpButtonCell>
<connections>
<action selector="updateUiLanguageAction:" target="-2" id="8XG-O0-Otf"/>
</connections>
</popUpButton>
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="L5M-VG-W1X">
<rect key="frame" x="42" y="99" width="123" height="17"/>

View File

@ -13,6 +13,7 @@ private let kBasisKeyboardLayoutPreferenceKey = "BasisKeyboardLayout" // alphan
private let kFunctionKeyKeyboardLayoutPreferenceKey = "FunctionKeyKeyboardLayout" // alphanumeric ("ASCII") input basi
private let kFunctionKeyKeyboardLayoutOverrideIncludeShiftKey = "FunctionKeyKeyboardLayoutOverrideIncludeShift" // whether include shif
private let kCandidateListTextSizeKey = "CandidateListTextSize"
private let kAppleLanguagesPreferencesKey = "AppleLanguages"
private let kSelectPhraseAfterCursorAsCandidatePreferenceKey = "SelectPhraseAfterCursorAsCandidate"
private let kUseHorizontalCandidateListPreferenceKey = "UseHorizontalCandidateList"
private let kComposingBufferSizePreferenceKey = "ComposingBufferSize"
@ -172,6 +173,7 @@ struct ComposingBufferSize {
defaults.removeObject(forKey: kFunctionKeyKeyboardLayoutPreferenceKey)
defaults.removeObject(forKey: kFunctionKeyKeyboardLayoutOverrideIncludeShiftKey)
defaults.removeObject(forKey: kCandidateListTextSizeKey)
defaults.removeObject(forKey: kAppleLanguagesPreferencesKey)
defaults.removeObject(forKey: kSelectPhraseAfterCursorAsCandidatePreferenceKey)
defaults.removeObject(forKey: kUseHorizontalCandidateListPreferenceKey)
defaults.removeObject(forKey: kComposingBufferSizePreferenceKey)
@ -189,6 +191,9 @@ struct ComposingBufferSize {
defaults.removeObject(forKey: kMaxCandidateLength)
defaults.removeObject(forKey: kShouldNotFartInLieuOfBeep)
}
@UserDefault(key: kAppleLanguagesPreferencesKey, defaultValue: [])
@objc static var appleLanguages: Array<String>
@UserDefault(key: kKeyboardLayoutPreferenceKey, defaultValue: 0)
@objc static var keyboardLayout: Int

View File

@ -22,11 +22,40 @@ extension RangeReplaceableCollection where Element: Hashable {
// the "InputMethodServerPreferencesWindowControllerClass" in Info.plist.
@objc(PreferencesWindowController) class PreferencesWindowController: NSWindowController {
@IBOutlet weak var fontSizePopUpButton: NSPopUpButton!
@IBOutlet weak var uiLanguageButton: NSPopUpButton!
@IBOutlet weak var basisKeyboardLayoutButton: NSPopUpButton!
@IBOutlet weak var selectionKeyComboBox: NSComboBox!
@IBOutlet weak var clickedWhetherIMEShouldNotFartToggle: NSButton!
var currentLanguageSelectItem: NSMenuItem? = nil
override func awakeFromNib() {
let languages = ["auto", "en-US", "zh-CN", "zh-TW", "ja-JP"]
var autoSelectItem: NSMenuItem? = nil
var chosenLanguageItem: NSMenuItem? = nil
uiLanguageButton.menu?.removeAllItems()
let appleLanguages = Preferences.appleLanguages
for language in languages {
let menuItem = NSMenuItem()
menuItem.title = NSLocalizedString(language, comment: "")
menuItem.representedObject = language
if language == "auto" {
autoSelectItem = menuItem
}
if !appleLanguages.isEmpty {
if appleLanguages[0] == language {
chosenLanguageItem = menuItem
}
}
uiLanguageButton.menu?.addItem(menuItem)
}
currentLanguageSelectItem = chosenLanguageItem ?? autoSelectItem
uiLanguageButton.select(currentLanguageSelectItem)
let list = TISCreateInputSourceList(nil, true).takeRetainedValue() as! [TISInputSource]
var usKeyboardLayoutItem: NSMenuItem? = nil
var chosenItem: NSMenuItem? = nil
@ -124,6 +153,25 @@ extension RangeReplaceableCollection where Element: Hashable {
Preferences.basisKeyboardLayout = sourceID
}
}
@IBAction func updateUiLanguageAction(_ sender: Any) {
if let selectItem = uiLanguageButton.selectedItem {
if currentLanguageSelectItem == selectItem {
return
}
}
if let language = uiLanguageButton.selectedItem?.representedObject as? String {
if (language != "auto") {
Preferences.appleLanguages = [language]
}
else {
UserDefaults.standard.removeObject(forKey: "AppleLanguages")
}
NSLog("vChewing App self-terminated due to UI language change.")
NSApplication.shared.terminate(nil)
}
}
@IBAction func clickedWhetherIMEShouldNotFartToggleAction(_ sender: Any) {
clsSFX.beep()