qstbak/Questionable/Questionable.Windows/PriorityWindow.cs
2025-10-09 07:53:51 +10:00

100 lines
2.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Numerics;
using System.Text;
using Dalamud.Bindings.ImGui;
using Dalamud.Interface.Utility.Raii;
using Dalamud.Interface.Windowing;
using Dalamud.Plugin;
using Dalamud.Plugin.Services;
using LLib.ImGui;
using Questionable.Controller;
using Questionable.Functions;
using Questionable.Model.Questing;
using Questionable.Windows.QuestComponents;
using Questionable.Windows.Utils;
namespace Questionable.Windows;
internal sealed class PriorityWindow : LWindow
{
public const string ClipboardPrefix = "qst:priority:";
public const string LegacyClipboardPrefix = "qst:v1:";
public const char ClipboardSeparator = ';';
private readonly ManualPriorityComponent _manualPriorityComponent;
private readonly PresetBuilderComponent _presetBuilderComponent;
public PriorityWindow(QuestController questController, QuestFunctions questFunctions, QuestSelector questSelector, QuestTooltipComponent questTooltipComponent, PresetBuilderComponent presetBuilderComponent, UiUtils uiUtils, IChatGui chatGui, IDalamudPluginInterface pluginInterface)
: base("Quest Priority###QuestionableQuestPriority")
{
_manualPriorityComponent = new ManualPriorityComponent(questController, questFunctions, questSelector, questTooltipComponent, uiUtils, chatGui, pluginInterface);
_presetBuilderComponent = presetBuilderComponent;
base.Size = new Vector2(500f, 500f);
base.SizeCondition = ImGuiCond.Once;
base.SizeConstraints = new WindowSizeConstraints
{
MinimumSize = new Vector2(615f, 500f),
MaximumSize = new Vector2(800f, 1000f)
};
}
public override void DrawContent()
{
using ImRaii.IEndObject endObject = ImRaii.TabBar("PriorityTabs");
if (!endObject)
{
return;
}
using (ImRaii.IEndObject endObject2 = ImRaii.TabItem("Manual Priority"))
{
if (endObject2)
{
_manualPriorityComponent.Draw();
}
}
using ImRaii.IEndObject endObject3 = ImRaii.TabItem("Quest Presets");
if (endObject3)
{
_presetBuilderComponent.Draw();
}
}
public static List<ElementId> DecodeQuestPriority(string clipboardText)
{
List<ElementId> list = new List<ElementId>();
try
{
if (!string.IsNullOrEmpty(clipboardText))
{
string text = null;
if (clipboardText.StartsWith("qst:priority:", StringComparison.InvariantCulture))
{
text = "qst:priority:";
}
else if (clipboardText.StartsWith("qst:v1:", StringComparison.InvariantCulture))
{
text = "qst:v1:";
}
if (text != null)
{
clipboardText = clipboardText.Substring(text.Length);
string[] array = Encoding.UTF8.GetString(Convert.FromBase64String(clipboardText)).Split(';');
for (int i = 0; i < array.Length; i++)
{
ElementId item = ElementId.FromString(array[i]);
list.Add(item);
}
}
}
}
catch (Exception)
{
list.Clear();
}
return list;
}
}