feat: add other category to report modal

This commit is contained in:
Anna 2021-05-17 13:36:53 -04:00
parent 466a16b2b4
commit 1ed2bf14b5
5 changed files with 104 additions and 14 deletions

View File

@ -207,6 +207,7 @@ namespace NoSoliciting.Interface {
#region Modal #region Modal
private MessageCategory? _reportCategory; private MessageCategory? _reportCategory;
private bool _other;
/// <summary> /// <summary>
/// ///
@ -223,7 +224,7 @@ namespace NoSoliciting.Interface {
return false; return false;
} }
if (this._reportCategory == null) { if (this._reportCategory == null && !this._other) {
if (message.Classification != null) { if (message.Classification != null) {
this._reportCategory = message.Classification; this._reportCategory = message.Classification;
} else if (message.Classification == null && !message.Custom && !message.ItemLevel) { } else if (message.Classification == null && !message.Custom && !message.ItemLevel) {
@ -246,23 +247,24 @@ namespace NoSoliciting.Interface {
ImGui.TextUnformatted(Language.ReportModalSuggestedClassification); ImGui.TextUnformatted(Language.ReportModalSuggestedClassification);
ImGui.SetNextItemWidth(-1); ImGui.SetNextItemWidth(-1);
if (ImGui.BeginCombo($"##modal-classification-{message.Id}", this._reportCategory?.Name() ?? string.Empty)) { var preview = this._reportCategory?.Name() ?? (this._other ? Language.ReportModalClassificationOther : string.Empty);
if (ImGui.BeginCombo($"##modal-classification-{message.Id}", preview)) {
foreach (var category in (MessageCategory[]) Enum.GetValues(typeof(MessageCategory))) { foreach (var category in (MessageCategory[]) Enum.GetValues(typeof(MessageCategory))) {
if (ImGui.Selectable($"{category.Name()}##modal-option-{message.Id}", this._reportCategory == category)) { if (ImGui.Selectable($"{category.Name()}##modal-option-{message.Id}", this._reportCategory == category)) {
this._reportCategory = category; this._reportCategory = category;
this._other = false;
} }
if (!ImGui.IsItemHovered()) { WrappedTooltip(category.Description());
continue;
}
ImGui.BeginTooltip();
ImGui.PushTextWrapPos(ImGui.GetFontSize() * 24);
ImGui.TextUnformatted(category.Description());
ImGui.PopTextWrapPos();
ImGui.EndTooltip();
} }
if (ImGui.Selectable(Language.ReportModalClassificationOther)) {
this._reportCategory = null;
this._other = true;
}
WrappedTooltip(Language.ReportModalClassificationOtherDescription);
ImGui.EndCombo(); ImGui.EndCombo();
} }
@ -287,7 +289,20 @@ namespace NoSoliciting.Interface {
errorText = Language.ReportModalDisabledSameClassification; errorText = Language.ReportModalDisabledSameClassification;
} }
if (errorText != null) { if (this._other) {
if (ImGui.Button($"{Language.ReportModalGoToCustomButton}##report-goto-custom-{message.Id}")) {
ImGui.CloseCurrentPopup();
closing = true;
if (message == this.ToShowModal) {
this.ToShowModal = null;
}
this.Plugin.Ui.Settings.ShowOtherFilters = true;
this.Plugin.Ui.Settings.Show();
}
ImGui.SameLine();
} else if (errorText != null) {
ImGui.PushStyleColor(ImGuiCol.Text, new Vector4(1f, 0f, 0f, 1f)); ImGui.PushStyleColor(ImGuiCol.Text, new Vector4(1f, 0f, 0f, 1f));
ImGui.TextUnformatted(errorText); ImGui.TextUnformatted(errorText);
ImGui.PopStyleColor(); ImGui.PopStyleColor();
@ -351,6 +366,10 @@ namespace NoSoliciting.Interface {
ImGui.EndPopup(); ImGui.EndPopup();
if (closing) {
this._other = false;
}
return closing; return closing;
} }
@ -383,6 +402,18 @@ namespace NoSoliciting.Interface {
return clicked; return clicked;
} }
private static void WrappedTooltip(string text) {
if (!ImGui.IsItemHovered()) {
return;
}
ImGui.BeginTooltip();
ImGui.PushTextWrapPos(ImGui.GetFontSize() * 24);
ImGui.TextUnformatted(text);
ImGui.PopTextWrapPos();
ImGui.EndTooltip();
}
private void ReportMessage(Message message, string suggested) { private void ReportMessage(Message message, string suggested) {
Task.Run(async () => await this.ReportMessageAsync(message, suggested)); Task.Run(async () => await this.ReportMessageAsync(message, suggested));
} }

View File

@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Numerics; using System.Numerics;
using System.Text;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using Dalamud.Interface; using Dalamud.Interface;
using ImGuiNET; using ImGuiNET;
@ -38,6 +39,10 @@ namespace NoSoliciting.Interface {
this.ShowSettings = !this.ShowSettings; this.ShowSettings = !this.ShowSettings;
} }
public void Show() {
this.ShowSettings = true;
}
public void Draw() { public void Draw() {
var windowTitle = string.Format(Language.Settings, this.Plugin.Name); var windowTitle = string.Format(Language.Settings, this.Plugin.Name);
if (!this.ShowSettings || !ImGui.Begin($"{windowTitle}###NoSoliciting settings", ref this._showSettings)) { if (!this.ShowSettings || !ImGui.Begin($"{windowTitle}###NoSoliciting settings", ref this._showSettings)) {
@ -189,8 +194,26 @@ namespace NoSoliciting.Interface {
#region Other config #region Other config
internal bool ShowOtherFilters;
private static unsafe bool BeginTabItem(string label, ImGuiTabItemFlags flags) {
var unterminatedLabelBytes = Encoding.UTF8.GetBytes(label);
var labelBytes = stackalloc byte[unterminatedLabelBytes.Length + 1];
fixed (byte* unterminatedPtr = unterminatedLabelBytes) {
Buffer.MemoryCopy(unterminatedPtr, labelBytes, unterminatedLabelBytes.Length + 1, unterminatedLabelBytes.Length);
}
labelBytes[unterminatedLabelBytes.Length] = 0;
var num2 = (int) ImGuiNative.igBeginTabItem(labelBytes, null, flags);
return (uint) num2 > 0U;
}
private void DrawOtherFilters() { private void DrawOtherFilters() {
if (!ImGui.BeginTabItem($"{Language.OtherFiltersTab}###other-filters-tab")) { var flags = this.ShowOtherFilters ? ImGuiTabItemFlags.SetSelected : ImGuiTabItemFlags.None;
this.ShowOtherFilters = false;
if (!BeginTabItem($"{Language.OtherFiltersTab}###other-filters-tab", flags)) {
return; return;
} }

View File

@ -5,7 +5,7 @@
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<Version>2.1.0</Version> <Version>2.1.0</Version>
<TargetFramework>net48</TargetFramework> <TargetFramework>net48</TargetFramework>
<AllowUnsafeBlocks>false</AllowUnsafeBlocks> <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<PlatformTarget>x64</PlatformTarget> <PlatformTarget>x64</PlatformTarget>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

View File

@ -465,6 +465,24 @@ namespace NoSoliciting.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to Other.
/// </summary>
internal static string ReportModalClassificationOther {
get {
return ResourceManager.GetString("ReportModalClassificationOther", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Messages that don&apos;t fall under any of the other categories..
/// </summary>
internal static string ReportModalClassificationOtherDescription {
get {
return ResourceManager.GetString("ReportModalClassificationOtherDescription", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Copy to clipboard. /// Looks up a localized string similar to Copy to clipboard.
/// </summary> /// </summary>
@ -519,6 +537,15 @@ namespace NoSoliciting.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to Go to custom filters.
/// </summary>
internal static string ReportModalGoToCustomButton {
get {
return ResourceManager.GetString("ReportModalGoToCustomButton", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Reporting this message will let the developer know that you think this message was incorrectly classified.. /// Looks up a localized string similar to Reporting this message will let the developer know that you think this message was incorrectly classified..
/// </summary> /// </summary>

View File

@ -267,4 +267,13 @@
<data name="ReportModalDisabledFilterNotEnabled" xml:space="preserve"> <data name="ReportModalDisabledFilterNotEnabled" xml:space="preserve">
<value>Reporting is disabled because you weren't filtering for this kind of message at the time you saw it.</value> <value>Reporting is disabled because you weren't filtering for this kind of message at the time you saw it.</value>
</data> </data>
<data name="ReportModalClassificationOther" xml:space="preserve">
<value>Other</value>
</data>
<data name="ReportModalGoToCustomButton" xml:space="preserve">
<value>Go to custom filters</value>
</data>
<data name="ReportModalClassificationOtherDescription" xml:space="preserve">
<value>Messages that don't fall under any of the other categories.</value>
</data>
</root> </root>