* add jwt expiry * start of 0.9 api impl * some stuff idk * some more impl * some cleanup * remove grouppair, add configuration, rework some pair drawing stuff * do some stuff * rework some ui * I don't even know anymore * add cancellationtoken * token bla * ui fixes etc * probably individual adding/removing now working fully as expected * add working report popup * I guess it's more syncshell shit or so * popup shit idk * work out most of the syncshell bullshit I guess * delete some old crap * are we actually getting closer to the end * update pair info stuff * more fixes/adjustments, idk * refactor some things * some rework * some more cleanup * cleanup * make menu buttons w i d e * better icon text buttons * add all syncshell folder and ordering fixes --------- Co-authored-by: rootdarkarchon <root.darkarchon@outlook.com>
95 lines
3.2 KiB
C#
95 lines
3.2 KiB
C#
using Dalamud.Interface;
|
|
using Dalamud.Interface.Utility.Raii;
|
|
using ImGuiNET;
|
|
using MareSynchronos.Services.Mediator;
|
|
using Microsoft.Extensions.Logging;
|
|
using System.Numerics;
|
|
|
|
namespace MareSynchronos.UI.Components.Popup;
|
|
|
|
public class PopupHandler : WindowMediatorSubscriberBase
|
|
{
|
|
protected bool _openPopup = false;
|
|
private readonly HashSet<IPopupHandler> _handlers;
|
|
private IPopupHandler? _currentHandler = null;
|
|
|
|
public PopupHandler(ILogger<PopupHandler> logger, MareMediator mediator, IEnumerable<IPopupHandler> popupHandlers)
|
|
: base(logger, mediator, "MarePopupHandler")
|
|
{
|
|
Flags = ImGuiWindowFlags.NoBringToFrontOnFocus
|
|
| ImGuiWindowFlags.NoDecoration
|
|
| ImGuiWindowFlags.NoInputs
|
|
| ImGuiWindowFlags.NoSavedSettings
|
|
| ImGuiWindowFlags.NoBackground
|
|
| ImGuiWindowFlags.NoMove
|
|
| ImGuiWindowFlags.NoNav
|
|
| ImGuiWindowFlags.NoTitleBar;
|
|
IsOpen = true;
|
|
|
|
_handlers = popupHandlers.ToHashSet();
|
|
|
|
Mediator.Subscribe<OpenReportPopupMessage>(this, (msg) =>
|
|
{
|
|
_openPopup = true;
|
|
_currentHandler = _handlers.OfType<ReportPopupHandler>().Single();
|
|
((ReportPopupHandler)_currentHandler).Open(msg);
|
|
IsOpen = true;
|
|
});
|
|
|
|
Mediator.Subscribe<OpenCreateSyncshellPopupMessage>(this, (msg) =>
|
|
{
|
|
_openPopup = true;
|
|
_currentHandler = _handlers.OfType<CreateSyncshellPopupHandler>().Single();
|
|
((CreateSyncshellPopupHandler)_currentHandler).Open();
|
|
IsOpen = true;
|
|
});
|
|
|
|
Mediator.Subscribe<OpenBanUserPopupMessage>(this, (msg) =>
|
|
{
|
|
_openPopup = true;
|
|
_currentHandler = _handlers.OfType<BanUserPopupHandler>().Single();
|
|
((BanUserPopupHandler)_currentHandler).Open(msg);
|
|
IsOpen = true;
|
|
});
|
|
|
|
Mediator.Subscribe<JoinSyncshellPopupMessage>(this, (_) =>
|
|
{
|
|
_openPopup = true;
|
|
_currentHandler = _handlers.OfType<JoinSyncshellPopupHandler>().Single();
|
|
((JoinSyncshellPopupHandler)_currentHandler).Open();
|
|
IsOpen = true;
|
|
});
|
|
|
|
Mediator.Subscribe<OpenSyncshellAdminPanelPopupMessage>(this, (msg) =>
|
|
{
|
|
IsOpen = true;
|
|
_openPopup = true;
|
|
_currentHandler = _handlers.OfType<SyncshellAdminPopupHandler>().Single();
|
|
((SyncshellAdminPopupHandler)_currentHandler).Open(msg.GroupInfo);
|
|
IsOpen = true;
|
|
});
|
|
}
|
|
|
|
public override void Draw()
|
|
{
|
|
if (_currentHandler == null) return;
|
|
|
|
if (_openPopup)
|
|
{
|
|
ImGui.OpenPopup(WindowName);
|
|
_openPopup = false;
|
|
}
|
|
|
|
var viewportSize = ImGui.GetWindowViewport().Size;
|
|
ImGui.SetNextWindowSize(_currentHandler!.PopupSize);
|
|
ImGui.SetNextWindowPos(viewportSize / 2, ImGuiCond.Always, new Vector2(0.5f));
|
|
using var popup = ImRaii.Popup(WindowName, ImGuiWindowFlags.Modal);
|
|
if (!popup) return;
|
|
_currentHandler.DrawContent();
|
|
ImGui.Separator();
|
|
if (UiSharedService.IconTextButton(FontAwesomeIcon.Times, "Close"))
|
|
{
|
|
ImGui.CloseCurrentPopup();
|
|
}
|
|
}
|
|
} |