PrefMgr // Let all properties observable by KVO.
This commit is contained in:
parent
17b0418dae
commit
29bc2d74cc
|
@ -12,7 +12,7 @@ import SwiftExtension
|
||||||
|
|
||||||
// MARK: -
|
// MARK: -
|
||||||
|
|
||||||
public class PrefMgr: PrefMgrProtocol {
|
@objcMembers public class PrefMgr: PrefMgrProtocol {
|
||||||
public static let shared = PrefMgr()
|
public static let shared = PrefMgr()
|
||||||
public static let kDefaultCandidateKeys = "123456"
|
public static let kDefaultCandidateKeys = "123456"
|
||||||
public static let kDefaultBasicKeyboardLayout = "com.apple.keylayout.ZhuyinBopomofo"
|
public static let kDefaultBasicKeyboardLayout = "com.apple.keylayout.ZhuyinBopomofo"
|
||||||
|
@ -30,50 +30,50 @@ public class PrefMgr: PrefMgrProtocol {
|
||||||
// MARK: - Settings (Tier 1)
|
// MARK: - Settings (Tier 1)
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kIsDebugModeEnabled.rawValue, defaultValue: false)
|
@AppProperty(key: UserDef.kIsDebugModeEnabled.rawValue, defaultValue: false)
|
||||||
public var isDebugModeEnabled: Bool
|
public dynamic var isDebugModeEnabled: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kFailureFlagForUOMObservation.rawValue, defaultValue: false)
|
@AppProperty(key: UserDef.kFailureFlagForUOMObservation.rawValue, defaultValue: false)
|
||||||
public var failureFlagForUOMObservation: Bool
|
public dynamic var failureFlagForUOMObservation: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kDeltaOfCalendarYears.rawValue, defaultValue: -2000)
|
@AppProperty(key: UserDef.kDeltaOfCalendarYears.rawValue, defaultValue: -2000)
|
||||||
public var deltaOfCalendarYears: Int
|
public dynamic var deltaOfCalendarYears: Int
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kMostRecentInputMode.rawValue, defaultValue: "")
|
@AppProperty(key: UserDef.kMostRecentInputMode.rawValue, defaultValue: "")
|
||||||
public var mostRecentInputMode: String
|
public dynamic var mostRecentInputMode: String
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kCheckUpdateAutomatically.rawValue, defaultValue: false)
|
@AppProperty(key: UserDef.kCheckUpdateAutomatically.rawValue, defaultValue: false)
|
||||||
public var checkUpdateAutomatically: Bool
|
public dynamic var checkUpdateAutomatically: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kUseExternalFactoryDict.rawValue, defaultValue: false)
|
@AppProperty(key: UserDef.kUseExternalFactoryDict.rawValue, defaultValue: false)
|
||||||
public var useExternalFactoryDict: Bool
|
public dynamic var useExternalFactoryDict: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kCassettePath.rawValue, defaultValue: "")
|
@AppProperty(key: UserDef.kCassettePath.rawValue, defaultValue: "")
|
||||||
public var cassettePath: String
|
public dynamic var cassettePath: String
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kUserDataFolderSpecified.rawValue, defaultValue: "")
|
@AppProperty(key: UserDef.kUserDataFolderSpecified.rawValue, defaultValue: "")
|
||||||
public var userDataFolderSpecified: String
|
public dynamic var userDataFolderSpecified: String
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kAppleLanguages.rawValue, defaultValue: [])
|
@AppProperty(key: UserDef.kAppleLanguages.rawValue, defaultValue: [])
|
||||||
public var appleLanguages: [String]
|
public dynamic var appleLanguages: [String]
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kKeyboardParser.rawValue, defaultValue: 0)
|
@AppProperty(key: UserDef.kKeyboardParser.rawValue, defaultValue: 0)
|
||||||
public var keyboardParser: Int
|
public dynamic var keyboardParser: Int
|
||||||
|
|
||||||
@AppProperty(
|
@AppProperty(
|
||||||
key: UserDef.kBasicKeyboardLayout.rawValue, defaultValue: kDefaultBasicKeyboardLayout
|
key: UserDef.kBasicKeyboardLayout.rawValue, defaultValue: kDefaultBasicKeyboardLayout
|
||||||
)
|
)
|
||||||
public var basicKeyboardLayout: String
|
public dynamic var basicKeyboardLayout: String
|
||||||
|
|
||||||
@AppProperty(
|
@AppProperty(
|
||||||
key: UserDef.kAlphanumericalKeyboardLayout.rawValue, defaultValue: kDefaultAlphanumericalKeyboardLayout
|
key: UserDef.kAlphanumericalKeyboardLayout.rawValue, defaultValue: kDefaultAlphanumericalKeyboardLayout
|
||||||
)
|
)
|
||||||
public var alphanumericalKeyboardLayout: String
|
public dynamic var alphanumericalKeyboardLayout: String
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kShowNotificationsWhenTogglingCapsLock.rawValue, defaultValue: true)
|
@AppProperty(key: UserDef.kShowNotificationsWhenTogglingCapsLock.rawValue, defaultValue: true)
|
||||||
public var showNotificationsWhenTogglingCapsLock: Bool
|
public dynamic var showNotificationsWhenTogglingCapsLock: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kCandidateListTextSize.rawValue, defaultValue: 16)
|
@AppProperty(key: UserDef.kCandidateListTextSize.rawValue, defaultValue: 16)
|
||||||
public var candidateListTextSize: Double {
|
public dynamic var candidateListTextSize: Double {
|
||||||
didSet {
|
didSet {
|
||||||
// 必須確立條件,否則就會是無限迴圈。
|
// 必須確立條件,否則就會是無限迴圈。
|
||||||
if !(12 ... 196).contains(candidateListTextSize) {
|
if !(12 ... 196).contains(candidateListTextSize) {
|
||||||
|
@ -83,158 +83,158 @@ public class PrefMgr: PrefMgrProtocol {
|
||||||
}
|
}
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kCandidateWindowShowOnlyOneLine.rawValue, defaultValue: false)
|
@AppProperty(key: UserDef.kCandidateWindowShowOnlyOneLine.rawValue, defaultValue: false)
|
||||||
public var candidateWindowShowOnlyOneLine: Bool
|
public dynamic var candidateWindowShowOnlyOneLine: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kShouldAutoReloadUserDataFiles.rawValue, defaultValue: true)
|
@AppProperty(key: UserDef.kShouldAutoReloadUserDataFiles.rawValue, defaultValue: true)
|
||||||
public var shouldAutoReloadUserDataFiles: Bool
|
public dynamic var shouldAutoReloadUserDataFiles: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kUseRearCursorMode.rawValue, defaultValue: false)
|
@AppProperty(key: UserDef.kUseRearCursorMode.rawValue, defaultValue: false)
|
||||||
public var useRearCursorMode: Bool
|
public dynamic var useRearCursorMode: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kMoveCursorAfterSelectingCandidate.rawValue, defaultValue: true)
|
@AppProperty(key: UserDef.kMoveCursorAfterSelectingCandidate.rawValue, defaultValue: true)
|
||||||
public var moveCursorAfterSelectingCandidate: Bool
|
public dynamic var moveCursorAfterSelectingCandidate: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kUseDynamicCandidateWindowOrigin.rawValue, defaultValue: true)
|
@AppProperty(key: UserDef.kUseDynamicCandidateWindowOrigin.rawValue, defaultValue: true)
|
||||||
public var useDynamicCandidateWindowOrigin: Bool
|
public dynamic var useDynamicCandidateWindowOrigin: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kUseHorizontalCandidateList.rawValue, defaultValue: true)
|
@AppProperty(key: UserDef.kUseHorizontalCandidateList.rawValue, defaultValue: true)
|
||||||
public var useHorizontalCandidateList: Bool
|
public dynamic var useHorizontalCandidateList: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kChooseCandidateUsingSpace.rawValue, defaultValue: true)
|
@AppProperty(key: UserDef.kChooseCandidateUsingSpace.rawValue, defaultValue: true)
|
||||||
public var chooseCandidateUsingSpace: Bool
|
public dynamic var chooseCandidateUsingSpace: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kAllowBoostingSingleKanjiAsUserPhrase.rawValue, defaultValue: false)
|
@AppProperty(key: UserDef.kAllowBoostingSingleKanjiAsUserPhrase.rawValue, defaultValue: false)
|
||||||
public var allowBoostingSingleKanjiAsUserPhrase: Bool
|
public dynamic var allowBoostingSingleKanjiAsUserPhrase: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kFetchSuggestionsFromUserOverrideModel.rawValue, defaultValue: true)
|
@AppProperty(key: UserDef.kFetchSuggestionsFromUserOverrideModel.rawValue, defaultValue: true)
|
||||||
public var fetchSuggestionsFromUserOverrideModel: Bool
|
public dynamic var fetchSuggestionsFromUserOverrideModel: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kUseFixedCandidateOrderOnSelection.rawValue, defaultValue: false)
|
@AppProperty(key: UserDef.kUseFixedCandidateOrderOnSelection.rawValue, defaultValue: false)
|
||||||
public var useFixedCandidateOrderOnSelection: Bool
|
public dynamic var useFixedCandidateOrderOnSelection: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kAutoCorrectReadingCombination.rawValue, defaultValue: true)
|
@AppProperty(key: UserDef.kAutoCorrectReadingCombination.rawValue, defaultValue: true)
|
||||||
public var autoCorrectReadingCombination: Bool
|
public dynamic var autoCorrectReadingCombination: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kAlsoConfirmAssociatedCandidatesByEnter.rawValue, defaultValue: false)
|
@AppProperty(key: UserDef.kAlsoConfirmAssociatedCandidatesByEnter.rawValue, defaultValue: false)
|
||||||
public var alsoConfirmAssociatedCandidatesByEnter: Bool
|
public dynamic var alsoConfirmAssociatedCandidatesByEnter: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kKeepReadingUponCompositionError.rawValue, defaultValue: false)
|
@AppProperty(key: UserDef.kKeepReadingUponCompositionError.rawValue, defaultValue: false)
|
||||||
public var keepReadingUponCompositionError: Bool
|
public dynamic var keepReadingUponCompositionError: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kUpperCaseLetterKeyBehavior.rawValue, defaultValue: 0)
|
@AppProperty(key: UserDef.kUpperCaseLetterKeyBehavior.rawValue, defaultValue: 0)
|
||||||
public var upperCaseLetterKeyBehavior: Int
|
public dynamic var upperCaseLetterKeyBehavior: Int
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kTogglingAlphanumericalModeWithLShift.rawValue, defaultValue: true)
|
@AppProperty(key: UserDef.kTogglingAlphanumericalModeWithLShift.rawValue, defaultValue: true)
|
||||||
public var togglingAlphanumericalModeWithLShift: Bool {
|
public dynamic var togglingAlphanumericalModeWithLShift: Bool {
|
||||||
didSet {
|
didSet {
|
||||||
SessionCtl.theShiftKeyDetector.toggleWithLShift = togglingAlphanumericalModeWithLShift
|
SessionCtl.theShiftKeyDetector.toggleWithLShift = togglingAlphanumericalModeWithLShift
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kTogglingAlphanumericalModeWithRShift.rawValue, defaultValue: true)
|
@AppProperty(key: UserDef.kTogglingAlphanumericalModeWithRShift.rawValue, defaultValue: true)
|
||||||
public var togglingAlphanumericalModeWithRShift: Bool {
|
public dynamic var togglingAlphanumericalModeWithRShift: Bool {
|
||||||
didSet {
|
didSet {
|
||||||
SessionCtl.theShiftKeyDetector.toggleWithRShift = togglingAlphanumericalModeWithRShift
|
SessionCtl.theShiftKeyDetector.toggleWithRShift = togglingAlphanumericalModeWithRShift
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kConsolidateContextOnCandidateSelection.rawValue, defaultValue: true)
|
@AppProperty(key: UserDef.kConsolidateContextOnCandidateSelection.rawValue, defaultValue: true)
|
||||||
public var consolidateContextOnCandidateSelection: Bool
|
public dynamic var consolidateContextOnCandidateSelection: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kHardenVerticalPunctuations.rawValue, defaultValue: false)
|
@AppProperty(key: UserDef.kHardenVerticalPunctuations.rawValue, defaultValue: false)
|
||||||
public var hardenVerticalPunctuations: Bool
|
public dynamic var hardenVerticalPunctuations: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kTrimUnfinishedReadingsOnCommit.rawValue, defaultValue: true)
|
@AppProperty(key: UserDef.kTrimUnfinishedReadingsOnCommit.rawValue, defaultValue: true)
|
||||||
public var trimUnfinishedReadingsOnCommit: Bool
|
public dynamic var trimUnfinishedReadingsOnCommit: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kAlwaysShowTooltipTextsHorizontally.rawValue, defaultValue: false)
|
@AppProperty(key: UserDef.kAlwaysShowTooltipTextsHorizontally.rawValue, defaultValue: false)
|
||||||
public var alwaysShowTooltipTextsHorizontally: Bool
|
public dynamic var alwaysShowTooltipTextsHorizontally: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kClientsIMKTextInputIncapable.rawValue, defaultValue: kDefaultClientsIMKTextInputIncapable)
|
@AppProperty(key: UserDef.kClientsIMKTextInputIncapable.rawValue, defaultValue: kDefaultClientsIMKTextInputIncapable)
|
||||||
public var clientsIMKTextInputIncapable: [String: Bool]
|
public dynamic var clientsIMKTextInputIncapable: [String: Bool]
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kOnlyLoadFactoryLangModelsIfNeeded.rawValue, defaultValue: true)
|
@AppProperty(key: UserDef.kOnlyLoadFactoryLangModelsIfNeeded.rawValue, defaultValue: true)
|
||||||
public var onlyLoadFactoryLangModelsIfNeeded: Bool {
|
public dynamic var onlyLoadFactoryLangModelsIfNeeded: Bool {
|
||||||
didSet {
|
didSet {
|
||||||
if !onlyLoadFactoryLangModelsIfNeeded { LMMgr.loadDataModelsOnAppDelegate() }
|
if !onlyLoadFactoryLangModelsIfNeeded { LMMgr.loadDataModelsOnAppDelegate() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kShowTranslatedStrokesInCompositionBuffer.rawValue, defaultValue: true)
|
@AppProperty(key: UserDef.kShowTranslatedStrokesInCompositionBuffer.rawValue, defaultValue: true)
|
||||||
public var showTranslatedStrokesInCompositionBuffer: Bool
|
public dynamic var showTranslatedStrokesInCompositionBuffer: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kForceCassetteChineseConversion.rawValue, defaultValue: 0)
|
@AppProperty(key: UserDef.kForceCassetteChineseConversion.rawValue, defaultValue: 0)
|
||||||
public var forceCassetteChineseConversion: Int
|
public dynamic var forceCassetteChineseConversion: Int
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kShowReverseLookupInCandidateUI.rawValue, defaultValue: true)
|
@AppProperty(key: UserDef.kShowReverseLookupInCandidateUI.rawValue, defaultValue: true)
|
||||||
public var showReverseLookupInCandidateUI: Bool
|
public dynamic var showReverseLookupInCandidateUI: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kAutoCompositeWithLongestPossibleCassetteKey.rawValue, defaultValue: true)
|
@AppProperty(key: UserDef.kAutoCompositeWithLongestPossibleCassetteKey.rawValue, defaultValue: true)
|
||||||
public var autoCompositeWithLongestPossibleCassetteKey: Bool
|
public dynamic var autoCompositeWithLongestPossibleCassetteKey: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kShareAlphanumericalModeStatusAcrossClients.rawValue, defaultValue: false)
|
@AppProperty(key: UserDef.kShareAlphanumericalModeStatusAcrossClients.rawValue, defaultValue: false)
|
||||||
public var shareAlphanumericalModeStatusAcrossClients: Bool
|
public dynamic var shareAlphanumericalModeStatusAcrossClients: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kPhraseEditorAutoReloadExternalModifications.rawValue, defaultValue: true)
|
@AppProperty(key: UserDef.kPhraseEditorAutoReloadExternalModifications.rawValue, defaultValue: true)
|
||||||
public var phraseEditorAutoReloadExternalModifications: Bool
|
public dynamic var phraseEditorAutoReloadExternalModifications: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kClassicHaninKeyboardSymbolModeShortcutEnabled.rawValue, defaultValue: false)
|
@AppProperty(key: UserDef.kClassicHaninKeyboardSymbolModeShortcutEnabled.rawValue, defaultValue: false)
|
||||||
public var classicHaninKeyboardSymbolModeShortcutEnabled: Bool
|
public dynamic var classicHaninKeyboardSymbolModeShortcutEnabled: Bool
|
||||||
|
|
||||||
// MARK: - Settings (Tier 2)
|
// MARK: - Settings (Tier 2)
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kUseSpaceToCommitHighlightedSCPCCandidate.rawValue, defaultValue: true)
|
@AppProperty(key: UserDef.kUseSpaceToCommitHighlightedSCPCCandidate.rawValue, defaultValue: true)
|
||||||
public var useSpaceToCommitHighlightedSCPCCandidate: Bool
|
public dynamic var useSpaceToCommitHighlightedSCPCCandidate: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kEnableSwiftUIForTDKCandidates.rawValue, defaultValue: false)
|
@AppProperty(key: UserDef.kEnableSwiftUIForTDKCandidates.rawValue, defaultValue: false)
|
||||||
public var enableSwiftUIForTDKCandidates: Bool
|
public dynamic var enableSwiftUIForTDKCandidates: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kEnableMouseScrollingForTDKCandidatesCocoa.rawValue, defaultValue: false)
|
@AppProperty(key: UserDef.kEnableMouseScrollingForTDKCandidatesCocoa.rawValue, defaultValue: false)
|
||||||
public var enableMouseScrollingForTDKCandidatesCocoa: Bool
|
public dynamic var enableMouseScrollingForTDKCandidatesCocoa: Bool
|
||||||
|
|
||||||
@AppProperty(
|
@AppProperty(
|
||||||
key: UserDef.kDisableSegmentedThickUnderlineInMarkingModeForManagedClients.rawValue,
|
key: UserDef.kDisableSegmentedThickUnderlineInMarkingModeForManagedClients.rawValue,
|
||||||
defaultValue: false
|
defaultValue: false
|
||||||
)
|
)
|
||||||
public var disableSegmentedThickUnderlineInMarkingModeForManagedClients: Bool
|
public dynamic var disableSegmentedThickUnderlineInMarkingModeForManagedClients: Bool
|
||||||
|
|
||||||
// MARK: - Settings (Tier 3)
|
// MARK: - Settings (Tier 3)
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kMaxCandidateLength.rawValue, defaultValue: 10)
|
@AppProperty(key: UserDef.kMaxCandidateLength.rawValue, defaultValue: 10)
|
||||||
public var maxCandidateLength: Int
|
public dynamic var maxCandidateLength: Int
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kShouldNotFartInLieuOfBeep.rawValue, defaultValue: true)
|
@AppProperty(key: UserDef.kShouldNotFartInLieuOfBeep.rawValue, defaultValue: true)
|
||||||
public var shouldNotFartInLieuOfBeep: Bool
|
public dynamic var shouldNotFartInLieuOfBeep: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kShowHanyuPinyinInCompositionBuffer.rawValue, defaultValue: false)
|
@AppProperty(key: UserDef.kShowHanyuPinyinInCompositionBuffer.rawValue, defaultValue: false)
|
||||||
public var showHanyuPinyinInCompositionBuffer: Bool
|
public dynamic var showHanyuPinyinInCompositionBuffer: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kInlineDumpPinyinInLieuOfZhuyin.rawValue, defaultValue: false)
|
@AppProperty(key: UserDef.kInlineDumpPinyinInLieuOfZhuyin.rawValue, defaultValue: false)
|
||||||
public var inlineDumpPinyinInLieuOfZhuyin: Bool
|
public dynamic var inlineDumpPinyinInLieuOfZhuyin: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kCNS11643Enabled.rawValue, defaultValue: false)
|
@AppProperty(key: UserDef.kCNS11643Enabled.rawValue, defaultValue: false)
|
||||||
public var cns11643Enabled: Bool {
|
public dynamic var cns11643Enabled: Bool {
|
||||||
didSet {
|
didSet {
|
||||||
LMMgr.setCNSEnabled(cns11643Enabled) // 很重要
|
LMMgr.setCNSEnabled(cns11643Enabled) // 很重要
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kSymbolInputEnabled.rawValue, defaultValue: true)
|
@AppProperty(key: UserDef.kSymbolInputEnabled.rawValue, defaultValue: true)
|
||||||
public var symbolInputEnabled: Bool {
|
public dynamic var symbolInputEnabled: Bool {
|
||||||
didSet {
|
didSet {
|
||||||
LMMgr.setSymbolEnabled(symbolInputEnabled) // 很重要
|
LMMgr.setSymbolEnabled(symbolInputEnabled) // 很重要
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kCassetteEnabled.rawValue, defaultValue: false)
|
@AppProperty(key: UserDef.kCassetteEnabled.rawValue, defaultValue: false)
|
||||||
public var cassetteEnabled: Bool {
|
public dynamic var cassetteEnabled: Bool {
|
||||||
didSet {
|
didSet {
|
||||||
LMMgr.setCassetteEnabled(cassetteEnabled) // 很重要
|
LMMgr.setCassetteEnabled(cassetteEnabled) // 很重要
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kChineseConversionEnabled.rawValue, defaultValue: false)
|
@AppProperty(key: UserDef.kChineseConversionEnabled.rawValue, defaultValue: false)
|
||||||
public var chineseConversionEnabled: Bool {
|
public dynamic var chineseConversionEnabled: Bool {
|
||||||
didSet {
|
didSet {
|
||||||
// 康熙轉換與 JIS 轉換不能同時開啟,否則會出現某些奇奇怪怪的情況
|
// 康熙轉換與 JIS 轉換不能同時開啟,否則會出現某些奇奇怪怪的情況
|
||||||
if chineseConversionEnabled, shiftJISShinjitaiOutputEnabled {
|
if chineseConversionEnabled, shiftJISShinjitaiOutputEnabled {
|
||||||
|
@ -250,7 +250,7 @@ public class PrefMgr: PrefMgrProtocol {
|
||||||
}
|
}
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kShiftJISShinjitaiOutputEnabled.rawValue, defaultValue: false)
|
@AppProperty(key: UserDef.kShiftJISShinjitaiOutputEnabled.rawValue, defaultValue: false)
|
||||||
public var shiftJISShinjitaiOutputEnabled: Bool {
|
public dynamic var shiftJISShinjitaiOutputEnabled: Bool {
|
||||||
didSet {
|
didSet {
|
||||||
// 康熙轉換與 JIS 轉換不能同時開啟,否則會出現某些奇奇怪怪的情況
|
// 康熙轉換與 JIS 轉換不能同時開啟,否則會出現某些奇奇怪怪的情況
|
||||||
if shiftJISShinjitaiOutputEnabled, chineseConversionEnabled {
|
if shiftJISShinjitaiOutputEnabled, chineseConversionEnabled {
|
||||||
|
@ -266,36 +266,36 @@ public class PrefMgr: PrefMgrProtocol {
|
||||||
}
|
}
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kCurrencyNumeralsEnabled.rawValue, defaultValue: false)
|
@AppProperty(key: UserDef.kCurrencyNumeralsEnabled.rawValue, defaultValue: false)
|
||||||
public var currencyNumeralsEnabled: Bool
|
public dynamic var currencyNumeralsEnabled: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kHalfWidthPunctuationEnabled.rawValue, defaultValue: false)
|
@AppProperty(key: UserDef.kHalfWidthPunctuationEnabled.rawValue, defaultValue: false)
|
||||||
public var halfWidthPunctuationEnabled: Bool
|
public dynamic var halfWidthPunctuationEnabled: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kEscToCleanInputBuffer.rawValue, defaultValue: true)
|
@AppProperty(key: UserDef.kEscToCleanInputBuffer.rawValue, defaultValue: true)
|
||||||
public var escToCleanInputBuffer: Bool
|
public dynamic var escToCleanInputBuffer: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kAcceptLeadingIntonations.rawValue, defaultValue: true)
|
@AppProperty(key: UserDef.kAcceptLeadingIntonations.rawValue, defaultValue: true)
|
||||||
public var acceptLeadingIntonations: Bool
|
public dynamic var acceptLeadingIntonations: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kSpecifyIntonationKeyBehavior.rawValue, defaultValue: 0)
|
@AppProperty(key: UserDef.kSpecifyIntonationKeyBehavior.rawValue, defaultValue: 0)
|
||||||
public var specifyIntonationKeyBehavior: Int
|
public dynamic var specifyIntonationKeyBehavior: Int
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kSpecifyShiftBackSpaceKeyBehavior.rawValue, defaultValue: 0)
|
@AppProperty(key: UserDef.kSpecifyShiftBackSpaceKeyBehavior.rawValue, defaultValue: 0)
|
||||||
public var specifyShiftBackSpaceKeyBehavior: Int
|
public dynamic var specifyShiftBackSpaceKeyBehavior: Int
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kSpecifyShiftTabKeyBehavior.rawValue, defaultValue: false)
|
@AppProperty(key: UserDef.kSpecifyShiftTabKeyBehavior.rawValue, defaultValue: false)
|
||||||
public var specifyShiftTabKeyBehavior: Bool
|
public dynamic var specifyShiftTabKeyBehavior: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kSpecifyShiftSpaceKeyBehavior.rawValue, defaultValue: false)
|
@AppProperty(key: UserDef.kSpecifyShiftSpaceKeyBehavior.rawValue, defaultValue: false)
|
||||||
public var specifyShiftSpaceKeyBehavior: Bool
|
public dynamic var specifyShiftSpaceKeyBehavior: Bool
|
||||||
|
|
||||||
// MARK: - Optional settings
|
// MARK: - Optional settings
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kCandidateTextFontName.rawValue, defaultValue: "")
|
@AppProperty(key: UserDef.kCandidateTextFontName.rawValue, defaultValue: "")
|
||||||
public var candidateTextFontName: String
|
public dynamic var candidateTextFontName: String
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kCandidateKeys.rawValue, defaultValue: kDefaultCandidateKeys)
|
@AppProperty(key: UserDef.kCandidateKeys.rawValue, defaultValue: kDefaultCandidateKeys)
|
||||||
public var candidateKeys: String {
|
public dynamic var candidateKeys: String {
|
||||||
didSet {
|
didSet {
|
||||||
let optimized = candidateKeys.lowercased().deduplicated
|
let optimized = candidateKeys.lowercased().deduplicated
|
||||||
if candidateKeys != optimized { candidateKeys = optimized }
|
if candidateKeys != optimized { candidateKeys = optimized }
|
||||||
|
@ -306,7 +306,7 @@ public class PrefMgr: PrefMgrProtocol {
|
||||||
}
|
}
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kUseSCPCTypingMode.rawValue, defaultValue: false)
|
@AppProperty(key: UserDef.kUseSCPCTypingMode.rawValue, defaultValue: false)
|
||||||
public var useSCPCTypingMode: Bool {
|
public dynamic var useSCPCTypingMode: Bool {
|
||||||
willSet {
|
willSet {
|
||||||
if newValue {
|
if newValue {
|
||||||
LMMgr.loadUserSCPCSequencesData()
|
LMMgr.loadUserSCPCSequencesData()
|
||||||
|
@ -315,7 +315,7 @@ public class PrefMgr: PrefMgrProtocol {
|
||||||
}
|
}
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kPhraseReplacementEnabled.rawValue, defaultValue: false)
|
@AppProperty(key: UserDef.kPhraseReplacementEnabled.rawValue, defaultValue: false)
|
||||||
public var phraseReplacementEnabled: Bool {
|
public dynamic var phraseReplacementEnabled: Bool {
|
||||||
willSet {
|
willSet {
|
||||||
LMMgr.setPhraseReplacementEnabled(newValue)
|
LMMgr.setPhraseReplacementEnabled(newValue)
|
||||||
if newValue {
|
if newValue {
|
||||||
|
@ -325,7 +325,7 @@ public class PrefMgr: PrefMgrProtocol {
|
||||||
}
|
}
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kAssociatedPhrasesEnabled.rawValue, defaultValue: false)
|
@AppProperty(key: UserDef.kAssociatedPhrasesEnabled.rawValue, defaultValue: false)
|
||||||
public var associatedPhrasesEnabled: Bool {
|
public dynamic var associatedPhrasesEnabled: Bool {
|
||||||
willSet {
|
willSet {
|
||||||
if newValue {
|
if newValue {
|
||||||
LMMgr.loadUserAssociatesData()
|
LMMgr.loadUserAssociatesData()
|
||||||
|
@ -336,32 +336,32 @@ public class PrefMgr: PrefMgrProtocol {
|
||||||
// MARK: - Keyboard HotKey Enable / Disable
|
// MARK: - Keyboard HotKey Enable / Disable
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kUsingHotKeySCPC.rawValue, defaultValue: true)
|
@AppProperty(key: UserDef.kUsingHotKeySCPC.rawValue, defaultValue: true)
|
||||||
public var usingHotKeySCPC: Bool
|
public dynamic var usingHotKeySCPC: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kUsingHotKeyAssociates.rawValue, defaultValue: true)
|
@AppProperty(key: UserDef.kUsingHotKeyAssociates.rawValue, defaultValue: true)
|
||||||
public var usingHotKeyAssociates: Bool
|
public dynamic var usingHotKeyAssociates: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kUsingHotKeyCNS.rawValue, defaultValue: true)
|
@AppProperty(key: UserDef.kUsingHotKeyCNS.rawValue, defaultValue: true)
|
||||||
public var usingHotKeyCNS: Bool
|
public dynamic var usingHotKeyCNS: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kUsingHotKeyKangXi.rawValue, defaultValue: true)
|
@AppProperty(key: UserDef.kUsingHotKeyKangXi.rawValue, defaultValue: true)
|
||||||
public var usingHotKeyKangXi: Bool
|
public dynamic var usingHotKeyKangXi: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kUsingHotKeyJIS.rawValue, defaultValue: true)
|
@AppProperty(key: UserDef.kUsingHotKeyJIS.rawValue, defaultValue: true)
|
||||||
public var usingHotKeyJIS: Bool
|
public dynamic var usingHotKeyJIS: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kUsingHotKeyHalfWidthASCII.rawValue, defaultValue: true)
|
@AppProperty(key: UserDef.kUsingHotKeyHalfWidthASCII.rawValue, defaultValue: true)
|
||||||
public var usingHotKeyHalfWidthASCII: Bool
|
public dynamic var usingHotKeyHalfWidthASCII: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kUsingHotKeyCurrencyNumerals.rawValue, defaultValue: true)
|
@AppProperty(key: UserDef.kUsingHotKeyCurrencyNumerals.rawValue, defaultValue: true)
|
||||||
public var usingHotKeyCurrencyNumerals: Bool
|
public dynamic var usingHotKeyCurrencyNumerals: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kUsingHotKeyCassette.rawValue, defaultValue: true)
|
@AppProperty(key: UserDef.kUsingHotKeyCassette.rawValue, defaultValue: true)
|
||||||
public var usingHotKeyCassette: Bool
|
public dynamic var usingHotKeyCassette: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kUsingHotKeyRevLookup.rawValue, defaultValue: true)
|
@AppProperty(key: UserDef.kUsingHotKeyRevLookup.rawValue, defaultValue: true)
|
||||||
public var usingHotKeyRevLookup: Bool
|
public dynamic var usingHotKeyRevLookup: Bool
|
||||||
|
|
||||||
@AppProperty(key: UserDef.kUsingHotKeyInputMode.rawValue, defaultValue: true)
|
@AppProperty(key: UserDef.kUsingHotKeyInputMode.rawValue, defaultValue: true)
|
||||||
public var usingHotKeyInputMode: Bool
|
public dynamic var usingHotKeyInputMode: Bool
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue