Files
HSMappy/Mappy/Classes/SelectionWindowComponents/DrawableOption.cs
T
2026-02-26 03:54:51 -05:00

97 lines
3.2 KiB
C#

using System.Drawing;
using System.Linq;
using System.Numerics;
using Dalamud.Bindings.ImGui;
using Dalamud.Interface;
using Dalamud.Interface.Utility;
using Dalamud.Interface.Utility.Raii;
using Dalamud.Utility;
using Lumina.Excel.Sheets;
namespace Mappy.Classes.SelectionWindowComponents;
public abstract class DrawableOption
{
protected virtual string[] GetAdditionalFilterStrings() => [];
public virtual Map Map { get; set; }
protected static float Width => 133.5f * ImGuiHelpers.GlobalScale;
protected static float Height => 75.0f * ImGuiHelpers.GlobalScale;
protected abstract void DrawIcon();
public virtual string ExtraLineLong => string.Empty;
public virtual string ExtraLineShort => string.Empty;
public virtual Vector2? MarkerLocation => null;
public virtual string GetElementKey() => $"{Map.RowId}{MarkerLocation}{ExtraLineShort}{ExtraLineLong}";
public string[] GetFilterStrings()
{
if (Map.RowId is 0) return [];
var baseStrings = new[]
{
Map.PlaceNameRegion.ValueNullable?.Name.ExtractText() ?? string.Empty, Map.PlaceName.ValueNullable?.Name.ExtractText() ?? string.Empty,
Map.PlaceNameSub.ValueNullable?.Name.ExtractText() ?? string.Empty, Map.TerritoryType.ValueNullable?.Name.ExtractText() ?? string.Empty, Map.Id.ExtractText(),
};
return baseStrings.Concat(GetAdditionalFilterStrings()).ToArray();
}
public void Draw()
{
using var id = ImRaii.PushId(Map.RowId.ToString());
DrawIcon();
ImGui.SameLine();
using var contentsFrame = ImRaii.Child($"contents_frame#{GetElementKey()}", new Vector2(ImGui.GetContentRegionAvail().X, Height), false, ImGuiWindowFlags.NoInputs);
if (!contentsFrame) return;
ImGuiHelpers.ScaledDummy(1.0f);
using var table = ImRaii.Table("data_table", 2, ImGuiTableFlags.SizingStretchProp);
if (!table) return;
ImGui.TableSetupColumn("##column1", ImGuiTableColumnFlags.None, 2.0f);
ImGui.TableSetupColumn("##column2", ImGuiTableColumnFlags.None, 1.0f);
var placeName = Map.PlaceName.ValueNullable?.Name.ExtractText() ?? string.Empty;
var zoneName = Map.PlaceNameSub.ValueNullable?.Name.ExtractText() ?? string.Empty;
var regionName = Map.PlaceNameRegion.ValueNullable?.Name.ExtractText() ?? string.Empty;
ImGui.TableNextColumn();
ImGui.TextUnformatted(placeName);
ImGui.TableNextColumn();
ImGui.TextUnformatted(Map.RowId.ToString());
ImGui.TableNextRow();
ImGui.TableNextColumn();
using var grayColor = ImRaii.PushColor(ImGuiCol.Text, KnownColor.DarkGray.Vector());
if (!zoneName.IsNullOrEmpty() && !regionName.IsNullOrEmpty()) {
ImGui.TextUnformatted($"{regionName}, {zoneName}");
}
else if (!zoneName.IsNullOrEmpty()) {
ImGui.TextUnformatted($"{zoneName}");
}
else if (!regionName.IsNullOrEmpty()) {
ImGui.TextUnformatted($"{regionName}");
}
ImGui.TableNextColumn();
ImGui.TextUnformatted($"{Map.Id}");
ImGui.TableNextColumn();
ImGui.TextUnformatted(ExtraLineLong);
ImGui.TableNextColumn();
ImGui.TextUnformatted(ExtraLineShort);
}
}