diff --git a/Dalamud/Interface/Internal/Windows/Data/Widgets/CommandWidget.cs b/Dalamud/Interface/Internal/Windows/Data/Widgets/CommandWidget.cs
index f5a521672..e1b06aaf3 100644
--- a/Dalamud/Interface/Internal/Windows/Data/Widgets/CommandWidget.cs
+++ b/Dalamud/Interface/Internal/Windows/Data/Widgets/CommandWidget.cs
@@ -2,7 +2,6 @@ using System.Linq;
using Dalamud.Bindings.ImGui;
using Dalamud.Game.Command;
-using Dalamud.Interface.Utility;
using Dalamud.Interface.Utility.Raii;
namespace Dalamud.Interface.Internal.Windows.Data.Widgets;
@@ -12,8 +11,12 @@ namespace Dalamud.Interface.Internal.Windows.Data.Widgets;
///
internal class CommandWidget : IDataWindowWidget
{
+ private const ImGuiTableFlags TableFlags = ImGuiTableFlags.ScrollY | ImGuiTableFlags.Borders |
+ ImGuiTableFlags.SizingStretchProp | ImGuiTableFlags.Sortable |
+ ImGuiTableFlags.SortTristate;
+
///
- public string[]? CommandShortcuts { get; init; } = { "command" };
+ public string[]? CommandShortcuts { get; init; } = ["command"];
///
public string DisplayName { get; init; } = "Command";
@@ -32,9 +35,7 @@ internal class CommandWidget : IDataWindowWidget
{
var commandManager = Service.Get();
- var tableFlags = ImGuiTableFlags.ScrollY | ImGuiTableFlags.Borders | ImGuiTableFlags.SizingStretchProp |
- ImGuiTableFlags.Sortable | ImGuiTableFlags.SortTristate;
- using var table = ImRaii.Table("CommandList"u8, 4, tableFlags);
+ using var table = ImRaii.Table("CommandList"u8, 4, TableFlags);
if (table)
{
ImGui.TableSetupScrollFreeze(0, 1);
diff --git a/Dalamud/Interface/Internal/Windows/Data/Widgets/ConditionWidget.cs b/Dalamud/Interface/Internal/Windows/Data/Widgets/ConditionWidget.cs
index 6ecee48ed..e145a2bfe 100644
--- a/Dalamud/Interface/Internal/Windows/Data/Widgets/ConditionWidget.cs
+++ b/Dalamud/Interface/Internal/Windows/Data/Widgets/ConditionWidget.cs
@@ -13,7 +13,7 @@ internal class ConditionWidget : IDataWindowWidget
public bool Ready { get; set; }
///
- public string[]? CommandShortcuts { get; init; } = { "condition" };
+ public string[]? CommandShortcuts { get; init; } = ["condition"];
///
public string DisplayName { get; init; } = "Condition";
diff --git a/Dalamud/Interface/Internal/Windows/Data/Widgets/ConfigurationWidget.cs b/Dalamud/Interface/Internal/Windows/Data/Widgets/ConfigurationWidget.cs
index f66b50fca..ff22d6f30 100644
--- a/Dalamud/Interface/Internal/Windows/Data/Widgets/ConfigurationWidget.cs
+++ b/Dalamud/Interface/Internal/Windows/Data/Widgets/ConfigurationWidget.cs
@@ -9,10 +9,10 @@ namespace Dalamud.Interface.Internal.Windows.Data.Widgets;
internal class ConfigurationWidget : IDataWindowWidget
{
///
- public string[]? CommandShortcuts { get; init; } = { "config", "configuration" };
-
+ public string[]? CommandShortcuts { get; init; } = ["config", "configuration"];
+
///
- public string DisplayName { get; init; } = "Configuration";
+ public string DisplayName { get; init; } = "Configuration";
///
public bool Ready { get; set; }
diff --git a/Dalamud/Interface/Internal/Windows/Data/Widgets/DataShareWidget.cs b/Dalamud/Interface/Internal/Windows/Data/Widgets/DataShareWidget.cs
index 83db4ac6e..aa4251c25 100644
--- a/Dalamud/Interface/Internal/Windows/Data/Widgets/DataShareWidget.cs
+++ b/Dalamud/Interface/Internal/Windows/Data/Widgets/DataShareWidget.cs
@@ -1,5 +1,4 @@
using System.Collections.Generic;
-using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Numerics;
using System.Reflection;
@@ -20,21 +19,17 @@ namespace Dalamud.Interface.Internal.Windows.Data.Widgets;
///
/// Widget for displaying plugin data share modules.
///
-[SuppressMessage(
- "StyleCop.CSharp.LayoutRules",
- "SA1519:Braces should not be omitted from multi-line child statement",
- Justification = "Multiple fixed blocks")]
internal class DataShareWidget : IDataWindowWidget
{
- private const ImGuiTabItemFlags NoCloseButton = (ImGuiTabItemFlags)(1 << 20);
+ private const ImGuiTabItemFlags NoCloseButton = (ImGuiTabItemFlags)ImGuiTabItemFlagsPrivate.NoCloseButton;
- private readonly List<(string Name, byte[]? Data)> dataView = new();
+ private readonly List<(string Name, byte[]? Data)> dataView = [];
private int nextTab = -1;
private IReadOnlyDictionary? gates;
private List? gatesSorted;
///
- public string[]? CommandShortcuts { get; init; } = { "datashare" };
+ public string[]? CommandShortcuts { get; init; } = ["datashare"];
///
public string DisplayName { get; init; } = "Data Share & Call Gate";
@@ -49,42 +44,37 @@ internal class DataShareWidget : IDataWindowWidget
}
///
- public unsafe void Draw()
+ public void Draw()
{
using var tabbar = ImRaii.TabBar("##tabbar"u8);
if (!tabbar.Success)
return;
var d = true;
- using (var tabitem = ImRaii.TabItem(
- "Data Share##tabbar-datashare"u8,
- ref d,
- NoCloseButton | (this.nextTab == 0 ? ImGuiTabItemFlags.SetSelected : 0)))
+ using (var tabItem = ImRaii.TabItem("Data Share##tabbar-datashare"u8, ref d, NoCloseButton | (this.nextTab == 0 ? ImGuiTabItemFlags.SetSelected : 0)))
{
- if (tabitem.Success)
+ if (tabItem.Success)
this.DrawDataShare();
}
- using (var tabitem = ImRaii.TabItem(
- "Call Gate##tabbar-callgate"u8,
- ref d,
- NoCloseButton | (this.nextTab == 1 ? ImGuiTabItemFlags.SetSelected : 0)))
+ using (var tabItem = ImRaii.TabItem("Call Gate##tabbar-callgate"u8, ref d, NoCloseButton | (this.nextTab == 1 ? ImGuiTabItemFlags.SetSelected : 0)))
{
- if (tabitem.Success)
+ if (tabItem.Success)
this.DrawCallGate();
}
for (var i = 0; i < this.dataView.Count; i++)
{
using var idpush = ImRaii.PushId($"##tabbar-data-{i}");
+
var (name, data) = this.dataView[i];
d = true;
- using var tabitem = ImRaii.TabItem(
- name,
- ref d,
- this.nextTab == 2 + i ? ImGuiTabItemFlags.SetSelected : 0);
+
+ using var tabitem = ImRaii.TabItem(name, ref d, this.nextTab == 2 + i ? ImGuiTabItemFlags.SetSelected : 0);
+
if (!d)
this.dataView.RemoveAt(i--);
+
if (!tabitem.Success)
continue;
@@ -122,11 +112,7 @@ internal class DataShareWidget : IDataWindowWidget
if (ImGui.Button("Copy"u8))
ImGui.SetClipboardText(data);
- ImGui.InputTextMultiline(
- "text"u8,
- data,
- ImGui.GetContentRegionAvail(),
- ImGuiInputTextFlags.ReadOnly);
+ ImGui.InputTextMultiline("text"u8, data, ImGui.GetContentRegionAvail(), ImGuiInputTextFlags.ReadOnly);
}
this.nextTab = -1;
@@ -141,8 +127,10 @@ internal class DataShareWidget : IDataWindowWidget
sb.Append(ReprType(mi.DeclaringType))
.Append("::")
.Append(mi.Name);
+
if (!withParams)
return sb.ToString();
+
sb.Append('(');
var parfirst = true;
foreach (var par in mi.GetParameters())
@@ -151,6 +139,7 @@ internal class DataShareWidget : IDataWindowWidget
sb.Append(", ");
else
parfirst = false;
+
sb.AppendLine()
.Append('\t')
.Append(ReprType(par.ParameterType))
@@ -160,9 +149,11 @@ internal class DataShareWidget : IDataWindowWidget
if (!parfirst)
sb.AppendLine();
+
sb.Append(')');
if (mi.ReturnType != typeof(void))
sb.Append(" -> ").Append(ReprType(mi.ReturnType));
+
return sb.ToString();
static string WithoutGeneric(string s)
@@ -171,8 +162,7 @@ internal class DataShareWidget : IDataWindowWidget
return i != -1 ? s[..i] : s;
}
- static string ReprType(Type? t) =>
- t switch
+ static string ReprType(Type? t) => t switch
{
null => "null",
_ when t == typeof(string) => "string",
@@ -214,18 +204,19 @@ internal class DataShareWidget : IDataWindowWidget
var offset = ImGui.GetCursorScreenPos() + new Vector2(0, framepad ? ImGui.GetStyle().FramePadding.Y : 0);
if (framepad)
ImGui.AlignTextToFramePadding();
+
ImGui.Text(s);
if (ImGui.IsItemHovered())
{
ImGui.SetNextWindowPos(offset - ImGui.GetStyle().WindowPadding);
var vp = ImGui.GetWindowViewport();
var wrx = (vp.WorkPos.X + vp.WorkSize.X) - offset.X;
+
ImGui.SetNextWindowSizeConstraints(Vector2.One, new(wrx, float.MaxValue));
using (ImRaii.Tooltip())
{
- ImGui.PushTextWrapPos(wrx);
+ using var pushedWrap = ImRaii.TextWrapPos(wrx);
ImGui.TextWrapped(tooltip?.Invoke() ?? s);
- ImGui.PopTextWrapPos();
}
}
@@ -246,6 +237,9 @@ internal class DataShareWidget : IDataWindowWidget
callGate.PurgeEmptyGates();
using var table = ImRaii.Table("##callgate-table"u8, 5);
+ if (!table.Success)
+ return;
+
ImGui.TableSetupColumn("Name"u8, ImGuiTableColumnFlags.DefaultSort);
ImGui.TableSetupColumn("Action"u8);
ImGui.TableSetupColumn("Func"u8);
@@ -267,12 +261,8 @@ internal class DataShareWidget : IDataWindowWidget
{
ImGui.TableNextRow();
this.DrawTextCell(item.Name);
- this.DrawTextCell(
- ReprMethod(item.Action?.Method, false),
- () => ReprMethod(item.Action?.Method, true));
- this.DrawTextCell(
- ReprMethod(item.Func?.Method, false),
- () => ReprMethod(item.Func?.Method, true));
+ this.DrawTextCell(ReprMethod(item.Action?.Method, false), () => ReprMethod(item.Action?.Method, true));
+ this.DrawTextCell(ReprMethod(item.Func?.Method, false), () => ReprMethod(item.Func?.Method, true));
if (subs.Count == 0)
{
this.DrawTextCell("0");
@@ -287,47 +277,43 @@ internal class DataShareWidget : IDataWindowWidget
private void DrawDataShare()
{
- if (!ImGui.BeginTable("###DataShareTable"u8, 5, ImGuiTableFlags.SizingFixedFit | ImGuiTableFlags.RowBg))
+ using var table = ImRaii.Table("###DataShareTable"u8, 5, ImGuiTableFlags.SizingFixedFit | ImGuiTableFlags.RowBg);
+ if (!table.Success)
return;
- try
+ ImGui.TableSetupColumn("Shared Tag"u8);
+ ImGui.TableSetupColumn("Show"u8);
+ ImGui.TableSetupColumn("Creator Assembly"u8);
+ ImGui.TableSetupColumn("#"u8, ImGuiTableColumnFlags.WidthFixed, 30 * ImGuiHelpers.GlobalScale);
+ ImGui.TableSetupColumn("Consumers"u8);
+ ImGui.TableHeadersRow();
+
+ foreach (var share in Service.Get().GetAllShares())
{
- ImGui.TableSetupColumn("Shared Tag"u8);
- ImGui.TableSetupColumn("Show"u8);
- ImGui.TableSetupColumn("Creator Assembly"u8);
- ImGui.TableSetupColumn("#"u8, ImGuiTableColumnFlags.WidthFixed, 30 * ImGuiHelpers.GlobalScale);
- ImGui.TableSetupColumn("Consumers"u8);
- ImGui.TableHeadersRow();
- foreach (var share in Service.Get().GetAllShares())
+ ImGui.TableNextRow();
+ this.DrawTextCell(share.Tag, null, true);
+
+ ImGui.TableNextColumn();
+ if (ImGui.Button($"Show##datasharetable-show-{share.Tag}"))
{
- ImGui.TableNextRow();
- this.DrawTextCell(share.Tag, null, true);
-
- ImGui.TableNextColumn();
- if (ImGui.Button($"Show##datasharetable-show-{share.Tag}"))
+ var index = 0;
+ for (; index < this.dataView.Count; index++)
{
- var index = 0;
- for (; index < this.dataView.Count; index++)
- {
- if (this.dataView[index].Name == share.Tag)
- break;
- }
-
- if (index == this.dataView.Count)
- this.dataView.Add((share.Tag, null));
- else
- this.dataView[index] = (share.Tag, null);
- this.nextTab = 2 + index;
+ if (this.dataView[index].Name == share.Tag)
+ break;
}
- this.DrawTextCell(share.CreatorAssembly, null, true);
- this.DrawTextCell(share.Users.Length.ToString(), null, true);
- this.DrawTextCell(string.Join(", ", share.Users), null, true);
+ if (index == this.dataView.Count)
+ this.dataView.Add((share.Tag, null));
+ else
+ this.dataView[index] = (share.Tag, null);
+
+ this.nextTab = 2 + index;
}
- }
- finally
- {
- ImGui.EndTable();
+
+ this.DrawTextCell(share.CreatorAssembly, null, true);
+ this.DrawTextCell(share.Users.Length.ToString(), null, true);
+ this.DrawTextCell(string.Join(", ", share.Users), null, true);
}
}
}
diff --git a/Dalamud/Interface/Internal/Windows/Data/Widgets/DtrBarWidget.cs b/Dalamud/Interface/Internal/Windows/Data/Widgets/DtrBarWidget.cs
index 0a40c9be7..69a4204cb 100644
--- a/Dalamud/Interface/Internal/Windows/Data/Widgets/DtrBarWidget.cs
+++ b/Dalamud/Interface/Internal/Windows/Data/Widgets/DtrBarWidget.cs
@@ -21,7 +21,7 @@ internal class DtrBarWidget : IDataWindowWidget, IDisposable
private CancellationTokenSource? loadTestThreadCt;
///
- public string[]? CommandShortcuts { get; init; } = { "dtr", "dtrbar" };
+ public string[]? CommandShortcuts { get; init; } = ["dtr", "dtrbar"];
///
public string DisplayName { get; init; } = "DTR Bar";
diff --git a/Dalamud/Interface/Internal/Windows/Data/Widgets/FateTableWidget.cs b/Dalamud/Interface/Internal/Windows/Data/Widgets/FateTableWidget.cs
index 50ed79b3d..b2f4bf70f 100644
--- a/Dalamud/Interface/Internal/Windows/Data/Widgets/FateTableWidget.cs
+++ b/Dalamud/Interface/Internal/Windows/Data/Widgets/FateTableWidget.cs
@@ -1,7 +1,6 @@
using Dalamud.Bindings.ImGui;
using Dalamud.Game.ClientState.Fates;
using Dalamud.Interface.Textures.Internal;
-using Dalamud.Interface.Utility;
using Dalamud.Interface.Utility.Raii;
namespace Dalamud.Interface.Internal.Windows.Data.Widgets;
@@ -11,8 +10,11 @@ namespace Dalamud.Interface.Internal.Windows.Data.Widgets;
///
internal class FateTableWidget : IDataWindowWidget
{
+ private const ImGuiTableFlags TableFlags = ImGuiTableFlags.ScrollY | ImGuiTableFlags.RowBg |
+ ImGuiTableFlags.Borders | ImGuiTableFlags.NoSavedSettings;
+
///
- public string[]? CommandShortcuts { get; init; } = { "fate", "fatetable" };
+ public string[]? CommandShortcuts { get; init; } = ["fate", "fatetable"];
///
public string DisplayName { get; init; } = "Fate Table";
@@ -38,7 +40,7 @@ internal class FateTableWidget : IDataWindowWidget
return;
}
- using var table = ImRaii.Table("FateTable"u8, 13, ImGuiTableFlags.ScrollY | ImGuiTableFlags.RowBg | ImGuiTableFlags.Borders | ImGuiTableFlags.NoSavedSettings);
+ using var table = ImRaii.Table("FateTable"u8, 13, TableFlags);
if (!table) return;
ImGui.TableSetupColumn("Index"u8, ImGuiTableColumnFlags.WidthFixed, 40);
@@ -98,11 +100,11 @@ internal class FateTableWidget : IDataWindowWidget
if (ImGui.IsItemHovered())
{
ImGui.SetMouseCursor(ImGuiMouseCursor.Hand);
- ImGui.BeginTooltip();
+
+ using var tooltip = ImRaii.Tooltip();
ImGui.Text("Click to copy IconId"u8);
ImGui.Text($"ID: {fate.IconId} – Size: {texture.Width}x{texture.Height}");
ImGui.Image(texture.Handle, new(texture.Width, texture.Height));
- ImGui.EndTooltip();
}
if (ImGui.IsItemClicked())
@@ -123,11 +125,11 @@ internal class FateTableWidget : IDataWindowWidget
if (ImGui.IsItemHovered())
{
ImGui.SetMouseCursor(ImGuiMouseCursor.Hand);
- ImGui.BeginTooltip();
+
+ using var tooltip = ImRaii.Tooltip();
ImGui.Text("Click to copy MapIconId"u8);
ImGui.Text($"ID: {fate.MapIconId} – Size: {texture.Width}x{texture.Height}");
ImGui.Image(texture.Handle, new(texture.Width, texture.Height));
- ImGui.EndTooltip();
}
if (ImGui.IsItemClicked())
diff --git a/Dalamud/Interface/Internal/Windows/Data/Widgets/FlyTextWidget.cs b/Dalamud/Interface/Internal/Windows/Data/Widgets/FlyTextWidget.cs
index d20aa5cb1..00e424551 100644
--- a/Dalamud/Interface/Internal/Windows/Data/Widgets/FlyTextWidget.cs
+++ b/Dalamud/Interface/Internal/Windows/Data/Widgets/FlyTextWidget.cs
@@ -3,6 +3,7 @@ using System.Numerics;
using Dalamud.Bindings.ImGui;
using Dalamud.Game.Gui.FlyText;
+using Dalamud.Interface.Utility.Raii;
namespace Dalamud.Interface.Internal.Windows.Data.Widgets;
@@ -22,7 +23,7 @@ internal class FlyTextWidget : IDataWindowWidget
private Vector4 flyColor = new(1, 0, 0, 1);
///
- public string[]? CommandShortcuts { get; init; } = { "flytext" };
+ public string[]? CommandShortcuts { get; init; } = ["flytext"];
///
public string DisplayName { get; init; } = "Fly Text";
@@ -39,18 +40,18 @@ internal class FlyTextWidget : IDataWindowWidget
///
public void Draw()
{
- if (ImGui.BeginCombo("Kind"u8, $"{this.flyKind} ({(int)this.flyKind})"))
+ using (var combo = ImRaii.Combo("Kind"u8, $"{this.flyKind} ({(int)this.flyKind})"))
{
- var values = Enum.GetValues().Distinct();
- foreach (var value in values)
+ if (combo.Success)
{
- if (ImGui.Selectable($"{value} ({(int)value})"))
+ foreach (var value in Enum.GetValues().Distinct())
{
- this.flyKind = value;
+ if (ImGui.Selectable($"{value} ({(int)value})"))
+ {
+ this.flyKind = value;
+ }
}
}
-
- ImGui.EndCombo();
}
ImGui.InputText("Text1"u8, ref this.flyText1, 200);
diff --git a/Dalamud/Interface/Internal/Windows/Data/Widgets/GamePrebakedFontsTestWidget.cs b/Dalamud/Interface/Internal/Windows/Data/Widgets/GamePrebakedFontsTestWidget.cs
index c653e9185..cf0fcb01a 100644
--- a/Dalamud/Interface/Internal/Windows/Data/Widgets/GamePrebakedFontsTestWidget.cs
+++ b/Dalamud/Interface/Internal/Windows/Data/Widgets/GamePrebakedFontsTestWidget.cs
@@ -2,7 +2,6 @@ using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
using System.Numerics;
-using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
@@ -14,6 +13,7 @@ using Dalamud.Interface.ImGuiFontChooserDialog;
using Dalamud.Interface.ManagedFontAtlas;
using Dalamud.Interface.ManagedFontAtlas.Internals;
using Dalamud.Interface.Utility;
+using Dalamud.Interface.Utility.Raii;
using Dalamud.Utility;
using Serilog;
@@ -25,11 +25,11 @@ namespace Dalamud.Interface.Internal.Windows.Data.Widgets;
internal class GamePrebakedFontsTestWidget : IDataWindowWidget, IDisposable
{
private static readonly string[] FontScaleModes =
- {
+ [
nameof(FontScaleMode.Default),
nameof(FontScaleMode.SkipHandling),
- nameof(FontScaleMode.UndoGlobalScale),
- };
+ nameof(FontScaleMode.UndoGlobalScale)
+ ];
private ImVectorWrapper testStringBuffer;
private IFontAtlas? privateAtlas;
@@ -248,7 +248,8 @@ internal class GamePrebakedFontsTestWidget : IDataWindowWidget, IDisposable
{
ImGui.Text($"{gfs.SizePt}pt");
ImGui.SameLine(offsetX);
- ImGui.PushTextWrapPos(this.useWordWrap ? 0f : -1f);
+
+ using var pushedWrap = ImRaii.TextWrapPos(this.useWordWrap ? 0f : -1f);
try
{
if (handle.Value.LoadException is { } exc)
@@ -263,6 +264,7 @@ internal class GamePrebakedFontsTestWidget : IDataWindowWidget, IDisposable
{
if (!this.atlasScaleMode)
ImGui.SetWindowFontScale(1 / ImGuiHelpers.GlobalScale);
+
if (counter++ % 2 == 0)
{
using var pushPop = handle.Value.Push();
@@ -279,7 +281,6 @@ internal class GamePrebakedFontsTestWidget : IDataWindowWidget, IDisposable
finally
{
ImGui.SetWindowFontScale(1);
- ImGui.PopTextWrapPos();
}
}
}
diff --git a/Dalamud/Interface/Internal/Windows/Data/Widgets/GamepadWidget.cs b/Dalamud/Interface/Internal/Windows/Data/Widgets/GamepadWidget.cs
index 65e6cd3d6..d7064a4d5 100644
--- a/Dalamud/Interface/Internal/Windows/Data/Widgets/GamepadWidget.cs
+++ b/Dalamud/Interface/Internal/Windows/Data/Widgets/GamepadWidget.cs
@@ -10,7 +10,7 @@ namespace Dalamud.Interface.Internal.Windows.Data.Widgets;
internal class GamepadWidget : IDataWindowWidget
{
///
- public string[]? CommandShortcuts { get; init; } = { "gamepad", "controller" };
+ public string[]? CommandShortcuts { get; init; } = ["gamepad", "controller"];
///
public string DisplayName { get; init; } = "Gamepad";
@@ -39,22 +39,10 @@ internal class GamepadWidget : IDataWindowWidget
ImGui.SetClipboardText($"{Util.DescribeAddress(gamepadState.GamepadInputAddress)}");
#endif
- this.DrawHelper(
- "Buttons Raw",
- (uint)gamepadState.ButtonsRaw,
- gamepadState.Raw);
- this.DrawHelper(
- "Buttons Pressed",
- (uint)gamepadState.ButtonsPressed,
- gamepadState.Pressed);
- this.DrawHelper(
- "Buttons Repeat",
- (uint)gamepadState.ButtonsRepeat,
- gamepadState.Repeat);
- this.DrawHelper(
- "Buttons Released",
- (uint)gamepadState.ButtonsReleased,
- gamepadState.Released);
+ this.DrawHelper("Buttons Raw", (uint)gamepadState.ButtonsRaw, gamepadState.Raw);
+ this.DrawHelper("Buttons Pressed", (uint)gamepadState.ButtonsPressed, gamepadState.Pressed);
+ this.DrawHelper("Buttons Repeat", (uint)gamepadState.ButtonsRepeat, gamepadState.Repeat);
+ this.DrawHelper("Buttons Released", (uint)gamepadState.ButtonsReleased, gamepadState.Released);
ImGui.Text($"LeftStick {gamepadState.LeftStick}");
ImGui.Text($"RightStick {gamepadState.RightStick}");
}
diff --git a/Dalamud/Interface/Internal/Windows/Data/Widgets/GaugeWidget.cs b/Dalamud/Interface/Internal/Windows/Data/Widgets/GaugeWidget.cs
index 7a5a9c89b..74403a32b 100644
--- a/Dalamud/Interface/Internal/Windows/Data/Widgets/GaugeWidget.cs
+++ b/Dalamud/Interface/Internal/Windows/Data/Widgets/GaugeWidget.cs
@@ -12,7 +12,7 @@ namespace Dalamud.Interface.Internal.Windows.Data.Widgets;
internal class GaugeWidget : IDataWindowWidget
{
///
- public string[]? CommandShortcuts { get; init; } = { "gauge", "jobgauge", "job" };
+ public string[]? CommandShortcuts { get; init; } = ["gauge", "jobgauge", "job"];
///
public string DisplayName { get; init; } = "Job Gauge";
@@ -39,8 +39,7 @@ internal class GaugeWidget : IDataWindowWidget
return;
}
- var jobID = player.ClassJob.RowId;
- JobGaugeBase? gauge = jobID switch
+ JobGaugeBase? gauge = player.ClassJob.RowId switch
{
19 => jobGauges.Get(),
20 => jobGauges.Get(),
@@ -63,7 +62,7 @@ internal class GaugeWidget : IDataWindowWidget
40 => jobGauges.Get(),
41 => jobGauges.Get(),
42 => jobGauges.Get(),
- _ => null,
+ _ => null
};
if (gauge == null)
diff --git a/Dalamud/Interface/Internal/Windows/Data/Widgets/HookWidget.cs b/Dalamud/Interface/Internal/Windows/Data/Widgets/HookWidget.cs
index f3e25caf8..f0dd7c317 100644
--- a/Dalamud/Interface/Internal/Windows/Data/Widgets/HookWidget.cs
+++ b/Dalamud/Interface/Internal/Windows/Data/Widgets/HookWidget.cs
@@ -6,6 +6,7 @@ using System.Threading.Tasks;
using Dalamud.Bindings.ImGui;
using Dalamud.Game;
using Dalamud.Hooking;
+using Dalamud.Interface.Utility.Raii;
using FFXIVClientStructs.FFXIV.Component.GUI;
using Serilog;
using Windows.Win32.Foundation;
@@ -23,12 +24,12 @@ internal unsafe class HookWidget : IDataWindowWidget
private Hook? messageBoxMinHook;
private bool hookUseMinHook;
- private int hookStressTestCount = 0;
+ private int hookStressTestCount;
private int hookStressTestMax = 1000;
private int hookStressTestWait = 100;
private int hookStressTestMaxDegreeOfParallelism = 10;
private StressTestHookTarget hookStressTestHookTarget = StressTestHookTarget.Random;
- private bool hookStressTestRunning = false;
+ private bool hookStressTestRunning;
private MessageBoxWDelegate? messageBoxWOriginal;
private AddonFinalizeDelegate? addonFinalizeOriginal;
@@ -47,7 +48,7 @@ internal unsafe class HookWidget : IDataWindowWidget
{
MessageBoxW,
AddonFinalize,
- Random,
+ Random
}
///
@@ -103,67 +104,68 @@ internal unsafe class HookWidget : IDataWindowWidget
ImGui.Separator();
- ImGui.BeginDisabled(this.hookStressTestRunning);
- ImGui.Text("Stress Test"u8);
-
- if (ImGui.InputInt("Max"u8, ref this.hookStressTestMax))
- this.hookStressTestCount = 0;
-
- ImGui.InputInt("Wait (ms)"u8, ref this.hookStressTestWait);
- ImGui.InputInt("Max Degree of Parallelism"u8, ref this.hookStressTestMaxDegreeOfParallelism);
-
- if (ImGui.BeginCombo("Target"u8, HookTargetToString(this.hookStressTestHookTarget)))
+ using (ImRaii.Disabled(this.hookStressTestRunning))
{
- foreach (var target in Enum.GetValues())
+ ImGui.Text("Stress Test"u8);
+
+ if (ImGui.InputInt("Max"u8, ref this.hookStressTestMax))
+ this.hookStressTestCount = 0;
+
+ ImGui.InputInt("Wait (ms)"u8, ref this.hookStressTestWait);
+ ImGui.InputInt("Max Degree of Parallelism"u8, ref this.hookStressTestMaxDegreeOfParallelism);
+
+ using (var combo = ImRaii.Combo("Target"u8, HookTargetToString(this.hookStressTestHookTarget)))
{
- if (ImGui.Selectable(HookTargetToString(target), this.hookStressTestHookTarget == target))
- this.hookStressTestHookTarget = target;
+ if (combo.Success)
+ {
+ foreach (var target in Enum.GetValues())
+ {
+ if (ImGui.Selectable(HookTargetToString(target), this.hookStressTestHookTarget == target))
+ this.hookStressTestHookTarget = target;
+ }
+ }
}
- ImGui.EndCombo();
- }
-
- if (ImGui.Button("Stress Test"u8))
- {
- Task.Run(() =>
+ if (ImGui.Button("Stress Test"u8))
{
- this.hookStressTestRunning = true;
- this.hookStressTestCount = 0;
- Parallel.For(
- 0,
- this.hookStressTestMax,
- new ParallelOptions
+ Task.Run(() =>
+ {
+ this.hookStressTestRunning = true;
+ this.hookStressTestCount = 0;
+ Parallel.For(
+ 0,
+ this.hookStressTestMax,
+ new ParallelOptions
+ {
+ MaxDegreeOfParallelism = this.hookStressTestMaxDegreeOfParallelism,
+ },
+ _ =>
+ {
+ this.hookStressTestList.Add(this.HookTarget(this.hookStressTestHookTarget));
+ this.hookStressTestCount++;
+ Thread.Sleep(this.hookStressTestWait);
+ });
+ }).ContinueWith(t =>
+ {
+ if (t.IsFaulted)
{
- MaxDegreeOfParallelism = this.hookStressTestMaxDegreeOfParallelism,
- },
- _ =>
+ Log.Error(t.Exception, "Stress test failed");
+ }
+ else
{
- this.hookStressTestList.Add(this.HookTarget(this.hookStressTestHookTarget));
- this.hookStressTestCount++;
- Thread.Sleep(this.hookStressTestWait);
+ Log.Information("Stress test completed");
+ }
+
+ this.hookStressTestRunning = false;
+ this.hookStressTestList.ForEach(hook =>
+ {
+ hook.Dispose();
});
- }).ContinueWith(t =>
- {
- if (t.IsFaulted)
- {
- Log.Error(t.Exception, "Stress test failed");
- }
- else
- {
- Log.Information("Stress test completed");
- }
-
- this.hookStressTestRunning = false;
- this.hookStressTestList.ForEach(hook =>
- {
- hook.Dispose();
+ this.hookStressTestList.Clear();
});
- this.hookStressTestList.Clear();
- });
+ }
}
- ImGui.EndDisabled();
-
ImGui.Text("Status: " + (this.hookStressTestRunning ? "Running" : "Idle"));
ImGui.ProgressBar(this.hookStressTestCount / (float)this.hookStressTestMax, new System.Numerics.Vector2(0, 0), $"{this.hookStressTestCount}/{this.hookStressTestMax}");
}
@@ -203,11 +205,6 @@ internal unsafe class HookWidget : IDataWindowWidget
this.addonFinalizeOriginal!(unitManager, atkUnitBase);
}
- private void OnAddonUpdate(AtkUnitBase* thisPtr, float delta)
- {
- Log.Information("OnAddonUpdate");
- }
-
private IDalamudHook HookMessageBoxW()
{
var hook = Hook.FromSymbol(
diff --git a/Dalamud/Interface/Internal/Windows/Data/Widgets/IconBrowserWidget.cs b/Dalamud/Interface/Internal/Windows/Data/Widgets/IconBrowserWidget.cs
index 0395f4c96..670b83f67 100644
--- a/Dalamud/Interface/Internal/Windows/Data/Widgets/IconBrowserWidget.cs
+++ b/Dalamud/Interface/Internal/Windows/Data/Widgets/IconBrowserWidget.cs
@@ -8,6 +8,7 @@ using Dalamud.Interface.Textures.Internal;
using Dalamud.Interface.Textures.TextureWraps;
using Dalamud.Interface.Utility;
using Dalamud.Interface.Utility.Internal;
+using Dalamud.Interface.Utility.Raii;
namespace Dalamud.Interface.Internal.Windows.Data.Widgets;
@@ -33,7 +34,7 @@ public class IconBrowserWidget : IDataWindowWidget
private Vector2 lastWindowSize = Vector2.Zero;
///
- public string[]? CommandShortcuts { get; init; } = { "icon", "icons" };
+ public string[]? CommandShortcuts { get; init; } = ["icon", "icons"];
///
public string DisplayName { get; init; } = "Icon Browser";
@@ -62,6 +63,7 @@ public class IconBrowserWidget : IDataWindowWidget
// continue;
if (!texm.TryGetIconPath(new((uint)iconId), out var path))
continue;
+
result.Add((iconId, path));
}
@@ -82,17 +84,17 @@ public class IconBrowserWidget : IDataWindowWidget
{
this.RecalculateIndexRange();
- if (ImGui.BeginChild("ScrollableSection"u8, ImGui.GetContentRegionAvail(), false, ImGuiWindowFlags.NoMove))
+ using (var child = ImRaii.Child("ScrollableSection"u8, ImGui.GetContentRegionAvail(), false, ImGuiWindowFlags.NoMove))
{
- var itemsPerRow = (int)MathF.Floor(
- ImGui.GetContentRegionMax().X / (this.iconSize.X + ImGui.GetStyle().ItemSpacing.X));
- var itemHeight = this.iconSize.Y + ImGui.GetStyle().ItemSpacing.Y;
+ if (child.Success)
+ {
+ var itemsPerRow = (int)MathF.Floor(ImGui.GetContentRegionMax().X / (this.iconSize.X + ImGui.GetStyle().ItemSpacing.X));
+ var itemHeight = this.iconSize.Y + ImGui.GetStyle().ItemSpacing.Y;
- ImGuiClip.ClippedDraw(this.valueRange!, this.DrawIcon, itemsPerRow, itemHeight);
+ ImGuiClip.ClippedDraw(this.valueRange!, this.DrawIcon, itemsPerRow, itemHeight);
+ }
}
- ImGui.EndChild();
-
this.ProcessMouseDragging();
}
}
@@ -118,16 +120,16 @@ public class IconBrowserWidget : IDataWindowWidget
{
ImGui.Columns(2);
- ImGui.PushItemWidth(ImGui.GetContentRegionAvail().X);
- if (ImGui.InputInt("##StartRange"u8, ref this.startRange, 0, 0))
+ ImGui.SetNextItemWidth(ImGui.GetContentRegionAvail().X);
+ if (ImGui.InputInt("##StartRange"u8, ref this.startRange))
{
this.startRange = Math.Clamp(this.startRange, 0, MaxIconId);
this.valueRange = null;
}
ImGui.NextColumn();
- ImGui.PushItemWidth(ImGui.GetContentRegionAvail().X);
- if (ImGui.InputInt("##StopRange"u8, ref this.stopRange, 0, 0))
+ ImGui.SetNextItemWidth(ImGui.GetContentRegionAvail().X);
+ if (ImGui.InputInt("##StopRange"u8, ref this.stopRange))
{
this.stopRange = Math.Clamp(this.stopRange, 0, MaxIconId);
this.valueRange = null;
@@ -151,6 +153,10 @@ public class IconBrowserWidget : IDataWindowWidget
var texm = Service.Get();
var cursor = ImGui.GetCursorScreenPos();
+ var white = ImGui.GetColorU32(ImGuiColors.DalamudWhite);
+ var red = ImGui.GetColorU32(ImGuiColors.DalamudRed);
+ var drawList = ImGui.GetWindowDrawList();
+
if (texm.Shared.GetFromGameIcon(iconId).TryGetWrap(out var texture, out var exc))
{
ImGui.Image(texture.Handle, this.iconSize);
@@ -158,21 +164,17 @@ public class IconBrowserWidget : IDataWindowWidget
// If we have the option to show a tooltip image, draw the image, but make sure it's not too big.
if (ImGui.IsItemHovered() && this.showTooltipImage)
{
- ImGui.BeginTooltip();
+ using var tooltip = ImRaii.Tooltip();
var scale = GetImageScaleFactor(texture);
var textSize = ImGui.CalcTextSize(iconId.ToString());
- ImGui.SetCursorPosX(
- texture.Size.X * scale / 2.0f - textSize.X / 2.0f + ImGui.GetStyle().FramePadding.X * 2.0f);
+ ImGui.SetCursorPosX((texture.Size.X * scale / 2.0f - (textSize.X / 2.0f)) + (ImGui.GetStyle().FramePadding.X * 2.0f));
ImGui.Text(iconId.ToString());
ImGui.Image(texture.Handle, texture.Size * scale);
- ImGui.EndTooltip();
}
-
- // else, just draw the iconId.
- else if (ImGui.IsItemHovered())
+ else if (ImGui.IsItemHovered()) // else, just draw the iconId.
{
ImGui.SetTooltip(iconId.ToString());
}
@@ -185,10 +187,7 @@ public class IconBrowserWidget : IDataWindowWidget
Task.FromResult(texture.CreateWrapSharingLowLevelResource()));
}
- ImGui.GetWindowDrawList().AddRect(
- cursor,
- cursor + this.iconSize,
- ImGui.GetColorU32(ImGuiColors.DalamudWhite));
+ drawList.AddRect(cursor, cursor + this.iconSize, white);
}
else if (exc is not null)
{
@@ -197,19 +196,13 @@ public class IconBrowserWidget : IDataWindowWidget
{
var iconText = FontAwesomeIcon.Ban.ToIconString();
var textSize = ImGui.CalcTextSize(iconText);
- ImGui.GetWindowDrawList().AddText(
- cursor + ((this.iconSize - textSize) / 2),
- ImGui.GetColorU32(ImGuiColors.DalamudRed),
- iconText);
+ drawList.AddText(cursor + ((this.iconSize - textSize) / 2), red, iconText);
}
if (ImGui.IsItemHovered())
ImGui.SetTooltip($"{iconId}\n{exc}");
- ImGui.GetWindowDrawList().AddRect(
- cursor,
- cursor + this.iconSize,
- ImGui.GetColorU32(ImGuiColors.DalamudRed));
+ drawList.AddRect(cursor, cursor + this.iconSize, red);
}
else
{
@@ -218,18 +211,12 @@ public class IconBrowserWidget : IDataWindowWidget
ImGui.Dummy(this.iconSize);
var textSize = ImGui.CalcTextSize(text);
- ImGui.GetWindowDrawList().AddText(
- cursor + ((this.iconSize - textSize) / 2),
- color,
- text);
+ drawList.AddText(cursor + ((this.iconSize - textSize) / 2), color, text);
if (ImGui.IsItemHovered())
ImGui.SetTooltip(iconId.ToString());
- ImGui.GetWindowDrawList().AddRect(
- cursor,
- cursor + this.iconSize,
- color);
+ drawList.AddRect(cursor, cursor + this.iconSize, color);
}
}
@@ -269,7 +256,7 @@ public class IconBrowserWidget : IDataWindowWidget
if (this.valueRange is not null)
return;
- this.valueRange = new();
+ this.valueRange = [];
foreach (var (id, _) in this.iconIdsTask!.Result)
{
if (this.startRange <= id && id < this.stopRange)
diff --git a/Dalamud/Interface/Internal/Windows/Data/Widgets/ImGuiWidget.cs b/Dalamud/Interface/Internal/Windows/Data/Widgets/ImGuiWidget.cs
index d4afce48d..b3a3e3493 100644
--- a/Dalamud/Interface/Internal/Windows/Data/Widgets/ImGuiWidget.cs
+++ b/Dalamud/Interface/Internal/Windows/Data/Widgets/ImGuiWidget.cs
@@ -19,11 +19,11 @@ namespace Dalamud.Interface.Internal.Windows.Data.Widgets;
///
internal class ImGuiWidget : IDataWindowWidget
{
- private readonly HashSet notifications = new();
+ private readonly HashSet notifications = [];
private NotificationTemplate notificationTemplate;
///
- public string[]? CommandShortcuts { get; init; } = { "imgui" };
+ public string[]? CommandShortcuts { get; init; } = ["imgui"];
///
public string DisplayName { get; init; } = "ImGui";
@@ -54,8 +54,7 @@ internal class ImGuiWidget : IDataWindowWidget
ImGui.Separator();
- ImGui.Text(
- $"WindowSystem.TimeSinceLastAnyFocus: {WindowSystem.TimeSinceLastAnyFocus.TotalMilliseconds:0}ms");
+ ImGui.Text($"WindowSystem.TimeSinceLastAnyFocus: {WindowSystem.TimeSinceLastAnyFocus.TotalMilliseconds:0}ms");
ImGui.Separator();
@@ -79,45 +78,24 @@ internal class ImGuiWidget : IDataWindowWidget
switch (this.notificationTemplate.IconInt)
{
case 1 or 2:
- ImGui.InputText(
- "Icon Text##iconText"u8,
- ref this.notificationTemplate.IconText,
- 255);
+ ImGui.InputText("Icon Text##iconText"u8, ref this.notificationTemplate.IconText, 255);
break;
case 5 or 6:
- ImGui.Combo(
- "Asset##iconAssetCombo",
- ref this.notificationTemplate.IconAssetInt,
- NotificationTemplate.AssetSources);
+ ImGui.Combo("Asset##iconAssetCombo", ref this.notificationTemplate.IconAssetInt, NotificationTemplate.AssetSources);
break;
case 3 or 7:
- ImGui.InputText(
- "Game Path##iconText"u8,
- ref this.notificationTemplate.IconText,
- 255);
+ ImGui.InputText("Game Path##iconText"u8, ref this.notificationTemplate.IconText, 255);
break;
case 4 or 8:
- ImGui.InputText(
- "File Path##iconText"u8,
- ref this.notificationTemplate.IconText,
- 255);
+ ImGui.InputText("File Path##iconText"u8, ref this.notificationTemplate.IconText, 255);
break;
}
- ImGui.Combo(
- "Initial Duration",
- ref this.notificationTemplate.InitialDurationInt,
- NotificationTemplate.InitialDurationTitles);
+ ImGui.Combo("Initial Duration", ref this.notificationTemplate.InitialDurationInt, NotificationTemplate.InitialDurationTitles);
- ImGui.Combo(
- "Extension Duration",
- ref this.notificationTemplate.HoverExtendDurationInt,
- NotificationTemplate.HoverExtendDurationTitles);
+ ImGui.Combo("Extension Duration", ref this.notificationTemplate.HoverExtendDurationInt, NotificationTemplate.HoverExtendDurationTitles);
- ImGui.Combo(
- "Progress",
- ref this.notificationTemplate.ProgressMode,
- NotificationTemplate.ProgressModeTitles);
+ ImGui.Combo("Progress", ref this.notificationTemplate.ProgressMode, NotificationTemplate.ProgressModeTitles);
ImGui.Checkbox("Respect UI Hidden"u8, ref this.notificationTemplate.RespectUiHidden);
@@ -127,14 +105,11 @@ internal class ImGuiWidget : IDataWindowWidget
ImGui.Checkbox("User Dismissable"u8, ref this.notificationTemplate.UserDismissable);
- ImGui.Checkbox(
- "Action Bar (always on if not user dismissable for the example)"u8,
- ref this.notificationTemplate.ActionBar);
+ ImGui.Checkbox("Action Bar (always on if not user dismissable for the example)"u8, ref this.notificationTemplate.ActionBar);
if (ImGui.Button("Add notification"u8))
{
- var text =
- "Bla bla bla bla bla bla bla bla bla bla bla.\nBla bla bla bla bla bla bla bla bla bla bla bla bla bla.";
+ var text = "Bla bla bla bla bla bla bla bla bla bla bla.\nBla bla bla bla bla bla bla bla bla bla bla bla bla bla.";
NewRandom(out var title, out var type, out var progress);
if (this.notificationTemplate.ManualTitle)
@@ -334,7 +309,7 @@ internal class ImGuiWidget : IDataWindowWidget
private struct NotificationTemplate
{
public static readonly string[] IconTitles =
- {
+ [
"None (use Type)",
"SeIconChar",
"FontAwesomeIcon",
@@ -343,8 +318,8 @@ internal class ImGuiWidget : IDataWindowWidget
"TextureWrap from DalamudAssets",
"TextureWrap from DalamudAssets(Async)",
"TextureWrap from GamePath",
- "TextureWrap from FilePath",
- };
+ "TextureWrap from FilePath"
+ ];
public static readonly string[] AssetSources =
Enum.GetValues()
@@ -353,46 +328,46 @@ internal class ImGuiWidget : IDataWindowWidget
.ToArray();
public static readonly string[] ProgressModeTitles =
- {
+ [
"Default",
"Random",
"Increasing",
"Increasing & Auto Dismiss",
- "Indeterminate",
- };
+ "Indeterminate"
+ ];
public static readonly string[] TypeTitles =
- {
+ [
nameof(NotificationType.None),
nameof(NotificationType.Success),
nameof(NotificationType.Warning),
nameof(NotificationType.Error),
- nameof(NotificationType.Info),
- };
+ nameof(NotificationType.Info)
+ ];
public static readonly string[] InitialDurationTitles =
- {
+ [
"Infinite",
"1 seconds",
"3 seconds (default)",
- "10 seconds",
- };
+ "10 seconds"
+ ];
public static readonly string[] HoverExtendDurationTitles =
- {
+ [
"Disable",
"1 seconds",
"3 seconds (default)",
- "10 seconds",
- };
+ "10 seconds"
+ ];
public static readonly TimeSpan[] Durations =
- {
+ [
TimeSpan.Zero,
TimeSpan.FromSeconds(1),
NotificationConstants.DefaultDuration,
- TimeSpan.FromSeconds(10),
- };
+ TimeSpan.FromSeconds(10)
+ ];
public bool ManualContent;
public string Content;
diff --git a/Dalamud/Interface/Internal/Windows/Data/Widgets/InventoryWidget.cs b/Dalamud/Interface/Internal/Windows/Data/Widgets/InventoryWidget.cs
index c0ec3d490..9ecd960ef 100644
--- a/Dalamud/Interface/Internal/Windows/Data/Widgets/InventoryWidget.cs
+++ b/Dalamud/Interface/Internal/Windows/Data/Widgets/InventoryWidget.cs
@@ -20,6 +20,11 @@ namespace Dalamud.Interface.Internal.Windows.Data.Widgets;
///
internal class InventoryWidget : IDataWindowWidget
{
+ private const ImGuiTableFlags TableFlags = ImGuiTableFlags.RowBg | ImGuiTableFlags.Borders |
+ ImGuiTableFlags.ScrollY | ImGuiTableFlags.NoSavedSettings;
+
+ private const ImGuiTableFlags InnerTableFlags = ImGuiTableFlags.BordersInner | ImGuiTableFlags.NoSavedSettings;
+
private DataManager dataManager;
private TextureManager textureManager;
private GameInventoryType? selectedInventoryType = GameInventoryType.Inventory1;
@@ -62,7 +67,7 @@ internal class InventoryWidget : IDataWindowWidget
private unsafe void DrawInventoryTypeList()
{
- using var table = ImRaii.Table("InventoryTypeTable"u8, 2, ImGuiTableFlags.RowBg | ImGuiTableFlags.Borders | ImGuiTableFlags.ScrollY | ImGuiTableFlags.NoSavedSettings, new Vector2(300, -1));
+ using var table = ImRaii.Table("InventoryTypeTable"u8, 2, TableFlags, new Vector2(300, -1));
if (!table) return;
ImGui.TableSetupColumn("Type"u8);
@@ -105,7 +110,7 @@ internal class InventoryWidget : IDataWindowWidget
}
}
- private unsafe void DrawInventoryType(GameInventoryType inventoryType)
+ private void DrawInventoryType(GameInventoryType inventoryType)
{
var items = GameInventoryItem.GetReadOnlySpanOfInventory(inventoryType);
if (items.IsEmpty)
@@ -114,8 +119,9 @@ internal class InventoryWidget : IDataWindowWidget
return;
}
- using var itemTable = ImRaii.Table("InventoryItemTable"u8, 4, ImGuiTableFlags.RowBg | ImGuiTableFlags.Borders | ImGuiTableFlags.ScrollY | ImGuiTableFlags.NoSavedSettings);
+ using var itemTable = ImRaii.Table("InventoryItemTable"u8, 4, TableFlags);
if (!itemTable) return;
+
ImGui.TableSetupColumn("Slot"u8, ImGuiTableColumnFlags.WidthFixed, 40);
ImGui.TableSetupColumn("ItemId"u8, ImGuiTableColumnFlags.WidthFixed, 70);
ImGui.TableSetupColumn("Quantity"u8, ImGuiTableColumnFlags.WidthFixed, 70);
@@ -127,7 +133,7 @@ internal class InventoryWidget : IDataWindowWidget
{
var item = items[slotIndex];
- using var disableditem = ImRaii.Disabled(item.ItemId == 0);
+ using var disabledItem = ImRaii.Disabled(item.ItemId == 0);
ImGui.TableNextRow();
ImGui.TableNextColumn(); // Slot
@@ -152,11 +158,11 @@ internal class InventoryWidget : IDataWindowWidget
if (ImGui.IsItemHovered())
{
ImGui.SetMouseCursor(ImGuiMouseCursor.Hand);
- ImGui.BeginTooltip();
+
+ using var tooltip = ImRaii.Tooltip();
ImGui.Text("Click to copy IconId"u8);
ImGui.Text($"ID: {iconId} – Size: {texture.Width}x{texture.Height}");
ImGui.Image(texture.Handle, new(texture.Width, texture.Height));
- ImGui.EndTooltip();
}
if (ImGui.IsItemClicked())
@@ -167,7 +173,7 @@ internal class InventoryWidget : IDataWindowWidget
using var itemNameColor = ImRaii.PushColor(ImGuiCol.Text, this.GetItemRarityColor(item.ItemId));
using var node = ImRaii.TreeNode($"{itemName}###{inventoryType}_{slotIndex}", ImGuiTreeNodeFlags.SpanAvailWidth);
- itemNameColor.Dispose();
+ itemNameColor.Pop();
using (var contextMenu = ImRaii.ContextPopupItem($"{inventoryType}_{slotIndex}_ContextMenu"))
{
@@ -182,7 +188,7 @@ internal class InventoryWidget : IDataWindowWidget
if (!node) continue;
- using var itemInfoTable = ImRaii.Table($"{inventoryType}_{slotIndex}_Table", 2, ImGuiTableFlags.BordersInner | ImGuiTableFlags.NoSavedSettings);
+ using var itemInfoTable = ImRaii.Table($"{inventoryType}_{slotIndex}_Table", 2, InnerTableFlags);
if (!itemInfoTable) continue;
ImGui.TableSetupColumn("Name"u8, ImGuiTableColumnFlags.WidthFixed, 150);
@@ -264,7 +270,7 @@ internal class InventoryWidget : IDataWindowWidget
ImGui.Text("Stains"u8);
ImGui.TableNextColumn();
- using var stainTable = ImRaii.Table($"{inventoryType}_{slotIndex}_StainTable", 2, ImGuiTableFlags.BordersInner | ImGuiTableFlags.NoSavedSettings);
+ using var stainTable = ImRaii.Table($"{inventoryType}_{slotIndex}_StainTable", 2, InnerTableFlags);
if (!stainTable) continue;
ImGui.TableSetupColumn("Stain Id"u8, ImGuiTableColumnFlags.WidthFixed, 80);
@@ -285,7 +291,7 @@ internal class InventoryWidget : IDataWindowWidget
ImGui.Text("Materia"u8);
ImGui.TableNextColumn();
- using var materiaTable = ImRaii.Table($"{inventoryType}_{slotIndex}_MateriaTable", 2, ImGuiTableFlags.BordersInner | ImGuiTableFlags.NoSavedSettings);
+ using var materiaTable = ImRaii.Table($"{inventoryType}_{slotIndex}_MateriaTable", 2, InnerTableFlags);
if (!materiaTable) continue;
ImGui.TableSetupColumn("Materia Id"u8, ImGuiTableColumnFlags.WidthFixed, 80);
@@ -311,10 +317,12 @@ internal class InventoryWidget : IDataWindowWidget
private uint GetItemRarityColor(uint itemId, bool isEdgeColor = false)
{
- if (ItemUtil.IsEventItem(itemId))
+ var normalized = ItemUtil.GetBaseId(itemId);
+
+ if (normalized.Kind == ItemKind.EventItem)
return isEdgeColor ? 0xFF000000 : 0xFFFFFFFF;
- if (!this.dataManager.Excel.GetSheet- ().TryGetRow(ItemUtil.GetBaseId(itemId).ItemId, out var item))
+ if (!this.dataManager.Excel.GetSheet
- ().TryGetRow(normalized.ItemId, out var item))
return isEdgeColor ? 0xFF000000 : 0xFFFFFFFF;
var rowId = ItemUtil.GetItemRarityColorType(item.RowId, isEdgeColor);
@@ -325,18 +333,12 @@ internal class InventoryWidget : IDataWindowWidget
private uint GetItemIconId(uint itemId)
{
+ var normalized = ItemUtil.GetBaseId(itemId);
+
// EventItem
- if (ItemUtil.IsEventItem(itemId))
+ if (normalized.Kind == ItemKind.EventItem)
return this.dataManager.Excel.GetSheet().TryGetRow(itemId, out var eventItem) ? eventItem.Icon : 0u;
- // HighQuality
- if (ItemUtil.IsHighQuality(itemId))
- itemId -= 1_000_000;
-
- // Collectible
- if (ItemUtil.IsCollectible(itemId))
- itemId -= 500_000;
-
- return this.dataManager.Excel.GetSheet
- ().TryGetRow(itemId, out var item) ? item.Icon : 0u;
+ return this.dataManager.Excel.GetSheet
- ().TryGetRow(normalized.ItemId, out var item) ? item.Icon : 0u;
}
}
diff --git a/Dalamud/Interface/Internal/Windows/Data/Widgets/KeyStateWidget.cs b/Dalamud/Interface/Internal/Windows/Data/Widgets/KeyStateWidget.cs
index fa615ed47..472114b6d 100644
--- a/Dalamud/Interface/Internal/Windows/Data/Widgets/KeyStateWidget.cs
+++ b/Dalamud/Interface/Internal/Windows/Data/Widgets/KeyStateWidget.cs
@@ -1,6 +1,7 @@
using Dalamud.Bindings.ImGui;
using Dalamud.Game.ClientState.Keys;
using Dalamud.Interface.Colors;
+using Dalamud.Interface.Utility.Raii;
namespace Dalamud.Interface.Internal.Windows.Data.Widgets;
@@ -10,7 +11,7 @@ namespace Dalamud.Interface.Internal.Windows.Data.Widgets;
internal class KeyStateWidget : IDataWindowWidget
{
///
- public string[]? CommandShortcuts { get; init; } = { "keystate" };
+ public string[]? CommandShortcuts { get; init; } = ["keystate"];
///
public string DisplayName { get; init; } = "KeyState";
@@ -29,6 +30,7 @@ internal class KeyStateWidget : IDataWindowWidget
{
var keyState = Service.Get();
+ // TODO: Use table instead of columns
ImGui.Columns(4);
var i = 0;
@@ -37,11 +39,10 @@ internal class KeyStateWidget : IDataWindowWidget
var code = (int)vkCode;
var value = keyState[code];
- ImGui.PushStyleColor(ImGuiCol.Text, value ? ImGuiColors.HealerGreen : ImGuiColors.DPSRed);
-
- ImGui.Text($"{vkCode} ({code})");
-
- ImGui.PopStyleColor();
+ using (ImRaii.PushColor(ImGuiCol.Text, value ? ImGuiColors.HealerGreen : ImGuiColors.DPSRed))
+ {
+ ImGui.Text($"{vkCode} ({code})");
+ }
i++;
if (i % 24 == 0)
diff --git a/Dalamud/Interface/Internal/Windows/Data/Widgets/MarketBoardWidget.cs b/Dalamud/Interface/Internal/Windows/Data/Widgets/MarketBoardWidget.cs
index 56de19de7..c01b2c433 100644
--- a/Dalamud/Interface/Internal/Windows/Data/Widgets/MarketBoardWidget.cs
+++ b/Dalamud/Interface/Internal/Windows/Data/Widgets/MarketBoardWidget.cs
@@ -4,7 +4,6 @@ using System.Globalization;
using Dalamud.Bindings.ImGui;
using Dalamud.Game.MarketBoard;
using Dalamud.Game.Network.Structures;
-using Dalamud.Interface.Utility;
using Dalamud.Interface.Utility.Raii;
using ImGuiTable = Dalamud.Interface.Utility.ImGuiTable;
@@ -16,6 +15,8 @@ namespace Dalamud.Interface.Internal.Windows.Data.Widgets;
///
internal class MarketBoardWidget : IDataWindowWidget
{
+ private const ImGuiTableFlags TableFlags = ImGuiTableFlags.SizingFixedFit | ImGuiTableFlags.RowBg;
+
private readonly ConcurrentQueue<(IMarketBoardHistory MarketBoardHistory, IMarketBoardHistoryListing Listing)> marketBoardHistoryQueue = new();
private readonly ConcurrentQueue<(IMarketBoardCurrentOfferings MarketBoardCurrentOfferings, IMarketBoardItemListing Listing)> marketBoardCurrentOfferingsQueue = new();
private readonly ConcurrentQueue marketBoardPurchasesQueue = new();
@@ -44,7 +45,7 @@ internal class MarketBoardWidget : IDataWindowWidget
}
///
- public string[]? CommandShortcuts { get; init; } = { "marketboard" };
+ public string[]? CommandShortcuts { get; init; } = ["marketboard"];
///
public string DisplayName { get; init; } = "Market Board";
@@ -100,49 +101,47 @@ internal class MarketBoardWidget : IDataWindowWidget
this.marketBoardHistoryQueue.Clear();
}
- using (var tabBar = ImRaii.TabBar("marketTabs"u8))
+ using var tabBar = ImRaii.TabBar("marketTabs"u8);
+ if (!tabBar.Success)
+ return;
+
+ using (var tabItem = ImRaii.TabItem("History"u8))
{
- if (tabBar)
+ if (tabItem)
{
- using (var tabItem = ImRaii.TabItem("History"u8))
- {
- if (tabItem)
- {
- ImGuiTable.DrawTable(string.Empty, this.marketBoardHistoryQueue, this.DrawMarketBoardHistory, ImGuiTableFlags.SizingFixedFit | ImGuiTableFlags.RowBg, "Item ID", "Quantity", "Is HQ?", "Sale Price", "Buyer Name", "Purchase Time");
- }
- }
+ ImGuiTable.DrawTable("history-table", this.marketBoardHistoryQueue, this.DrawMarketBoardHistory, TableFlags, "Item ID", "Quantity", "Is HQ?", "Sale Price", "Buyer Name", "Purchase Time");
+ }
+ }
- using (var tabItem = ImRaii.TabItem("Offerings"u8))
- {
- if (tabItem)
- {
- ImGuiTable.DrawTable(string.Empty, this.marketBoardCurrentOfferingsQueue, this.DrawMarketBoardCurrentOfferings, ImGuiTableFlags.SizingFixedFit | ImGuiTableFlags.RowBg, "Item ID", "Quantity", "Is HQ?", "Price Per Unit", "Retainer Name");
- }
- }
+ using (var tabItem = ImRaii.TabItem("Offerings"u8))
+ {
+ if (tabItem)
+ {
+ ImGuiTable.DrawTable("offerings-table", this.marketBoardCurrentOfferingsQueue, this.DrawMarketBoardCurrentOfferings, TableFlags, "Item ID", "Quantity", "Is HQ?", "Price Per Unit", "Retainer Name");
+ }
+ }
- using (var tabItem = ImRaii.TabItem("Purchases"u8))
- {
- if (tabItem)
- {
- ImGuiTable.DrawTable(string.Empty, this.marketBoardPurchasesQueue, this.DrawMarketBoardPurchases, ImGuiTableFlags.SizingFixedFit | ImGuiTableFlags.RowBg, "Item ID", "Quantity");
- }
- }
+ using (var tabItem = ImRaii.TabItem("Purchases"u8))
+ {
+ if (tabItem)
+ {
+ ImGuiTable.DrawTable("purchases-table", this.marketBoardPurchasesQueue, this.DrawMarketBoardPurchases, TableFlags, "Item ID", "Quantity");
+ }
+ }
- using (var tabItem = ImRaii.TabItem("Purchase Requests"u8))
- {
- if (tabItem)
- {
- ImGuiTable.DrawTable(string.Empty, this.marketBoardPurchaseRequestsQueue, this.DrawMarketBoardPurchaseRequests, ImGuiTableFlags.SizingFixedFit | ImGuiTableFlags.RowBg, "Item ID", "Is HQ?", "Quantity", "Price Per Unit", "Total Tax", "City ID", "Listing ID", "Retainer ID");
- }
- }
+ using (var tabItem = ImRaii.TabItem("Purchase Requests"u8))
+ {
+ if (tabItem)
+ {
+ ImGuiTable.DrawTable("requests-table", this.marketBoardPurchaseRequestsQueue, this.DrawMarketBoardPurchaseRequests, TableFlags, "Item ID", "Is HQ?", "Quantity", "Price Per Unit", "Total Tax", "City ID", "Listing ID", "Retainer ID");
+ }
+ }
- using (var tabItem = ImRaii.TabItem("Taxes"u8))
- {
- if (tabItem)
- {
- ImGuiTable.DrawTable(string.Empty, this.marketTaxRatesQueue, this.DrawMarketTaxRates, ImGuiTableFlags.SizingFixedFit | ImGuiTableFlags.RowBg, "Uldah", "Limsa Lominsa", "Gridania", "Ishgard", "Kugane", "Crystarium", "Sharlayan", "Tuliyollal", "Valid Until");
- }
- }
+ using (var tabItem = ImRaii.TabItem("Taxes"u8))
+ {
+ if (tabItem)
+ {
+ ImGuiTable.DrawTable("taxes-table", this.marketTaxRatesQueue, this.DrawMarketTaxRates, TableFlags, "Uldah", "Limsa Lominsa", "Gridania", "Ishgard", "Kugane", "Crystarium", "Sharlayan", "Tuliyollal", "Valid Until");
}
}
}
diff --git a/Dalamud/Interface/Internal/Windows/Data/Widgets/NetworkMonitorWidget.cs b/Dalamud/Interface/Internal/Windows/Data/Widgets/NetworkMonitorWidget.cs
index 4a32a16df..ae173578a 100644
--- a/Dalamud/Interface/Internal/Windows/Data/Widgets/NetworkMonitorWidget.cs
+++ b/Dalamud/Interface/Internal/Windows/Data/Widgets/NetworkMonitorWidget.cs
@@ -42,7 +42,7 @@ internal class NetworkMonitorWidget : IDataWindowWidget
}
///
- public string[]? CommandShortcuts { get; init; } = { "network", "netmon", "networkmonitor" };
+ public string[]? CommandShortcuts { get; init; } = ["network", "netmon", "networkmonitor"];
///
public string DisplayName { get; init; } = "Network Monitor";
@@ -209,7 +209,7 @@ internal class NetworkMonitorWidget : IDataWindowWidget
private readonly record struct NetworkPacketData(ushort OpCode, NetworkMessageDirection Direction, uint SourceActorId, uint TargetActorId)
#pragma warning restore SA1313
{
- public readonly IReadOnlyList Data = Array.Empty();
+ public readonly IReadOnlyList Data = [];
public NetworkPacketData(NetworkMonitorWidget widget, ushort opCode, NetworkMessageDirection direction, uint sourceActorId, uint targetActorId, nint dataPtr)
: this(opCode, direction, sourceActorId, targetActorId)
diff --git a/Dalamud/Interface/Internal/Windows/Data/Widgets/NounProcessorWidget.cs b/Dalamud/Interface/Internal/Windows/Data/Widgets/NounProcessorWidget.cs
index cbf5c3355..1602e2665 100644
--- a/Dalamud/Interface/Internal/Windows/Data/Widgets/NounProcessorWidget.cs
+++ b/Dalamud/Interface/Internal/Windows/Data/Widgets/NounProcessorWidget.cs
@@ -54,13 +54,13 @@ internal class NounProcessorWidget : IDataWindowWidget
private ClientLanguage[] languages = [];
private string[] languageNames = [];
- private int selectedSheetNameIndex = 0;
- private int selectedLanguageIndex = 0;
+ private int selectedSheetNameIndex;
+ private int selectedLanguageIndex;
private int rowId = 1;
private int amount = 1;
///
- public string[]? CommandShortcuts { get; init; } = { "noun" };
+ public string[]? CommandShortcuts { get; init; } = ["noun"];
///
public string DisplayName { get; init; } = "Noun Processor";
@@ -83,7 +83,6 @@ internal class NounProcessorWidget : IDataWindowWidget
{
var nounProcessor = Service.Get();
var dataManager = Service.Get();
- var clientState = Service.Get();
var sheetType = NounSheets.ElementAt(this.selectedSheetNameIndex);
var language = this.languages[this.selectedLanguageIndex];
diff --git a/Dalamud/Interface/Internal/Windows/Data/Widgets/ObjectTableWidget.cs b/Dalamud/Interface/Internal/Windows/Data/Widgets/ObjectTableWidget.cs
index 71fb18352..6a6c0f8be 100644
--- a/Dalamud/Interface/Internal/Windows/Data/Widgets/ObjectTableWidget.cs
+++ b/Dalamud/Interface/Internal/Windows/Data/Widgets/ObjectTableWidget.cs
@@ -14,12 +14,17 @@ namespace Dalamud.Interface.Internal.Windows.Data.Widgets;
///
internal class ObjectTableWidget : IDataWindowWidget
{
+ private const ImGuiWindowFlags CharacterWindowFlags = ImGuiWindowFlags.NoDecoration | ImGuiWindowFlags.AlwaysAutoResize |
+ ImGuiWindowFlags.NoSavedSettings | ImGuiWindowFlags.NoMove |
+ ImGuiWindowFlags.NoMouseInputs | ImGuiWindowFlags.NoDocking |
+ ImGuiWindowFlags.NoFocusOnAppearing | ImGuiWindowFlags.NoNav;
+
private bool resolveGameData;
private bool drawCharacters;
private float maxCharaDrawDistance = 20.0f;
///
- public string[]? CommandShortcuts { get; init; } = { "ot", "objecttable" };
+ public string[]? CommandShortcuts { get; init; } = ["ot", "objecttable"];
///
public string DisplayName { get; init; } = "Object Table";
@@ -49,74 +54,66 @@ internal class ObjectTableWidget : IDataWindowWidget
if (objectTable.LocalPlayer == null)
{
ImGui.Text("LocalPlayer null."u8);
+ return;
}
- else if (clientState.IsPvPExcludingDen)
+
+ if (clientState.IsPvPExcludingDen)
{
ImGui.Text("Cannot access object table while in PvP."u8);
+ return;
}
- else
+
+ stateString += $"ObjectTableLen: {objectTable.Length}\n";
+ stateString += $"LocalPlayerName: {playerState.CharacterName}\n";
+ stateString += $"CurrentWorldName: {(this.resolveGameData ? playerState.CurrentWorld.ValueNullable?.Name : playerState.CurrentWorld.RowId.ToString())}\n";
+ stateString += $"HomeWorldName: {(this.resolveGameData ? playerState.HomeWorld.ValueNullable?.Name : playerState.HomeWorld.RowId.ToString())}\n";
+ stateString += $"LocalCID: {playerState.ContentId:X}\n";
+ stateString += $"LastLinkedItem: {chatGui.LastLinkedItemId}\n";
+ stateString += $"TerritoryType: {clientState.TerritoryType}\n\n";
+
+ ImGui.Text(stateString);
+
+ ImGui.Checkbox("Draw characters on screen"u8, ref this.drawCharacters);
+ ImGui.SliderFloat("Draw Distance"u8, ref this.maxCharaDrawDistance, 2f, 40f);
+
+ for (var i = 0; i < objectTable.Length; i++)
{
- stateString += $"ObjectTableLen: {objectTable.Length}\n";
- stateString += $"LocalPlayerName: {playerState.CharacterName}\n";
- stateString += $"CurrentWorldName: {(this.resolveGameData ? playerState.CurrentWorld.ValueNullable?.Name : playerState.CurrentWorld.RowId.ToString())}\n";
- stateString += $"HomeWorldName: {(this.resolveGameData ? playerState.HomeWorld.ValueNullable?.Name : playerState.HomeWorld.RowId.ToString())}\n";
- stateString += $"LocalCID: {playerState.ContentId:X}\n";
- stateString += $"LastLinkedItem: {chatGui.LastLinkedItemId}\n";
- stateString += $"TerritoryType: {clientState.TerritoryType}\n\n";
+ var obj = objectTable[i];
- ImGui.Text(stateString);
+ if (obj == null)
+ continue;
- ImGui.Checkbox("Draw characters on screen"u8, ref this.drawCharacters);
- ImGui.SliderFloat("Draw Distance"u8, ref this.maxCharaDrawDistance, 2f, 40f);
+ Util.PrintGameObject(obj, i.ToString(), this.resolveGameData);
- for (var i = 0; i < objectTable.Length; i++)
+ if (this.drawCharacters && gameGui.WorldToScreen(obj.Position, out var screenCoords))
{
- var obj = objectTable[i];
+ // So, while WorldToScreen will return false if the point is off of game client screen, to
+ // to avoid performance issues, we have to manually determine if creating a window would
+ // produce a new viewport, and skip rendering it if so
+ var objectText = $"{obj.Address:X}:{obj.GameObjectId:X}[{i}] - {obj.ObjectKind} - {obj.Name}";
- if (obj == null)
+ var screenPos = ImGui.GetMainViewport().Pos;
+ var screenSize = ImGui.GetMainViewport().Size;
+
+ var windowSize = ImGui.CalcTextSize(objectText);
+
+ // Add some extra safety padding
+ windowSize.X += ImGui.GetStyle().WindowPadding.X + 10;
+ windowSize.Y += ImGui.GetStyle().WindowPadding.Y + 10;
+
+ if (screenCoords.X + windowSize.X > screenPos.X + screenSize.X ||
+ screenCoords.Y + windowSize.Y > screenPos.Y + screenSize.Y)
continue;
- Util.PrintGameObject(obj, i.ToString(), this.resolveGameData);
+ if (obj.YalmDistanceX > this.maxCharaDrawDistance)
+ continue;
- if (this.drawCharacters && gameGui.WorldToScreen(obj.Position, out var screenCoords))
- {
- // So, while WorldToScreen will return false if the point is off of game client screen, to
- // to avoid performance issues, we have to manually determine if creating a window would
- // produce a new viewport, and skip rendering it if so
- var objectText = $"{obj.Address.ToInt64():X}:{obj.GameObjectId:X}[{i}] - {obj.ObjectKind} - {obj.Name}";
+ ImGui.SetNextWindowPos(new Vector2(screenCoords.X, screenCoords.Y));
+ ImGui.SetNextWindowBgAlpha(Math.Max(1f - (obj.YalmDistanceX / this.maxCharaDrawDistance), 0.2f));
- var screenPos = ImGui.GetMainViewport().Pos;
- var screenSize = ImGui.GetMainViewport().Size;
-
- var windowSize = ImGui.CalcTextSize(objectText);
-
- // Add some extra safety padding
- windowSize.X += ImGui.GetStyle().WindowPadding.X + 10;
- windowSize.Y += ImGui.GetStyle().WindowPadding.Y + 10;
-
- if (screenCoords.X + windowSize.X > screenPos.X + screenSize.X ||
- screenCoords.Y + windowSize.Y > screenPos.Y + screenSize.Y)
- continue;
-
- if (obj.YalmDistanceX > this.maxCharaDrawDistance)
- continue;
-
- ImGui.SetNextWindowPos(new Vector2(screenCoords.X, screenCoords.Y));
-
- ImGui.SetNextWindowBgAlpha(Math.Max(1f - (obj.YalmDistanceX / this.maxCharaDrawDistance), 0.2f));
- if (ImGui.Begin(
- $"Actor{i}##ActorWindow{i}",
- ImGuiWindowFlags.NoDecoration |
- ImGuiWindowFlags.AlwaysAutoResize |
- ImGuiWindowFlags.NoSavedSettings |
- ImGuiWindowFlags.NoMove |
- ImGuiWindowFlags.NoMouseInputs |
- ImGuiWindowFlags.NoDocking |
- ImGuiWindowFlags.NoFocusOnAppearing |
- ImGuiWindowFlags.NoNav))
- ImGui.Text(objectText);
- ImGui.End();
- }
+ if (ImGui.Begin($"Actor{i}##ActorWindow{i}", CharacterWindowFlags))
+ ImGui.Text(objectText);
+ ImGui.End();
}
}
}
diff --git a/Dalamud/Interface/Internal/Windows/Data/Widgets/PartyListWidget.cs b/Dalamud/Interface/Internal/Windows/Data/Widgets/PartyListWidget.cs
index e43b231be..d0856ecf6 100644
--- a/Dalamud/Interface/Internal/Windows/Data/Widgets/PartyListWidget.cs
+++ b/Dalamud/Interface/Internal/Windows/Data/Widgets/PartyListWidget.cs
@@ -12,7 +12,7 @@ internal class PartyListWidget : IDataWindowWidget
private bool resolveGameData;
///
- public string[]? CommandShortcuts { get; init; } = { "partylist", "party" };
+ public string[]? CommandShortcuts { get; init; } = ["partylist", "party"];
///
public string DisplayName { get; init; } = "Party List";
@@ -33,9 +33,9 @@ internal class PartyListWidget : IDataWindowWidget
ImGui.Checkbox("Resolve GameData"u8, ref this.resolveGameData);
- ImGui.Text($"GroupManager: {partyList.GroupManagerAddress.ToInt64():X}");
- ImGui.Text($"GroupList: {partyList.GroupListAddress.ToInt64():X}");
- ImGui.Text($"AllianceList: {partyList.AllianceListAddress.ToInt64():X}");
+ ImGui.Text($"GroupManager: {partyList.GroupManagerAddress:X}");
+ ImGui.Text($"GroupList: {partyList.GroupListAddress:X}");
+ ImGui.Text($"AllianceList: {partyList.AllianceListAddress:X}");
ImGui.Text($"{partyList.Length} Members");
@@ -48,7 +48,7 @@ internal class PartyListWidget : IDataWindowWidget
continue;
}
- ImGui.Text($"[{i}] {member.Address.ToInt64():X} - {member.Name} - {member.GameObject?.GameObjectId}");
+ ImGui.Text($"[{i}] {member.Address:X} - {member.Name} - {member.GameObject?.GameObjectId ?? 0}");
if (this.resolveGameData)
{
var actor = member.GameObject;
diff --git a/Dalamud/Interface/Internal/Windows/Data/Widgets/PluginIpcWidget.cs b/Dalamud/Interface/Internal/Windows/Data/Widgets/PluginIpcWidget.cs
index 1f1f82cdd..72a02b219 100644
--- a/Dalamud/Interface/Internal/Windows/Data/Widgets/PluginIpcWidget.cs
+++ b/Dalamud/Interface/Internal/Windows/Data/Widgets/PluginIpcWidget.cs
@@ -25,7 +25,7 @@ internal class PluginIpcWidget : IDataWindowWidget
private string callGateResponse = string.Empty;
///
- public string[]? CommandShortcuts { get; init; } = { "ipc" };
+ public string[]? CommandShortcuts { get; init; } = ["ipc"];
///
public string DisplayName { get; init; } = "Plugin IPC";
diff --git a/Dalamud/Interface/Internal/Windows/Data/Widgets/SeFontTestWidget.cs b/Dalamud/Interface/Internal/Windows/Data/Widgets/SeFontTestWidget.cs
index 17b7959f6..5aa09f859 100644
--- a/Dalamud/Interface/Internal/Windows/Data/Widgets/SeFontTestWidget.cs
+++ b/Dalamud/Interface/Internal/Windows/Data/Widgets/SeFontTestWidget.cs
@@ -11,7 +11,7 @@ namespace Dalamud.Interface.Internal.Windows.Data.Widgets;
internal class SeFontTestWidget : IDataWindowWidget
{
///
- public string[]? CommandShortcuts { get; init; } = { "sefont", "sefonttest" };
+ public string[]? CommandShortcuts { get; init; } = ["sefont", "sefonttest"];
///
public string DisplayName { get; init; } = "SeFont Test";
diff --git a/Dalamud/Interface/Internal/Windows/Data/Widgets/SeStringCreatorWidget.cs b/Dalamud/Interface/Internal/Windows/Data/Widgets/SeStringCreatorWidget.cs
index d43d3b7b2..a11bc3719 100644
--- a/Dalamud/Interface/Internal/Windows/Data/Widgets/SeStringCreatorWidget.cs
+++ b/Dalamud/Interface/Internal/Windows/Data/Widgets/SeStringCreatorWidget.cs
@@ -38,6 +38,11 @@ internal class SeStringCreatorWidget : IDataWindowWidget
{
private const LinkMacroPayloadType DalamudLinkType = (LinkMacroPayloadType)Payload.EmbeddedInfoType.DalamudLink - 1;
+ private const ImGuiTableFlags TableFlags = ImGuiTableFlags.Borders | ImGuiTableFlags.RowBg |
+ ImGuiTableFlags.ScrollY | ImGuiTableFlags.NoSavedSettings;
+
+ private static readonly string[] TextEntryTypeOptions = ["String", "Macro", "Fixed"];
+
private readonly Dictionary expressionNames = new()
{
{ MacroCode.SetResetTime, ["Hour", "WeekDay"] },
@@ -191,7 +196,7 @@ internal class SeStringCreatorWidget : IDataWindowWidget
if (contentWidth != this.lastContentWidth)
{
var originalWidth = this.lastContentWidth != 0 ? this.lastContentWidth : contentWidth;
- this.inputsWidth = this.inputsWidth / originalWidth * contentWidth;
+ this.inputsWidth = (this.inputsWidth / originalWidth) * contentWidth;
this.lastContentWidth = contentWidth;
}
@@ -258,7 +263,7 @@ internal class SeStringCreatorWidget : IDataWindowWidget
using var tab = ImRaii.TabItem("Global Parameters"u8);
if (!tab) return;
- using var table = ImRaii.Table("GlobalParametersTable"u8, 5, ImGuiTableFlags.Borders | ImGuiTableFlags.RowBg | ImGuiTableFlags.ScrollY | ImGuiTableFlags.NoSavedSettings);
+ using var table = ImRaii.Table("GlobalParametersTable"u8, 5, TableFlags);
if (!table) return;
ImGui.TableSetupColumn("Id"u8, ImGuiTableColumnFlags.WidthFixed, 40);
@@ -541,18 +546,16 @@ internal class SeStringCreatorWidget : IDataWindowWidget
ImGui.SameLine();
ImGui.SetNextItemWidth(90 * ImGuiHelpers.GlobalScale);
- using (var dropdown = ImRaii.Combo("##Language"u8, this.language.ToString() ?? "Language..."))
+ using var dropdown = ImRaii.Combo("##Language"u8, this.language.ToString() ?? "Language...");
+ if (dropdown)
{
- if (dropdown)
+ var values = Enum.GetValues().OrderBy(lang => lang.ToString());
+ foreach (var value in values)
{
- var values = Enum.GetValues().OrderBy((ClientLanguage lang) => lang.ToString());
- foreach (var value in values)
+ if (ImGui.Selectable(Enum.GetName(value), value == this.language))
{
- if (ImGui.Selectable(Enum.GetName(value), value == this.language))
- {
- this.language = value;
- this.UpdateInputString();
- }
+ this.language = value;
+ this.UpdateInputString();
}
}
}
@@ -572,7 +575,7 @@ internal class SeStringCreatorWidget : IDataWindowWidget
try
{
var headerFile = dataManager.GameData.GetFile($"exd/{sheetName}.exh");
- if (headerFile.Header.Variant != ExcelVariant.Default)
+ if (headerFile == null || headerFile.Header.Variant != ExcelVariant.Default)
return false;
var sheet = dataManager.Excel.GetSheet(Language.English, sheetName);
@@ -668,11 +671,10 @@ internal class SeStringCreatorWidget : IDataWindowWidget
catch (Exception e)
{
ImGui.Text(e.Message);
- return;
}
}
- private unsafe void DrawInputs()
+ private void DrawInputs()
{
using var child = ImRaii.Child("Inputs"u8, new Vector2(this.inputsWidth, -1));
if (!child) return;
@@ -688,8 +690,6 @@ internal class SeStringCreatorWidget : IDataWindowWidget
var arrowUpButtonSize = this.GetIconButtonSize(FontAwesomeIcon.ArrowUp);
var arrowDownButtonSize = this.GetIconButtonSize(FontAwesomeIcon.ArrowDown);
- var trashButtonSize = this.GetIconButtonSize(FontAwesomeIcon.Trash);
- var terminalButtonSize = this.GetIconButtonSize(FontAwesomeIcon.Terminal);
var entryToRemove = -1;
var entryToMoveUp = -1;
@@ -706,7 +706,7 @@ internal class SeStringCreatorWidget : IDataWindowWidget
ImGui.TableNextColumn(); // Type
var type = (int)entry.Type;
ImGui.SetNextItemWidth(-1);
- if (ImGui.Combo($"##Type{i}", ref type, ["String", "Macro", "Fixed"]))
+ if (ImGui.Combo($"##Type{i}", ref type, TextEntryTypeOptions))
{
entry.Type = (TextEntryType)type;
updateString |= true;
@@ -798,7 +798,7 @@ internal class SeStringCreatorWidget : IDataWindowWidget
}
}
- private unsafe void UpdateInputString(bool resetLocalParameters = true)
+ private void UpdateInputString(bool resetLocalParameters = true)
{
using var rssb = new RentedSeStringBuilder();
@@ -1022,14 +1022,14 @@ internal class SeStringCreatorWidget : IDataWindowWidget
if (macroCode is MacroCode.JaNoun or MacroCode.EnNoun or MacroCode.DeNoun or MacroCode.FrNoun && exprIdx == 1)
{
- var language = macroCode switch
+ var macroLanguage = macroCode switch
{
MacroCode.JaNoun => ClientLanguage.Japanese,
MacroCode.DeNoun => ClientLanguage.German,
MacroCode.FrNoun => ClientLanguage.French,
_ => ClientLanguage.English,
};
- var articleTypeEnumType = language switch
+ var articleTypeEnumType = macroLanguage switch
{
ClientLanguage.Japanese => typeof(JapaneseArticleType),
ClientLanguage.German => typeof(GermanArticleType),
@@ -1208,12 +1208,10 @@ internal class SeStringCreatorWidget : IDataWindowWidget
if (expressionType == (int)ExpressionType.LocalNumber)
{
parameters[index] = new SeStringParameter(0);
- return;
}
else if (expressionType == (int)ExpressionType.LocalString)
{
parameters[index] = new SeStringParameter(string.Empty);
- return;
}
}
}
diff --git a/Dalamud/Interface/Internal/Windows/Data/Widgets/ServicesWidget.cs b/Dalamud/Interface/Internal/Windows/Data/Widgets/ServicesWidget.cs
index 78ea6d233..d5338961d 100644
--- a/Dalamud/Interface/Internal/Windows/Data/Widgets/ServicesWidget.cs
+++ b/Dalamud/Interface/Internal/Windows/Data/Widgets/ServicesWidget.cs
@@ -17,14 +17,13 @@ namespace Dalamud.Interface.Internal.Windows.Data.Widgets;
internal class ServicesWidget : IDataWindowWidget
{
private readonly Dictionary nodeRects = new();
- private readonly HashSet selectedNodes = new();
- private readonly HashSet tempRelatedNodes = new();
+ private readonly HashSet selectedNodes = [];
private bool includeUnloadDependencies;
private List
>? dependencyNodes;
///
- public string[]? CommandShortcuts { get; init; } = { "services" };
+ public string[]? CommandShortcuts { get; init; } = ["services"];
///
public string DisplayName { get; init; } = "Service Container";
@@ -66,11 +65,10 @@ internal class ServicesWidget : IDataWindowWidget
var margin = ImGui.CalcTextSize("W\nW\nW"u8);
var rowHeight = cellPad.Y * 3;
var width = ImGui.GetContentRegionAvail().X;
- if (ImGui.BeginChild(
- "dependency-graph"u8,
- new(width, (this.dependencyNodes.Count * (rowHeight + margin.Y)) + cellPad.Y),
- false,
- ImGuiWindowFlags.HorizontalScrollbar))
+ var childSize = new Vector2(width, (this.dependencyNodes.Count * (rowHeight + margin.Y)) + cellPad.Y);
+
+ using var child = ImRaii.Child("dependency-graph"u8, childSize, false, ImGuiWindowFlags.HorizontalScrollbar);
+ if (child.Success)
{
const uint rectBaseBorderColor = 0xFFFFFFFF;
const uint rectHoverFillColor = 0xFF404040;
@@ -118,10 +116,8 @@ internal class ServicesWidget : IDataWindowWidget
hoveredNode = node;
if (ImGui.IsMouseClicked(ImGuiMouseButton.Left))
{
- if (this.selectedNodes.Contains(node.Type))
+ if (!this.selectedNodes.Add(node.Type))
this.selectedNodes.Remove(node.Type);
- else
- this.selectedNodes.Add(node.Type);
}
}
@@ -195,13 +191,11 @@ internal class ServicesWidget : IDataWindowWidget
ImGui.SetTooltip(node.BlockingReason);
ImGui.SetCursorPos((new Vector2(rc.X, rc.Y) - pos) + ((cellSize - textSize) / 2));
- ImGui.PushStyleVar(ImGuiStyleVar.ItemSpacing, Vector2.Zero);
+ using var pushedStyle = ImRaii.PushStyle(ImGuiStyleVar.ItemSpacing, Vector2.Zero);
ImGui.Text(node.DisplayedName);
ImGui.SameLine();
- ImGui.PushStyleColor(ImGuiCol.Text, node.TypeSuffixColor);
+ using var pushedColor = ImRaii.PushColor(ImGuiCol.Text, node.TypeSuffixColor);
ImGui.Text(node.TypeSuffix);
- ImGui.PopStyleVar();
- ImGui.PopStyleColor();
}
}
@@ -233,7 +227,6 @@ internal class ServicesWidget : IDataWindowWidget
ImGui.SetCursorPos(default);
ImGui.Dummy(new(maxRowWidth, this.dependencyNodes.Count * rowHeight));
- ImGui.EndChild();
}
}
@@ -280,9 +273,9 @@ internal class ServicesWidget : IDataWindowWidget
private class ServiceDependencyNode
{
- private readonly List parents = new();
- private readonly List children = new();
- private readonly List invalidParents = new();
+ private readonly List parents = [];
+ private readonly List children = [];
+ private readonly List invalidParents = [];
private ServiceDependencyNode(Type t)
{