9659f7a7d1
Made-with: Cursor
97 lines
3.2 KiB
C#
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);
|
|
}
|
|
} |