Reset // Let AboutWindow and PrefWindow work.

This commit is contained in:
ShikiSuen 2022-02-06 20:48:23 +08:00
parent 83639350ab
commit 30c7e7f2ec
10 changed files with 470 additions and 75 deletions

View File

@ -165,12 +165,20 @@ class AppDelegate: NSObject, NSApplicationDelegate, ctlNonModalAlertWindowDelega
}
@objc func showPreferences() {
if ctlPrefWindowInstance == nil {
if (ctlPrefWindowInstance == nil) {
ctlPrefWindowInstance = ctlPrefWindow.init(windowNibName: "frmPrefWindow")
}
ctlPrefWindowInstance?.window?.center()
ctlPrefWindowInstance?.window?.orderFrontRegardless() //
}
// New About Window
@objc func showAbout() {
if (ctlAboutWindowInstance == nil) {
ctlAboutWindowInstance = ctlAboutWindow.init(windowNibName: "frmAboutWindow")
}
ctlAboutWindowInstance?.window?.center()
ctlAboutWindowInstance?.window?.orderFrontRegardless() //
}
@objc(checkForUpdate)
@ -244,4 +252,10 @@ class AppDelegate: NSObject, NSApplicationDelegate, ctlNonModalAlertWindowDelega
func ctlNonModalAlertWindowDidCancel(_ controller: ctlNonModalAlertWindow) {
updateNextStepURL = nil
}
// New About Window
@IBAction func about(_ sender: Any) {
(NSApp.delegate as? AppDelegate)?.showAbout()
NSApplication.shared.activate(ignoringOtherApps: true)
}
}

View File

@ -21,7 +21,7 @@ private let kShouldAutoSortPhraseReplacementMapOnLoad = "ShouldAutoSortPhraseRep
private let kSelectPhraseAfterCursorAsCandidatePreference = "SelectPhraseAfterCursorAsCandidate"
private let kUseHorizontalCandidateListPreference = "UseHorizontalCandidateList"
private let kComposingBufferSizePreference = "ComposingBufferSize"
private let kChooseCandidateUsingSpace = "ChooseCandidateUsingSpaceKey"
private let kChooseCandidateUsingSpace = "ChooseCandidateUsingSpace"
private let kCNS11643Enabled = "CNS11643Enabled"
private let kChineseConversionEnabled = "ChineseConversionEnabled"
private let kHalfWidthPunctuationEnabled = "HalfWidthPunctuationEnable"
@ -331,7 +331,7 @@ struct ComposingBufferSize {
@UserDefault(key: kShouldAutoSortPhraseReplacementMapOnLoad, defaultValue: false)
@objc static var shouldAutoSortPhraseReplacementMapOnLoad: Bool
@UserDefault(key: kSelectPhraseAfterCursorAsCandidatePreference, defaultValue: false)
@UserDefault(key: kSelectPhraseAfterCursorAsCandidatePreference, defaultValue: true)
@objc static var selectPhraseAfterCursorAsCandidate: Bool
@UserDefault(key: kMoveCursorAfterSelectingCandidate, defaultValue: false)

View File

@ -170,7 +170,8 @@ class ctlInputMethod: IMKInputController {
// MARK: - Menu Items
@objc override func showPreferences(_ sender: Any?) {
super.showPreferences(sender)
(NSApp.delegate as? AppDelegate)?.showPreferences()
NSApp.activate(ignoringOtherApps: true)
}
@objc func toggleChineseConverter(_ sender: Any?) {
@ -231,7 +232,7 @@ class ctlInputMethod: IMKInputController {
}
@objc func showAbout(_ sender: Any?) {
NSApp.orderFrontStandardAboutPanel(sender)
(NSApp.delegate as? AppDelegate)?.showAbout()
NSApp.activate(ignoringOtherApps: true)
}

View File

@ -1,5 +1,6 @@
CFBundleName = "vChewing";
CFBundleDisplayName = "vChewing";
NSHumanReadableCopyright = "Copyright © 2011-2022 Mengjuei Hsieh et al.\nAll Rights Reserved.";
NSHumanReadableCopyright = "© 2011-2022 OpenVanilla Project & © 2021-2022 vChewing Project.";
"org.atelierInmu.inputmethod.vChewing.IMECHT" = "vChewing-CHT";
"org.atelierInmu.inputmethod.vChewing.IMECHS" = "vChewing-CHS";
CFEULAContent = "Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n";

View File

@ -0,0 +1,6 @@
CFBundleName = "vChewing";
CFBundleDisplayName = "vChewing";
NSHumanReadableCopyright = "© 2011-2022 OpenVanilla Project & © 2021-2022 vChewing Project.";
"org.atelierInmu.inputmethod.vChewing.IMECHT" = "vChewing-CHT";
"org.atelierInmu.inputmethod.vChewing.IMECHS" = "vChewing-CHS";
CFEULAContent = "Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n";

View File

@ -0,0 +1,94 @@
/* No comment provided by engineer. */
"About vChewing…" = "About vChewing…";
/* No comment provided by engineer. */
"vChewing Preferences" = "vChewing Preferences";
/* No comment provided by engineer. */
"Check for Updates…" = "Check for Updates…";
/* No comment provided by engineer. */
"Update Check Failed" = "Update Check Failed";
/* No comment provided by engineer. */
"There may be no internet connection or the server failed to respond.\n\nError message: %@" = "There may be no internet connection or the server failed to respond.\n\nError message: %@";
/* No comment provided by engineer. */
"OK" = "OK";
/* No comment provided by engineer. */
"Dismiss" = "Dismiss";
/* No comment provided by engineer. */
"New Version Available" = "New Version Available";
/* No comment provided by engineer. */
"Not Now" = "Not Now";
/* No comment provided by engineer. */
"Visit Website" = "Visit Website";
/* No comment provided by engineer. */
"You're currently using vChewing %@ (%@), a new version %@ (%@) is now available. Do you want to visit vChewing's website to download the version?%@" = "You're currently using vChewing %@ (%@), a new version %@ (%@) is now available. Do you want to visit vChewing's website to download the version?%@";
"Chinese Conversion" = "Convert to Simplified Chinese";
"User Phrases" = "User Phrases";
"Edit User Phrases" = "Edit User Phrases";
"Reload User Phrases" = "Reload User Phrases";
"Unable to create the user phrase file." = "Unable to create the user phrase file.";
"Please check the permission of at \"%@\"." = "Please check the permission of at \"%@\".";
"Edit Excluded Phrases" = "Edit Excluded Phrases";
"Use Half-Width Punctuations" = "Use Half-Width Punctuations";
"You are now selecting \"%@\". You can add a phrase with two or more characters." = "You are now selecting \"%@\". You can add a phrase with two or more characters.";
"You are now selecting \"%@\". Press enter to add a new phrase." = "You are now selecting \"%@\". Press enter to add a new phrase.";
"You are now selecting \"%@\". A phrase cannot be longer than %d characters." = "You are now selecting \"%@\". A phrase cannot be longer than %d characters.";
"Chinese conversion on" = "Chinese conversion on";
"Chinese conversion off" = "Chinese conversion off";
"Edit Phrase Replacement Table" = "Edit Phrase Replacement Table";
"Use Phrase Replacement" = "Use Phrase Replacement";
"Candidates keys cannot be empty." = "Candidates keys cannot be empty.";
"Candidate keys can only contain latin characters and numbers." = "Candidate keys can only contain latin characters and numbers.";
"Candidate keys cannot contain space." = "Candidate keys cannot contain space.";
"There should not be duplicated keys." = "There should not be duplicated keys.";
"The length of your candidate keys can not be less than 4 characters." = "The length of your candidate keys can not be less than 4 characters.";
"The length of your candidate keys can not be larger than 15 characters." = "The length of your candidate keys can not be larger than 15 characters.";
"Phrase replacement mode is on. Not suggested to add phrase in the mode." = "Phrase replacement mode is on. Not suggested to add phrase in the mode.";
"Model based Chinese conversion is on. Not suggested to add phrase in the mode." = "Model based Chinese conversion is on. Not suggested to add phrase in the mode.";
"Half-width punctuation on" = "Half-width punctuation on";
"Half-width punctuation off" = "Half-width punctuation off";
"Associated Phrases" = "Associated Phrases";
"There are special phrases in your text. We don't support adding new phrases in this case." = "There are special phrases in your text. We don't support adding new phrases in this case.";
"Cursor is before \"%@\"." = "Cursor is before \"%@\".";
"Cursor is after \"%@\"." = "Cursor is after \"%@\".";
"Cursor is between \"%@\" and \"%@\"." = "Cursor is between \"%@\" and \"%@\".";
"You are now selecting \"%@\". The phrase already exists." = "You are now selecting \"%@\". The phrase already exists.";

View File

@ -1,16 +1,61 @@
/*
* ctlPrefWindow.swift
*
* Copyright 2021-2022 vChewing Project (3-Clause BSD License).
* Derived from 2011-2022 OpenVanilla Project (MIT License).
* Some rights reserved. See "LICENSE.TXT" for details.
*/
import Cocoa
import Carbon
// Please note that the class should be exposed as "ctlPrefWindow"
// Extend the RangeReplaceableCollection to allow it clean duplicated characters.
extension RangeReplaceableCollection where Element: Hashable {
var charDeDuplicate: Self {
var set = Set<Element>()
return filter{ set.insert($0).inserted }
}
}
// Please note that the class should be exposed using the same class name
// in Objective-C in order to let IMK to see the same class name as
// the "InputMethodServerctlPrefWindowClass" in Info.plist.
// the "InputMethodServerPreferencesWindowControllerClass" in Info.plist.
@objc(ctlPrefWindow) class ctlPrefWindow: 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", "zh-Hans", "zh-Hant", "ja"]
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
@ -18,6 +63,7 @@ import Carbon
basisKeyboardLayoutButton.menu?.removeAllItems()
let basisKeyboardLayoutID = Preferences.basisKeyboardLayout
for source in list {
func getString(_ key: CFString) -> String? {
@ -67,21 +113,6 @@ import Carbon
menuItem.title = localizedName
menuItem.representedObject = sourceID
if let iconPtr = TISGetInputSourceProperty(source, kTISPropertyIconRef) {
let icon = IconRef(iconPtr)
let image = NSImage(iconRef: icon)
func resize(_ image: NSImage) -> NSImage {
let newImage = NSImage(size: NSSize(width: 16, height: 16))
newImage.lockFocus()
image.draw(in: NSRect(x: 0, y: 0, width: 16, height: 16))
newImage.unlockFocus()
return newImage
}
menuItem.image = resize(image)
}
if sourceID == "com.apple.keylayout.US" {
usKeyboardLayoutItem = menuItem
}
@ -91,6 +122,11 @@ import Carbon
basisKeyboardLayoutButton.menu?.addItem(menuItem)
}
let menuItem = NSMenuItem()
menuItem.title = String(format: NSLocalizedString("Apple Zhuyin Bopomofo", comment: ""))
menuItem.representedObject = String("com.apple.keylayout.ZhuyinBopomofo")
basisKeyboardLayoutButton.menu?.addItem(menuItem)
basisKeyboardLayoutButton.select(chosenItem ?? usKeyboardLayoutItem)
selectionKeyComboBox.usesDataSource = false
selectionKeyComboBox.removeAllItems()
@ -109,27 +145,53 @@ import Carbon
Preferences.basisKeyboardLayout = sourceID
}
}
@IBAction func changeSelectionKeyAction(_ sender: Any) {
guard let keys = (sender as AnyObject).stringValue?
.trimmingCharacters(in: .whitespacesAndNewlines)
.lowercased() else {
return
}
do {
try Preferences.validate(candidateKeys: keys)
Preferences.candidateKeys = keys
} catch Preferences.CandidateKeyError.empty {
selectionKeyComboBox.stringValue = Preferences.candidateKeys
} catch {
if let window = window {
let alert = NSAlert(error: error)
alert.beginSheetModal(for: window) { response in
self.selectionKeyComboBox.stringValue = Preferences.candidateKeys
}
@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()
}
@IBAction func changeSelectionKeyAction(_ sender: Any) {
guard let keys = (sender as AnyObject).stringValue?.trimmingCharacters(in: .whitespacesAndNewlines).charDeDuplicate else {
return
}
do {
try Preferences.validate(candidateKeys: keys)
Preferences.candidateKeys = keys
}
catch Preferences.CandidateKeyError.empty {
selectionKeyComboBox.stringValue = Preferences.candidateKeys
}
catch {
if let window = window {
let alert = NSAlert(error: error)
alert.beginSheetModal(for: window) { response in
self.selectionKeyComboBox.stringValue = Preferences.candidateKeys
}
clsSFX.beep()
}
}
selectionKeyComboBox.stringValue = keys
Preferences.candidateKeys = keys
}
}

View File

@ -17,7 +17,7 @@
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<window title="vChewing Preferences" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" restorable="NO" animationBehavior="default" titlebarAppearsTransparent="YES" id="1" userLabel="Window - Preferences">
<window title="vChewing Preferences" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" restorable="NO" animationBehavior="default" titlebarAppearsTransparent="YES" id="1" userLabel="frmPrefWindow">
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
<rect key="contentRect" x="401" y="295" width="501" height="469"/>
<rect key="screenRect" x="0.0" y="0.0" width="1920" height="1055"/>
@ -252,7 +252,7 @@
<font key="font" metaFont="cellTitle"/>
</buttonCell>
<connections>
<binding destination="32" name="value" keyPath="values.UseSCPCInputMode" id="0J8-4V-5zC"/>
<binding destination="32" name="value" keyPath="values.UseSCPCTypingMode" id="PbD-wq-OsN"/>
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="pYB-E5-4Nv">
@ -305,13 +305,13 @@
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<box title="Advanced Settings" translatesAutoresizingMaskIntoConstraints="NO" id="E1l-m8-xgb">
<rect key="frame" x="6" y="200" width="451" height="219"/>
<rect key="frame" x="6" y="179" width="451" height="240"/>
<view key="contentView" id="Zaa-dP-WdF">
<rect key="frame" x="3" y="3" width="445" height="201"/>
<rect key="frame" x="3" y="3" width="445" height="222"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField autoresizesSubviews="NO" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="IpX-f7-rTL">
<rect key="frame" x="18" y="170" width="410" height="16"/>
<rect key="frame" x="18" y="191" width="410" height="16"/>
<constraints>
<constraint firstAttribute="height" constant="16" id="AH9-nI-ozD"/>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="406" id="xMo-mW-3aW"/>
@ -323,7 +323,7 @@
</textFieldCell>
</textField>
<comboBox verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="uHU-aL-du7">
<rect key="frame" x="128" y="139" width="150" height="25"/>
<rect key="frame" x="128" y="160" width="150" height="25"/>
<constraints>
<constraint firstAttribute="width" constant="147" id="aJi-ff-WnC"/>
</constraints>
@ -342,7 +342,7 @@
</connections>
</comboBox>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ETa-09-qWI">
<rect key="frame" x="31" y="144" width="91" height="15"/>
<rect key="frame" x="31" y="165" width="91" height="15"/>
<textFieldCell key="cell" lineBreakMode="clipping" alignment="right" title="Selection Keys:" id="FnD-oH-El5">
<font key="font" metaFont="cellTitle"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
@ -350,7 +350,7 @@
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="13">
<rect key="frame" x="18" y="120" width="403" height="15"/>
<rect key="frame" x="18" y="141" width="403" height="15"/>
<constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="371" id="lJN-Yf-Fka"/>
</constraints>
@ -361,7 +361,7 @@
</textFieldCell>
</textField>
<matrix verticalHuggingPriority="751" tag="1" allowsEmptySelection="NO" translatesAutoresizingMaskIntoConstraints="NO" id="15">
<rect key="frame" x="33" y="72" width="402" height="40"/>
<rect key="frame" x="33" y="93" width="402" height="40"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
<size key="cellSize" width="402" height="19"/>
<size key="intercellSpacing" width="4" height="2"/>
@ -386,7 +386,7 @@
</connections>
</matrix>
<button translatesAutoresizingMaskIntoConstraints="NO" id="109">
<rect key="frame" x="19" y="47.5" width="289" height="17"/>
<rect key="frame" x="19" y="68.5" width="289" height="17"/>
<constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="288" id="DZZ-LM-h2m"/>
<constraint firstAttribute="height" constant="16" id="lZq-1x-koI"/>
@ -396,26 +396,41 @@
<font key="font" metaFont="cellTitle"/>
</buttonCell>
<connections>
<binding destination="32" name="value" keyPath="values.ChooseCandidateUsingSpaceKey" id="112"/>
<binding destination="32" name="value" keyPath="values.ChooseCandidateUsingSpace" id="NU1-DG-vUz"/>
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="bE0-Lq-Pj7">
<rect key="frame" x="19" y="25.5" width="245" height="17"/>
<rect key="frame" x="19" y="46.5" width="266" height="17"/>
<constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="234" id="PX9-9G-dZz"/>
<constraint firstAttribute="height" constant="16" id="VKi-k7-llg"/>
</constraints>
<buttonCell key="cell" type="check" title="Use ESC key to clear entire input buffer" bezelStyle="regularSquare" imagePosition="left" controlSize="small" state="on" inset="2" id="f2j-xD-4xK">
<buttonCell key="cell" type="check" title="Use ESC key to clear the entire input buffer" bezelStyle="regularSquare" imagePosition="left" controlSize="small" state="on" inset="2" id="f2j-xD-4xK">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="cellTitle"/>
</buttonCell>
<connections>
<binding destination="32" name="value" keyPath="values.EscToCleanInputBufferKey" id="atP-oI-qLL"/>
<binding destination="32" name="value" keyPath="values.EscToCleanInputBuffer" id="aLf-PK-mAS"/>
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="7z2-DD-c58">
<rect key="frame" x="19" y="25.5" width="407" height="17"/>
<constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="234" id="ZIc-th-1VJ"/>
<constraint firstAttribute="height" constant="16" id="ZUJ-yT-gaw"/>
</constraints>
<buttonCell key="cell" type="check" title="Push the cursor to the front of the phrase after candidate selection." bezelStyle="regularSquare" imagePosition="left" controlSize="small" state="on" inset="2" id="RUG-ls-KyA">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="cellTitle"/>
</buttonCell>
<connections>
<binding destination="32" name="value" keyPath="values.MoveCursorAfterSelectingCandidate" id="BbO-T6-zh3"/>
</connections>
</button>
</subviews>
<constraints>
<constraint firstItem="uHU-aL-du7" firstAttribute="leading" secondItem="ETa-09-qWI" secondAttribute="trailing" constant="8" symbolic="YES" id="3KF-Tb-0Tz"/>
<constraint firstItem="7z2-DD-c58" firstAttribute="leading" secondItem="bE0-Lq-Pj7" secondAttribute="leading" id="3bj-ct-oCo"/>
<constraint firstAttribute="trailing" relation="lessThanOrEqual" secondItem="13" secondAttribute="trailing" constant="71" id="D0Q-CG-6LS"/>
<constraint firstItem="uHU-aL-du7" firstAttribute="top" secondItem="IpX-f7-rTL" secondAttribute="bottom" constant="8" id="Di9-bm-CIq"/>
<constraint firstItem="ETa-09-qWI" firstAttribute="centerY" secondItem="uHU-aL-du7" secondAttribute="centerY" constant="1" id="FHZ-PV-14v"/>
@ -428,6 +443,8 @@
<constraint firstItem="bE0-Lq-Pj7" firstAttribute="top" secondItem="109" secondAttribute="bottom" constant="6" symbolic="YES" id="cT2-FV-Or9"/>
<constraint firstItem="IpX-f7-rTL" firstAttribute="leading" secondItem="13" secondAttribute="leading" id="dXS-M3-fDf"/>
<constraint firstItem="109" firstAttribute="leading" secondItem="bE0-Lq-Pj7" secondAttribute="leading" id="ePO-mn-wZM"/>
<constraint firstAttribute="trailing" secondItem="7z2-DD-c58" secondAttribute="trailing" constant="19" id="gu0-F2-6CK"/>
<constraint firstItem="7z2-DD-c58" firstAttribute="top" secondItem="bE0-Lq-Pj7" secondAttribute="bottom" constant="5" id="h6e-x2-Tqk"/>
<constraint firstItem="ETa-09-qWI" firstAttribute="leading" secondItem="Zaa-dP-WdF" secondAttribute="leading" constant="33" id="jMc-w0-nTn"/>
<constraint firstItem="109" firstAttribute="top" secondItem="15" secondAttribute="bottom" constant="8" id="jW8-k4-5sl"/>
<constraint firstItem="15" firstAttribute="top" secondItem="13" secondAttribute="bottom" constant="8" id="mY6-fM-KSH"/>
@ -439,13 +456,13 @@
</view>
</box>
<box title="Dictionary Settings" translatesAutoresizingMaskIntoConstraints="NO" id="s4r-ji-vbr">
<rect key="frame" x="6" y="10" width="451" height="186"/>
<rect key="frame" x="6" y="10" width="451" height="165"/>
<view key="contentView" id="rWB-y8-q94">
<rect key="frame" x="3" y="3" width="445" height="168"/>
<rect key="frame" x="3" y="3" width="445" height="147"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="dnE-Vw-KrP">
<rect key="frame" x="18" y="138" width="323" height="15"/>
<rect key="frame" x="18" y="117" width="323" height="15"/>
<constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="231" id="MzY-w8-DKW"/>
</constraints>
@ -456,7 +473,7 @@
</textFieldCell>
</textField>
<button translatesAutoresizingMaskIntoConstraints="NO" id="1hA-Po-5li">
<rect key="frame" x="19" y="115.5" width="401" height="17"/>
<rect key="frame" x="19" y="94.5" width="401" height="17"/>
<constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="288" id="0mm-CA-Mxs"/>
<constraint firstAttribute="height" constant="16" id="c3e-cU-pEw"/>
@ -470,7 +487,7 @@
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="nnT-wS-mZo">
<rect key="frame" x="19" y="93.5" width="342" height="17"/>
<rect key="frame" x="19" y="72.5" width="342" height="17"/>
<constraints>
<constraint firstAttribute="height" constant="16" id="IBn-Xf-uEw"/>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="234" id="srn-3X-kPi"/>
@ -484,7 +501,7 @@
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="p7V-IN-OTr">
<rect key="frame" x="19" y="72.5" width="336" height="17"/>
<rect key="frame" x="19" y="51.5" width="336" height="17"/>
<constraints>
<constraint firstAttribute="height" constant="16" id="8eX-Tw-Erk"/>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="234" id="yhP-XF-CQj"/>
@ -514,7 +531,7 @@
</constraints>
</view>
<constraints>
<constraint firstAttribute="height" constant="182" id="mfq-di-Kby"/>
<constraint firstAttribute="height" constant="161" id="mfq-di-Kby"/>
</constraints>
</box>
</subviews>

View File

@ -0,0 +1,192 @@
/* Class = "NSWindow"; title = "vChewing Preferences"; ObjectID = "1"; */
"1.title" = "vChewing Preferences";
/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "5"; */
"5.title" = "OtherViews";
/* Class = "NSMenuItem"; title = "Standard"; ObjectID = "6"; */
"6.title" = "Standard";
/* Class = "NSMenuItem"; title = "ETen"; ObjectID = "7"; */
"7.title" = "ETen";
/* Class = "NSMenuItem"; title = "Hsu"; ObjectID = "8"; */
"8.title" = "Hsu";
/* Class = "NSMenuItem"; title = "ETen26"; ObjectID = "9"; */
"9.title" = "ETen26";
/* Class = "NSMenuItem"; title = "Hanyu Pinyin"; ObjectID = "10"; */
"10.title" = "Hanyu Pinyin";
/* Class = "NSTextFieldCell"; title = "Bopomofo:"; ObjectID = "12"; */
"12.title" = "Bopomofo:";
/* Class = "NSTextFieldCell"; title = "Choose the cursor position where you want to list possible candidates."; ObjectID = "14"; */
"14.title" = "Choose the cursor position where you want to list possible candidates.";
/* Class = "NSButtonCell"; title = "Cursor to the front of the phrase (like Matsushita Hanin IME)"; ObjectID = "16"; */
"16.title" = "Cursor to the front of the phrase (like Matsushita Hanin IME)";
/* Class = "NSButtonCell"; title = "Cursor to the rear of the phrase (like MS New-Phonetic IME)"; ObjectID = "17"; */
"17.title" = "Cursor to the rear of the phrase (like MS New-Phonetic IME)";
/* Class = "NSButtonCell"; title = "Radio"; ObjectID = "18"; */
"18.title" = "Radio";
/* Class = "NSButtonCell"; title = "Radio"; ObjectID = "20"; */
"20.title" = "Radio";
/* Class = "NSButtonCell"; title = "Horizontal"; ObjectID = "21"; */
"21.title" = "Horizontal";
/* Class = "NSButtonCell"; title = "Vertical"; ObjectID = "22"; */
"22.title" = "Vertical";
/* Class = "NSTextFieldCell"; title = "Candidate List Layout:"; ObjectID = "24"; */
"24.title" = "Candidate List Layout:";
/* Class = "NSTextFieldCell"; title = "Candidate UI font size:"; ObjectID = "29"; */
"29.title" = "Candidate UI font size:";
/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "92"; */
"92.title" = "OtherViews";
/* Class = "NSMenuItem"; title = "12"; ObjectID = "93"; */
"93.title" = "12";
/* Class = "NSMenuItem"; title = "14"; ObjectID = "94"; */
"94.title" = "14";
/* Class = "NSMenuItem"; title = "16"; ObjectID = "95"; */
"95.title" = "16";
/* Class = "NSMenuItem"; title = "18"; ObjectID = "96"; */
"96.title" = "18";
/* Class = "NSMenuItem"; title = "24"; ObjectID = "98"; */
"98.title" = "24";
/* Class = "NSMenuItem"; title = "32"; ObjectID = "99"; */
"99.title" = "32";
/* Class = "NSMenuItem"; title = "64"; ObjectID = "100"; */
"100.title" = "64";
/* Class = "NSMenuItem"; title = "96"; ObjectID = "101"; */
"101.title" = "96";
/* Class = "NSButtonCell"; title = "Enable SPACE key for calling candidate window"; ObjectID = "110"; */
"110.title" = "Enable SPACE key for calling candidate window";
/* Class = "NSTextFieldCell"; title = "Alphanumeric:"; ObjectID = "126"; */
"126.title" = "Alphanumeric:";
/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "128"; */
"128.title" = "OtherViews";
/* Class = "NSMenuItem"; title = "IBM"; ObjectID = "137"; */
"137.title" = "IBM";
/* Class = "NSTabViewItem"; label = "Keyboard"; ObjectID = "1AW-xf-c2f"; */
"1AW-xf-c2f.label" = "Keyboard";
/* Class = "NSBox"; title = "General Settings"; ObjectID = "2Y6-Am-WM1"; */
"2Y6-Am-WM1.title" = "General Settings";
/* Class = "NSTextFieldCell"; title = "Choose which keys you prefer for selecting candidates."; ObjectID = "2pS-nv-te4"; */
"2pS-nv-te4.title" = "Choose which keys you prefer for selecting candidates.";
/* Class = "NSButtonCell"; title = "Stop farting (when typed phonetic combination is invalid, etc.)"; ObjectID = "62u-jY-BRh"; */
"62u-jY-BRh.title" = "Stop farting (when typed phonetic combination is invalid, etc.)";
/* Class = "NSTextFieldCell"; title = "UI language setting:"; ObjectID = "9DS-Rc-TXq"; */
"9DS-Rc-TXq.title" = "UI language setting:";
/* Class = "NSButtonCell"; title = "Emulating select-candidate-per-character mode"; ObjectID = "ArK-Vk-OoT"; */
"ArK-Vk-OoT.title" = "Emulating select-candidate-per-character mode";
/* Class = "NSButtonCell"; title = "Auto-convert traditional Chinese glyphs to KangXi characters"; ObjectID = "BSK-bH-Gct"; */
"BSK-bH-Gct.title" = "Auto-convert traditional Chinese glyphs to KangXi characters";
/* Class = "NSBox"; title = "Advanced Settings"; ObjectID = "E1l-m8-xgb"; */
"E1l-m8-xgb.title" = "Advanced Settings";
/* Class = "NSMenuItem"; title = "English"; ObjectID = "FSG-lN-CJO"; */
"FSG-lN-CJO.title" = "English";
/* Class = "NSTextFieldCell"; title = "Selection Keys:"; ObjectID = "FnD-oH-El5"; */
"FnD-oH-El5.title" = "Selection Keys:";
/* Class = "NSMenuItem"; title = "Auto-Select"; ObjectID = "GlJ-Ns-9eE"; */
"GlJ-Ns-9eE.title" = "Auto-Select";
/* Class = "NSButtonCell"; title = "Sort entries when reloading user phrases and excluded phrases list"; ObjectID = "Li3-Yg-SOC"; */
"Li3-Yg-SOC.title" = "Sort entries when reloading user phrases and excluded phrases list";
/* Class = "NSTabViewItem"; label = "General"; ObjectID = "QUQ-oY-4Hc"; */
"QUQ-oY-4Hc.label" = "General";
/* Class = "NSTextFieldCell"; title = "Choose your preferred keyboard layout."; ObjectID = "RQ6-MS-m4C"; */
"RQ6-MS-m4C.title" = "Choose your preferred keyboard layout.";
/* Class = "NSButtonCell"; title = "Push the cursor to the front of the phrase after candidate selection."; ObjectID = "RUG-ls-KyA"; */
"RUG-ls-KyA.title" = "Push the cursor to the front of the phrase after candidate selection.";
/* Class = "NSMenuItem"; title = "Traditional Chinese"; ObjectID = "TXr-FF-ehw"; */
"TXr-FF-ehw.title" = "Traditional Chinese";
/* Class = "NSBox"; title = "Output Settings"; ObjectID = "Uyz-xL-TVN"; */
"Uyz-xL-TVN.title" = "Output Settings";
/* Class = "NSButtonCell"; title = "Enable CNS11643 Support (2022-01-07)"; ObjectID = "W24-T4-cg0"; */
"W24-T4-cg0.title" = "Enable CNS11643 Support (2022-01-07)";
/* Class = "NSBox"; title = "Keyboard Layout"; ObjectID = "Wvt-HE-LOv"; */
"Wvt-HE-LOv.title" = "Keyboard Layout";
/* Class = "NSButtonCell"; title = "Check for updates automatically"; ObjectID = "Z9t-P0-BLF"; */
"Z9t-P0-BLF.title" = "Check for updates automatically";
/* Class = "NSTextFieldCell"; title = "Change user interface language (will reboot the IME)."; ObjectID = "ZEv-Q2-mYL"; */
"ZEv-Q2-mYL.title" = "Change user interface language (will reboot the IME).";
/* Class = "NSMenuItem"; title = "Simplified Chinese"; ObjectID = "akC-2g-ybz"; */
"akC-2g-ybz.title" = "Simplified Chinese";
/* Class = "NSButtonCell"; title = "Use ESC key to clear the entire input buffer"; ObjectID = "f2j-xD-4xK"; */
"f2j-xD-4xK.title" = "Use ESC key to clear the entire input buffer";
/* Class = "NSButtonCell"; title = "Automatically reload user data files if changes detected"; ObjectID = "f8i-69-zxm"; */
"f8i-69-zxm.title" = "Automatically reload user data files if changes detected";
/* Class = "NSTextFieldCell"; title = "Change UI font size of candidate window for a better visual clarity."; ObjectID = "iRg-wx-Nx2"; */
"iRg-wx-Nx2.title" = "Change UI font size of candidate window for a better visual clarity.";
/* Class = "NSTextFieldCell"; title = "Define your preferred action when user data files reload."; ObjectID = "j48-5a-cEs"; */
"j48-5a-cEs.title" = "Define your preferred action when user data files reload.";
/* Class = "NSComboBoxCell"; jQC-12-UuK.ibShadowedObjectValues[0] = "Item 1"; ObjectID = "jQC-12-UuK"; */
"jQC-12-UuK.ibShadowedObjectValues[0]" = "Item 1";
/* Class = "NSComboBoxCell"; jQC-12-UuK.ibShadowedObjectValues[1] = "Item 2"; ObjectID = "jQC-12-UuK"; */
"jQC-12-UuK.ibShadowedObjectValues[1]" = "Item 2";
/* Class = "NSComboBoxCell"; jQC-12-UuK.ibShadowedObjectValues[2] = "Item 3"; ObjectID = "jQC-12-UuK"; */
"jQC-12-UuK.ibShadowedObjectValues[2]" = "Item 3";
/* Class = "NSButtonCell"; title = "Sort entries when reloading the phrase replacement map"; ObjectID = "o60-vW-i1B"; */
"o60-vW-i1B.title" = "Sort entries when reloading the phrase replacement map";
/* Class = "NSMenuItem"; title = "Japanese"; ObjectID = "rVQ-Hx-cGi"; */
"rVQ-Hx-cGi.title" = "Japanese";
/* Class = "NSBox"; title = "Dictionary Settings"; ObjectID = "s4r-ji-vbr"; */
"s4r-ji-vbr.title" = "Dictionary Settings";
/* Class = "NSTextFieldCell"; title = "Choose your preferred layout of the candidate window."; ObjectID = "xC5-yV-1W1"; */
"xC5-yV-1W1.title" = "Choose your preferred layout of the candidate window.";
/* Class = "NSTabViewItem"; label = "Advanced"; ObjectID = "xrE-8T-WKO"; */
"xrE-8T-WKO.label" = "Advanced";

View File

@ -30,10 +30,10 @@
5B62A34A27AE7CD900A19448 /* NotifierController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B62A34527AE7CD900A19448 /* NotifierController.swift */; };
5B62A35227AE822400A19448 /* OpenCC in Frameworks */ = {isa = PBXBuildFile; productRef = 5B62A35127AE822400A19448 /* OpenCC */; };
5B62A35327AE89C400A19448 /* InputSourceHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B62A33127AE792F00A19448 /* InputSourceHelper.swift */; };
5B7BC4B027AFFBE800F66C24 /* frmPrefWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5B7BC4AE27AFFBE800F66C24 /* frmPrefWindow.xib */; };
5BBBB75F27AED54C0023B93A /* Beep.m4a in Resources */ = {isa = PBXBuildFile; fileRef = 5BBBB75D27AED54C0023B93A /* Beep.m4a */; };
5BBBB76027AED54C0023B93A /* Fart.m4a in Resources */ = {isa = PBXBuildFile; fileRef = 5BBBB75E27AED54C0023B93A /* Fart.m4a */; };
5BBBB76B27AED5DB0023B93A /* frmNonModalAlertWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BBBB76527AED5DB0023B93A /* frmNonModalAlertWindow.xib */; };
5BBBB76C27AED5DB0023B93A /* frmPrefWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BBBB76727AED5DB0023B93A /* frmPrefWindow.xib */; };
5BBBB76D27AED5DB0023B93A /* frmAboutWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BBBB76927AED5DB0023B93A /* frmAboutWindow.xib */; };
5BBBB77327AED70B0023B93A /* MenuIcon-TCVIM@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 5BBBB76F27AED70B0023B93A /* MenuIcon-TCVIM@2x.png */; };
5BBBB77427AED70B0023B93A /* MenuIcon-SCVIM@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 5BBBB77027AED70B0023B93A /* MenuIcon-SCVIM@2x.png */; };
@ -91,6 +91,9 @@
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
5B05A47B27AFF7CA00437698 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
5B05A47C27AFF7CF00437698 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
5B05A47F27AFF84200437698 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/frmAboutWindow.strings; sourceTree = "<group>"; };
5B0CF37F27AD476E00784B08 /* SwiftyOpenCC */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = SwiftyOpenCC; path = Packages/SwiftyOpenCC; sourceTree = "<group>"; };
5B2DB16D27AF6891006D874E /* data-chs.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = "data-chs.txt"; path = "Data/data-chs.txt"; sourceTree = "<group>"; };
5B2DB16E27AF6891006D874E /* data-cht.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = "data-cht.txt"; path = "Data/data-cht.txt"; sourceTree = "<group>"; };
@ -125,10 +128,11 @@
5B62A34127AE7CD900A19448 /* VerticalCandidateController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VerticalCandidateController.swift; sourceTree = "<group>"; };
5B62A34327AE7CD900A19448 /* TooltipController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TooltipController.swift; sourceTree = "<group>"; };
5B62A34527AE7CD900A19448 /* NotifierController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NotifierController.swift; sourceTree = "<group>"; };
5B7BC4AF27AFFBE800F66C24 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Source/WindowNIBs/Base.lproj/frmPrefWindow.xib; sourceTree = "<group>"; };
5B7BC4B227AFFC0B00F66C24 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = Source/WindowNIBs/en.lproj/frmPrefWindow.strings; sourceTree = "<group>"; };
5BBBB75D27AED54C0023B93A /* Beep.m4a */ = {isa = PBXFileReference; lastKnownFileType = file; path = Beep.m4a; sourceTree = "<group>"; };
5BBBB75E27AED54C0023B93A /* Fart.m4a */ = {isa = PBXFileReference; lastKnownFileType = file; path = Fart.m4a; sourceTree = "<group>"; };
5BBBB76627AED5DB0023B93A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/frmNonModalAlertWindow.xib; sourceTree = "<group>"; };
5BBBB76827AED5DB0023B93A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/frmPrefWindow.xib; sourceTree = "<group>"; };
5BBBB76A27AED5DB0023B93A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/frmAboutWindow.xib; sourceTree = "<group>"; };
5BBBB76F27AED70B0023B93A /* MenuIcon-TCVIM@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MenuIcon-TCVIM@2x.png"; sourceTree = "<group>"; };
5BBBB77027AED70B0023B93A /* MenuIcon-SCVIM@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MenuIcon-SCVIM@2x.png"; sourceTree = "<group>"; };
@ -406,7 +410,7 @@
children = (
5BBBB76927AED5DB0023B93A /* frmAboutWindow.xib */,
5BBBB76527AED5DB0023B93A /* frmNonModalAlertWindow.xib */,
5BBBB76727AED5DB0023B93A /* frmPrefWindow.xib */,
5B7BC4AE27AFFBE800F66C24 /* frmPrefWindow.xib */,
6A187E2816004C5900466B2E /* MainMenu.xib */,
);
path = WindowNIBs;
@ -694,13 +698,13 @@
files = (
5BBBB77427AED70B0023B93A /* MenuIcon-SCVIM@2x.png in Resources */,
D4E33D8A27A838CF006DB1CF /* Localizable.strings in Resources */,
5BBBB76C27AED5DB0023B93A /* frmPrefWindow.xib in Resources */,
5BBBB76027AED54C0023B93A /* Fart.m4a in Resources */,
6A2E40F6253A69DA00D1AE1D /* Images.xcassets in Resources */,
D4E33D8F27A838F0006DB1CF /* InfoPlist.strings in Resources */,
5BBBB76B27AED5DB0023B93A /* frmNonModalAlertWindow.xib in Resources */,
5BBBB76D27AED5DB0023B93A /* frmAboutWindow.xib in Resources */,
5BBBB77527AED70B0023B93A /* MenuIcon-SCVIM.png in Resources */,
5B7BC4B027AFFBE800F66C24 /* frmPrefWindow.xib in Resources */,
5B2DB17027AF6891006D874E /* data-cht.txt in Resources */,
5BBBB77327AED70B0023B93A /* MenuIcon-TCVIM@2x.png in Resources */,
5BBBB77627AED70B0023B93A /* MenuIcon-TCVIM.png in Resources */,
@ -818,6 +822,15 @@
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
5B7BC4AE27AFFBE800F66C24 /* frmPrefWindow.xib */ = {
isa = PBXVariantGroup;
children = (
5B7BC4AF27AFFBE800F66C24 /* Base */,
5B7BC4B227AFFC0B00F66C24 /* en */,
);
name = frmPrefWindow.xib;
sourceTree = "<group>";
};
5BBBB76527AED5DB0023B93A /* frmNonModalAlertWindow.xib */ = {
isa = PBXVariantGroup;
children = (
@ -826,18 +839,11 @@
name = frmNonModalAlertWindow.xib;
sourceTree = "<group>";
};
5BBBB76727AED5DB0023B93A /* frmPrefWindow.xib */ = {
isa = PBXVariantGroup;
children = (
5BBBB76827AED5DB0023B93A /* Base */,
);
name = frmPrefWindow.xib;
sourceTree = "<group>";
};
5BBBB76927AED5DB0023B93A /* frmAboutWindow.xib */ = {
isa = PBXVariantGroup;
children = (
5BBBB76A27AED5DB0023B93A /* Base */,
5B05A47F27AFF84200437698 /* en */,
);
name = frmAboutWindow.xib;
sourceTree = "<group>";
@ -879,6 +885,7 @@
isa = PBXVariantGroup;
children = (
D4E33D8927A838CF006DB1CF /* Base */,
5B05A47C27AFF7CF00437698 /* en */,
);
name = Localizable.strings;
sourceTree = "<group>";
@ -887,6 +894,7 @@
isa = PBXVariantGroup;
children = (
D4E33D8E27A838F0006DB1CF /* Base */,
5B05A47B27AFF7CA00437698 /* en */,
);
name = InfoPlist.strings;
sourceTree = "<group>";