feat: add option to sort auto translate list

This commit is contained in:
Anna 2022-05-30 00:52:44 -04:00
parent 70cecf4a6d
commit 212835c33a
6 changed files with 673 additions and 1023 deletions

View File

@ -33,6 +33,7 @@ internal class Configuration : IPluginConfiguration {
public bool LoadPreviousSession;
public bool FilterIncludePreviousSessions;
public bool SharedMode;
public bool SortAutoTranslate;
public bool FontsEnabled = true;
public float FontSize = 17f;
@ -67,6 +68,7 @@ internal class Configuration : IPluginConfiguration {
this.LoadPreviousSession = other.LoadPreviousSession;
this.FilterIncludePreviousSessions = other.FilterIncludePreviousSessions;
this.SharedMode = other.SharedMode;
this.SortAutoTranslate = other.SortAutoTranslate;
this.FontsEnabled = other.FontsEnabled;
this.FontSize = other.FontSize;
this.JapaneseFontSize = other.JapaneseFontSize;

File diff suppressed because it is too large Load Diff

View File

@ -497,4 +497,13 @@
<data name="Options_FontsEnabled" xml:space="preserve">
<value>Enable custom fonts</value>
</data>
<data name="AutoTranslate_Search_Hint" xml:space="preserve">
<value>Search Auto Translate...</value>
</data>
<data name="Options_SortAutoTranslate_Name" xml:space="preserve">
<value>Sort the Auto Translate list</value>
</data>
<data name="Options_SortAutoTranslate_Description" xml:space="preserve">
<value>If this is enabled, the Auto Translate list will be sorted alphabetically.</value>
</data>
</root>

View File

@ -955,7 +955,7 @@ internal sealed class ChatLog : IUiComponent {
return;
}
this._autoCompleteList ??= AutoTranslate.Matching(this.Ui.Plugin.DataManager, this._autoCompleteInfo.ToComplete);
this._autoCompleteList ??= AutoTranslate.Matching(this.Ui.Plugin.DataManager, this._autoCompleteInfo.ToComplete, this.Ui.Plugin.Config.SortAutoTranslate);
if (this._autoCompleteOpen) {
ImGui.OpenPopup(AutoCompleteId);
@ -975,8 +975,8 @@ internal sealed class ChatLog : IUiComponent {
}
ImGui.SetNextItemWidth(-1);
if (ImGui.InputTextWithHint("##auto-complete-filter", "Search auto translate...", ref this._autoCompleteInfo.ToComplete, 256, ImGuiInputTextFlags.CallbackAlways, this.FixCursor)) {
this._autoCompleteList = AutoTranslate.Matching(this.Ui.Plugin.DataManager, this._autoCompleteInfo.ToComplete);
if (ImGui.InputTextWithHint("##auto-complete-filter", Language.AutoTranslate_Search_Hint, ref this._autoCompleteInfo.ToComplete, 256, ImGuiInputTextFlags.CallbackAlways, this.FixCursor)) {
this._autoCompleteList = AutoTranslate.Matching(this.Ui.Plugin.DataManager, this._autoCompleteInfo.ToComplete, this.Ui.Plugin.Config.SortAutoTranslate);
}
if (ImGui.IsWindowAppearing()) {

View File

@ -58,5 +58,9 @@ internal sealed class Miscellaneous : ISettingsTab {
ImGuiUtil.HelpText(string.Format(Language.Options_KeybindMode_Description, Plugin.PluginName));
ImGui.Spacing();
ImGui.Checkbox(Language.Options_SortAutoTranslate_Name, ref this.Mutable.SortAutoTranslate);
ImGuiUtil.HelpText(Language.Options_SortAutoTranslate_Description);
ImGui.Spacing();
}
}

View File

@ -186,7 +186,7 @@ internal static class AutoTranslate {
return list;
}
internal static List<AutoTranslateEntry> Matching(DataManager data, string prefix) {
internal static List<AutoTranslateEntry> Matching(DataManager data, string prefix, bool sort) {
var wholeMatches = new List<AutoTranslateEntry>();
var prefixMatches = new List<AutoTranslateEntry>();
var otherMatches = new List<AutoTranslateEntry>();
@ -200,12 +200,19 @@ internal static class AutoTranslate {
}
}
if (sort) {
return wholeMatches.OrderBy(entry => entry.String, StringComparer.OrdinalIgnoreCase)
.Concat(prefixMatches.OrderBy(entry => entry.String, StringComparer.OrdinalIgnoreCase))
.Concat(otherMatches.OrderBy(entry => entry.String, StringComparer.OrdinalIgnoreCase))
.ToList();
}
return wholeMatches
.Concat(prefixMatches)
.Concat(otherMatches)
.ToList();
}
[DllImport("msvcrt.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern int memcmp(byte[] b1, byte[] b2, UIntPtr count);