PhraseEditor // Add tooltip to the main edit area.
This commit is contained in:
parent
5bbc4edf33
commit
a9c7d0c12d
|
@ -43,6 +43,7 @@ public struct VwrPhraseEditorUI: View {
|
||||||
@State public var selInputMode: Shared.InputMode = .imeModeNULL
|
@State public var selInputMode: Shared.InputMode = .imeModeNULL
|
||||||
@State public var selUserDataType: vChewingLM.ReplacableUserDataType = .thePhrases
|
@State public var selUserDataType: vChewingLM.ReplacableUserDataType = .thePhrases
|
||||||
@State private var isLoading = false
|
@State private var isLoading = false
|
||||||
|
@State private var textEditorTooltip = PETerms.TooltipTexts.sampleDictionaryContent(for: .thePhrases)
|
||||||
|
|
||||||
public var currentIMEInputMode: Shared.InputMode {
|
public var currentIMEInputMode: Shared.InputMode {
|
||||||
delegate?.currentInputMode ?? selInputMode
|
delegate?.currentInputMode ?? selInputMode
|
||||||
|
@ -78,6 +79,7 @@ public struct VwrPhraseEditorUI: View {
|
||||||
isLoading = true
|
isLoading = true
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
txtContent = delegate.retrieveData(mode: selInputMode, type: selUserDataType)
|
txtContent = delegate.retrieveData(mode: selInputMode, type: selUserDataType)
|
||||||
|
textEditorTooltip = PETerms.TooltipTexts.sampleDictionaryContent(for: selUserDataType)
|
||||||
isLoading = false
|
isLoading = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -246,7 +248,7 @@ public struct VwrPhraseEditorUI: View {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TextEditorEX(text: $txtContent)
|
TextEditorEX(text: $txtContent, tooltip: $textEditorTooltip)
|
||||||
.disabled(selInputMode == .imeModeNULL || isLoading)
|
.disabled(selInputMode == .imeModeNULL || isLoading)
|
||||||
.frame(minWidth: 320, minHeight: 240)
|
.frame(minWidth: 320, minHeight: 240)
|
||||||
.backport.onChange(of: fileChangeIndicator.id) { _ in
|
.backport.onChange(of: fileChangeIndicator.id) { _ in
|
||||||
|
@ -340,6 +342,22 @@ public enum PETerms {
|
||||||
case weightInputBox =
|
case weightInputBox =
|
||||||
"If not filling the weight, it will be 0.0, the maximum one. An ideal weight situates in [-9.5, 0], making itself can be captured by the walking algorithm. The exception is -114.514, the disciplinary weight. The walking algorithm will ignore it unless it is the unique result."
|
"If not filling the weight, it will be 0.0, the maximum one. An ideal weight situates in [-9.5, 0], making itself can be captured by the walking algorithm. The exception is -114.514, the disciplinary weight. The walking algorithm will ignore it unless it is the unique result."
|
||||||
|
|
||||||
|
public static func sampleDictionaryContent(for type: vChewingLM.ReplacableUserDataType) -> String {
|
||||||
|
var result = ""
|
||||||
|
switch type {
|
||||||
|
case .thePhrases:
|
||||||
|
result =
|
||||||
|
"Example:\nCandidate Reading-Reading Weight #Comment\nCandidate Reading-Reading #Comment".localized + "\n\n"
|
||||||
|
+ weightInputBox.localized
|
||||||
|
case .theFilter: result = "Example:\nCandidate Reading-Reading #Comment".localized
|
||||||
|
case .theReplacements: result = "Example:\nOldPhrase NewPhrase #Comment".localized
|
||||||
|
case .theAssociates:
|
||||||
|
result = "Example:\nInitial RestPhrase\nInitial RestPhrase1 RestPhrase2 RestPhrase3...".localized
|
||||||
|
case .theSymbols: result = "Example:\nCandidate Reading-Reading #Comment".localized
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
public var localized: String { rawValue.localized }
|
public var localized: String { rawValue.localized }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,6 +40,7 @@ extension CtlPrefWindow: NSTextViewDelegate, NSTextFieldDelegate {
|
||||||
tfdPETextEditor.string = NSLocalizedString("Loading…", comment: "")
|
tfdPETextEditor.string = NSLocalizedString("Loading…", comment: "")
|
||||||
DispatchQueue.main.async { [self] in
|
DispatchQueue.main.async { [self] in
|
||||||
tfdPETextEditor.string = LMMgr.retrieveData(mode: selInputMode, type: selUserDataType)
|
tfdPETextEditor.string = LMMgr.retrieveData(mode: selInputMode, type: selUserDataType)
|
||||||
|
tfdPETextEditor.toolTip = PETerms.TooltipTexts.sampleDictionaryContent(for: selUserDataType)
|
||||||
isLoading = false
|
isLoading = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -157,6 +158,7 @@ extension CtlPrefWindow: NSTextViewDelegate, NSTextFieldDelegate {
|
||||||
|
|
||||||
// Tooltip.
|
// Tooltip.
|
||||||
txtPEField3.toolTip = PETerms.TooltipTexts.weightInputBox.localized
|
txtPEField3.toolTip = PETerms.TooltipTexts.weightInputBox.localized
|
||||||
|
tfdPETextEditor.toolTip = PETerms.TooltipTexts.sampleDictionaryContent(for: selUserDataType)
|
||||||
|
|
||||||
// Finally, update the entire editor UI.
|
// Finally, update the entire editor UI.
|
||||||
updatePhraseEditor()
|
updatePhraseEditor()
|
||||||
|
|
|
@ -16,6 +16,10 @@
|
||||||
"Loading…" = "Loading…";
|
"Loading…" = "Loading…";
|
||||||
"Consolidate" = "Consolidate";
|
"Consolidate" = "Consolidate";
|
||||||
"Reload" = "Reload";
|
"Reload" = "Reload";
|
||||||
|
"Example:\nCandidate Reading-Reading #Comment" = "Example:\nCandidate Reading-Reading #Comment";
|
||||||
|
"Example:\nCandidate Reading-Reading Weight #Comment\nCandidate Reading-Reading #Comment" = "Example:\nCandidate Reading-Reading Weight #Comment\nCandidate Reading-Reading #Comment";
|
||||||
|
"Example:\nInitial RestPhrase\nInitial RestPhrase1 RestPhrase2 RestPhrase3..." = "Example:\nInitial RestPhrase\nInitial RestPhrase1 RestPhrase2 RestPhrase3...";
|
||||||
|
"Example:\nOldPhrase NewPhrase #Comment" = "Example:\nOldPhrase NewPhrase #Comment";
|
||||||
"If not filling the weight, it will be 0.0, the maximum one. An ideal weight situates in [-9.5, 0], making itself can be captured by the walking algorithm. The exception is -114.514, the disciplinary weight. The walking algorithm will ignore it unless it is the unique result." = "If not filling the weight, it will be 0.0, the maximum one. An ideal weight situates in [-9.5, 0], making itself can be captured by the walking algorithm. The exception is -114.514, the disciplinary weight. The walking algorithm will ignore it unless it is the unique result.";
|
"If not filling the weight, it will be 0.0, the maximum one. An ideal weight situates in [-9.5, 0], making itself can be captured by the walking algorithm. The exception is -114.514, the disciplinary weight. The walking algorithm will ignore it unless it is the unique result." = "If not filling the weight, it will be 0.0, the maximum one. An ideal weight situates in [-9.5, 0], making itself can be captured by the walking algorithm. The exception is -114.514, the disciplinary weight. The walking algorithm will ignore it unless it is the unique result.";
|
||||||
"Factory dictionary not loaded yet." = "Factory dictionary not loaded yet.";
|
"Factory dictionary not loaded yet." = "Factory dictionary not loaded yet.";
|
||||||
"Some features are unavailable for macOS 10.15 and macOS 11 due to API limitations." = "Some features are unavailable for macOS 10.15 and macOS 11 due to API limitations.";
|
"Some features are unavailable for macOS 10.15 and macOS 11 due to API limitations." = "Some features are unavailable for macOS 10.15 and macOS 11 due to API limitations.";
|
||||||
|
|
|
@ -16,6 +16,10 @@
|
||||||
"Loading…" = "Loading…";
|
"Loading…" = "Loading…";
|
||||||
"Consolidate" = "Consolidate";
|
"Consolidate" = "Consolidate";
|
||||||
"Reload" = "Reload";
|
"Reload" = "Reload";
|
||||||
|
"Example:\nCandidate Reading-Reading #Comment" = "Example:\nCandidate Reading-Reading #Comment";
|
||||||
|
"Example:\nCandidate Reading-Reading Weight #Comment\nCandidate Reading-Reading #Comment" = "Example:\nCandidate Reading-Reading Weight #Comment\nCandidate Reading-Reading #Comment";
|
||||||
|
"Example:\nInitial RestPhrase\nInitial RestPhrase1 RestPhrase2 RestPhrase3..." = "Example:\nInitial RestPhrase\nInitial RestPhrase1 RestPhrase2 RestPhrase3...";
|
||||||
|
"Example:\nOldPhrase NewPhrase #Comment" = "Example:\nOldPhrase NewPhrase #Comment";
|
||||||
"If not filling the weight, it will be 0.0, the maximum one. An ideal weight situates in [-9.5, 0], making itself can be captured by the walking algorithm. The exception is -114.514, the disciplinary weight. The walking algorithm will ignore it unless it is the unique result." = "If not filling the weight, it will be 0.0, the maximum one. An ideal weight situates in [-9.5, 0], making itself can be captured by the walking algorithm. The exception is -114.514, the disciplinary weight. The walking algorithm will ignore it unless it is the unique result.";
|
"If not filling the weight, it will be 0.0, the maximum one. An ideal weight situates in [-9.5, 0], making itself can be captured by the walking algorithm. The exception is -114.514, the disciplinary weight. The walking algorithm will ignore it unless it is the unique result." = "If not filling the weight, it will be 0.0, the maximum one. An ideal weight situates in [-9.5, 0], making itself can be captured by the walking algorithm. The exception is -114.514, the disciplinary weight. The walking algorithm will ignore it unless it is the unique result.";
|
||||||
"Factory dictionary not loaded yet." = "Factory dictionary not loaded yet.";
|
"Factory dictionary not loaded yet." = "Factory dictionary not loaded yet.";
|
||||||
"Some features are unavailable for macOS 10.15 and macOS 11 due to API limitations." = "Some features are unavailable for macOS 10.15 and macOS 11 due to API limitations.";
|
"Some features are unavailable for macOS 10.15 and macOS 11 due to API limitations." = "Some features are unavailable for macOS 10.15 and macOS 11 due to API limitations.";
|
||||||
|
|
|
@ -16,6 +16,10 @@
|
||||||
"Loading…" = "読み込む中…";
|
"Loading…" = "読み込む中…";
|
||||||
"Consolidate" = "整理";
|
"Consolidate" = "整理";
|
||||||
"Reload" = "再読込";
|
"Reload" = "再読込";
|
||||||
|
"Example:\nCandidate Reading-Reading #Comment" = "【模範例】\n候補 音読-音読 #メモ";
|
||||||
|
"Example:\nCandidate Reading-Reading Weight #Comment\nCandidate Reading-Reading #Comment" = "【模範例】\n候補 音読-音読 優先度 #メモ\n候補 音読-音読 #メモ";
|
||||||
|
"Example:\nInitial RestPhrase\nInitial RestPhrase1 RestPhrase2 RestPhrase3..." = "【模範例】\n頭文字 残候補\n頭文字 残候補1 残候補2 残候補3...";
|
||||||
|
"Example:\nOldPhrase NewPhrase #Comment" = "【模範例】\n置換対象 新候補 #メモ";
|
||||||
"If not filling the weight, it will be 0.0, the maximum one. An ideal weight situates in [-9.5, 0], making itself can be captured by the walking algorithm. The exception is -114.514, the disciplinary weight. The walking algorithm will ignore it unless it is the unique result." = "優先度を記入しなかった場合、最高値「0」はデフォルト値です。理想な優先度の範囲は [-9.5, 0] 以内で、ウォーキング算法に捕まれられます。例外は懲戒値「-114.514」で、優先度を最低に極めた値であり、唯一結果のない場合、ウォーキング算法に無視されます。";
|
"If not filling the weight, it will be 0.0, the maximum one. An ideal weight situates in [-9.5, 0], making itself can be captured by the walking algorithm. The exception is -114.514, the disciplinary weight. The walking algorithm will ignore it unless it is the unique result." = "優先度を記入しなかった場合、最高値「0」はデフォルト値です。理想な優先度の範囲は [-9.5, 0] 以内で、ウォーキング算法に捕まれられます。例外は懲戒値「-114.514」で、優先度を最低に極めた値であり、唯一結果のない場合、ウォーキング算法に無視されます。";
|
||||||
"Factory dictionary not loaded yet." = "内蔵辞書はまだ読込中。";
|
"Factory dictionary not loaded yet." = "内蔵辞書はまだ読込中。";
|
||||||
"Some features are unavailable for macOS 10.15 and macOS 11 due to API limitations." = "システム API 制限のため、一部の機能は macOS 10.15 と macOS 11 で提供できません。";
|
"Some features are unavailable for macOS 10.15 and macOS 11 due to API limitations." = "システム API 制限のため、一部の機能は macOS 10.15 と macOS 11 で提供できません。";
|
||||||
|
|
|
@ -16,7 +16,11 @@
|
||||||
"Loading…" = "正在载入…";
|
"Loading…" = "正在载入…";
|
||||||
"Consolidate" = "整理";
|
"Consolidate" = "整理";
|
||||||
"Reload" = "重新载入";
|
"Reload" = "重新载入";
|
||||||
"If not filling the weight, it will be 0.0, the maximum one. An ideal weight situates in [-9.5, 0], making itself can be captured by the walking algorithm. The exception is -114.514, the disciplinary weight. The walking algorithm will ignore it unless it is the unique result." = "不填写权重的话,预设权重为最高值「0」。理想的权重范围在 [-9.5, 0] 这个闭区间内,可以被爬轨引擎自动抓到。例外就是惩戒权重「-114.514」,属于极端降权。这种情况下,除非是唯一结果,否则会被爬轨引擎无视。";
|
"Example:\nCandidate Reading-Reading #Comment" = "【范例】\n候选字词 读音-读音 #注解";
|
||||||
|
"Example:\nCandidate Reading-Reading Weight #Comment\nCandidate Reading-Reading #Comment" = "【范例】\n候选字词 读音-读音 权重 #注解\n候选字词 读音-读音 #注解";
|
||||||
|
"Example:\nInitial RestPhrase\nInitial RestPhrase1 RestPhrase2 RestPhrase3..." = "【范例】\n首字 候选\n首字 候选1 候选2 候选3...";
|
||||||
|
"Example:\nOldPhrase NewPhrase #Comment" = "【范例】\n要替换的词 替换成的词 #注解";
|
||||||
|
"If not filling the weight, it will be 0.0, the maximum one. An ideal weight situates in [-9.5, 0], making itself can be captured by the walking algorithm. The exception is -114.514, the disciplinary weight. The walking algorithm will ignore it unless it is the unique result." = "不填写权重的话,预设权重为最高值「0」。理想的权重范围在 [-9.5, 0] 这个闭区间内,可以被爬轨算法自动抓到。例外就是惩戒权重「-114.514」,属于极端降权。这种情况下,除非是唯一结果,否则会被爬轨算法忽略掉。";
|
||||||
"Factory dictionary not loaded yet." = "原厂辞典尚未完成载入。";
|
"Factory dictionary not loaded yet." = "原厂辞典尚未完成载入。";
|
||||||
"Some features are unavailable for macOS 10.15 and macOS 11 due to API limitations." = "因系统 API 限制,个别功能无法对 macOS 10.15 和 macOS 11 提供。";
|
"Some features are unavailable for macOS 10.15 and macOS 11 due to API limitations." = "因系统 API 限制,个别功能无法对 macOS 10.15 和 macOS 11 提供。";
|
||||||
"This editor only: Auto-reload modifications happened outside of this editor" = "仅限该编辑器:自动读入来自该编辑器外部的档案内容修改";
|
"This editor only: Auto-reload modifications happened outside of this editor" = "仅限该编辑器:自动读入来自该编辑器外部的档案内容修改";
|
||||||
|
|
|
@ -16,7 +16,11 @@
|
||||||
"Loading…" = "正在載入…";
|
"Loading…" = "正在載入…";
|
||||||
"Consolidate" = "整理";
|
"Consolidate" = "整理";
|
||||||
"Reload" = "重新載入";
|
"Reload" = "重新載入";
|
||||||
"If not filling the weight, it will be 0.0, the maximum one. An ideal weight situates in [-9.5, 0], making itself can be captured by the walking algorithm. The exception is -114.514, the disciplinary weight. The walking algorithm will ignore it unless it is the unique result." = "不填寫權重的話,預設權重為最高值「0」。理想的權重範圍在 [-9.5, 0] 這個閉區間內,可以被爬軌引擎自動抓到。例外就是懲戒權重「-114.514」,屬於極端降權。這種情況下,除非是唯一結果,否則會被爬軌引擎無視。";
|
"Example:\nCandidate Reading-Reading #Comment" = "【範例】\n候選字詞 讀音-讀音 #註解";
|
||||||
|
"Example:\nCandidate Reading-Reading Weight #Comment\nCandidate Reading-Reading #Comment" = "【範例】\n候選字詞 讀音-讀音 權重 #註解\n候選字詞 讀音-讀音 #註解";
|
||||||
|
"Example:\nInitial RestPhrase\nInitial RestPhrase1 RestPhrase2 RestPhrase3..." = "【範例】\n首字 候選\n首字 候選1 候選2 候選3...";
|
||||||
|
"Example:\nOldPhrase NewPhrase #Comment" = "【範例】\n要替換的詞 替換成的詞 #註解";
|
||||||
|
"If not filling the weight, it will be 0.0, the maximum one. An ideal weight situates in [-9.5, 0], making itself can be captured by the walking algorithm. The exception is -114.514, the disciplinary weight. The walking algorithm will ignore it unless it is the unique result." = "不填寫權重的話,預設權重為最高值「0」。理想的權重範圍在 [-9.5, 0] 這個閉區間內,可以被爬軌算法自動抓到。例外就是懲戒權重「-114.514」,屬於極端降權。這種情況下,除非是唯一結果,否則會被爬軌算法忽略掉。";
|
||||||
"Factory dictionary not loaded yet." = "原廠辭典尚未完成載入。";
|
"Factory dictionary not loaded yet." = "原廠辭典尚未完成載入。";
|
||||||
"Some features are unavailable for macOS 10.15 and macOS 11 due to API limitations." = "因系統 API 限制,個別功能無法對 macOS 10.15 和 macOS 11 提供。";
|
"Some features are unavailable for macOS 10.15 and macOS 11 due to API limitations." = "因系統 API 限制,個別功能無法對 macOS 10.15 和 macOS 11 提供。";
|
||||||
"This editor only: Auto-reload modifications happened outside of this editor" = "僅限該編輯器:自動讀入來自該編輯器外部的檔案內容修改";
|
"This editor only: Auto-reload modifications happened outside of this editor" = "僅限該編輯器:自動讀入來自該編輯器外部的檔案內容修改";
|
||||||
|
|
Loading…
Reference in New Issue