Rework API, use Collection ID in crash handler, use collection GUIDs in more places.

This commit is contained in:
Ottermandias 2024-04-12 12:33:57 +02:00
parent 793ed4f0a7
commit ba8999914f
88 changed files with 4193 additions and 3930 deletions

View file

@ -2,11 +2,13 @@ using Dalamud.Game.ClientState.Objects;
using Dalamud.Interface;
using Dalamud.Interface.Components;
using Dalamud.Interface.GameFonts;
using Dalamud.Interface.Internal.Notifications;
using Dalamud.Interface.ManagedFontAtlas;
using Dalamud.Interface.Utility;
using Dalamud.Plugin;
using ImGuiNET;
using OtterGui;
using OtterGui.Classes;
using OtterGui.Raii;
using Penumbra.Collections;
using Penumbra.Collections.Manager;
@ -28,8 +30,8 @@ public sealed class CollectionPanel : IDisposable
private readonly IndividualAssignmentUi _individualAssignmentUi;
private readonly InheritanceUi _inheritanceUi;
private readonly ModStorage _mods;
private readonly IFontHandle _nameFont;
private readonly FilenameService _fileNames;
private readonly IFontHandle _nameFont;
private static readonly IReadOnlyDictionary<CollectionType, (string Name, uint Border)> Buttons = CreateButtons();
private static readonly IReadOnlyList<(CollectionType, bool, bool, string, uint)> AdvancedTree = CreateTree();
@ -38,7 +40,7 @@ public sealed class CollectionPanel : IDisposable
private int _draggedIndividualAssignment = -1;
public CollectionPanel(DalamudPluginInterface pi, CommunicatorService communicator, CollectionManager manager,
CollectionSelector selector, ActorManager actors, ITargetManager targets, ModStorage mods)
CollectionSelector selector, ActorManager actors, ITargetManager targets, ModStorage mods, FilenameService fileNames)
{
_collections = manager.Storage;
_active = manager.Active;
@ -46,6 +48,7 @@ public sealed class CollectionPanel : IDisposable
_actors = actors;
_targets = targets;
_mods = mods;
_fileNames = fileNames;
_individualAssignmentUi = new IndividualAssignmentUi(communicator, actors, manager);
_inheritanceUi = new InheritanceUi(manager, _selector);
_nameFont = pi.UiBuilder.FontAtlas.NewGameFontHandle(new GameFontStyle(GameFontFamilyAndSize.Jupiter23));
@ -206,12 +209,57 @@ public sealed class CollectionPanel : IDisposable
var collection = _active.Current;
DrawCollectionName(collection);
DrawStatistics(collection);
DrawCollectionData(collection);
_inheritanceUi.Draw();
ImGui.Separator();
DrawInactiveSettingsList(collection);
DrawSettingsList(collection);
}
private void DrawCollectionData(ModCollection collection)
{
ImGui.Dummy(Vector2.Zero);
ImGui.BeginGroup();
ImGui.AlignTextToFramePadding();
ImGui.TextUnformatted("Name");
ImGui.AlignTextToFramePadding();
ImGui.TextUnformatted("Identifier");
ImGui.EndGroup();
ImGui.SameLine();
ImGui.BeginGroup();
using var style = ImRaii.PushStyle(ImGuiStyleVar.ButtonTextAlign, new Vector2(0, 0.5f));
var name = collection.Name;
var identifier = collection.Identifier;
var width = ImGui.GetContentRegionAvail().X;
var fileName = _fileNames.CollectionFile(collection);
ImGui.SetNextItemWidth(width);
ImGui.InputText("##name", ref name, 128);
using (ImRaii.PushFont(UiBuilder.MonoFont))
{
if (ImGui.Button(collection.Identifier, new Vector2(width, 0)))
try
{
Process.Start(new ProcessStartInfo(fileName) { UseShellExecute = true });
}
catch (Exception ex)
{
Penumbra.Messager.NotificationMessage(ex, $"Could not open file {fileName}.", $"Could not open file {fileName}",
NotificationType.Warning);
}
}
if (ImGui.IsItemClicked(ImGuiMouseButton.Right))
ImGui.SetClipboardText(identifier);
ImGuiUtil.HoverTooltip(
$"Open the file\n\t{fileName}\ncontaining this design in the .json-editor of your choice.\n\nRight-Click to copy identifier to clipboard.");
ImGui.EndGroup();
ImGui.Dummy(Vector2.Zero);
ImGui.Separator();
ImGui.Dummy(Vector2.Zero);
}
private void DrawContext(bool open, ModCollection? collection, CollectionType type, ActorIdentifier identifier, string text, char suffix)
{
var label = $"{type}{text}{suffix}";