using CustomizePlus.Anamnesis; using CustomizePlus.Configuration.Data; using CustomizePlus.Configuration.Data.Version2; using CustomizePlus.Configuration.Data.Version3; using CustomizePlus.Configuration.Helpers; using CustomizePlus.Core.Helpers; using CustomizePlus.Profiles; using CustomizePlus.Profiles.Data; using CustomizePlus.Profiles.Events; using CustomizePlus.Templates; using CustomizePlus.Templates.Data; using CustomizePlus.Templates.Events; using Dalamud.Interface; using Dalamud.Interface.ImGuiFileDialog; using Dalamud.Interface.ImGuiNotification; using Dalamud.Plugin.Services; using Dalamud.Bindings.ImGui; using Newtonsoft.Json; using OtterGui; using OtterGui.Classes; using OtterGui.Filesystem; using OtterGui.FileSystem.Selector; using OtterGui.Log; using OtterGui.Raii; using OtterGui.Text; using System; using System.IO; using System.Linq; using System.Numerics; using static CustomizePlus.UI.Windows.MainWindow.Tabs.Templates.TemplateFileSystemSelector; namespace CustomizePlus.UI.Windows.MainWindow.Tabs.Templates; public class TemplateFileSystemSelector : FileSystemSelector { private readonly PluginConfiguration _configuration; private readonly TemplateEditorManager _editorManager; private readonly TemplateManager _templateManager; private readonly TemplateChanged _templateChangedEvent; private readonly ProfileChanged _profileChangedEvent; private readonly ProfileManager _profileManager; private readonly MessageService _messageService; private readonly PoseFileBoneLoader _poseFileBoneLoader; private readonly Logger _logger; private readonly PopupSystem _popupSystem; private readonly FileDialogManager _importFilePicker = new(); private string? _clipboardText; private Template? _cloneTemplate; private string _newName = string.Empty; private string _playerNameSteal = string.Empty; public bool IncognitoMode { get => _configuration.UISettings.IncognitoMode; set { _configuration.UISettings.IncognitoMode = value; _configuration.Save(); } } public struct TemplateState { public ColorId Color; } protected override float CurrentWidth => _configuration.UISettings.CurrentTemplateSelectorWidth * ImUtf8.GlobalScale; protected override float MinimumAbsoluteRemainder => 470 * ImUtf8.GlobalScale; protected override float MinimumScaling => _configuration.UISettings.TemplateSelectorMinimumScale; protected override float MaximumScaling => _configuration.UISettings.TemplateSelectorMaximumScale; protected override void SetSize(Vector2 size) { base.SetSize(size); var adaptedSize = MathF.Round(size.X / ImUtf8.GlobalScale); if (adaptedSize == _configuration.UISettings.CurrentTemplateSelectorWidth) return; _configuration.UISettings.CurrentTemplateSelectorWidth = adaptedSize; _configuration.Save(); } public TemplateFileSystemSelector( TemplateFileSystem fileSystem, IKeyState keyState, Logger logger, PluginConfiguration configuration, TemplateEditorManager editorManager, TemplateManager templateManager, TemplateChanged templateChangedEvent, ProfileChanged profileChangedEvent, ProfileManager profileManager, MessageService messageService, PoseFileBoneLoader poseFileBoneLoader, PopupSystem popupSystem) : base(fileSystem, keyState, logger, allowMultipleSelection: true) { _configuration = configuration; _editorManager = editorManager; _templateManager = templateManager; _templateChangedEvent = templateChangedEvent; _profileChangedEvent = profileChangedEvent; _profileManager = profileManager; _messageService = messageService; _poseFileBoneLoader = poseFileBoneLoader; _logger = logger; _popupSystem = popupSystem; _templateChangedEvent.Subscribe(OnTemplateChange, TemplateChanged.Priority.TemplateFileSystemSelector); _profileChangedEvent.Subscribe(OnProfileChange, ProfileChanged.Priority.TemplateFileSystemSelector); AddButton(NewButton, 0); AddButton(AnamnesisImportButton, 10); AddButton(ClipboardImportButton, 20); AddButton(StealButton, 25); AddButton(CloneButton, 30); AddButton(DeleteButton, 1000); SetFilterTooltip(); } public void Dispose() { base.Dispose(); _templateChangedEvent.Unsubscribe(OnTemplateChange); _profileChangedEvent.Unsubscribe(OnProfileChange); } protected override uint ExpandedFolderColor => ColorId.FolderExpanded.Value(); protected override uint CollapsedFolderColor => ColorId.FolderCollapsed.Value(); protected override uint FolderLineColor => ColorId.FolderLine.Value(); protected override bool FoldersDefaultOpen => _configuration.UISettings.FoldersDefaultOpen; protected override void DrawLeafName(FileSystem