UI icon refactoring stuff

minor refactoring

add mouseover in main ui

fix icon font issues

fix uploads/downloads icon alignment

fix code dupe

use fixed width icon handle, update deps

Co-authored-by: rootdarkarchon <root.darkarchon@outlook.com>
This commit is contained in:
Loporrit
2025-02-18 10:38:41 +00:00
parent 9bf36765e4
commit d48dcaf555
28 changed files with 504 additions and 545 deletions

View File

@@ -34,7 +34,7 @@ public class FileReplacementComparer : IEqualityComparer<FileReplacement>
return true; return true;
} }
private static int GetOrderIndependentHashCode<T>(IEnumerable<T> source) private static int GetOrderIndependentHashCode<T>(IEnumerable<T> source) where T : notnull
{ {
int hash = 0; int hash = 0;
foreach (T element in source) foreach (T element in source)

View File

@@ -36,7 +36,7 @@ public class FileReplacementDataComparer : IEqualityComparer<FileReplacementData
return true; return true;
} }
private static int GetOrderIndependentHashCode<T>(IEnumerable<T> source) private static int GetOrderIndependentHashCode<T>(IEnumerable<T> source) where T : notnull
{ {
int hash = 0; int hash = 0;
foreach (T element in source) foreach (T element in source)

View File

@@ -79,11 +79,11 @@ public class DalamudUtilService : IHostedService, IMediatorSubscriber
.Where(x => x.RowId != 0 && !(x.RowId >= 500 && (x.UIForeground & 0xFFFFFF00) == 0)) .Where(x => x.RowId != 0 && !(x.RowId >= 500 && (x.UIForeground & 0xFFFFFF00) == 0))
.ToDictionary(x => (int)x.RowId); .ToDictionary(x => (int)x.RowId);
}); });
mediator.Subscribe<TargetPairMessage>(this, async (msg) => mediator.Subscribe<TargetPairMessage>(this, (msg) =>
{ {
if (clientState.IsPvP) return; if (clientState.IsPvP) return;
var ident = msg.Pair.GetPlayerNameHash(); var ident = msg.Pair.GetPlayerNameHash();
await RunOnFrameworkThread(() => _ = RunOnFrameworkThread(() =>
{ {
var addr = GetPlayerCharacterFromCachedTableByIdent(ident); var addr = GetPlayerCharacterFromCachedTableByIdent(ident);
var pc = _clientState.LocalPlayer!; var pc = _clientState.LocalPlayer!;

View File

@@ -45,7 +45,7 @@ public class CompactUi : WindowMediatorSubscriberBase
private readonly ServerConfigurationManager _serverManager; private readonly ServerConfigurationManager _serverManager;
private readonly Stopwatch _timeout = new(); private readonly Stopwatch _timeout = new();
private readonly UidDisplayHandler _uidDisplayHandler; private readonly UidDisplayHandler _uidDisplayHandler;
private readonly UiSharedService _uiShared; private readonly UiSharedService _uiSharedService;
private bool _buttonState; private bool _buttonState;
private string _characterOrCommentFilter = string.Empty; private string _characterOrCommentFilter = string.Empty;
private Pair? _lastAddedUser; private Pair? _lastAddedUser;
@@ -63,7 +63,7 @@ public class CompactUi : WindowMediatorSubscriberBase
PerformanceCollectorService performanceCollectorService) PerformanceCollectorService performanceCollectorService)
: base(logger, mediator, "###LoporritSyncMainUI", performanceCollectorService) : base(logger, mediator, "###LoporritSyncMainUI", performanceCollectorService)
{ {
_uiShared = uiShared; _uiSharedService = uiShared;
_configService = configService; _configService = configService;
_apiController = apiController; _apiController = apiController;
_pairManager = pairManager; _pairManager = pairManager;
@@ -74,9 +74,9 @@ public class CompactUi : WindowMediatorSubscriberBase
var tagHandler = new TagHandler(_serverManager); var tagHandler = new TagHandler(_serverManager);
_groupPanel = new(this, uiShared, _pairManager, _chatService, uidDisplayHandler, _configService, _serverManager); _groupPanel = new(this, uiShared, _pairManager, _chatService, uidDisplayHandler, _configService, _serverManager);
_selectGroupForPairUi = new(tagHandler, uidDisplayHandler); _selectGroupForPairUi = new(tagHandler, uidDisplayHandler, _uiSharedService);
_selectPairsForGroupUi = new(tagHandler, uidDisplayHandler); _selectPairsForGroupUi = new(tagHandler, uidDisplayHandler);
_pairGroupsUi = new(configService, tagHandler, uidDisplayHandler, apiController, _selectPairsForGroupUi); _pairGroupsUi = new(configService, tagHandler, uidDisplayHandler, apiController, _selectPairsForGroupUi, _uiSharedService);
#if DEBUG #if DEBUG
string dev = "Dev Build"; string dev = "Dev Build";
@@ -121,12 +121,14 @@ public class CompactUi : WindowMediatorSubscriberBase
if (!_apiController.IsCurrentVersion) if (!_apiController.IsCurrentVersion)
{ {
var ver = _apiController.CurrentClientVersion; var ver = _apiController.CurrentClientVersion;
_uiShared.UidFont.Push();
var unsupported = "UNSUPPORTED VERSION"; var unsupported = "UNSUPPORTED VERSION";
var uidTextSize = ImGui.CalcTextSize(unsupported); using (_uiSharedService.UidFont.Push())
ImGui.SetCursorPosX((ImGui.GetWindowContentRegionMax().X + ImGui.GetWindowContentRegionMin().X) / 2 - uidTextSize.X / 2); {
var uidTextSize = ImGui.CalcTextSize(unsupported);
ImGui.SetCursorPosX((ImGui.GetWindowContentRegionMax().X + ImGui.GetWindowContentRegionMin().X) / 2 - uidTextSize.X / 2);
ImGui.AlignTextToFramePadding();
ImGui.TextColored(ImGuiColors.DalamudRed, unsupported); ImGui.TextColored(ImGuiColors.DalamudRed, unsupported);
_uiShared.UidFont.Pop(); }
UiSharedService.ColorTextWrapped($"Your Loporrit installation is out of date, the current version is {ver.Major}.{ver.Minor}.{ver.Build}. " + UiSharedService.ColorTextWrapped($"Your Loporrit installation is out of date, the current version is {ver.Major}.{ver.Minor}.{ver.Build}. " +
$"It is highly recommended to keep Loporrit up to date. Open /xlplugins and update the plugin.", ImGuiColors.DalamudRed); $"It is highly recommended to keep Loporrit up to date. Open /xlplugins and update the plugin.", ImGuiColors.DalamudRed);
} }
@@ -209,7 +211,7 @@ public class CompactUi : WindowMediatorSubscriberBase
{ {
UiSharedService.TextWrapped($"You have successfully added {_lastAddedUser.UserData.AliasOrUID}. Set a local note for the user in the field below:"); UiSharedService.TextWrapped($"You have successfully added {_lastAddedUser.UserData.AliasOrUID}. Set a local note for the user in the field below:");
ImGui.InputTextWithHint("##noteforuser", $"Note for {_lastAddedUser.UserData.AliasOrUID}", ref _lastAddedUserComment, 100); ImGui.InputTextWithHint("##noteforuser", $"Note for {_lastAddedUser.UserData.AliasOrUID}", ref _lastAddedUserComment, 100);
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Save, "Save Note")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.Save, "Save Note"))
{ {
_serverManager.SetNoteForUid(_lastAddedUser.UserData.UID, _lastAddedUserComment); _serverManager.SetNoteForUid(_lastAddedUser.UserData.UID, _lastAddedUserComment);
_lastAddedUser = null; _lastAddedUser = null;
@@ -244,12 +246,12 @@ public class CompactUi : WindowMediatorSubscriberBase
if (keys.Any()) if (keys.Any())
{ {
if (_secretKeyIdx == -1) _secretKeyIdx = keys.First().Key; if (_secretKeyIdx == -1) _secretKeyIdx = keys.First().Key;
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Plus, "Add current character with secret key")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.Plus, "Add current character with secret key"))
{ {
_serverManager.CurrentServer!.Authentications.Add(new MareConfiguration.Models.Authentication() _serverManager.CurrentServer!.Authentications.Add(new MareConfiguration.Models.Authentication()
{ {
CharacterName = _uiShared.PlayerName, CharacterName = _uiSharedService.PlayerName,
WorldId = _uiShared.WorldId, WorldId = _uiSharedService.WorldId,
SecretKeyIdx = _secretKeyIdx SecretKeyIdx = _secretKeyIdx
}); });
@@ -258,7 +260,7 @@ public class CompactUi : WindowMediatorSubscriberBase
_ = _apiController.CreateConnections(); _ = _apiController.CreateConnections();
} }
_uiShared.DrawCombo("Secret Key##addCharacterSecretKey", keys, (f) => f.Value.FriendlyName, (f) => _secretKeyIdx = f.Key); _uiSharedService.DrawCombo("Secret Key##addCharacterSecretKey", keys, (f) => f.Value.FriendlyName, (f) => _secretKeyIdx = f.Key);
} }
else else
{ {
@@ -268,7 +270,7 @@ public class CompactUi : WindowMediatorSubscriberBase
private void DrawAddPair() private void DrawAddPair()
{ {
var buttonSize = UiSharedService.GetIconButtonSize(FontAwesomeIcon.Plus); var buttonSize = _uiSharedService.GetIconButtonSize(FontAwesomeIcon.Plus);
ImGui.SetNextItemWidth(UiSharedService.GetWindowContentRegionWidth() - ImGui.GetWindowContentRegionMin().X - buttonSize.X); ImGui.SetNextItemWidth(UiSharedService.GetWindowContentRegionWidth() - ImGui.GetWindowContentRegionMin().X - buttonSize.X);
ImGui.InputTextWithHint("##otheruid", "Other players UID/Alias", ref _pairToAdd, 20); ImGui.InputTextWithHint("##otheruid", "Other players UID/Alias", ref _pairToAdd, 20);
ImGui.SameLine(ImGui.GetWindowContentRegionMin().X + UiSharedService.GetWindowContentRegionWidth() - buttonSize.X); ImGui.SameLine(ImGui.GetWindowContentRegionMin().X + UiSharedService.GetWindowContentRegionWidth() - buttonSize.X);
@@ -292,8 +294,8 @@ public class CompactUi : WindowMediatorSubscriberBase
private void DrawFilter() private void DrawFilter()
{ {
var buttonSize = UiSharedService.GetIconButtonSize(FontAwesomeIcon.ArrowUp); var buttonSize = _uiSharedService.GetIconButtonSize(FontAwesomeIcon.ArrowUp);
var playButtonSize = UiSharedService.GetIconButtonSize(FontAwesomeIcon.Play); var playButtonSize = _uiSharedService.GetIconButtonSize(FontAwesomeIcon.Play);
var users = GetFilteredUsers(); var users = GetFilteredUsers();
var userCount = users.Count; var userCount = users.Count;
@@ -375,9 +377,9 @@ public class CompactUi : WindowMediatorSubscriberBase
: (ImGui.GetWindowContentRegionMax().Y - ImGui.GetWindowContentRegionMin().Y) - TransferPartHeight - ImGui.GetCursorPosY(); : (ImGui.GetWindowContentRegionMax().Y - ImGui.GetWindowContentRegionMin().Y) - TransferPartHeight - ImGui.GetCursorPosY();
var users = GetFilteredUsers().OrderBy(u => u.GetNoteOrName()); var users = GetFilteredUsers().OrderBy(u => u.GetNoteOrName());
var onlineUsers = users.Where(u => u.UserPair!.OtherPermissions.IsPaired() && (u.IsOnline || u.UserPair!.OwnPermissions.IsPaused())).Select(c => new DrawUserPair("Online" + c.UserData.UID, c, _uidDisplayHandler, _apiController, Mediator, _selectGroupForPairUi)).ToList(); var onlineUsers = users.Where(u => u.UserPair!.OtherPermissions.IsPaired() && (u.IsOnline || u.UserPair!.OwnPermissions.IsPaused())).Select(c => new DrawUserPair("Online" + c.UserData.UID, c, _uidDisplayHandler, _apiController, Mediator, _selectGroupForPairUi, _uiSharedService)).ToList();
var visibleUsers = users.Where(u => u.IsVisible).Select(c => new DrawUserPair("Visible" + c.UserData.UID, c, _uidDisplayHandler, _apiController, Mediator, _selectGroupForPairUi)).ToList(); var visibleUsers = users.Where(u => u.IsVisible).Select(c => new DrawUserPair("Visible" + c.UserData.UID, c, _uidDisplayHandler, _apiController, Mediator, _selectGroupForPairUi, _uiSharedService)).ToList();
var offlineUsers = users.Where(u => !u.UserPair!.OtherPermissions.IsPaired() || (!u.IsOnline && !u.UserPair!.OwnPermissions.IsPaused())).Select(c => new DrawUserPair("Offline" + c.UserData.UID, c, _uidDisplayHandler, _apiController, Mediator, _selectGroupForPairUi)).ToList(); var offlineUsers = users.Where(u => !u.UserPair!.OtherPermissions.IsPaired() || (!u.IsOnline && !u.UserPair!.OwnPermissions.IsPaused())).Select(c => new DrawUserPair("Offline" + c.UserData.UID, c, _uidDisplayHandler, _apiController, Mediator, _selectGroupForPairUi, _uiSharedService)).ToList();
ImGui.BeginChild("list", new Vector2(WindowContentWidth, ySize), border: false); ImGui.BeginChild("list", new Vector2(WindowContentWidth, ySize), border: false);
@@ -388,7 +390,7 @@ public class CompactUi : WindowMediatorSubscriberBase
private void DrawServerStatus() private void DrawServerStatus()
{ {
var buttonSize = UiSharedService.GetIconButtonSize(FontAwesomeIcon.Link); var buttonSize = _uiSharedService.GetIconButtonSize(FontAwesomeIcon.Link);
var userCount = _apiController.OnlineUsers.ToString(CultureInfo.InvariantCulture); var userCount = _apiController.OnlineUsers.ToString(CultureInfo.InvariantCulture);
var userSize = ImGui.CalcTextSize(userCount); var userSize = ImGui.CalcTextSize(userCount);
var textSize = ImGui.CalcTextSize("Users Online"); var textSize = ImGui.CalcTextSize("Users Online");
@@ -445,7 +447,7 @@ public class CompactUi : WindowMediatorSubscriberBase
if (_apiController.ServerState is not (ServerState.Reconnecting or ServerState.Disconnecting)) if (_apiController.ServerState is not (ServerState.Reconnecting or ServerState.Disconnecting))
{ {
ImGui.PushStyleColor(ImGuiCol.Text, color); ImGui.PushStyleColor(ImGuiCol.Text, color);
if (ImGuiComponents.IconButton(connectedIcon)) if (_uiSharedService.IconButton(connectedIcon))
{ {
_serverManager.CurrentServer.FullPause = !_serverManager.CurrentServer.FullPause; _serverManager.CurrentServer.FullPause = !_serverManager.CurrentServer.FullPause;
_serverManager.Save(); _serverManager.Save();
@@ -462,9 +464,8 @@ public class CompactUi : WindowMediatorSubscriberBase
if (currentUploads.Any()) if (currentUploads.Any())
{ {
ImGui.PushFont(UiBuilder.IconFont); ImGui.AlignTextToFramePadding();
ImGui.TextUnformatted(FontAwesomeIcon.Upload.ToIconString()); _uiSharedService.IconText(FontAwesomeIcon.Upload);
ImGui.PopFont();
ImGui.SameLine(35 * ImGuiHelpers.GlobalScale); ImGui.SameLine(35 * ImGuiHelpers.GlobalScale);
var totalUploads = currentUploads.Count; var totalUploads = currentUploads.Count;
@@ -484,9 +485,8 @@ public class CompactUi : WindowMediatorSubscriberBase
if (currentDownloads.Any()) if (currentDownloads.Any())
{ {
ImGui.PushFont(UiBuilder.IconFont); ImGui.AlignTextToFramePadding();
ImGui.TextUnformatted(FontAwesomeIcon.Download.ToIconString()); _uiSharedService.IconText(FontAwesomeIcon.Download);
ImGui.PopFont();
ImGui.SameLine(35 * ImGuiHelpers.GlobalScale); ImGui.SameLine(35 * ImGuiHelpers.GlobalScale);
var totalDownloads = currentDownloads.Sum(c => c.TotalFiles); var totalDownloads = currentDownloads.Sum(c => c.TotalFiles);
@@ -504,14 +504,14 @@ public class CompactUi : WindowMediatorSubscriberBase
var bottomButtonWidth = (WindowContentWidth - ImGui.GetStyle().ItemSpacing.X) / 2; var bottomButtonWidth = (WindowContentWidth - ImGui.GetStyle().ItemSpacing.X) / 2;
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.PersonCircleQuestion, "Character Analysis", bottomButtonWidth)) if (_uiSharedService.IconTextButton(FontAwesomeIcon.PersonCircleQuestion, "Character Analysis", bottomButtonWidth))
{ {
Mediator.Publish(new UiToggleMessage(typeof(DataAnalysisUi))); Mediator.Publish(new UiToggleMessage(typeof(DataAnalysisUi)));
} }
ImGui.SameLine(); ImGui.SameLine();
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.NotesMedical, "Event Viewer", bottomButtonWidth)) if (_uiSharedService.IconTextButton(FontAwesomeIcon.NotesMedical, "Event Viewer", bottomButtonWidth))
{ {
Mediator.Publish(new UiToggleMessage(typeof(EventViewerUI))); Mediator.Publish(new UiToggleMessage(typeof(EventViewerUI)));
} }
@@ -523,14 +523,16 @@ public class CompactUi : WindowMediatorSubscriberBase
{ {
var uidText = GetUidText(); var uidText = GetUidText();
var buttonSizeX = 0f; var buttonSizeX = 0f;
Vector2 uidTextSize;
_uiShared.UidFont.Push(); using (_uiSharedService.UidFont.Push())
var uidTextSize = ImGui.CalcTextSize(uidText); {
_uiShared.UidFont.Pop(); uidTextSize = ImGui.CalcTextSize(uidText);
}
var originalPos = ImGui.GetCursorPos(); var originalPos = ImGui.GetCursorPos();
ImGui.SetWindowFontScale(1.5f); ImGui.SetWindowFontScale(1.5f);
var buttonSize = UiSharedService.GetIconButtonSize(FontAwesomeIcon.Cog); var buttonSize = _uiSharedService.GetIconButtonSize(FontAwesomeIcon.Cog);
buttonSizeX -= buttonSize.X - ImGui.GetStyle().ItemSpacing.X * 2; buttonSizeX -= buttonSize.X - ImGui.GetStyle().ItemSpacing.X * 2;
ImGui.SameLine(ImGui.GetWindowContentRegionMin().X + UiSharedService.GetWindowContentRegionWidth() - buttonSize.X); ImGui.SameLine(ImGui.GetWindowContentRegionMin().X + UiSharedService.GetWindowContentRegionWidth() - buttonSize.X);
ImGui.SetCursorPosY(originalPos.Y + uidTextSize.Y / 2 - buttonSize.Y / 2); ImGui.SetCursorPosY(originalPos.Y + uidTextSize.Y / 2 - buttonSize.Y / 2);
@@ -545,7 +547,7 @@ public class CompactUi : WindowMediatorSubscriberBase
if (_apiController.ServerState is ServerState.Connected) if (_apiController.ServerState is ServerState.Connected)
{ {
buttonSizeX += UiSharedService.GetIconButtonSize(FontAwesomeIcon.Copy).X - ImGui.GetStyle().ItemSpacing.X * 2; buttonSizeX += _uiSharedService.GetIconButtonSize(FontAwesomeIcon.Copy).X - ImGui.GetStyle().ItemSpacing.X * 2;
ImGui.SetCursorPosY(originalPos.Y + uidTextSize.Y / 2 - buttonSize.Y / 2); ImGui.SetCursorPosY(originalPos.Y + uidTextSize.Y / 2 - buttonSize.Y / 2);
if (ImGuiComponents.IconButton(FontAwesomeIcon.Copy)) if (ImGuiComponents.IconButton(FontAwesomeIcon.Copy))
{ {
@@ -558,9 +560,8 @@ public class CompactUi : WindowMediatorSubscriberBase
ImGui.SetCursorPosY(originalPos.Y + buttonSize.Y / 2 - uidTextSize.Y / 2 - ImGui.GetStyle().ItemSpacing.Y / 2); ImGui.SetCursorPosY(originalPos.Y + buttonSize.Y / 2 - uidTextSize.Y / 2 - ImGui.GetStyle().ItemSpacing.Y / 2);
ImGui.SetCursorPosX((ImGui.GetWindowContentRegionMax().X + ImGui.GetWindowContentRegionMin().X) / 2 + buttonSizeX - uidTextSize.X / 2); ImGui.SetCursorPosX((ImGui.GetWindowContentRegionMax().X + ImGui.GetWindowContentRegionMin().X) / 2 + buttonSizeX - uidTextSize.X / 2);
_uiShared.UidFont.Push(); using (_uiSharedService.UidFont.Push())
ImGui.TextColored(GetUidColor(), uidText); ImGui.TextColored(GetUidColor(), uidText);
_uiShared.UidFont.Pop();
if (_apiController.ServerState is not ServerState.Connected) if (_apiController.ServerState is not ServerState.Connected)
{ {

View File

@@ -21,7 +21,10 @@ public class DrawGroupPair : DrawPairBase
private readonly GroupPairFullInfoDto _fullInfoDto; private readonly GroupPairFullInfoDto _fullInfoDto;
private readonly GroupFullInfoDto _group; private readonly GroupFullInfoDto _group;
public DrawGroupPair(string id, Pair entry, ApiController apiController, MareMediator mareMediator, GroupFullInfoDto group, GroupPairFullInfoDto fullInfoDto, UidDisplayHandler handler) : base(id, entry, apiController, handler) public DrawGroupPair(string id, Pair entry, ApiController apiController,
MareMediator mareMediator, GroupFullInfoDto group, GroupPairFullInfoDto fullInfoDto,
UidDisplayHandler handler, UiSharedService uiSharedService)
: base(id, entry, apiController, handler, uiSharedService)
{ {
_group = group; _group = group;
_fullInfoDto = fullInfoDto; _fullInfoDto = fullInfoDto;
@@ -145,8 +148,8 @@ public class DrawGroupPair : DrawPairBase
var permIcon = (individualAnimDisabled || individualSoundsDisabled || individualVFXDisabled) ? FontAwesomeIcon.ExclamationTriangle var permIcon = (individualAnimDisabled || individualSoundsDisabled || individualVFXDisabled) ? FontAwesomeIcon.ExclamationTriangle
: ((soundsDisabled || animDisabled || vfxDisabled) ? FontAwesomeIcon.InfoCircle : FontAwesomeIcon.None); : ((soundsDisabled || animDisabled || vfxDisabled) ? FontAwesomeIcon.InfoCircle : FontAwesomeIcon.None);
var infoIconWidth = UiSharedService.GetIconSize(permIcon).X; var infoIconWidth = UiSharedService.GetIconSize(permIcon).X;
var plusButtonWidth = UiSharedService.GetIconButtonSize(FontAwesomeIcon.Plus).X; var plusButtonWidth = _uiSharedService.GetIconButtonSize(FontAwesomeIcon.Plus).X;
var barButtonWidth = UiSharedService.GetIconButtonSize(FontAwesomeIcon.Bars).X; var barButtonWidth = _uiSharedService.GetIconButtonSize(FontAwesomeIcon.Bars).X;
var pos = ImGui.GetWindowContentRegionMin().X + UiSharedService.GetWindowContentRegionWidth() + spacing var pos = ImGui.GetWindowContentRegionMin().X + UiSharedService.GetWindowContentRegionWidth() + spacing
- (showInfo ? (infoIconWidth + spacing) : 0) - (showInfo ? (infoIconWidth + spacing) : 0)
@@ -158,7 +161,7 @@ public class DrawGroupPair : DrawPairBase
{ {
ImGui.SetCursorPosY(textPosY); ImGui.SetCursorPosY(textPosY);
ImGui.PushStyleColor(ImGuiCol.Text, ImGuiColors.DalamudYellow); ImGui.PushStyleColor(ImGuiCol.Text, ImGuiColors.DalamudYellow);
UiSharedService.FontText(permIcon.ToIconString(), UiBuilder.IconFont); _uiSharedService.IconText(permIcon);
ImGui.PopStyleColor(); ImGui.PopStyleColor();
if (ImGui.IsItemHovered()) if (ImGui.IsItemHovered())
{ {
@@ -169,7 +172,7 @@ public class DrawGroupPair : DrawPairBase
if (individualSoundsDisabled) if (individualSoundsDisabled)
{ {
var userSoundsText = "Sound sync disabled with " + _pair.UserData.AliasOrUID; var userSoundsText = "Sound sync disabled with " + _pair.UserData.AliasOrUID;
UiSharedService.FontText(FontAwesomeIcon.VolumeOff.ToIconString(), UiBuilder.IconFont); _uiSharedService.IconText(FontAwesomeIcon.VolumeOff);
ImGui.SameLine(40 * ImGuiHelpers.GlobalScale); ImGui.SameLine(40 * ImGuiHelpers.GlobalScale);
ImGui.Text(userSoundsText); ImGui.Text(userSoundsText);
ImGui.NewLine(); ImGui.NewLine();
@@ -180,7 +183,7 @@ public class DrawGroupPair : DrawPairBase
if (individualAnimDisabled) if (individualAnimDisabled)
{ {
var userAnimText = "Animation sync disabled with " + _pair.UserData.AliasOrUID; var userAnimText = "Animation sync disabled with " + _pair.UserData.AliasOrUID;
UiSharedService.FontText(FontAwesomeIcon.Stop.ToIconString(), UiBuilder.IconFont); _uiSharedService.IconText(FontAwesomeIcon.Stop);
ImGui.SameLine(40 * ImGuiHelpers.GlobalScale); ImGui.SameLine(40 * ImGuiHelpers.GlobalScale);
ImGui.Text(userAnimText); ImGui.Text(userAnimText);
ImGui.NewLine(); ImGui.NewLine();
@@ -191,7 +194,7 @@ public class DrawGroupPair : DrawPairBase
if (individualVFXDisabled) if (individualVFXDisabled)
{ {
var userVFXText = "VFX sync disabled with " + _pair.UserData.AliasOrUID; var userVFXText = "VFX sync disabled with " + _pair.UserData.AliasOrUID;
UiSharedService.FontText(FontAwesomeIcon.Circle.ToIconString(), UiBuilder.IconFont); _uiSharedService.IconText(FontAwesomeIcon.Circle);
ImGui.SameLine(40 * ImGuiHelpers.GlobalScale); ImGui.SameLine(40 * ImGuiHelpers.GlobalScale);
ImGui.Text(userVFXText); ImGui.Text(userVFXText);
ImGui.NewLine(); ImGui.NewLine();
@@ -206,7 +209,7 @@ public class DrawGroupPair : DrawPairBase
else if ((animDisabled || soundsDisabled)) else if ((animDisabled || soundsDisabled))
{ {
ImGui.SetCursorPosY(textPosY); ImGui.SetCursorPosY(textPosY);
UiSharedService.FontText(permIcon.ToIconString(), UiBuilder.IconFont); _uiSharedService.IconText(permIcon);
if (ImGui.IsItemHovered()) if (ImGui.IsItemHovered())
{ {
ImGui.BeginTooltip(); ImGui.BeginTooltip();
@@ -216,7 +219,7 @@ public class DrawGroupPair : DrawPairBase
if (soundsDisabled) if (soundsDisabled)
{ {
var userSoundsText = "Sound sync disabled by " + _pair.UserData.AliasOrUID; var userSoundsText = "Sound sync disabled by " + _pair.UserData.AliasOrUID;
UiSharedService.FontText(FontAwesomeIcon.VolumeOff.ToIconString(), UiBuilder.IconFont); _uiSharedService.IconText(FontAwesomeIcon.VolumeOff);
ImGui.SameLine(40 * ImGuiHelpers.GlobalScale); ImGui.SameLine(40 * ImGuiHelpers.GlobalScale);
ImGui.Text(userSoundsText); ImGui.Text(userSoundsText);
} }
@@ -224,7 +227,7 @@ public class DrawGroupPair : DrawPairBase
if (animDisabled) if (animDisabled)
{ {
var userAnimText = "Animation sync disabled by " + _pair.UserData.AliasOrUID; var userAnimText = "Animation sync disabled by " + _pair.UserData.AliasOrUID;
UiSharedService.FontText(FontAwesomeIcon.Stop.ToIconString(), UiBuilder.IconFont); _uiSharedService.IconText(FontAwesomeIcon.Stop);
ImGui.SameLine(40 * ImGuiHelpers.GlobalScale); ImGui.SameLine(40 * ImGuiHelpers.GlobalScale);
ImGui.Text(userAnimText); ImGui.Text(userAnimText);
} }
@@ -232,7 +235,7 @@ public class DrawGroupPair : DrawPairBase
if (vfxDisabled) if (vfxDisabled)
{ {
var userVFXText = "VFX sync disabled by " + _pair.UserData.AliasOrUID; var userVFXText = "VFX sync disabled by " + _pair.UserData.AliasOrUID;
UiSharedService.FontText(FontAwesomeIcon.Circle.ToIconString(), UiBuilder.IconFont); _uiSharedService.IconText(FontAwesomeIcon.Circle);
ImGui.SameLine(40 * ImGuiHelpers.GlobalScale); ImGui.SameLine(40 * ImGuiHelpers.GlobalScale);
ImGui.Text(userVFXText); ImGui.Text(userVFXText);
} }
@@ -269,7 +272,7 @@ public class DrawGroupPair : DrawPairBase
if ((userIsModerator || userIsOwner) && !(entryIsMod || entryIsOwner)) if ((userIsModerator || userIsOwner) && !(entryIsMod || entryIsOwner))
{ {
var pinText = entryIsPinned ? "Unpin user" : "Pin user"; var pinText = entryIsPinned ? "Unpin user" : "Pin user";
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Thumbtack, pinText)) if (_uiSharedService.IconTextButton(FontAwesomeIcon.Thumbtack, pinText))
{ {
ImGui.CloseCurrentPopup(); ImGui.CloseCurrentPopup();
var userInfo = _fullInfoDto.GroupPairStatusInfo ^ GroupUserInfo.IsPinned; var userInfo = _fullInfoDto.GroupPairStatusInfo ^ GroupUserInfo.IsPinned;
@@ -277,14 +280,14 @@ public class DrawGroupPair : DrawPairBase
} }
UiSharedService.AttachToolTip("Pin this user to the Syncshell. Pinned users will not be deleted in case of a manually initiated Syncshell clean"); UiSharedService.AttachToolTip("Pin this user to the Syncshell. Pinned users will not be deleted in case of a manually initiated Syncshell clean");
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Trash, "Remove user") && UiSharedService.CtrlPressed()) if (_uiSharedService.IconTextButton(FontAwesomeIcon.Trash, "Remove user") && UiSharedService.CtrlPressed())
{ {
ImGui.CloseCurrentPopup(); ImGui.CloseCurrentPopup();
_ = _apiController.GroupRemoveUser(_fullInfoDto); _ = _apiController.GroupRemoveUser(_fullInfoDto);
} }
UiSharedService.AttachToolTip("Hold CTRL and click to remove user " + (_pair.UserData.AliasOrUID) + " from Syncshell"); UiSharedService.AttachToolTip("Hold CTRL and click to remove user " + (_pair.UserData.AliasOrUID) + " from Syncshell");
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.UserSlash, "Ban User")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.UserSlash, "Ban User"))
{ {
ImGui.CloseCurrentPopup(); ImGui.CloseCurrentPopup();
_mediator.Publish(new OpenBanUserPopupMessage(_pair, _group)); _mediator.Publish(new OpenBanUserPopupMessage(_pair, _group));
@@ -295,7 +298,7 @@ public class DrawGroupPair : DrawPairBase
if (userIsOwner) if (userIsOwner)
{ {
string modText = entryIsMod ? "Demod user" : "Mod user"; string modText = entryIsMod ? "Demod user" : "Mod user";
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.UserShield, modText) && UiSharedService.CtrlPressed()) if (_uiSharedService.IconTextButton(FontAwesomeIcon.UserShield, modText) && UiSharedService.CtrlPressed())
{ {
ImGui.CloseCurrentPopup(); ImGui.CloseCurrentPopup();
var userInfo = _fullInfoDto.GroupPairStatusInfo ^ GroupUserInfo.IsModerator; var userInfo = _fullInfoDto.GroupPairStatusInfo ^ GroupUserInfo.IsModerator;
@@ -303,7 +306,7 @@ public class DrawGroupPair : DrawPairBase
} }
UiSharedService.AttachToolTip("Hold CTRL to change the moderator status for " + (_fullInfoDto.UserAliasOrUID) + Environment.NewLine + UiSharedService.AttachToolTip("Hold CTRL to change the moderator status for " + (_fullInfoDto.UserAliasOrUID) + Environment.NewLine +
"Moderators can kick, ban/unban, pin/unpin users and clear the Syncshell."); "Moderators can kick, ban/unban, pin/unpin users and clear the Syncshell.");
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Crown, "Transfer Ownership") && UiSharedService.CtrlPressed() && UiSharedService.ShiftPressed()) if (_uiSharedService.IconTextButton(FontAwesomeIcon.Crown, "Transfer Ownership") && UiSharedService.CtrlPressed() && UiSharedService.ShiftPressed())
{ {
ImGui.CloseCurrentPopup(); ImGui.CloseCurrentPopup();
_ = _apiController.GroupChangeOwnership(_fullInfoDto); _ = _apiController.GroupChangeOwnership(_fullInfoDto);
@@ -314,7 +317,7 @@ public class DrawGroupPair : DrawPairBase
ImGui.Separator(); ImGui.Separator();
if (_pair.IsVisible) if (_pair.IsVisible)
{ {
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Eye, "Target player")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.Eye, "Target player"))
{ {
_mediator.Publish(new TargetPairMessage(_pair)); _mediator.Publish(new TargetPairMessage(_pair));
ImGui.CloseCurrentPopup(); ImGui.CloseCurrentPopup();
@@ -322,13 +325,13 @@ public class DrawGroupPair : DrawPairBase
} }
if (!_pair.IsPaused) if (!_pair.IsPaused)
{ {
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.User, "Open Profile")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.User, "Open Profile"))
{ {
_displayHandler.OpenProfile(_pair); _displayHandler.OpenProfile(_pair);
ImGui.CloseCurrentPopup(); ImGui.CloseCurrentPopup();
} }
UiSharedService.AttachToolTip("Opens the profile for this user in a new window"); UiSharedService.AttachToolTip("Opens the profile for this user in a new window");
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.ExclamationTriangle, "Report Profile")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.ExclamationTriangle, "Report Profile"))
{ {
ImGui.CloseCurrentPopup(); ImGui.CloseCurrentPopup();
_mediator.Publish(new OpenReportPopupMessage(_pair)); _mediator.Publish(new OpenReportPopupMessage(_pair));

View File

@@ -1,5 +1,4 @@
using Dalamud.Interface; using Dalamud.Interface;
using Dalamud.Interface.Colors;
using ImGuiNET; using ImGuiNET;
using MareSynchronos.PlayerData.Pairs; using MareSynchronos.PlayerData.Pairs;
using MareSynchronos.UI.Handlers; using MareSynchronos.UI.Handlers;
@@ -11,15 +10,17 @@ public abstract class DrawPairBase
{ {
protected readonly ApiController _apiController; protected readonly ApiController _apiController;
protected readonly UidDisplayHandler _displayHandler; protected readonly UidDisplayHandler _displayHandler;
protected readonly UiSharedService _uiSharedService;
protected Pair _pair; protected Pair _pair;
private readonly string _id; private readonly string _id;
protected DrawPairBase(string id, Pair entry, ApiController apiController, UidDisplayHandler uIDDisplayHandler) protected DrawPairBase(string id, Pair entry, ApiController apiController, UidDisplayHandler uIDDisplayHandler, UiSharedService uiSharedService)
{ {
_id = id; _id = id;
_pair = entry; _pair = entry;
_apiController = apiController; _apiController = apiController;
_displayHandler = uIDDisplayHandler; _displayHandler = uIDDisplayHandler;
_uiSharedService = uiSharedService;
} }
public string ImGuiID => _id; public string ImGuiID => _id;
@@ -28,7 +29,7 @@ public abstract class DrawPairBase
public void DrawPairedClient() public void DrawPairedClient()
{ {
var originalY = ImGui.GetCursorPosY(); var originalY = ImGui.GetCursorPosY();
var pauseIconSize = UiSharedService.GetIconButtonSize(FontAwesomeIcon.Play); var pauseIconSize = _uiSharedService.GetIconButtonSize(FontAwesomeIcon.Play);
var textSize = ImGui.CalcTextSize(_pair.UserData.AliasOrUID); var textSize = ImGui.CalcTextSize(_pair.UserData.AliasOrUID);
var startPos = ImGui.GetCursorStartPos(); var startPos = ImGui.GetCursorStartPos();

View File

@@ -19,7 +19,10 @@ public class DrawUserPair : DrawPairBase
protected readonly MareMediator _mediator; protected readonly MareMediator _mediator;
private readonly SelectGroupForPairUi _selectGroupForPairUi; private readonly SelectGroupForPairUi _selectGroupForPairUi;
public DrawUserPair(string id, Pair entry, UidDisplayHandler displayHandler, ApiController apiController, MareMediator mareMediator, SelectGroupForPairUi selectGroupForPairUi) : base(id, entry, apiController, displayHandler) public DrawUserPair(string id, Pair entry, UidDisplayHandler displayHandler, ApiController apiController,
MareMediator mareMediator, SelectGroupForPairUi selectGroupForPairUi,
UiSharedService uiSharedService)
: base(id, entry, apiController, displayHandler, uiSharedService)
{ {
if (_pair.UserPair == null) throw new ArgumentException("Pair must be UserPair", nameof(entry)); if (_pair.UserPair == null) throw new ArgumentException("Pair must be UserPair", nameof(entry));
_pair = entry; _pair = entry;
@@ -95,8 +98,8 @@ public class DrawUserPair : DrawPairBase
protected override float DrawRightSide(float textPosY, float originalY) protected override float DrawRightSide(float textPosY, float originalY)
{ {
var pauseIcon = _pair.UserPair!.OwnPermissions.IsPaused() ? FontAwesomeIcon.Play : FontAwesomeIcon.Pause; var pauseIcon = _pair.UserPair!.OwnPermissions.IsPaused() ? FontAwesomeIcon.Play : FontAwesomeIcon.Pause;
var pauseIconSize = UiSharedService.GetIconButtonSize(pauseIcon); var pauseIconSize = _uiSharedService.GetIconButtonSize(pauseIcon);
var barButtonSize = UiSharedService.GetIconButtonSize(FontAwesomeIcon.Bars); var barButtonSize = _uiSharedService.GetIconButtonSize(FontAwesomeIcon.Bars);
var entryUID = _pair.UserData.AliasOrUID; var entryUID = _pair.UserData.AliasOrUID;
var spacingX = ImGui.GetStyle().ItemSpacing.X; var spacingX = ImGui.GetStyle().ItemSpacing.X;
var windowEndX = ImGui.GetWindowContentRegionMin().X + UiSharedService.GetWindowContentRegionWidth(); var windowEndX = ImGui.GetWindowContentRegionMin().X + UiSharedService.GetWindowContentRegionWidth();
@@ -112,13 +115,13 @@ public class DrawUserPair : DrawPairBase
{ {
var infoIconPosDist = windowEndX - barButtonSize.X - spacingX - pauseIconSize.X - spacingX; var infoIconPosDist = windowEndX - barButtonSize.X - spacingX - pauseIconSize.X - spacingX;
var icon = FontAwesomeIcon.ExclamationTriangle; var icon = FontAwesomeIcon.ExclamationTriangle;
var iconwidth = UiSharedService.GetIconButtonSize(icon); var iconwidth = _uiSharedService.GetIconButtonSize(icon);
rightSideStart = infoIconPosDist - iconwidth.X; rightSideStart = infoIconPosDist - iconwidth.X;
ImGui.SameLine(infoIconPosDist - iconwidth.X); ImGui.SameLine(infoIconPosDist - iconwidth.X);
ImGui.PushStyleColor(ImGuiCol.Text, ImGuiColors.DalamudYellow); ImGui.PushStyleColor(ImGuiCol.Text, ImGuiColors.DalamudYellow);
UiSharedService.FontText(icon.ToIconString(), UiBuilder.IconFont); _uiSharedService.IconText(icon);
ImGui.PopStyleColor(); ImGui.PopStyleColor();
if (ImGui.IsItemHovered()) if (ImGui.IsItemHovered())
{ {
@@ -129,7 +132,7 @@ public class DrawUserPair : DrawPairBase
if (individualSoundsDisabled) if (individualSoundsDisabled)
{ {
var userSoundsText = "Sound sync disabled with " + _pair.UserData.AliasOrUID; var userSoundsText = "Sound sync disabled with " + _pair.UserData.AliasOrUID;
UiSharedService.FontText(FontAwesomeIcon.VolumeOff.ToIconString(), UiBuilder.IconFont); _uiSharedService.IconText(FontAwesomeIcon.VolumeOff);
ImGui.SameLine(40 * ImGuiHelpers.GlobalScale); ImGui.SameLine(40 * ImGuiHelpers.GlobalScale);
ImGui.Text(userSoundsText); ImGui.Text(userSoundsText);
ImGui.NewLine(); ImGui.NewLine();
@@ -140,7 +143,7 @@ public class DrawUserPair : DrawPairBase
if (individualAnimDisabled) if (individualAnimDisabled)
{ {
var userAnimText = "Animation sync disabled with " + _pair.UserData.AliasOrUID; var userAnimText = "Animation sync disabled with " + _pair.UserData.AliasOrUID;
UiSharedService.FontText(FontAwesomeIcon.Stop.ToIconString(), UiBuilder.IconFont); _uiSharedService.IconText(FontAwesomeIcon.Stop);
ImGui.SameLine(40 * ImGuiHelpers.GlobalScale); ImGui.SameLine(40 * ImGuiHelpers.GlobalScale);
ImGui.Text(userAnimText); ImGui.Text(userAnimText);
ImGui.NewLine(); ImGui.NewLine();
@@ -151,7 +154,7 @@ public class DrawUserPair : DrawPairBase
if (individualVFXDisabled) if (individualVFXDisabled)
{ {
var userVFXText = "VFX sync disabled with " + _pair.UserData.AliasOrUID; var userVFXText = "VFX sync disabled with " + _pair.UserData.AliasOrUID;
UiSharedService.FontText(FontAwesomeIcon.Circle.ToIconString(), UiBuilder.IconFont); _uiSharedService.IconText(FontAwesomeIcon.Circle);
ImGui.SameLine(40 * ImGuiHelpers.GlobalScale); ImGui.SameLine(40 * ImGuiHelpers.GlobalScale);
ImGui.Text(userVFXText); ImGui.Text(userVFXText);
ImGui.NewLine(); ImGui.NewLine();
@@ -205,7 +208,7 @@ public class DrawUserPair : DrawPairBase
{ {
if (entry.IsVisible) if (entry.IsVisible)
{ {
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Eye, "Target player")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.Eye, "Target player"))
{ {
_mediator.Publish(new TargetPairMessage(entry)); _mediator.Publish(new TargetPairMessage(entry));
ImGui.CloseCurrentPopup(); ImGui.CloseCurrentPopup();
@@ -213,7 +216,7 @@ public class DrawUserPair : DrawPairBase
} }
if (!entry.IsPaused) if (!entry.IsPaused)
{ {
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.User, "Open Profile")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.User, "Open Profile"))
{ {
_displayHandler.OpenProfile(entry); _displayHandler.OpenProfile(entry);
ImGui.CloseCurrentPopup(); ImGui.CloseCurrentPopup();
@@ -222,7 +225,7 @@ public class DrawUserPair : DrawPairBase
} }
if (entry.IsVisible) if (entry.IsVisible)
{ {
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Sync, "Reload last data")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.Sync, "Reload last data"))
{ {
entry.ApplyLastReceivedData(forced: true); entry.ApplyLastReceivedData(forced: true);
ImGui.CloseCurrentPopup(); ImGui.CloseCurrentPopup();
@@ -230,13 +233,13 @@ public class DrawUserPair : DrawPairBase
UiSharedService.AttachToolTip("This reapplies the last received character data to this character"); UiSharedService.AttachToolTip("This reapplies the last received character data to this character");
} }
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.PlayCircle, "Cycle pause state")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.PlayCircle, "Cycle pause state"))
{ {
_ = _apiController.CyclePause(entry.UserData); _ = _apiController.CyclePause(entry.UserData);
ImGui.CloseCurrentPopup(); ImGui.CloseCurrentPopup();
} }
var entryUID = entry.UserData.AliasOrUID; var entryUID = entry.UserData.AliasOrUID;
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Folder, "Pair Groups")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.Folder, "Pair Groups"))
{ {
_selectGroupForPairUi.Open(entry); _selectGroupForPairUi.Open(entry);
} }
@@ -245,7 +248,7 @@ public class DrawUserPair : DrawPairBase
var isDisableSounds = entry.UserPair!.OwnPermissions.IsDisableSounds(); var isDisableSounds = entry.UserPair!.OwnPermissions.IsDisableSounds();
string disableSoundsText = isDisableSounds ? "Enable sound sync" : "Disable sound sync"; string disableSoundsText = isDisableSounds ? "Enable sound sync" : "Disable sound sync";
var disableSoundsIcon = isDisableSounds ? FontAwesomeIcon.VolumeUp : FontAwesomeIcon.VolumeMute; var disableSoundsIcon = isDisableSounds ? FontAwesomeIcon.VolumeUp : FontAwesomeIcon.VolumeMute;
if (UiSharedService.NormalizedIconTextButton(disableSoundsIcon, disableSoundsText)) if (_uiSharedService.IconTextButton(disableSoundsIcon, disableSoundsText))
{ {
var permissions = entry.UserPair.OwnPermissions; var permissions = entry.UserPair.OwnPermissions;
permissions.SetDisableSounds(!isDisableSounds); permissions.SetDisableSounds(!isDisableSounds);
@@ -255,7 +258,7 @@ public class DrawUserPair : DrawPairBase
var isDisableAnims = entry.UserPair!.OwnPermissions.IsDisableAnimations(); var isDisableAnims = entry.UserPair!.OwnPermissions.IsDisableAnimations();
string disableAnimsText = isDisableAnims ? "Enable animation sync" : "Disable animation sync"; string disableAnimsText = isDisableAnims ? "Enable animation sync" : "Disable animation sync";
var disableAnimsIcon = isDisableAnims ? FontAwesomeIcon.Running : FontAwesomeIcon.Stop; var disableAnimsIcon = isDisableAnims ? FontAwesomeIcon.Running : FontAwesomeIcon.Stop;
if (UiSharedService.NormalizedIconTextButton(disableAnimsIcon, disableAnimsText)) if (_uiSharedService.IconTextButton(disableAnimsIcon, disableAnimsText))
{ {
var permissions = entry.UserPair.OwnPermissions; var permissions = entry.UserPair.OwnPermissions;
permissions.SetDisableAnimations(!isDisableAnims); permissions.SetDisableAnimations(!isDisableAnims);
@@ -265,14 +268,14 @@ public class DrawUserPair : DrawPairBase
var isDisableVFX = entry.UserPair!.OwnPermissions.IsDisableVFX(); var isDisableVFX = entry.UserPair!.OwnPermissions.IsDisableVFX();
string disableVFXText = isDisableVFX ? "Enable VFX sync" : "Disable VFX sync"; string disableVFXText = isDisableVFX ? "Enable VFX sync" : "Disable VFX sync";
var disableVFXIcon = isDisableVFX ? FontAwesomeIcon.Sun : FontAwesomeIcon.Circle; var disableVFXIcon = isDisableVFX ? FontAwesomeIcon.Sun : FontAwesomeIcon.Circle;
if (UiSharedService.NormalizedIconTextButton(disableVFXIcon, disableVFXText)) if (_uiSharedService.IconTextButton(disableVFXIcon, disableVFXText))
{ {
var permissions = entry.UserPair.OwnPermissions; var permissions = entry.UserPair.OwnPermissions;
permissions.SetDisableVFX(!isDisableVFX); permissions.SetDisableVFX(!isDisableVFX);
_ = _apiController.UserSetPairPermissions(new UserPermissionsDto(entry.UserData, permissions)); _ = _apiController.UserSetPairPermissions(new UserPermissionsDto(entry.UserData, permissions));
} }
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Trash, "Unpair Permanently") && UiSharedService.CtrlPressed()) if (_uiSharedService.IconTextButton(FontAwesomeIcon.Trash, "Unpair Permanently") && UiSharedService.CtrlPressed())
{ {
_ = _apiController.UserRemovePair(new(entry.UserData)); _ = _apiController.UserRemovePair(new(entry.UserData));
} }

View File

@@ -77,7 +77,7 @@ internal sealed class GroupPanel
private void DrawAddSyncshell() private void DrawAddSyncshell()
{ {
var buttonSize = UiSharedService.GetIconButtonSize(FontAwesomeIcon.Plus); var buttonSize = _uiShared.GetIconButtonSize(FontAwesomeIcon.Plus);
ImGui.SetNextItemWidth(UiSharedService.GetWindowContentRegionWidth() - ImGui.GetWindowContentRegionMin().X - buttonSize.X); ImGui.SetNextItemWidth(UiSharedService.GetWindowContentRegionWidth() - ImGui.GetWindowContentRegionMin().X - buttonSize.X);
ImGui.InputTextWithHint("##syncshellid", "Syncshell GID/Alias (leave empty to create)", ref _syncShellToJoin, 20); ImGui.InputTextWithHint("##syncshellid", "Syncshell GID/Alias (leave empty to create)", ref _syncShellToJoin, 20);
ImGui.SameLine(ImGui.GetWindowContentRegionMin().X + UiSharedService.GetWindowContentRegionWidth() - buttonSize.X); ImGui.SameLine(ImGui.GetWindowContentRegionMin().X + UiSharedService.GetWindowContentRegionWidth() - buttonSize.X);
@@ -202,7 +202,7 @@ internal sealed class GroupPanel
} }
var icon = isExpanded ? FontAwesomeIcon.CaretSquareDown : FontAwesomeIcon.CaretSquareRight; var icon = isExpanded ? FontAwesomeIcon.CaretSquareDown : FontAwesomeIcon.CaretSquareRight;
UiSharedService.FontText(icon.ToIconString(), UiBuilder.IconFont); _uiShared.IconText(icon);
if (ImGui.IsItemClicked(ImGuiMouseButton.Left)) if (ImGui.IsItemClicked(ImGuiMouseButton.Left))
{ {
_expandedGroupState[groupDto.GID] = !_expandedGroupState[groupDto.GID]; _expandedGroupState[groupDto.GID] = !_expandedGroupState[groupDto.GID];
@@ -273,7 +273,7 @@ internal sealed class GroupPanel
} }
else else
{ {
var buttonSizes = UiSharedService.GetIconButtonSize(FontAwesomeIcon.Bars).X + UiSharedService.GetIconButtonSize(FontAwesomeIcon.LockOpen).X; var buttonSizes = _uiShared.GetIconButtonSize(FontAwesomeIcon.Bars).X + _uiShared.GetIconButtonSize(FontAwesomeIcon.LockOpen).X;
ImGui.SetNextItemWidth(UiSharedService.GetWindowContentRegionWidth() - ImGui.GetCursorPosX() - buttonSizes - ImGui.GetStyle().ItemSpacing.X * 2); ImGui.SetNextItemWidth(UiSharedService.GetWindowContentRegionWidth() - ImGui.GetCursorPosX() - buttonSizes - ImGui.GetStyle().ItemSpacing.X * 2);
if (ImGui.InputTextWithHint("", "Comment/Notes", ref _editGroupComment, 255, ImGuiInputTextFlags.EnterReturnsTrue)) if (ImGui.InputTextWithHint("", "Comment/Notes", ref _editGroupComment, 255, ImGuiInputTextFlags.EnterReturnsTrue))
{ {
@@ -302,7 +302,7 @@ internal sealed class GroupPanel
if (ImGui.BeginPopupModal("Manage Banlist for " + groupDto.GID, ref _showModalBanList, UiSharedService.PopupWindowFlags)) if (ImGui.BeginPopupModal("Manage Banlist for " + groupDto.GID, ref _showModalBanList, UiSharedService.PopupWindowFlags))
{ {
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Retweet, "Refresh Banlist from Server")) if (_uiShared.IconTextButton(FontAwesomeIcon.Retweet, "Refresh Banlist from Server"))
{ {
_bannedUsers = ApiController.GroupGetBannedUsers(groupDto).Result; _bannedUsers = ApiController.GroupGetBannedUsers(groupDto).Result;
} }
@@ -331,7 +331,7 @@ internal sealed class GroupPanel
ImGui.TableNextColumn(); ImGui.TableNextColumn();
UiSharedService.TextWrapped(bannedUser.Reason); UiSharedService.TextWrapped(bannedUser.Reason);
ImGui.TableNextColumn(); ImGui.TableNextColumn();
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Check, "Unban#" + bannedUser.UID)) if (_uiShared.IconTextButton(FontAwesomeIcon.Check, "Unban#" + bannedUser.UID))
{ {
_ = ApiController.GroupUnbanUser(bannedUser); _ = ApiController.GroupUnbanUser(bannedUser);
_bannedUsers.RemoveAll(b => string.Equals(b.UID, bannedUser.UID, StringComparison.Ordinal)); _bannedUsers.RemoveAll(b => string.Equals(b.UID, bannedUser.UID, StringComparison.Ordinal));
@@ -392,7 +392,7 @@ internal sealed class GroupPanel
{ {
ImGui.SetNextItemWidth(-1); ImGui.SetNextItemWidth(-1);
ImGui.SliderInt("Amount##bulkinvites", ref _bulkInviteCount, 1, 100); ImGui.SliderInt("Amount##bulkinvites", ref _bulkInviteCount, 1, 100);
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.MailBulk, "Create invites")) if (_uiShared.IconTextButton(FontAwesomeIcon.MailBulk, "Create invites"))
{ {
_bulkOneTimeInvites = ApiController.GroupCreateTempInvite(groupDto, _bulkInviteCount).Result; _bulkOneTimeInvites = ApiController.GroupCreateTempInvite(groupDto, _bulkInviteCount).Result;
} }
@@ -400,7 +400,7 @@ internal sealed class GroupPanel
else else
{ {
UiSharedService.TextWrapped("A total of " + _bulkOneTimeInvites.Count + " invites have been created."); UiSharedService.TextWrapped("A total of " + _bulkOneTimeInvites.Count + " invites have been created.");
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Copy, "Copy invites to clipboard")) if (_uiShared.IconTextButton(FontAwesomeIcon.Copy, "Copy invites to clipboard"))
{ {
ImGui.SetClipboardText(string.Join(Environment.NewLine, _bulkOneTimeInvites)); ImGui.SetClipboardText(string.Join(Environment.NewLine, _bulkOneTimeInvites));
} }
@@ -431,7 +431,8 @@ internal sealed class GroupPanel
pair.GroupPair.Single( pair.GroupPair.Single(
g => GroupDataComparer.Instance.Equals(g.Key.Group, groupDto.Group) g => GroupDataComparer.Instance.Equals(g.Key.Group, groupDto.Group)
).Value, ).Value,
_uidDisplayHandler); _uidDisplayHandler,
_uiShared);
if (pair.IsVisible) if (pair.IsVisible)
visibleUsers.Add(drawPair); visibleUsers.Add(drawPair);
@@ -491,19 +492,19 @@ internal sealed class GroupPanel
var userVFXIcon = userVFXDisabled ? FontAwesomeIcon.Circle : FontAwesomeIcon.Sun; var userVFXIcon = userVFXDisabled ? FontAwesomeIcon.Circle : FontAwesomeIcon.Sun;
var iconSize = UiSharedService.GetIconSize(infoIcon); var iconSize = UiSharedService.GetIconSize(infoIcon);
var barbuttonSize = UiSharedService.GetIconButtonSize(FontAwesomeIcon.Bars); var barbuttonSize = _uiShared.GetIconButtonSize(FontAwesomeIcon.Bars);
var isOwner = string.Equals(groupDto.OwnerUID, ApiController.UID, StringComparison.Ordinal); var isOwner = string.Equals(groupDto.OwnerUID, ApiController.UID, StringComparison.Ordinal);
var spacingX = ImGui.GetStyle().ItemSpacing.X; var spacingX = ImGui.GetStyle().ItemSpacing.X;
var windowEndX = ImGui.GetWindowContentRegionMin().X + UiSharedService.GetWindowContentRegionWidth(); var windowEndX = ImGui.GetWindowContentRegionMin().X + UiSharedService.GetWindowContentRegionWidth();
var pauseIcon = groupDto.GroupUserPermissions.IsPaused() ? FontAwesomeIcon.Play : FontAwesomeIcon.Pause; var pauseIcon = groupDto.GroupUserPermissions.IsPaused() ? FontAwesomeIcon.Play : FontAwesomeIcon.Pause;
var pauseIconSize = UiSharedService.GetIconButtonSize(pauseIcon); var pauseIconSize = _uiShared.GetIconButtonSize(pauseIcon);
ImGui.SameLine(windowEndX - barbuttonSize.X - (showInfoIcon ? iconSize.X : 0) - (showInfoIcon ? spacingX : 0) - pauseIconSize.X - spacingX); ImGui.SameLine(windowEndX - barbuttonSize.X - (showInfoIcon ? iconSize.X : 0) - (showInfoIcon ? spacingX : 0) - pauseIconSize.X - spacingX);
if (showInfoIcon) if (showInfoIcon)
{ {
UiSharedService.FontText(infoIcon.ToIconString(), UiBuilder.IconFont); _uiShared.IconText(infoIcon);
if (ImGui.IsItemHovered()) if (ImGui.IsItemHovered())
{ {
ImGui.BeginTooltip(); ImGui.BeginTooltip();
@@ -514,7 +515,7 @@ internal sealed class GroupPanel
if (!invitesEnabled) if (!invitesEnabled)
{ {
var lockedText = "Syncshell is closed for joining"; var lockedText = "Syncshell is closed for joining";
UiSharedService.FontText(lockedIcon.ToIconString(), UiBuilder.IconFont); _uiShared.IconText(lockedIcon);
ImGui.SameLine(40 * ImGuiHelpers.GlobalScale); ImGui.SameLine(40 * ImGuiHelpers.GlobalScale);
ImGui.Text(lockedText); ImGui.Text(lockedText);
} }
@@ -522,7 +523,7 @@ internal sealed class GroupPanel
if (soundsDisabled) if (soundsDisabled)
{ {
var soundsText = "Sound sync disabled through owner"; var soundsText = "Sound sync disabled through owner";
UiSharedService.FontText(soundsIcon.ToIconString(), UiBuilder.IconFont); _uiShared.IconText(soundsIcon);
ImGui.SameLine(40 * ImGuiHelpers.GlobalScale); ImGui.SameLine(40 * ImGuiHelpers.GlobalScale);
ImGui.Text(soundsText); ImGui.Text(soundsText);
} }
@@ -530,7 +531,7 @@ internal sealed class GroupPanel
if (animDisabled) if (animDisabled)
{ {
var animText = "Animation sync disabled through owner"; var animText = "Animation sync disabled through owner";
UiSharedService.FontText(animIcon.ToIconString(), UiBuilder.IconFont); _uiShared.IconText(animIcon);
ImGui.SameLine(40 * ImGuiHelpers.GlobalScale); ImGui.SameLine(40 * ImGuiHelpers.GlobalScale);
ImGui.Text(animText); ImGui.Text(animText);
} }
@@ -538,7 +539,7 @@ internal sealed class GroupPanel
if (vfxDisabled) if (vfxDisabled)
{ {
var vfxText = "VFX sync disabled through owner"; var vfxText = "VFX sync disabled through owner";
UiSharedService.FontText(vfxIcon.ToIconString(), UiBuilder.IconFont); _uiShared.IconText(vfxIcon);
ImGui.SameLine(40 * ImGuiHelpers.GlobalScale); ImGui.SameLine(40 * ImGuiHelpers.GlobalScale);
ImGui.Text(vfxText); ImGui.Text(vfxText);
} }
@@ -554,7 +555,7 @@ internal sealed class GroupPanel
if (userSoundsDisabled) if (userSoundsDisabled)
{ {
var userSoundsText = "Sound sync disabled through you"; var userSoundsText = "Sound sync disabled through you";
UiSharedService.FontText(userSoundsIcon.ToIconString(), UiBuilder.IconFont); _uiShared.IconText(userSoundsIcon);
ImGui.SameLine(40 * ImGuiHelpers.GlobalScale); ImGui.SameLine(40 * ImGuiHelpers.GlobalScale);
ImGui.Text(userSoundsText); ImGui.Text(userSoundsText);
} }
@@ -562,7 +563,7 @@ internal sealed class GroupPanel
if (userAnimDisabled) if (userAnimDisabled)
{ {
var userAnimText = "Animation sync disabled through you"; var userAnimText = "Animation sync disabled through you";
UiSharedService.FontText(userAnimIcon.ToIconString(), UiBuilder.IconFont); _uiShared.IconText(userAnimIcon);
ImGui.SameLine(40 * ImGuiHelpers.GlobalScale); ImGui.SameLine(40 * ImGuiHelpers.GlobalScale);
ImGui.Text(userAnimText); ImGui.Text(userAnimText);
} }
@@ -570,7 +571,7 @@ internal sealed class GroupPanel
if (userVFXDisabled) if (userVFXDisabled)
{ {
var userVFXText = "VFX sync disabled through you"; var userVFXText = "VFX sync disabled through you";
UiSharedService.FontText(userVFXIcon.ToIconString(), UiBuilder.IconFont); _uiShared.IconText(userVFXIcon);
ImGui.SameLine(40 * ImGuiHelpers.GlobalScale); ImGui.SameLine(40 * ImGuiHelpers.GlobalScale);
ImGui.Text(userVFXText); ImGui.Text(userVFXText);
} }
@@ -598,21 +599,21 @@ internal sealed class GroupPanel
if (ImGui.BeginPopup("ShellPopup")) if (ImGui.BeginPopup("ShellPopup"))
{ {
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.ArrowCircleLeft, "Leave Syncshell") && UiSharedService.CtrlPressed()) if (_uiShared.IconTextButton(FontAwesomeIcon.ArrowCircleLeft, "Leave Syncshell") && UiSharedService.CtrlPressed())
{ {
_ = ApiController.GroupLeave(groupDto); _ = ApiController.GroupLeave(groupDto);
} }
UiSharedService.AttachToolTip("Hold CTRL and click to leave this Syncshell" + (!string.Equals(groupDto.OwnerUID, ApiController.UID, StringComparison.Ordinal) ? string.Empty : Environment.NewLine UiSharedService.AttachToolTip("Hold CTRL and click to leave this Syncshell" + (!string.Equals(groupDto.OwnerUID, ApiController.UID, StringComparison.Ordinal) ? string.Empty : Environment.NewLine
+ "WARNING: This action is irreversible" + Environment.NewLine + "Leaving an owned Syncshell will transfer the ownership to a random person in the Syncshell.")); + "WARNING: This action is irreversible" + Environment.NewLine + "Leaving an owned Syncshell will transfer the ownership to a random person in the Syncshell."));
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Copy, "Copy ID")) if (_uiShared.IconTextButton(FontAwesomeIcon.Copy, "Copy ID"))
{ {
ImGui.CloseCurrentPopup(); ImGui.CloseCurrentPopup();
ImGui.SetClipboardText(groupDto.GroupAliasOrGID); ImGui.SetClipboardText(groupDto.GroupAliasOrGID);
} }
UiSharedService.AttachToolTip("Copy Syncshell ID to Clipboard"); UiSharedService.AttachToolTip("Copy Syncshell ID to Clipboard");
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.StickyNote, "Copy Notes")) if (_uiShared.IconTextButton(FontAwesomeIcon.StickyNote, "Copy Notes"))
{ {
ImGui.CloseCurrentPopup(); ImGui.CloseCurrentPopup();
ImGui.SetClipboardText(UiSharedService.GetNotes(groupPairs)); ImGui.SetClipboardText(UiSharedService.GetNotes(groupPairs));
@@ -620,7 +621,7 @@ internal sealed class GroupPanel
UiSharedService.AttachToolTip("Copies all your notes for all users in this Syncshell to the clipboard." + Environment.NewLine + "They can be imported via Settings -> General -> Notes -> Import notes from clipboard"); UiSharedService.AttachToolTip("Copies all your notes for all users in this Syncshell to the clipboard." + Environment.NewLine + "They can be imported via Settings -> General -> Notes -> Import notes from clipboard");
var soundsText = userSoundsDisabled ? "Enable sound sync" : "Disable sound sync"; var soundsText = userSoundsDisabled ? "Enable sound sync" : "Disable sound sync";
if (UiSharedService.NormalizedIconTextButton(userSoundsIcon, soundsText)) if (_uiShared.IconTextButton(userSoundsIcon, soundsText))
{ {
ImGui.CloseCurrentPopup(); ImGui.CloseCurrentPopup();
var perm = groupDto.GroupUserPermissions; var perm = groupDto.GroupUserPermissions;
@@ -633,7 +634,7 @@ internal sealed class GroupPanel
+ Environment.NewLine + "Note: this setting does not apply to individual pairs that are also in the syncshell."); + Environment.NewLine + "Note: this setting does not apply to individual pairs that are also in the syncshell.");
var animText = userAnimDisabled ? "Enable animations sync" : "Disable animations sync"; var animText = userAnimDisabled ? "Enable animations sync" : "Disable animations sync";
if (UiSharedService.NormalizedIconTextButton(userAnimIcon, animText)) if (_uiShared.IconTextButton(userAnimIcon, animText))
{ {
ImGui.CloseCurrentPopup(); ImGui.CloseCurrentPopup();
var perm = groupDto.GroupUserPermissions; var perm = groupDto.GroupUserPermissions;
@@ -647,7 +648,7 @@ internal sealed class GroupPanel
+ Environment.NewLine + "Note: this setting does not apply to individual pairs that are also in the syncshell."); + Environment.NewLine + "Note: this setting does not apply to individual pairs that are also in the syncshell.");
var vfxText = userVFXDisabled ? "Enable VFX sync" : "Disable VFX sync"; var vfxText = userVFXDisabled ? "Enable VFX sync" : "Disable VFX sync";
if (UiSharedService.NormalizedIconTextButton(userVFXIcon, vfxText)) if (_uiShared.IconTextButton(userVFXIcon, vfxText))
{ {
ImGui.CloseCurrentPopup(); ImGui.CloseCurrentPopup();
var perm = groupDto.GroupUserPermissions; var perm = groupDto.GroupUserPermissions;
@@ -663,7 +664,7 @@ internal sealed class GroupPanel
if (isOwner || groupDto.GroupUserInfo.IsModerator()) if (isOwner || groupDto.GroupUserInfo.IsModerator())
{ {
ImGui.Separator(); ImGui.Separator();
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Cog, "Open Admin Panel")) if (_uiShared.IconTextButton(FontAwesomeIcon.Cog, "Open Admin Panel"))
{ {
ImGui.CloseCurrentPopup(); ImGui.CloseCurrentPopup();
_mainUi.Mediator.Publish(new OpenSyncshellAdminPanel(groupDto)); _mainUi.Mediator.Publish(new OpenSyncshellAdminPanel(groupDto));

View File

@@ -17,14 +17,17 @@ public class PairGroupsUi
private readonly SelectPairForGroupUi _selectGroupForPairUi; private readonly SelectPairForGroupUi _selectGroupForPairUi;
private readonly TagHandler _tagHandler; private readonly TagHandler _tagHandler;
private readonly UidDisplayHandler _uidDisplayHandler; private readonly UidDisplayHandler _uidDisplayHandler;
private readonly UiSharedService _uiSharedService;
public PairGroupsUi(MareConfigService mareConfig, TagHandler tagHandler, UidDisplayHandler uidDisplayHandler, ApiController apiController, SelectPairForGroupUi selectGroupForPairUi) public PairGroupsUi(MareConfigService mareConfig, TagHandler tagHandler, UidDisplayHandler uidDisplayHandler, ApiController apiController,
SelectPairForGroupUi selectGroupForPairUi, UiSharedService uiSharedService)
{ {
_mareConfig = mareConfig; _mareConfig = mareConfig;
_tagHandler = tagHandler; _tagHandler = tagHandler;
_uidDisplayHandler = uidDisplayHandler; _uidDisplayHandler = uidDisplayHandler;
_apiController = apiController; _apiController = apiController;
_selectGroupForPairUi = selectGroupForPairUi; _selectGroupForPairUi = selectGroupForPairUi;
_uiSharedService = uiSharedService;
} }
public void Draw<T>(List<T> visibleUsers, List<T> onlineUsers, List<T> offlineUsers) where T : DrawPairBase public void Draw<T>(List<T> visibleUsers, List<T> onlineUsers, List<T> offlineUsers) where T : DrawPairBase
@@ -43,8 +46,8 @@ public class PairGroupsUi
{ {
var allArePaused = availablePairsInThisTag.All(pair => pair.UserPair!.OwnPermissions.IsPaused()); var allArePaused = availablePairsInThisTag.All(pair => pair.UserPair!.OwnPermissions.IsPaused());
var pauseButton = allArePaused ? FontAwesomeIcon.Play : FontAwesomeIcon.Pause; var pauseButton = allArePaused ? FontAwesomeIcon.Play : FontAwesomeIcon.Pause;
var flyoutMenuX = UiSharedService.GetIconButtonSize(FontAwesomeIcon.Bars).X; var flyoutMenuX = _uiSharedService.GetIconButtonSize(FontAwesomeIcon.Bars).X;
var pauseButtonX = UiSharedService.GetIconButtonSize(pauseButton).X; var pauseButtonX = _uiSharedService.GetIconButtonSize(pauseButton).X;
var windowX = ImGui.GetWindowContentRegionMin().X; var windowX = ImGui.GetWindowContentRegionMin().X;
var windowWidth = UiSharedService.GetWindowContentRegionWidth(); var windowWidth = UiSharedService.GetWindowContentRegionWidth();
var spacingX = ImGui.GetStyle().ItemSpacing.X; var spacingX = ImGui.GetStyle().ItemSpacing.X;
@@ -137,13 +140,13 @@ public class PairGroupsUi
private void DrawGroupMenu(string tag) private void DrawGroupMenu(string tag)
{ {
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Users, "Add people to " + tag)) if (_uiSharedService.IconTextButton(FontAwesomeIcon.Users, "Add people to " + tag))
{ {
_selectGroupForPairUi.Open(tag); _selectGroupForPairUi.Open(tag);
} }
UiSharedService.AttachToolTip($"Add more users to Group {tag}"); UiSharedService.AttachToolTip($"Add more users to Group {tag}");
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Trash, "Delete " + tag) && UiSharedService.CtrlPressed()) if (_uiSharedService.IconTextButton(FontAwesomeIcon.Trash, "Delete " + tag) && UiSharedService.CtrlPressed())
{ {
_tagHandler.RemoveTag(tag); _tagHandler.RemoveTag(tag);
} }
@@ -165,13 +168,13 @@ public class PairGroupsUi
// FontAwesomeIcon.CaretSquareDown : FontAwesomeIcon.CaretSquareRight // FontAwesomeIcon.CaretSquareDown : FontAwesomeIcon.CaretSquareRight
var icon = _tagHandler.IsTagOpen(tag) ? FontAwesomeIcon.CaretSquareDown : FontAwesomeIcon.CaretSquareRight; var icon = _tagHandler.IsTagOpen(tag) ? FontAwesomeIcon.CaretSquareDown : FontAwesomeIcon.CaretSquareRight;
UiSharedService.FontText(icon.ToIconString(), UiBuilder.IconFont); _uiSharedService.IconText(icon);
if (ImGui.IsItemClicked(ImGuiMouseButton.Left)) if (ImGui.IsItemClicked(ImGuiMouseButton.Left))
{ {
ToggleTagOpen(tag); ToggleTagOpen(tag);
} }
ImGui.SameLine(); ImGui.SameLine();
UiSharedService.FontText(resultFolderName, UiBuilder.DefaultFont); ImGui.TextUnformatted(resultFolderName);
if (ImGui.IsItemClicked(ImGuiMouseButton.Left)) if (ImGui.IsItemClicked(ImGuiMouseButton.Left))
{ {
ToggleTagOpen(tag); ToggleTagOpen(tag);

View File

@@ -11,13 +11,15 @@ namespace MareSynchronos.UI.Components.Popup;
public class BanUserPopupHandler : IPopupHandler public class BanUserPopupHandler : IPopupHandler
{ {
private readonly ApiController _apiController; private readonly ApiController _apiController;
private readonly UiSharedService _uiSharedService;
private string _banReason = string.Empty; private string _banReason = string.Empty;
private GroupFullInfoDto _group = null!; private GroupFullInfoDto _group = null!;
private Pair _reportedPair = null!; private Pair _reportedPair = null!;
public BanUserPopupHandler(ApiController apiController) public BanUserPopupHandler(ApiController apiController, UiSharedService uiSharedService)
{ {
_apiController = apiController; _apiController = apiController;
_uiSharedService = uiSharedService;
} }
public Vector2 PopupSize => new(500, 250); public Vector2 PopupSize => new(500, 250);
@@ -29,7 +31,7 @@ public class BanUserPopupHandler : IPopupHandler
UiSharedService.TextWrapped("User " + (_reportedPair.UserData.AliasOrUID) + " will be banned and removed from this Syncshell."); UiSharedService.TextWrapped("User " + (_reportedPair.UserData.AliasOrUID) + " will be banned and removed from this Syncshell.");
ImGui.InputTextWithHint("##banreason", "Ban Reason", ref _banReason, 255); ImGui.InputTextWithHint("##banreason", "Ban Reason", ref _banReason, 255);
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.UserSlash, "Ban User")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.UserSlash, "Ban User"))
{ {
ImGui.CloseCurrentPopup(); ImGui.CloseCurrentPopup();
var reason = _banReason; var reason = _banReason;

View File

@@ -13,10 +13,11 @@ public class PopupHandler : WindowMediatorSubscriberBase
{ {
protected bool _openPopup = false; protected bool _openPopup = false;
private readonly HashSet<IPopupHandler> _handlers; private readonly HashSet<IPopupHandler> _handlers;
private readonly UiSharedService _uiSharedService;
private IPopupHandler? _currentHandler = null; private IPopupHandler? _currentHandler = null;
public PopupHandler(ILogger<PopupHandler> logger, MareMediator mediator, IEnumerable<IPopupHandler> popupHandlers, public PopupHandler(ILogger<PopupHandler> logger, MareMediator mediator, IEnumerable<IPopupHandler> popupHandlers,
PerformanceCollectorService performanceCollectorService) PerformanceCollectorService performanceCollectorService, UiSharedService uiSharedService)
: base(logger, mediator, "MarePopupHandler", performanceCollectorService) : base(logger, mediator, "MarePopupHandler", performanceCollectorService)
{ {
Flags = ImGuiWindowFlags.NoBringToFrontOnFocus Flags = ImGuiWindowFlags.NoBringToFrontOnFocus
@@ -48,6 +49,7 @@ public class PopupHandler : WindowMediatorSubscriberBase
((BanUserPopupHandler)_currentHandler).Open(msg); ((BanUserPopupHandler)_currentHandler).Open(msg);
IsOpen = true; IsOpen = true;
}); });
_uiSharedService = uiSharedService;
} }
protected override void DrawInternal() protected override void DrawInternal()
@@ -69,7 +71,7 @@ public class PopupHandler : WindowMediatorSubscriberBase
if (_currentHandler.ShowClose) if (_currentHandler.ShowClose)
{ {
ImGui.Separator(); ImGui.Separator();
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Times, "Close")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.Times, "Close"))
{ {
ImGui.CloseCurrentPopup(); ImGui.CloseCurrentPopup();
} }

View File

@@ -41,7 +41,7 @@ internal class ReportPopupHandler : IPopupHandler
using (ImRaii.Disabled(string.IsNullOrEmpty(_reportReason))) using (ImRaii.Disabled(string.IsNullOrEmpty(_reportReason)))
{ {
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.ExclamationTriangle, "Send Report")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.ExclamationTriangle, "Send Report"))
{ {
ImGui.CloseCurrentPopup(); ImGui.CloseCurrentPopup();
var reason = _reportReason; var reason = _reportReason;

View File

@@ -13,6 +13,7 @@ public class SelectGroupForPairUi
{ {
private readonly TagHandler _tagHandler; private readonly TagHandler _tagHandler;
private readonly UidDisplayHandler _uidDisplayHandler; private readonly UidDisplayHandler _uidDisplayHandler;
private readonly UiSharedService _uiSharedService;
/// <summary> /// <summary>
/// The group UI is always open for a specific pair. This defines which pair the UI is open for. /// The group UI is always open for a specific pair. This defines which pair the UI is open for.
@@ -30,12 +31,13 @@ public class SelectGroupForPairUi
/// </summary> /// </summary>
private string _tagNameToAdd = ""; private string _tagNameToAdd = "";
public SelectGroupForPairUi(TagHandler tagHandler, UidDisplayHandler uidDisplayHandler) public SelectGroupForPairUi(TagHandler tagHandler, UidDisplayHandler uidDisplayHandler, UiSharedService uiSharedService)
{ {
_show = false; _show = false;
_pair = null; _pair = null;
_tagHandler = tagHandler; _tagHandler = tagHandler;
_uidDisplayHandler = uidDisplayHandler; _uidDisplayHandler = uidDisplayHandler;
_uiSharedService = uiSharedService;
} }
public void Draw() public void Draw()
@@ -60,7 +62,7 @@ public class SelectGroupForPairUi
var childHeight = tags.Count != 0 ? tags.Count * 25 : 1; var childHeight = tags.Count != 0 ? tags.Count * 25 : 1;
var childSize = new Vector2(0, childHeight > 100 ? 100 : childHeight) * ImGuiHelpers.GlobalScale; var childSize = new Vector2(0, childHeight > 100 ? 100 : childHeight) * ImGuiHelpers.GlobalScale;
UiSharedService.FontText($"Select the groups you want {name} to be in.", UiBuilder.DefaultFont); ImGui.TextUnformatted($"Select the groups you want {name} to be in.");
if (ImGui.BeginChild(name + "##listGroups", childSize)) if (ImGui.BeginChild(name + "##listGroups", childSize))
{ {
foreach (var tag in tags) foreach (var tag in tags)
@@ -71,8 +73,8 @@ public class SelectGroupForPairUi
} }
ImGui.Separator(); ImGui.Separator();
UiSharedService.FontText($"Create a new group for {name}.", UiBuilder.DefaultFont); ImGui.TextUnformatted($"Create a new group for {name}.");
if (UiSharedService.NormalizedIconButton(FontAwesomeIcon.Plus)) if (_uiSharedService.IconButton(FontAwesomeIcon.Plus))
{ {
HandleAddTag(); HandleAddTag();
} }

View File

@@ -1,9 +1,8 @@
using System.Numerics; using Dalamud.Interface.Utility;
using Dalamud.Interface;
using Dalamud.Interface.Utility;
using ImGuiNET; using ImGuiNET;
using MareSynchronos.PlayerData.Pairs; using MareSynchronos.PlayerData.Pairs;
using MareSynchronos.UI.Handlers; using MareSynchronos.UI.Handlers;
using System.Numerics;
namespace MareSynchronos.UI.Components; namespace MareSynchronos.UI.Components;
@@ -47,7 +46,8 @@ public class SelectPairForGroupUi
ImGui.SetNextWindowSizeConstraints(minSize, maxSize); ImGui.SetNextWindowSizeConstraints(minSize, maxSize);
if (ImGui.BeginPopupModal(popupName, ref _show, ImGuiWindowFlags.Popup | ImGuiWindowFlags.Modal)) if (ImGui.BeginPopupModal(popupName, ref _show, ImGuiWindowFlags.Popup | ImGuiWindowFlags.Modal))
{ {
UiSharedService.FontText($"Select users for group {_tag}", UiBuilder.DefaultFont); ImGui.TextUnformatted($"Select users for group {_tag}");
ImGui.InputTextWithHint("##filter", "Filter", ref _filter, 255, ImGuiInputTextFlags.None); ImGui.InputTextWithHint("##filter", "Filter", ref _filter, 255, ImGuiInputTextFlags.None);
foreach (var item in pairs foreach (var item in pairs
.Where(p => string.IsNullOrEmpty(_filter) || PairName(p).Contains(_filter, StringComparison.OrdinalIgnoreCase)) .Where(p => string.IsNullOrEmpty(_filter) || PairName(p).Contains(_filter, StringComparison.OrdinalIgnoreCase))

View File

@@ -17,6 +17,7 @@ public class DataAnalysisUi : WindowMediatorSubscriberBase
private readonly CharacterAnalyzer _characterAnalyzer; private readonly CharacterAnalyzer _characterAnalyzer;
private readonly Progress<(string, int)> _conversionProgress = new(); private readonly Progress<(string, int)> _conversionProgress = new();
private readonly IpcManager _ipcManager; private readonly IpcManager _ipcManager;
private readonly UiSharedService _uiSharedService;
private readonly Dictionary<string, string[]> _texturesToConvert = new(StringComparer.Ordinal); private readonly Dictionary<string, string[]> _texturesToConvert = new(StringComparer.Ordinal);
private Dictionary<ObjectKind, Dictionary<string, CharacterAnalyzer.FileDataEntry>>? _cachedAnalysis; private Dictionary<ObjectKind, Dictionary<string, CharacterAnalyzer.FileDataEntry>>? _cachedAnalysis;
private CancellationTokenSource _conversionCancellationTokenSource = new(); private CancellationTokenSource _conversionCancellationTokenSource = new();
@@ -33,11 +34,13 @@ public class DataAnalysisUi : WindowMediatorSubscriberBase
public DataAnalysisUi(ILogger<DataAnalysisUi> logger, MareMediator mediator, public DataAnalysisUi(ILogger<DataAnalysisUi> logger, MareMediator mediator,
CharacterAnalyzer characterAnalyzer, IpcManager ipcManager, CharacterAnalyzer characterAnalyzer, IpcManager ipcManager,
PerformanceCollectorService performanceCollectorService) PerformanceCollectorService performanceCollectorService,
UiSharedService uiSharedService)
: base(logger, mediator, "Character Data Analysis", performanceCollectorService) : base(logger, mediator, "Character Data Analysis", performanceCollectorService)
{ {
_characterAnalyzer = characterAnalyzer; _characterAnalyzer = characterAnalyzer;
_ipcManager = ipcManager; _ipcManager = ipcManager;
_uiSharedService = uiSharedService;
Mediator.Subscribe<CharacterDataAnalyzedMessage>(this, (_) => Mediator.Subscribe<CharacterDataAnalyzedMessage>(this, (_) =>
{ {
_hasUpdate = true; _hasUpdate = true;
@@ -68,7 +71,7 @@ public class DataAnalysisUi : WindowMediatorSubscriberBase
{ {
ImGui.TextUnformatted("BC7 Conversion in progress: " + _conversionCurrentFileProgress + "/" + _texturesToConvert.Count); ImGui.TextUnformatted("BC7 Conversion in progress: " + _conversionCurrentFileProgress + "/" + _texturesToConvert.Count);
UiSharedService.TextWrapped("Current file: " + _conversionCurrentFileName); UiSharedService.TextWrapped("Current file: " + _conversionCurrentFileName);
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.StopCircle, "Cancel conversion")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.StopCircle, "Cancel conversion"))
{ {
_conversionCancellationTokenSource.Cancel(); _conversionCancellationTokenSource.Cancel();
} }
@@ -111,7 +114,7 @@ public class DataAnalysisUi : WindowMediatorSubscriberBase
{ {
UiSharedService.ColorTextWrapped($"Analyzing {_characterAnalyzer.CurrentFile}/{_characterAnalyzer.TotalFiles}", UiSharedService.ColorTextWrapped($"Analyzing {_characterAnalyzer.CurrentFile}/{_characterAnalyzer.TotalFiles}",
ImGuiColors.DalamudYellow); ImGuiColors.DalamudYellow);
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.StopCircle, "Cancel analysis")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.StopCircle, "Cancel analysis"))
{ {
_characterAnalyzer.CancelAnalyze(); _characterAnalyzer.CancelAnalyze();
} }
@@ -122,14 +125,14 @@ public class DataAnalysisUi : WindowMediatorSubscriberBase
{ {
UiSharedService.ColorTextWrapped("Some entries in the analysis have file size not determined yet, press the button below to analyze your current data", UiSharedService.ColorTextWrapped("Some entries in the analysis have file size not determined yet, press the button below to analyze your current data",
ImGuiColors.DalamudYellow); ImGuiColors.DalamudYellow);
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.PlayCircle, "Start analysis (missing entries)")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.PlayCircle, "Start analysis (missing entries)"))
{ {
_ = _characterAnalyzer.ComputeAnalysis(print: false); _ = _characterAnalyzer.ComputeAnalysis(print: false);
} }
} }
else else
{ {
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.PlayCircle, "Start analysis (recalculate all entries)")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.PlayCircle, "Start analysis (recalculate all entries)"))
{ {
_ = _characterAnalyzer.ComputeAnalysis(print: false, recalculate: true); _ = _characterAnalyzer.ComputeAnalysis(print: false, recalculate: true);
} }
@@ -292,7 +295,7 @@ public class DataAnalysisUi : WindowMediatorSubscriberBase
Environment.NewLine + "- Conversion will convert all found texture duplicates (entries with more than 1 file path) automatically." + Environment.NewLine + "- Conversion will convert all found texture duplicates (entries with more than 1 file path) automatically." +
Environment.NewLine + "- Converting textures to BC7 is a very expensive operation and, depending on the amount of textures to convert, will take a while to complete." Environment.NewLine + "- Converting textures to BC7 is a very expensive operation and, depending on the amount of textures to convert, will take a while to complete."
, ImGuiColors.DalamudYellow); , ImGuiColors.DalamudYellow);
if (_texturesToConvert.Count > 0 && UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.PlayCircle, "Start conversion of " + _texturesToConvert.Count + " texture(s)")) if (_texturesToConvert.Count > 0 && _uiSharedService.IconTextButton(FontAwesomeIcon.PlayCircle, "Start conversion of " + _texturesToConvert.Count + " texture(s)"))
{ {
_conversionCancellationTokenSource = _conversionCancellationTokenSource.CancelRecreate(); _conversionCancellationTokenSource = _conversionCancellationTokenSource.CancelRecreate();
_conversionTask = _ipcManager.Penumbra.ConvertTextureFiles(_logger, _texturesToConvert, _conversionProgress, _conversionCancellationTokenSource.Token); _conversionTask = _ipcManager.Penumbra.ConvertTextureFiles(_logger, _texturesToConvert, _conversionProgress, _conversionCancellationTokenSource.Token);
@@ -325,7 +328,7 @@ public class DataAnalysisUi : WindowMediatorSubscriberBase
ImGui.SameLine(); ImGui.SameLine();
ImGui.TextUnformatted($"(and {filePaths.Count - 1} more)"); ImGui.TextUnformatted($"(and {filePaths.Count - 1} more)");
ImGui.SameLine(); ImGui.SameLine();
UiSharedService.FontText(FontAwesomeIcon.InfoCircle.ToIconString(), UiBuilder.IconFont); _uiSharedService.IconText(FontAwesomeIcon.InfoCircle);
UiSharedService.AttachToolTip(string.Join(Environment.NewLine, filePaths.Skip(1))); UiSharedService.AttachToolTip(string.Join(Environment.NewLine, filePaths.Skip(1)));
} }
@@ -338,7 +341,7 @@ public class DataAnalysisUi : WindowMediatorSubscriberBase
ImGui.SameLine(); ImGui.SameLine();
ImGui.TextUnformatted($"(and {gamepaths.Count - 1} more)"); ImGui.TextUnformatted($"(and {gamepaths.Count - 1} more)");
ImGui.SameLine(); ImGui.SameLine();
UiSharedService.FontText(FontAwesomeIcon.InfoCircle.ToIconString(), UiBuilder.IconFont); _uiSharedService.IconText(FontAwesomeIcon.InfoCircle);
UiSharedService.AttachToolTip(string.Join(Environment.NewLine, gamepaths.Skip(1))); UiSharedService.AttachToolTip(string.Join(Environment.NewLine, gamepaths.Skip(1)));
} }
} }

View File

@@ -190,7 +190,7 @@ public class DownloadUi : WindowMediatorSubscriberBase
try try
{ {
if (_configService.Current.ShowUploadingBigText) _uiShared.UidFont.Push(); using var _ = _uiShared.UidFont.Push();
var uploadText = "Uploading"; var uploadText = "Uploading";
var textSize = ImGui.CalcTextSize(uploadText); var textSize = ImGui.CalcTextSize(uploadText);
@@ -205,10 +205,6 @@ public class DownloadUi : WindowMediatorSubscriberBase
{ {
// ignore errors thrown on UI // ignore errors thrown on UI
} }
finally
{
if (_configService.Current.ShowUploadingBigText) _uiShared.UidFont.Pop();
}
} }
} }
} }

View File

@@ -95,27 +95,28 @@ public class EditProfileUi : WindowMediatorSubscriberBase
var spacing = ImGui.GetStyle().ItemSpacing.X; var spacing = ImGui.GetStyle().ItemSpacing.X;
ImGuiHelpers.ScaledRelativeSameLine(256, spacing); ImGuiHelpers.ScaledRelativeSameLine(256, spacing);
_uiSharedService.GameFont.Push(); using (_uiSharedService.GameFont.Push())
var descriptionTextSize = ImGui.CalcTextSize(profile.Description, 256f);
var childFrame = ImGuiHelpers.ScaledVector2(256 + ImGui.GetStyle().WindowPadding.X + ImGui.GetStyle().WindowBorderSize, 256);
if (descriptionTextSize.Y > childFrame.Y)
{ {
_adjustedForScollBarsOnlineProfile = true; var descriptionTextSize = ImGui.CalcTextSize(profile.Description, 256f);
var childFrame = ImGuiHelpers.ScaledVector2(256 + ImGui.GetStyle().WindowPadding.X + ImGui.GetStyle().WindowBorderSize, 256);
if (descriptionTextSize.Y > childFrame.Y)
{
_adjustedForScollBarsOnlineProfile = true;
}
else
{
_adjustedForScollBarsOnlineProfile = false;
}
childFrame = childFrame with
{
X = childFrame.X + (_adjustedForScollBarsOnlineProfile ? ImGui.GetStyle().ScrollbarSize : 0),
};
if (ImGui.BeginChildFrame(101, childFrame))
{
UiSharedService.TextWrapped(profile.Description);
}
ImGui.EndChildFrame();
} }
else
{
_adjustedForScollBarsOnlineProfile = false;
}
childFrame = childFrame with
{
X = childFrame.X + (_adjustedForScollBarsOnlineProfile ? ImGui.GetStyle().ScrollbarSize : 0),
};
if (ImGui.BeginChildFrame(101, childFrame))
{
UiSharedService.TextWrapped(profile.Description);
}
ImGui.EndChildFrame();
_uiSharedService.GameFont.Pop();
var nsfw = profile.IsNSFW; var nsfw = profile.IsNSFW;
ImGui.BeginDisabled(); ImGui.BeginDisabled();
@@ -139,7 +140,7 @@ public class EditProfileUi : WindowMediatorSubscriberBase
ImGui.Separator(); ImGui.Separator();
_uiSharedService.BigText("Profile Settings"); _uiSharedService.BigText("Profile Settings");
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.FileUpload, "Upload new profile picture")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.FileUpload, "Upload new profile picture"))
{ {
_fileDialogManager.OpenFileDialog("Select new Profile picture", ".png", (success, file) => _fileDialogManager.OpenFileDialog("Select new Profile picture", ".png", (success, file) =>
{ {
@@ -170,7 +171,7 @@ public class EditProfileUi : WindowMediatorSubscriberBase
} }
UiSharedService.AttachToolTip("Select and upload a new profile picture"); UiSharedService.AttachToolTip("Select and upload a new profile picture");
ImGui.SameLine(); ImGui.SameLine();
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Trash, "Clear uploaded profile picture")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.Trash, "Clear uploaded profile picture"))
{ {
_ = _apiController.UserSetProfile(new UserProfileDto(new UserData(_apiController.UID), Disabled: false, IsNSFW: null, "", Description: null)); _ = _apiController.UserSetProfile(new UserProfileDto(new UserData(_apiController.UID), Disabled: false, IsNSFW: null, "", Description: null));
} }
@@ -184,7 +185,7 @@ public class EditProfileUi : WindowMediatorSubscriberBase
{ {
_ = _apiController.UserSetProfile(new UserProfileDto(new UserData(_apiController.UID), Disabled: false, isNsfw, ProfilePictureBase64: null, Description: null)); _ = _apiController.UserSetProfile(new UserProfileDto(new UserData(_apiController.UID), Disabled: false, isNsfw, ProfilePictureBase64: null, Description: null));
} }
UiSharedService.DrawHelpText("If your profile description or image can be considered NSFW, toggle this to ON"); _uiSharedService.DrawHelpText("If your profile description or image can be considered NSFW, toggle this to ON");
var widthTextBox = 400; var widthTextBox = 400;
var posX = ImGui.GetCursorPosX(); var posX = ImGui.GetCursorPosX();
ImGui.TextUnformatted($"Description {_descriptionText.Length}/1500"); ImGui.TextUnformatted($"Description {_descriptionText.Length}/1500");
@@ -196,35 +197,36 @@ public class EditProfileUi : WindowMediatorSubscriberBase
ImGui.SameLine(); ImGui.SameLine();
_uiSharedService.GameFont.Push(); using (_uiSharedService.GameFont.Push())
var descriptionTextSizeLocal = ImGui.CalcTextSize(_descriptionText, 256f);
var childFrameLocal = ImGuiHelpers.ScaledVector2(256 + ImGui.GetStyle().WindowPadding.X + ImGui.GetStyle().WindowBorderSize, 200);
if (descriptionTextSizeLocal.Y > childFrameLocal.Y)
{ {
_adjustedForScollBarsLocalProfile = true; var descriptionTextSizeLocal = ImGui.CalcTextSize(_descriptionText, 256f);
var childFrameLocal = ImGuiHelpers.ScaledVector2(256 + ImGui.GetStyle().WindowPadding.X + ImGui.GetStyle().WindowBorderSize, 200);
if (descriptionTextSizeLocal.Y > childFrameLocal.Y)
{
_adjustedForScollBarsLocalProfile = true;
}
else
{
_adjustedForScollBarsLocalProfile = false;
}
childFrameLocal = childFrameLocal with
{
X = childFrameLocal.X + (_adjustedForScollBarsLocalProfile ? ImGui.GetStyle().ScrollbarSize : 0),
};
if (ImGui.BeginChildFrame(102, childFrameLocal))
{
UiSharedService.TextWrapped(_descriptionText);
}
ImGui.EndChildFrame();
} }
else
{
_adjustedForScollBarsLocalProfile = false;
}
childFrameLocal = childFrameLocal with
{
X = childFrameLocal.X + (_adjustedForScollBarsLocalProfile ? ImGui.GetStyle().ScrollbarSize : 0),
};
if (ImGui.BeginChildFrame(102, childFrameLocal))
{
UiSharedService.TextWrapped(_descriptionText);
}
ImGui.EndChildFrame();
_uiSharedService.GameFont.Pop();
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Save, "Save Description")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.Save, "Save Description"))
{ {
_ = _apiController.UserSetProfile(new UserProfileDto(new UserData(_apiController.UID), Disabled: false, IsNSFW: null, ProfilePictureBase64: null, _descriptionText)); _ = _apiController.UserSetProfile(new UserProfileDto(new UserData(_apiController.UID), Disabled: false, IsNSFW: null, ProfilePictureBase64: null, _descriptionText));
} }
UiSharedService.AttachToolTip("Sets your profile description text"); UiSharedService.AttachToolTip("Sets your profile description text");
ImGui.SameLine(); ImGui.SameLine();
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Trash, "Clear Description")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.Trash, "Clear Description"))
{ {
_ = _apiController.UserSetProfile(new UserProfileDto(new UserData(_apiController.UID), Disabled: false, IsNSFW: null, ProfilePictureBase64: null, "")); _ = _apiController.UserSetProfile(new UserProfileDto(new UserData(_apiController.UID), Disabled: false, IsNSFW: null, ProfilePictureBase64: null, ""));
} }

View File

@@ -41,7 +41,8 @@ internal class EventViewerUI : WindowMediatorSubscriberBase
public EventViewerUI(ILogger<EventViewerUI> logger, MareMediator mediator, public EventViewerUI(ILogger<EventViewerUI> logger, MareMediator mediator,
EventAggregator eventAggregator, UiSharedService uiSharedService, MareConfigService configService, EventAggregator eventAggregator, UiSharedService uiSharedService, MareConfigService configService,
PerformanceCollectorService performanceCollectorService) : base(logger, mediator, "Event Viewer", performanceCollectorService) PerformanceCollectorService performanceCollectorService)
: base(logger, mediator, "Event Viewer", performanceCollectorService)
{ {
_eventAggregator = eventAggregator; _eventAggregator = eventAggregator;
_uiSharedService = uiSharedService; _uiSharedService = uiSharedService;
@@ -82,12 +83,12 @@ internal class EventViewerUI : WindowMediatorSubscriberBase
{ {
var newEventsAvailable = _eventAggregator.NewEventsAvailable; var newEventsAvailable = _eventAggregator.NewEventsAvailable;
var freezeSize = UiSharedService.GetNormalizedIconTextButtonSize(FontAwesomeIcon.PlayCircle, "Unfreeze View").X; var freezeSize = _uiSharedService.GetIconTextButtonSize(FontAwesomeIcon.PlayCircle, "Unfreeze View");
if (_isPaused) if (_isPaused)
{ {
using (ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.DalamudYellow, newEventsAvailable)) using (ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.DalamudYellow, newEventsAvailable))
{ {
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.PlayCircle, "Unfreeze View")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.PlayCircle, "Unfreeze View"))
_isPaused = false; _isPaused = false;
if (newEventsAvailable) if (newEventsAvailable)
UiSharedService.AttachToolTip("New events are available. Click to resume updating."); UiSharedService.AttachToolTip("New events are available. Click to resume updating.");
@@ -95,7 +96,7 @@ internal class EventViewerUI : WindowMediatorSubscriberBase
} }
else else
{ {
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.PauseCircle, "Freeze View")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.PauseCircle, "Freeze View"))
_isPaused = true; _isPaused = true;
} }
@@ -121,10 +122,10 @@ internal class EventViewerUI : WindowMediatorSubscriberBase
if (_configService.Current.LogEvents) if (_configService.Current.LogEvents)
{ {
var buttonSize = UiSharedService.GetNormalizedIconTextButtonSize(FontAwesomeIcon.FolderOpen, "Open EventLog Folder"); var buttonSize = _uiSharedService.GetIconTextButtonSize(FontAwesomeIcon.FolderOpen, "Open EventLog Folder");
var dist = ImGui.GetWindowContentRegionMax().X - buttonSize.X; var dist = ImGui.GetWindowContentRegionMax().X - buttonSize;
ImGui.SameLine(dist); ImGui.SameLine(dist);
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.FolderOpen, "Open EventLog folder")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.FolderOpen, "Open EventLog folder"))
{ {
ProcessStartInfo ps = new() ProcessStartInfo ps = new()
{ {
@@ -181,7 +182,7 @@ internal class EventViewerUI : WindowMediatorSubscriberBase
}; };
ImGui.TableNextColumn(); ImGui.TableNextColumn();
UiSharedService.NormalizedIcon(icon, iconColor == new Vector4() ? null : iconColor); _uiSharedService.IconText(icon, iconColor == new Vector4() ? null : iconColor);
UiSharedService.AttachToolTip(ev.EventSeverity.ToString()); UiSharedService.AttachToolTip(ev.EventSeverity.ToString());
ImGui.TableNextColumn(); ImGui.TableNextColumn();
ImGui.AlignTextToFramePadding(); ImGui.AlignTextToFramePadding();

View File

@@ -12,6 +12,7 @@ namespace MareSynchronos.UI;
public class GposeUi : WindowMediatorSubscriberBase public class GposeUi : WindowMediatorSubscriberBase
{ {
private readonly MareConfigService _configService; private readonly MareConfigService _configService;
private readonly UiSharedService _uiSharedService;
private readonly DalamudUtilService _dalamudUtil; private readonly DalamudUtilService _dalamudUtil;
private readonly FileDialogManager _fileDialogManager; private readonly FileDialogManager _fileDialogManager;
private readonly MareCharaFileManager _mareCharaFileManager; private readonly MareCharaFileManager _mareCharaFileManager;
@@ -20,13 +21,14 @@ public class GposeUi : WindowMediatorSubscriberBase
public GposeUi(ILogger<GposeUi> logger, MareCharaFileManager mareCharaFileManager, public GposeUi(ILogger<GposeUi> logger, MareCharaFileManager mareCharaFileManager,
DalamudUtilService dalamudUtil, FileDialogManager fileDialogManager, MareConfigService configService, DalamudUtilService dalamudUtil, FileDialogManager fileDialogManager, MareConfigService configService,
MareMediator mediator, PerformanceCollectorService performanceCollectorService) MareMediator mediator, PerformanceCollectorService performanceCollectorService, UiSharedService uiSharedService)
: base(logger, mediator, "Loporrit Gpose Import UI###LoporritSyncGposeUI", performanceCollectorService) : base(logger, mediator, "Loporrit Gpose Import UI###LoporritSyncGposeUI", performanceCollectorService)
{ {
_mareCharaFileManager = mareCharaFileManager; _mareCharaFileManager = mareCharaFileManager;
_dalamudUtil = dalamudUtil; _dalamudUtil = dalamudUtil;
_fileDialogManager = fileDialogManager; _fileDialogManager = fileDialogManager;
_configService = configService; _configService = configService;
_uiSharedService = uiSharedService;
Mediator.Subscribe<GposeStartMessage>(this, (_) => StartGpose()); Mediator.Subscribe<GposeStartMessage>(this, (_) => StartGpose());
Mediator.Subscribe<GposeEndMessage>(this, (_) => EndGpose()); Mediator.Subscribe<GposeEndMessage>(this, (_) => EndGpose());
IsOpen = _dalamudUtil.IsInGpose; IsOpen = _dalamudUtil.IsInGpose;
@@ -43,7 +45,7 @@ public class GposeUi : WindowMediatorSubscriberBase
if (!_mareCharaFileManager.CurrentlyWorking) if (!_mareCharaFileManager.CurrentlyWorking)
{ {
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.FolderOpen, "Load MCDF")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.FolderOpen, "Load MCDF"))
{ {
_fileDialogManager.OpenFileDialog("Pick MCDF file", ".mcdf", (success, paths) => _fileDialogManager.OpenFileDialog("Pick MCDF file", ".mcdf", (success, paths) =>
{ {
@@ -61,7 +63,7 @@ public class GposeUi : WindowMediatorSubscriberBase
{ {
UiSharedService.TextWrapped("Loaded file: " + _mareCharaFileManager.LoadedCharaFile.FilePath); UiSharedService.TextWrapped("Loaded file: " + _mareCharaFileManager.LoadedCharaFile.FilePath);
UiSharedService.TextWrapped("File Description: " + _mareCharaFileManager.LoadedCharaFile.CharaFileData.Description); UiSharedService.TextWrapped("File Description: " + _mareCharaFileManager.LoadedCharaFile.CharaFileData.Description);
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Check, "Apply loaded MCDF")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.Check, "Apply loaded MCDF"))
{ {
_applicationTask = Task.Run(async () => await _mareCharaFileManager.ApplyMareCharaFile(_dalamudUtil.GposeTargetGameObject, _expectedLength!.GetAwaiter().GetResult()).ConfigureAwait(false)); _applicationTask = Task.Run(async () => await _mareCharaFileManager.ApplyMareCharaFile(_dalamudUtil.GposeTargetGameObject, _expectedLength!.GetAwaiter().GetResult()).ConfigureAwait(false));
} }

View File

@@ -108,10 +108,12 @@ public partial class IntroUi : WindowMediatorSubscriberBase
} }
else if (!_configService.Current.AcceptedAgreement && _readFirstPage) else if (!_configService.Current.AcceptedAgreement && _readFirstPage)
{ {
_uiShared.UidFont.Push(); Vector2 textSize;
var textSize = ImGui.CalcTextSize(Strings.ToS.LanguageLabel); using (_uiShared.UidFont.Push())
ImGui.TextUnformatted(Strings.ToS.AgreementLabel); {
_uiShared.UidFont.Pop(); textSize = ImGui.CalcTextSize(Strings.ToS.LanguageLabel);
ImGui.TextUnformatted(Strings.ToS.AgreementLabel);
}
ImGui.SameLine(); ImGui.SameLine();
var languageSize = ImGui.CalcTextSize(Strings.ToS.LanguageLabel); var languageSize = ImGui.CalcTextSize(Strings.ToS.LanguageLabel);
@@ -162,9 +164,9 @@ public partial class IntroUi : WindowMediatorSubscriberBase
|| !_configService.Current.InitialScanComplete || !_configService.Current.InitialScanComplete
|| !Directory.Exists(_configService.Current.CacheFolder))) || !Directory.Exists(_configService.Current.CacheFolder)))
{ {
_uiShared.UidFont.Push(); using (_uiShared.UidFont.Push())
ImGui.TextUnformatted("File Storage Setup"); ImGui.TextUnformatted("File Storage Setup");
_uiShared.UidFont.Pop();
ImGui.Separator(); ImGui.Separator();
if (!_uiShared.HasValidPenumbraModPath) if (!_uiShared.HasValidPenumbraModPath)
@@ -208,9 +210,8 @@ public partial class IntroUi : WindowMediatorSubscriberBase
} }
else if (!_uiShared.ApiController.ServerAlive) else if (!_uiShared.ApiController.ServerAlive)
{ {
_uiShared.UidFont.Push(); using (_uiShared.UidFont.Push())
ImGui.TextUnformatted("Service Registration"); ImGui.TextUnformatted("Service Registration");
_uiShared.UidFont.Pop();
ImGui.Separator(); ImGui.Separator();
UiSharedService.TextWrapped("To be able to use Loporrit you will have to register an account."); UiSharedService.TextWrapped("To be able to use Loporrit you will have to register an account.");
UiSharedService.TextWrapped("Refer to the instructions at the location you obtained this plugin for more information or support."); UiSharedService.TextWrapped("Refer to the instructions at the location you obtained this plugin for more information or support.");
@@ -266,7 +267,7 @@ public partial class IntroUi : WindowMediatorSubscriberBase
ImGui.BeginDisabled(_registrationInProgress || _registrationSuccess || _secretKey.Length > 0); ImGui.BeginDisabled(_registrationInProgress || _registrationSuccess || _secretKey.Length > 0);
ImGui.Separator(); ImGui.Separator();
ImGui.TextUnformatted("If you do not have a secret key already click below to register a new account."); ImGui.TextUnformatted("If you do not have a secret key already click below to register a new account.");
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Plus, "Register a new Loporrit account")) if (_uiShared.IconTextButton(FontAwesomeIcon.Plus, "Register a new Loporrit account"))
{ {
_registrationInProgress = true; _registrationInProgress = true;
_ = Task.Run(async () => { _ = Task.Run(async () => {

View File

@@ -53,7 +53,7 @@ public class PermissionWindowUI : WindowMediatorSubscriberBase
{ {
_ownPermissions.SetPaused(paused); _ownPermissions.SetPaused(paused);
} }
UiSharedService.DrawHelpText("Pausing will completely cease any sync with this user." + UiSharedService.TooltipSeparator _uiSharedService.DrawHelpText("Pausing will completely cease any sync with this user." + UiSharedService.TooltipSeparator
+ "Note: this is bidirectional, either user pausing will cease sync completely."); + "Note: this is bidirectional, either user pausing will cease sync completely.");
var otherPerms = Pair.UserPair.OtherPermissions; var otherPerms = Pair.UserPair.OtherPermissions;
@@ -64,7 +64,7 @@ public class PermissionWindowUI : WindowMediatorSubscriberBase
using (ImRaii.PushIndent(indentSize, false)) using (ImRaii.PushIndent(indentSize, false))
{ {
UiSharedService.BooleanToColoredIcon(!otherIsPaused, false); _uiSharedService.BooleanToColoredIcon(!otherIsPaused, false);
ImGui.SameLine(); ImGui.SameLine();
ImGui.AlignTextToFramePadding(); ImGui.AlignTextToFramePadding();
ImGui.Text(Pair.UserData.AliasOrUID + " has " + (!otherIsPaused ? "not " : string.Empty) + "paused you"); ImGui.Text(Pair.UserData.AliasOrUID + " has " + (!otherIsPaused ? "not " : string.Empty) + "paused you");
@@ -78,11 +78,11 @@ public class PermissionWindowUI : WindowMediatorSubscriberBase
{ {
_ownPermissions.SetDisableSounds(disableSounds); _ownPermissions.SetDisableSounds(disableSounds);
} }
UiSharedService.DrawHelpText("Disabling sounds will remove all sounds synced with this user on both sides." + UiSharedService.TooltipSeparator _uiSharedService.DrawHelpText("Disabling sounds will remove all sounds synced with this user on both sides." + UiSharedService.TooltipSeparator
+ "Note: this is bidirectional, either user disabling sound sync will stop sound sync on both sides."); + "Note: this is bidirectional, either user disabling sound sync will stop sound sync on both sides.");
using (ImRaii.PushIndent(indentSize, false)) using (ImRaii.PushIndent(indentSize, false))
{ {
UiSharedService.BooleanToColoredIcon(!otherDisableSounds, false); _uiSharedService.BooleanToColoredIcon(!otherDisableSounds, false);
ImGui.SameLine(); ImGui.SameLine();
ImGui.AlignTextToFramePadding(); ImGui.AlignTextToFramePadding();
ImGui.Text(Pair.UserData.AliasOrUID + " has " + (!otherDisableSounds ? "not " : string.Empty) + "disabled sound sync with you"); ImGui.Text(Pair.UserData.AliasOrUID + " has " + (!otherDisableSounds ? "not " : string.Empty) + "disabled sound sync with you");
@@ -92,11 +92,11 @@ public class PermissionWindowUI : WindowMediatorSubscriberBase
{ {
_ownPermissions.SetDisableAnimations(disableAnimations); _ownPermissions.SetDisableAnimations(disableAnimations);
} }
UiSharedService.DrawHelpText("Disabling sounds will remove all animations synced with this user on both sides." + UiSharedService.TooltipSeparator _uiSharedService.DrawHelpText("Disabling sounds will remove all animations synced with this user on both sides." + UiSharedService.TooltipSeparator
+ "Note: this is bidirectional, either user disabling animation sync will stop animation sync on both sides."); + "Note: this is bidirectional, either user disabling animation sync will stop animation sync on both sides.");
using (ImRaii.PushIndent(indentSize, false)) using (ImRaii.PushIndent(indentSize, false))
{ {
UiSharedService.BooleanToColoredIcon(!otherDisableAnimations, false); _uiSharedService.BooleanToColoredIcon(!otherDisableAnimations, false);
ImGui.SameLine(); ImGui.SameLine();
ImGui.AlignTextToFramePadding(); ImGui.AlignTextToFramePadding();
ImGui.Text(Pair.UserData.AliasOrUID + " has " + (!otherDisableAnimations ? "not " : string.Empty) + "disabled animation sync with you"); ImGui.Text(Pair.UserData.AliasOrUID + " has " + (!otherDisableAnimations ? "not " : string.Empty) + "disabled animation sync with you");
@@ -106,11 +106,11 @@ public class PermissionWindowUI : WindowMediatorSubscriberBase
{ {
_ownPermissions.SetDisableVFX(disableVfx); _ownPermissions.SetDisableVFX(disableVfx);
} }
UiSharedService.DrawHelpText("Disabling sounds will remove all VFX synced with this user on both sides." + UiSharedService.TooltipSeparator _uiSharedService.DrawHelpText("Disabling sounds will remove all VFX synced with this user on both sides." + UiSharedService.TooltipSeparator
+ "Note: this is bidirectional, either user disabling VFX sync will stop VFX sync on both sides."); + "Note: this is bidirectional, either user disabling VFX sync will stop VFX sync on both sides.");
using (ImRaii.PushIndent(indentSize, false)) using (ImRaii.PushIndent(indentSize, false))
{ {
UiSharedService.BooleanToColoredIcon(!otherDisableVFX, false); _uiSharedService.BooleanToColoredIcon(!otherDisableVFX, false);
ImGui.SameLine(); ImGui.SameLine();
ImGui.AlignTextToFramePadding(); ImGui.AlignTextToFramePadding();
ImGui.Text(Pair.UserData.AliasOrUID + " has " + (!otherDisableVFX ? "not " : string.Empty) + "disabled VFX sync with you"); ImGui.Text(Pair.UserData.AliasOrUID + " has " + (!otherDisableVFX ? "not " : string.Empty) + "disabled VFX sync with you");
@@ -123,27 +123,27 @@ public class PermissionWindowUI : WindowMediatorSubscriberBase
bool hasChanges = _ownPermissions != Pair.UserPair.OwnPermissions; bool hasChanges = _ownPermissions != Pair.UserPair.OwnPermissions;
using (ImRaii.Disabled(!hasChanges)) using (ImRaii.Disabled(!hasChanges))
if (UiSharedService.NormalizedIconTextButton(Dalamud.Interface.FontAwesomeIcon.Save, "Save")) if (_uiSharedService.IconTextButton(Dalamud.Interface.FontAwesomeIcon.Save, "Save"))
{ {
_ = _apiController.UserSetPairPermissions(new(Pair.UserData, _ownPermissions)); _ = _apiController.UserSetPairPermissions(new(Pair.UserData, _ownPermissions));
} }
UiSharedService.AttachToolTip("Save and apply all changes"); UiSharedService.AttachToolTip("Save and apply all changes");
var rightSideButtons = UiSharedService.GetNormalizedIconTextButtonSize(Dalamud.Interface.FontAwesomeIcon.Undo, "Revert").X + var rightSideButtons = _uiSharedService.GetIconTextButtonSize(Dalamud.Interface.FontAwesomeIcon.Undo, "Revert") +
UiSharedService.GetNormalizedIconTextButtonSize(Dalamud.Interface.FontAwesomeIcon.ArrowsSpin, "Reset to Default").X; _uiSharedService.GetIconTextButtonSize(Dalamud.Interface.FontAwesomeIcon.ArrowsSpin, "Reset to Default");
var availableWidth = ImGui.GetWindowContentRegionMax().X - ImGui.GetWindowContentRegionMin().X; var availableWidth = ImGui.GetWindowContentRegionMax().X - ImGui.GetWindowContentRegionMin().X;
ImGui.SameLine(availableWidth - rightSideButtons); ImGui.SameLine(availableWidth - rightSideButtons);
using (ImRaii.Disabled(!hasChanges)) using (ImRaii.Disabled(!hasChanges))
if (UiSharedService.NormalizedIconTextButton(Dalamud.Interface.FontAwesomeIcon.Undo, "Revert")) if (_uiSharedService.IconTextButton(Dalamud.Interface.FontAwesomeIcon.Undo, "Revert"))
{ {
_ownPermissions = Pair.UserPair.OwnPermissions.DeepClone(); _ownPermissions = Pair.UserPair.OwnPermissions.DeepClone();
} }
UiSharedService.AttachToolTip("Revert all changes"); UiSharedService.AttachToolTip("Revert all changes");
ImGui.SameLine(); ImGui.SameLine();
if (UiSharedService.NormalizedIconTextButton(Dalamud.Interface.FontAwesomeIcon.ArrowsSpin, "Reset to Default")) if (_uiSharedService.IconTextButton(Dalamud.Interface.FontAwesomeIcon.ArrowsSpin, "Reset to Default"))
{ {
_ownPermissions.SetPaused(false); _ownPermissions.SetPaused(false);
_ownPermissions.SetDisableVFX(false); _ownPermissions.SetDisableVFX(false);

View File

@@ -1,7 +1,6 @@
using Dalamud.Interface.Colors; using Dalamud.Interface.Colors;
using Dalamud.Interface.Textures.TextureWraps; using Dalamud.Interface.Textures.TextureWraps;
using Dalamud.Interface.Utility; using Dalamud.Interface.Utility;
using Dalamud.Interface.Utility.Raii;
using ImGuiNET; using ImGuiNET;
using MareSynchronos.API.Data.Extensions; using MareSynchronos.API.Data.Extensions;
using MareSynchronos.MareConfiguration; using MareSynchronos.MareConfiguration;

View File

@@ -173,7 +173,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
private void DrawCurrentTransfers() private void DrawCurrentTransfers()
{ {
_lastTab = "Transfers"; _lastTab = "Transfers";
UiSharedService.FontText("Transfer Settings", _uiShared.UidFont); _uiShared.BigText("Transfer Settings");
int maxParallelDownloads = _configService.Current.ParallelDownloads; int maxParallelDownloads = _configService.Current.ParallelDownloads;
bool useAlternativeUpload = _configService.Current.UseAlternativeFileUpload; bool useAlternativeUpload = _configService.Current.UseAlternativeFileUpload;
@@ -220,10 +220,10 @@ public class SettingsUi : WindowMediatorSubscriberBase
_configService.Current.UseAlternativeFileUpload = useAlternativeUpload; _configService.Current.UseAlternativeFileUpload = useAlternativeUpload;
_configService.Save(); _configService.Save();
} }
UiSharedService.DrawHelpText("This will attempt to upload files in one go instead of a stream. Typically not necessary to enable. Use if you have upload issues."); _uiShared.DrawHelpText("This will attempt to upload files in one go instead of a stream. Typically not necessary to enable. Use if you have upload issues.");
ImGui.Separator(); ImGui.Separator();
UiSharedService.FontText("Transfer UI", _uiShared.UidFont); _uiShared.BigText("Transfer UI");
bool showTransferWindow = _configService.Current.ShowTransferWindow; bool showTransferWindow = _configService.Current.ShowTransferWindow;
if (ImGui.Checkbox("Show separate transfer window", ref showTransferWindow)) if (ImGui.Checkbox("Show separate transfer window", ref showTransferWindow))
@@ -231,7 +231,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
_configService.Current.ShowTransferWindow = showTransferWindow; _configService.Current.ShowTransferWindow = showTransferWindow;
_configService.Save(); _configService.Save();
} }
UiSharedService.DrawHelpText($"The download window will show the current progress of outstanding downloads.{Environment.NewLine}{Environment.NewLine}" + _uiShared.DrawHelpText($"The download window will show the current progress of outstanding downloads.{Environment.NewLine}{Environment.NewLine}" +
$"What do W/Q/P/D stand for?{Environment.NewLine}W = Waiting for Slot (see Maximum Parallel Downloads){Environment.NewLine}" + $"What do W/Q/P/D stand for?{Environment.NewLine}W = Waiting for Slot (see Maximum Parallel Downloads){Environment.NewLine}" +
$"Q = Queued on Server, waiting for queue ready signal{Environment.NewLine}" + $"Q = Queued on Server, waiting for queue ready signal{Environment.NewLine}" +
$"P = Processing download (aka downloading){Environment.NewLine}" + $"P = Processing download (aka downloading){Environment.NewLine}" +
@@ -252,7 +252,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
_configService.Current.ShowTransferBars = showTransferBars; _configService.Current.ShowTransferBars = showTransferBars;
_configService.Save(); _configService.Save();
} }
UiSharedService.DrawHelpText("This will render a progress bar during the download at the feet of the player you are downloading from."); _uiShared.DrawHelpText("This will render a progress bar during the download at the feet of the player you are downloading from.");
if (!showTransferBars) ImGui.BeginDisabled(); if (!showTransferBars) ImGui.BeginDisabled();
ImGui.Indent(); ImGui.Indent();
@@ -262,7 +262,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
_configService.Current.TransferBarsShowText = transferBarShowText; _configService.Current.TransferBarsShowText = transferBarShowText;
_configService.Save(); _configService.Save();
} }
UiSharedService.DrawHelpText("Shows download text (amount of MiB downloaded) in the transfer bars"); _uiShared.DrawHelpText("Shows download text (amount of MiB downloaded) in the transfer bars");
int transferBarWidth = _configService.Current.TransferBarsWidth; int transferBarWidth = _configService.Current.TransferBarsWidth;
ImGui.SetNextItemWidth(250 * ImGuiHelpers.GlobalScale); ImGui.SetNextItemWidth(250 * ImGuiHelpers.GlobalScale);
if (ImGui.SliderInt("Transfer Bar Width", ref transferBarWidth, 0, 500)) if (ImGui.SliderInt("Transfer Bar Width", ref transferBarWidth, 0, 500))
@@ -272,7 +272,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
_configService.Current.TransferBarsWidth = transferBarWidth; _configService.Current.TransferBarsWidth = transferBarWidth;
_configService.Save(); _configService.Save();
} }
UiSharedService.DrawHelpText("Width of the displayed transfer bars (will never be less wide than the displayed text)"); _uiShared.DrawHelpText("Width of the displayed transfer bars (will never be less wide than the displayed text)");
int transferBarHeight = _configService.Current.TransferBarsHeight; int transferBarHeight = _configService.Current.TransferBarsHeight;
ImGui.SetNextItemWidth(250 * ImGuiHelpers.GlobalScale); ImGui.SetNextItemWidth(250 * ImGuiHelpers.GlobalScale);
if (ImGui.SliderInt("Transfer Bar Height", ref transferBarHeight, 0, 50)) if (ImGui.SliderInt("Transfer Bar Height", ref transferBarHeight, 0, 50))
@@ -282,14 +282,14 @@ public class SettingsUi : WindowMediatorSubscriberBase
_configService.Current.TransferBarsHeight = transferBarHeight; _configService.Current.TransferBarsHeight = transferBarHeight;
_configService.Save(); _configService.Save();
} }
UiSharedService.DrawHelpText("Height of the displayed transfer bars (will never be less tall than the displayed text)"); _uiShared.DrawHelpText("Height of the displayed transfer bars (will never be less tall than the displayed text)");
bool showUploading = _configService.Current.ShowUploading; bool showUploading = _configService.Current.ShowUploading;
if (ImGui.Checkbox("Show 'Uploading' text below players that are currently uploading", ref showUploading)) if (ImGui.Checkbox("Show 'Uploading' text below players that are currently uploading", ref showUploading))
{ {
_configService.Current.ShowUploading = showUploading; _configService.Current.ShowUploading = showUploading;
_configService.Save(); _configService.Save();
} }
UiSharedService.DrawHelpText("This will render an 'Uploading' text at the feet of the player that is in progress of uploading data."); _uiShared.DrawHelpText("This will render an 'Uploading' text at the feet of the player that is in progress of uploading data.");
ImGui.Unindent(); ImGui.Unindent();
if (!showUploading) ImGui.BeginDisabled(); if (!showUploading) ImGui.BeginDisabled();
@@ -300,7 +300,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
_configService.Current.ShowUploadingBigText = showUploadingBigText; _configService.Current.ShowUploadingBigText = showUploadingBigText;
_configService.Save(); _configService.Save();
} }
UiSharedService.DrawHelpText("This will render an 'Uploading' text in a larger font."); _uiShared.DrawHelpText("This will render an 'Uploading' text in a larger font.");
ImGui.Unindent(); ImGui.Unindent();
@@ -308,7 +308,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
if (!showTransferBars) ImGui.EndDisabled(); if (!showTransferBars) ImGui.EndDisabled();
ImGui.Separator(); ImGui.Separator();
UiSharedService.FontText("Current Transfers", _uiShared.UidFont); _uiShared.BigText("Current Transfers");
if (ImGui.BeginTabBar("TransfersTabBar")) if (ImGui.BeginTabBar("TransfersTabBar"))
{ {
@@ -400,7 +400,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
{ {
_lastTab = "Chat"; _lastTab = "Chat";
UiSharedService.FontText("Chat Settings", _uiShared.UidFont); _uiShared.BigText("Chat Settings");
var disableSyncshellChat = _configService.Current.DisableSyncshellChat; var disableSyncshellChat = _configService.Current.DisableSyncshellChat;
@@ -409,7 +409,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
_configService.Current.DisableSyncshellChat = disableSyncshellChat; _configService.Current.DisableSyncshellChat = disableSyncshellChat;
_configService.Save(); _configService.Save();
} }
UiSharedService.DrawHelpText("Global setting to disable chat for all syncshells."); _uiShared.DrawHelpText("Global setting to disable chat for all syncshells.");
using var pushDisableGlobal = ImRaii.Disabled(disableSyncshellChat); using var pushDisableGlobal = ImRaii.Disabled(disableSyncshellChat);
@@ -450,10 +450,10 @@ public class SettingsUi : WindowMediatorSubscriberBase
_chatService.PrintChannelExample($"Selected channel: {_syncshellChatTypes[i].Item2}"); _chatService.PrintChannelExample($"Selected channel: {_syncshellChatTypes[i].Item2}");
_configService.Save(); _configService.Save();
}, globalChatTypeIdx); }, globalChatTypeIdx);
UiSharedService.DrawHelpText("FFXIV chat channel to output chat messages on."); _uiShared.DrawHelpText("FFXIV chat channel to output chat messages on.");
ImGui.SetWindowFontScale(0.6f); ImGui.SetWindowFontScale(0.6f);
UiSharedService.FontText("\"Chat 2\" Plugin Integration", _uiShared.UidFont); _uiShared.BigText("\"Chat 2\" Plugin Integration");
ImGui.SetWindowFontScale(1.0f); ImGui.SetWindowFontScale(1.0f);
// TODO: ExtraChat API impersonation // TODO: ExtraChat API impersonation
@@ -478,11 +478,11 @@ public class SettingsUi : WindowMediatorSubscriberBase
_configService.Current.ExtraChatAPI = false; _configService.Current.ExtraChatAPI = false;
_configService.Save(); _configService.Save();
} }
UiSharedService.DrawHelpText("If enabled, messages will be filtered under the category \"ExtraChat channels: All\".\n\nThis works even if ExtraChat is also installed and enabled."); _uiShared.DrawHelpText("If enabled, messages will be filtered under the category \"ExtraChat channels: All\".\n\nThis works even if ExtraChat is also installed and enabled.");
ImGui.Separator(); ImGui.Separator();
UiSharedService.FontText("Syncshell Settings", _uiShared.UidFont); _uiShared.BigText("Syncshell Settings");
if (!ApiController.ServerAlive) if (!ApiController.ServerAlive)
{ {
@@ -504,7 +504,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
shellName = $"[{shellNumber}] {shellName}"; shellName = $"[{shellNumber}] {shellName}";
ImGui.SetWindowFontScale(0.6f); ImGui.SetWindowFontScale(0.6f);
UiSharedService.FontText(shellName, _uiShared.UidFont); _uiShared.BigText(shellName);
ImGui.SetWindowFontScale(1.0f); ImGui.SetWindowFontScale(1.0f);
using var pushIndent = ImRaii.PushIndent(); using var pushIndent = ImRaii.PushIndent();
@@ -607,7 +607,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
shellConfig.LogKind = (int)_syncshellChatTypes[i].Item1; shellConfig.LogKind = (int)_syncshellChatTypes[i].Item1;
_serverConfigurationManager.SaveShellConfigForGid(gid, shellConfig); _serverConfigurationManager.SaveShellConfigForGid(gid, shellConfig);
}, shellChatTypeIdx); }, shellChatTypeIdx);
UiSharedService.DrawHelpText("Override the FFXIV chat channel used for this syncshell."); _uiShared.DrawHelpText("Override the FFXIV chat channel used for this syncshell.");
} }
} }
@@ -615,7 +615,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
{ {
_lastTab = "Debug"; _lastTab = "Debug";
UiSharedService.FontText("Debug", _uiShared.UidFont); _uiShared.BigText("Debug");
#if DEBUG #if DEBUG
if (LastCreatedCharacterData != null && ImGui.TreeNode("Last created character data")) if (LastCreatedCharacterData != null && ImGui.TreeNode("Last created character data"))
{ {
@@ -627,7 +627,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
ImGui.TreePop(); ImGui.TreePop();
} }
#endif #endif
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Copy, "[DEBUG] Copy Last created Character Data to clipboard")) if (_uiShared.IconTextButton(FontAwesomeIcon.Copy, "[DEBUG] Copy Last created Character Data to clipboard"))
{ {
if (LastCreatedCharacterData != null) if (LastCreatedCharacterData != null)
{ {
@@ -652,16 +652,16 @@ public class SettingsUi : WindowMediatorSubscriberBase
_configService.Current.LogPerformance = logPerformance; _configService.Current.LogPerformance = logPerformance;
_configService.Save(); _configService.Save();
} }
UiSharedService.DrawHelpText("Enabling this can incur a (slight) performance impact. Enabling this for extended periods of time is not recommended."); _uiShared.DrawHelpText("Enabling this can incur a (slight) performance impact. Enabling this for extended periods of time is not recommended.");
using (ImRaii.Disabled(!logPerformance)) using (ImRaii.Disabled(!logPerformance))
{ {
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.StickyNote, "Print Performance Stats to /xllog")) if (_uiShared.IconTextButton(FontAwesomeIcon.StickyNote, "Print Performance Stats to /xllog"))
{ {
_performanceCollector.PrintPerformanceStats(); _performanceCollector.PrintPerformanceStats();
} }
ImGui.SameLine(); ImGui.SameLine();
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.StickyNote, "Print Performance Stats (last 60s) to /xllog")) if (_uiShared.IconTextButton(FontAwesomeIcon.StickyNote, "Print Performance Stats (last 60s) to /xllog"))
{ {
_performanceCollector.PrintPerformanceStats(60); _performanceCollector.PrintPerformanceStats(60);
} }
@@ -679,7 +679,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
{ {
_lastTab = "FileCache"; _lastTab = "FileCache";
UiSharedService.FontText("Export MCDF", _uiShared.UidFont); _uiShared.BigText("Export MCDF");
UiSharedService.TextWrapped("This feature allows you to pack your character appearance into a MCDF file and manually send it to other people. MCDF files can imported during GPose."); UiSharedService.TextWrapped("This feature allows you to pack your character appearance into a MCDF file and manually send it to other people. MCDF files can imported during GPose.");
@@ -694,7 +694,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
if (!_mareCharaFileManager.CurrentlyWorking) if (!_mareCharaFileManager.CurrentlyWorking)
{ {
ImGui.InputTextWithHint("Export Descriptor", "This description will be shown on loading the data", ref _exportDescription, 255); ImGui.InputTextWithHint("Export Descriptor", "This description will be shown on loading the data", ref _exportDescription, 255);
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Save, "Export Character as MCDF")) if (_uiShared.IconTextButton(FontAwesomeIcon.Save, "Export Character as MCDF"))
{ {
string defaultFileName = string.IsNullOrEmpty(_exportDescription) string defaultFileName = string.IsNullOrEmpty(_exportDescription)
? "export.mcdf" ? "export.mcdf"
@@ -735,11 +735,11 @@ public class SettingsUi : WindowMediatorSubscriberBase
_configService.Current.OpenGposeImportOnGposeStart = openInGpose; _configService.Current.OpenGposeImportOnGposeStart = openInGpose;
_configService.Save(); _configService.Save();
} }
UiSharedService.DrawHelpText("This will automatically open the import menu when loading into Gpose. If unchecked you can open the menu manually with /sync gpose"); _uiShared.DrawHelpText("This will automatically open the import menu when loading into Gpose. If unchecked you can open the menu manually with /sync gpose");
ImGui.Separator(); ImGui.Separator();
UiSharedService.FontText("Storage", _uiShared.UidFont); _uiShared.BigText("Storage");
UiSharedService.TextWrapped("Loporrit stores downloaded files from paired people permanently. This is to improve loading performance and requiring less downloads. " + UiSharedService.TextWrapped("Loporrit stores downloaded files from paired people permanently. This is to improve loading performance and requiring less downloads. " +
"The storage governs itself by clearing data beyond the set storage size. Please set the storage size accordingly. It is not necessary to manually clear the storage."); "The storage governs itself by clearing data beyond the set storage size. Please set the storage size accordingly. It is not necessary to manually clear the storage.");
@@ -751,7 +751,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
{ {
ImGui.SameLine(); ImGui.SameLine();
using var id = ImRaii.PushId("penumbraMonitor"); using var id = ImRaii.PushId("penumbraMonitor");
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.ArrowsToCircle, "Try to reinitialize Monitor")) if (_uiShared.IconTextButton(FontAwesomeIcon.ArrowsToCircle, "Try to reinitialize Monitor"))
{ {
_cacheMonitor.StartPenumbraWatcher(_ipcManager.Penumbra.ModDirectory); _cacheMonitor.StartPenumbraWatcher(_ipcManager.Penumbra.ModDirectory);
} }
@@ -763,14 +763,14 @@ public class SettingsUi : WindowMediatorSubscriberBase
{ {
ImGui.SameLine(); ImGui.SameLine();
using var id = ImRaii.PushId("mareMonitor"); using var id = ImRaii.PushId("mareMonitor");
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.ArrowsToCircle, "Try to reinitialize Monitor")) if (_uiShared.IconTextButton(FontAwesomeIcon.ArrowsToCircle, "Try to reinitialize Monitor"))
{ {
_cacheMonitor.StartMareWatcher(_configService.Current.CacheFolder); _cacheMonitor.StartMareWatcher(_configService.Current.CacheFolder);
} }
} }
if (_cacheMonitor.MareWatcher == null || _cacheMonitor.PenumbraWatcher == null) if (_cacheMonitor.MareWatcher == null || _cacheMonitor.PenumbraWatcher == null)
{ {
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Play, "Resume Monitoring")) if (_uiShared.IconTextButton(FontAwesomeIcon.Play, "Resume Monitoring"))
{ {
_cacheMonitor.StartMareWatcher(_configService.Current.CacheFolder); _cacheMonitor.StartMareWatcher(_configService.Current.CacheFolder);
_cacheMonitor.StartPenumbraWatcher(_ipcManager.Penumbra.ModDirectory); _cacheMonitor.StartPenumbraWatcher(_ipcManager.Penumbra.ModDirectory);
@@ -784,7 +784,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
{ {
using (ImRaii.Disabled(!UiSharedService.CtrlPressed())) using (ImRaii.Disabled(!UiSharedService.CtrlPressed()))
{ {
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Stop, "Stop Monitoring")) if (_uiShared.IconTextButton(FontAwesomeIcon.Stop, "Stop Monitoring"))
{ {
_cacheMonitor.StopMonitoring(); _cacheMonitor.StopMonitoring();
} }
@@ -815,12 +815,12 @@ public class SettingsUi : WindowMediatorSubscriberBase
_configService.Current.UseCompactor = useFileCompactor; _configService.Current.UseCompactor = useFileCompactor;
_configService.Save(); _configService.Save();
} }
UiSharedService.DrawHelpText("The file compactor can massively reduce your saved files. It might incur a minor penalty on loading files on a slow CPU." + Environment.NewLine _uiShared.DrawHelpText("The file compactor can massively reduce your saved files. It might incur a minor penalty on loading files on a slow CPU." + Environment.NewLine
+ "It is recommended to leave it enabled to save on space."); + "It is recommended to leave it enabled to save on space.");
if (!_fileCompactor.MassCompactRunning) if (!_fileCompactor.MassCompactRunning)
{ {
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.FileArchive, "Compact all files in storage")) if (_uiShared.IconTextButton(FontAwesomeIcon.FileArchive, "Compact all files in storage"))
{ {
_ = Task.Run(() => _ = Task.Run(() =>
{ {
@@ -831,12 +831,11 @@ public class SettingsUi : WindowMediatorSubscriberBase
UiSharedService.AttachToolTip("This will run compression on all files in your current storage folder." + Environment.NewLine UiSharedService.AttachToolTip("This will run compression on all files in your current storage folder." + Environment.NewLine
+ "You do not need to run this manually if you keep the file compactor enabled."); + "You do not need to run this manually if you keep the file compactor enabled.");
ImGui.SameLine(); ImGui.SameLine();
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.File, "Decompact all files in storage")) if (_uiShared.IconTextButton(FontAwesomeIcon.File, "Decompact all files in storage"))
{ {
_ = Task.Run(() => _ = Task.Run(() =>
{ {
_fileCompactor.CompactStorage(compress: false); _fileCompactor.CompactStorage(compress: false);
CancellationTokenSource cts = new();
_cacheMonitor.RecalculateFileCacheSize(CancellationToken.None); _cacheMonitor.RecalculateFileCacheSize(CancellationToken.None);
}); });
} }
@@ -859,7 +858,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
"This operation, depending on how many files you have in your storage, can take a while and will be CPU and drive intensive."); "This operation, depending on how many files you have in your storage, can take a while and will be CPU and drive intensive.");
using (ImRaii.Disabled(_validationTask != null && !_validationTask.IsCompleted)) using (ImRaii.Disabled(_validationTask != null && !_validationTask.IsCompleted))
{ {
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Check, "Start File Storage Validation")) if (_uiShared.IconTextButton(FontAwesomeIcon.Check, "Start File Storage Validation"))
{ {
_validationCts?.Cancel(); _validationCts?.Cancel();
_validationCts?.Dispose(); _validationCts?.Dispose();
@@ -871,7 +870,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
if (_validationTask != null && !_validationTask.IsCompleted) if (_validationTask != null && !_validationTask.IsCompleted)
{ {
ImGui.SameLine(); ImGui.SameLine();
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Times, "Cancel")) if (_uiShared.IconTextButton(FontAwesomeIcon.Times, "Cancel"))
{ {
_validationCts?.Cancel(); _validationCts?.Cancel();
} }
@@ -905,7 +904,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
+ Environment.NewLine + "- This can make the situation of not getting other players data worse in situations of heavy file server load."); + Environment.NewLine + "- This can make the situation of not getting other players data worse in situations of heavy file server load.");
if (!_readClearCache) if (!_readClearCache)
ImGui.BeginDisabled(); ImGui.BeginDisabled();
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Trash, "Clear local storage") && UiSharedService.CtrlPressed() && _readClearCache) if (_uiShared.IconTextButton(FontAwesomeIcon.Trash, "Clear local storage") && UiSharedService.CtrlPressed() && _readClearCache)
{ {
_ = Task.Run(() => _ = Task.Run(() =>
{ {
@@ -935,12 +934,12 @@ public class SettingsUi : WindowMediatorSubscriberBase
//UiSharedService.FontText("Experimental", _uiShared.UidFont); //UiSharedService.FontText("Experimental", _uiShared.UidFont);
//ImGui.Separator(); //ImGui.Separator();
UiSharedService.FontText("Notes", _uiShared.UidFont); _uiShared.BigText("Notes");
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.StickyNote, "Export all your user notes to clipboard")) if (_uiShared.IconTextButton(FontAwesomeIcon.StickyNote, "Export all your user notes to clipboard"))
{ {
ImGui.SetClipboardText(UiSharedService.GetNotes(_pairManager.DirectPairs.UnionBy(_pairManager.GroupPairs.SelectMany(p => p.Value), p => p.UserData, UserDataComparer.Instance).ToList())); ImGui.SetClipboardText(UiSharedService.GetNotes(_pairManager.DirectPairs.UnionBy(_pairManager.GroupPairs.SelectMany(p => p.Value), p => p.UserData, UserDataComparer.Instance).ToList()));
} }
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.FileImport, "Import notes from clipboard")) if (_uiShared.IconTextButton(FontAwesomeIcon.FileImport, "Import notes from clipboard"))
{ {
_notesSuccessfullyApplied = null; _notesSuccessfullyApplied = null;
var notes = ImGui.GetClipboardText(); var notes = ImGui.GetClipboardText();
@@ -949,7 +948,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
ImGui.SameLine(); ImGui.SameLine();
ImGui.Checkbox("Overwrite existing notes", ref _overwriteExistingLabels); ImGui.Checkbox("Overwrite existing notes", ref _overwriteExistingLabels);
UiSharedService.DrawHelpText("If this option is selected all already existing notes for UIDs will be overwritten by the imported notes."); _uiShared.DrawHelpText("If this option is selected all already existing notes for UIDs will be overwritten by the imported notes.");
if (_notesSuccessfullyApplied.HasValue && _notesSuccessfullyApplied.Value) if (_notesSuccessfullyApplied.HasValue && _notesSuccessfullyApplied.Value)
{ {
UiSharedService.ColorTextWrapped("User Notes successfully imported", ImGuiColors.HealerGreen); UiSharedService.ColorTextWrapped("User Notes successfully imported", ImGuiColors.HealerGreen);
@@ -966,10 +965,10 @@ public class SettingsUi : WindowMediatorSubscriberBase
_configService.Current.OpenPopupOnAdd = openPopupOnAddition; _configService.Current.OpenPopupOnAdd = openPopupOnAddition;
_configService.Save(); _configService.Save();
} }
UiSharedService.DrawHelpText("This will open a popup that allows you to set the notes for a user after successfully adding them to your individual pairs."); _uiShared.DrawHelpText("This will open a popup that allows you to set the notes for a user after successfully adding them to your individual pairs.");
ImGui.Separator(); ImGui.Separator();
UiSharedService.FontText("UI", _uiShared.UidFont); _uiShared.BigText("UI");
var showCharacterNames = _configService.Current.ShowCharacterNames; var showCharacterNames = _configService.Current.ShowCharacterNames;
var showVisibleSeparate = _configService.Current.ShowVisibleUsersSeparately; var showVisibleSeparate = _configService.Current.ShowVisibleUsersSeparately;
var showOfflineSeparate = _configService.Current.ShowOfflineUsersSeparately; var showOfflineSeparate = _configService.Current.ShowOfflineUsersSeparately;
@@ -991,14 +990,14 @@ public class SettingsUi : WindowMediatorSubscriberBase
_configService.Current.EnableRightClickMenus = enableRightClickMenu; _configService.Current.EnableRightClickMenus = enableRightClickMenu;
_configService.Save(); _configService.Save();
} }
UiSharedService.DrawHelpText("This will add Loporrit related right click menu entries in the game UI on paired players."); _uiShared.DrawHelpText("This will add Loporrit related right click menu entries in the game UI on paired players.");
if (ImGui.Checkbox("Display status and visible pair count in Server Info Bar", ref enableDtrEntry)) if (ImGui.Checkbox("Display status and visible pair count in Server Info Bar", ref enableDtrEntry))
{ {
_configService.Current.EnableDtrEntry = enableDtrEntry; _configService.Current.EnableDtrEntry = enableDtrEntry;
_configService.Save(); _configService.Save();
} }
UiSharedService.DrawHelpText("This will add Loporrit connection status and visible pair count in the Server Info Bar.\nYou can further configure this through your Dalamud Settings."); _uiShared.DrawHelpText("This will add Loporrit connection status and visible pair count in the Server Info Bar.\nYou can further configure this through your Dalamud Settings.");
using (ImRaii.Disabled(!enableDtrEntry)) using (ImRaii.Disabled(!enableDtrEntry))
{ {
@@ -1079,21 +1078,21 @@ public class SettingsUi : WindowMediatorSubscriberBase
_configService.Current.ShowVisibleUsersSeparately = showVisibleSeparate; _configService.Current.ShowVisibleUsersSeparately = showVisibleSeparate;
_configService.Save(); _configService.Save();
} }
UiSharedService.DrawHelpText("This will show all currently visible users in a special 'Visible' group in the main UI."); _uiShared.DrawHelpText("This will show all currently visible users in a special 'Visible' group in the main UI.");
if (ImGui.Checkbox("Show separate Offline group", ref showOfflineSeparate)) if (ImGui.Checkbox("Show separate Offline group", ref showOfflineSeparate))
{ {
_configService.Current.ShowOfflineUsersSeparately = showOfflineSeparate; _configService.Current.ShowOfflineUsersSeparately = showOfflineSeparate;
_configService.Save(); _configService.Save();
} }
UiSharedService.DrawHelpText("This will show all currently offline users in a special 'Offline' group in the main UI."); _uiShared.DrawHelpText("This will show all currently offline users in a special 'Offline' group in the main UI.");
if (ImGui.Checkbox("Show player names", ref showCharacterNames)) if (ImGui.Checkbox("Show player names", ref showCharacterNames))
{ {
_configService.Current.ShowCharacterNames = showCharacterNames; _configService.Current.ShowCharacterNames = showCharacterNames;
_configService.Save(); _configService.Save();
} }
UiSharedService.DrawHelpText("This will show character names instead of UIDs when possible"); _uiShared.DrawHelpText("This will show character names instead of UIDs when possible");
if (ImGui.Checkbox("Show Profiles on Hover", ref showProfiles)) if (ImGui.Checkbox("Show Profiles on Hover", ref showProfiles))
{ {
@@ -1101,7 +1100,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
_configService.Current.ProfilesShow = showProfiles; _configService.Current.ProfilesShow = showProfiles;
_configService.Save(); _configService.Save();
} }
UiSharedService.DrawHelpText("This will show the configured user profile after a set delay"); _uiShared.DrawHelpText("This will show the configured user profile after a set delay");
ImGui.Indent(); ImGui.Indent();
if (!showProfiles) ImGui.BeginDisabled(); if (!showProfiles) ImGui.BeginDisabled();
if (ImGui.Checkbox("Popout profiles on the right", ref profileOnRight)) if (ImGui.Checkbox("Popout profiles on the right", ref profileOnRight))
@@ -1110,14 +1109,14 @@ public class SettingsUi : WindowMediatorSubscriberBase
_configService.Save(); _configService.Save();
Mediator.Publish(new CompactUiChange(Vector2.Zero, Vector2.Zero)); Mediator.Publish(new CompactUiChange(Vector2.Zero, Vector2.Zero));
} }
UiSharedService.DrawHelpText("Will show profiles on the right side of the main UI"); _uiShared.DrawHelpText("Will show profiles on the right side of the main UI");
ImGui.SetNextItemWidth(250 * ImGuiHelpers.GlobalScale); ImGui.SetNextItemWidth(250 * ImGuiHelpers.GlobalScale);
if (ImGui.SliderFloat("Hover Delay", ref profileDelay, 1, 10)) if (ImGui.SliderFloat("Hover Delay", ref profileDelay, 1, 10))
{ {
_configService.Current.ProfileDelay = profileDelay; _configService.Current.ProfileDelay = profileDelay;
_configService.Save(); _configService.Save();
} }
UiSharedService.DrawHelpText("Delay until the profile should be displayed"); _uiShared.DrawHelpText("Delay until the profile should be displayed");
if (!showProfiles) ImGui.EndDisabled(); if (!showProfiles) ImGui.EndDisabled();
ImGui.Unindent(); ImGui.Unindent();
if (ImGui.Checkbox("Show profiles marked as NSFW", ref showNsfwProfiles)) if (ImGui.Checkbox("Show profiles marked as NSFW", ref showNsfwProfiles))
@@ -1126,7 +1125,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
_configService.Current.ProfilesAllowNsfw = showNsfwProfiles; _configService.Current.ProfilesAllowNsfw = showNsfwProfiles;
_configService.Save(); _configService.Save();
} }
UiSharedService.DrawHelpText("Will show profiles that have the NSFW tag enabled"); _uiShared.DrawHelpText("Will show profiles that have the NSFW tag enabled");
ImGui.Separator(); ImGui.Separator();
@@ -1134,7 +1133,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
var onlineNotifs = _configService.Current.ShowOnlineNotifications; var onlineNotifs = _configService.Current.ShowOnlineNotifications;
var onlineNotifsPairsOnly = _configService.Current.ShowOnlineNotificationsOnlyForIndividualPairs; var onlineNotifsPairsOnly = _configService.Current.ShowOnlineNotificationsOnlyForIndividualPairs;
var onlineNotifsNamedOnly = _configService.Current.ShowOnlineNotificationsOnlyForNamedPairs; var onlineNotifsNamedOnly = _configService.Current.ShowOnlineNotificationsOnlyForNamedPairs;
UiSharedService.FontText("Notifications", _uiShared.UidFont); _uiShared.BigText("Notifications");
ImGui.SetNextItemWidth(250 * ImGuiHelpers.GlobalScale); ImGui.SetNextItemWidth(250 * ImGuiHelpers.GlobalScale);
_uiShared.DrawCombo("Info Notification Display##settingsUi", (NotificationLocation[])Enum.GetValues(typeof(NotificationLocation)), (i) => i.ToString(), _uiShared.DrawCombo("Info Notification Display##settingsUi", (NotificationLocation[])Enum.GetValues(typeof(NotificationLocation)), (i) => i.ToString(),
@@ -1143,7 +1142,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
_configService.Current.InfoNotification = i; _configService.Current.InfoNotification = i;
_configService.Save(); _configService.Save();
}, _configService.Current.InfoNotification); }, _configService.Current.InfoNotification);
UiSharedService.DrawHelpText("The location where \"Info\" notifications will display." _uiShared.DrawHelpText("The location where \"Info\" notifications will display."
+ Environment.NewLine + "'Nowhere' will not show any Info notifications" + Environment.NewLine + "'Nowhere' will not show any Info notifications"
+ Environment.NewLine + "'Chat' will print Info notifications in chat" + Environment.NewLine + "'Chat' will print Info notifications in chat"
+ Environment.NewLine + "'Toast' will show Warning toast notifications in the bottom right corner" + Environment.NewLine + "'Toast' will show Warning toast notifications in the bottom right corner"
@@ -1156,7 +1155,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
_configService.Current.WarningNotification = i; _configService.Current.WarningNotification = i;
_configService.Save(); _configService.Save();
}, _configService.Current.WarningNotification); }, _configService.Current.WarningNotification);
UiSharedService.DrawHelpText("The location where \"Warning\" notifications will display." _uiShared.DrawHelpText("The location where \"Warning\" notifications will display."
+ Environment.NewLine + "'Nowhere' will not show any Warning notifications" + Environment.NewLine + "'Nowhere' will not show any Warning notifications"
+ Environment.NewLine + "'Chat' will print Warning notifications in chat" + Environment.NewLine + "'Chat' will print Warning notifications in chat"
+ Environment.NewLine + "'Toast' will show Warning toast notifications in the bottom right corner" + Environment.NewLine + "'Toast' will show Warning toast notifications in the bottom right corner"
@@ -1169,7 +1168,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
_configService.Current.ErrorNotification = i; _configService.Current.ErrorNotification = i;
_configService.Save(); _configService.Save();
}, _configService.Current.ErrorNotification); }, _configService.Current.ErrorNotification);
UiSharedService.DrawHelpText("The location where \"Error\" notifications will display." _uiShared.DrawHelpText("The location where \"Error\" notifications will display."
+ Environment.NewLine + "'Nowhere' will not show any Error notifications" + Environment.NewLine + "'Nowhere' will not show any Error notifications"
+ Environment.NewLine + "'Chat' will print Error notifications in chat" + Environment.NewLine + "'Chat' will print Error notifications in chat"
+ Environment.NewLine + "'Toast' will show Error toast notifications in the bottom right corner" + Environment.NewLine + "'Toast' will show Error toast notifications in the bottom right corner"
@@ -1180,13 +1179,13 @@ public class SettingsUi : WindowMediatorSubscriberBase
_configService.Current.DisableOptionalPluginWarnings = disableOptionalPluginWarnings; _configService.Current.DisableOptionalPluginWarnings = disableOptionalPluginWarnings;
_configService.Save(); _configService.Save();
} }
UiSharedService.DrawHelpText("Enabling this will not show any \"Warning\" labeled messages for missing optional plugins."); _uiShared.DrawHelpText("Enabling this will not show any \"Warning\" labeled messages for missing optional plugins.");
if (ImGui.Checkbox("Enable online notifications", ref onlineNotifs)) if (ImGui.Checkbox("Enable online notifications", ref onlineNotifs))
{ {
_configService.Current.ShowOnlineNotifications = onlineNotifs; _configService.Current.ShowOnlineNotifications = onlineNotifs;
_configService.Save(); _configService.Save();
} }
UiSharedService.DrawHelpText("Enabling this will show a small notification (type: Info) in the bottom right corner when pairs go online."); _uiShared.DrawHelpText("Enabling this will show a small notification (type: Info) in the bottom right corner when pairs go online.");
using (ImRaii.Disabled(!onlineNotifs)) using (ImRaii.Disabled(!onlineNotifs))
{ {
@@ -1196,13 +1195,13 @@ public class SettingsUi : WindowMediatorSubscriberBase
_configService.Current.ShowOnlineNotificationsOnlyForIndividualPairs = onlineNotifsPairsOnly; _configService.Current.ShowOnlineNotificationsOnlyForIndividualPairs = onlineNotifsPairsOnly;
_configService.Save(); _configService.Save();
} }
UiSharedService.DrawHelpText("Enabling this will only show online notifications (type: Info) for individual pairs."); _uiShared.DrawHelpText("Enabling this will only show online notifications (type: Info) for individual pairs.");
if (ImGui.Checkbox("Notify only for named pairs", ref onlineNotifsNamedOnly)) if (ImGui.Checkbox("Notify only for named pairs", ref onlineNotifsNamedOnly))
{ {
_configService.Current.ShowOnlineNotificationsOnlyForNamedPairs = onlineNotifsNamedOnly; _configService.Current.ShowOnlineNotificationsOnlyForNamedPairs = onlineNotifsNamedOnly;
_configService.Save(); _configService.Save();
} }
UiSharedService.DrawHelpText("Enabling this will only show online notifications (type: Info) for pairs where you have set an individual note."); _uiShared.DrawHelpText("Enabling this will only show online notifications (type: Info) for pairs where you have set an individual note.");
} }
} }
@@ -1242,7 +1241,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
_lastTab = "Service Settings"; _lastTab = "Service Settings";
if (ApiController.ServerAlive) if (ApiController.ServerAlive)
{ {
UiSharedService.FontText("Service Actions", _uiShared.UidFont); _uiShared.BigText("Service Actions");
ImGuiHelpers.ScaledDummy(new Vector2(5, 5)); ImGuiHelpers.ScaledDummy(new Vector2(5, 5));
if (ImGui.Button("Delete all my files")) if (ImGui.Button("Delete all my files"))
{ {
@@ -1250,7 +1249,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
ImGui.OpenPopup("Delete all your files?"); ImGui.OpenPopup("Delete all your files?");
} }
UiSharedService.DrawHelpText("Completely deletes all your uploaded files on the service."); _uiShared.DrawHelpText("Completely deletes all your uploaded files on the service.");
if (ImGui.BeginPopupModal("Delete all your files?", ref _deleteFilesPopupModalShown, UiSharedService.PopupWindowFlags)) if (ImGui.BeginPopupModal("Delete all your files?", ref _deleteFilesPopupModalShown, UiSharedService.PopupWindowFlags))
{ {
@@ -1286,7 +1285,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
ImGui.OpenPopup("Delete your account?"); ImGui.OpenPopup("Delete your account?");
} }
UiSharedService.DrawHelpText("Completely deletes your account and all uploaded files to the service."); _uiShared.DrawHelpText("Completely deletes your account and all uploaded files to the service.");
if (ImGui.BeginPopupModal("Delete your account?", ref _deleteAccountPopupModalShown, UiSharedService.PopupWindowFlags)) if (ImGui.BeginPopupModal("Delete your account?", ref _deleteAccountPopupModalShown, UiSharedService.PopupWindowFlags))
{ {
@@ -1320,7 +1319,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
ImGui.Separator(); ImGui.Separator();
} }
UiSharedService.FontText("Service & Character Settings", _uiShared.UidFont); _uiShared.BigText("Service & Character Settings");
var idx = _uiShared.DrawServiceSelection(); var idx = _uiShared.DrawServiceSelection();
@@ -1395,7 +1394,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
} }
}, EqualityComparer<KeyValuePair<int, SecretKey>>.Default.Equals(keys.FirstOrDefault(f => f.Key == item.SecretKeyIdx), default) ? keys.First() : keys.First(f => f.Key == item.SecretKeyIdx)); }, EqualityComparer<KeyValuePair<int, SecretKey>>.Default.Equals(keys.FirstOrDefault(f => f.Key == item.SecretKeyIdx), default) ? keys.First() : keys.First(f => f.Key == item.SecretKeyIdx));
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Trash, "Delete Character") && UiSharedService.CtrlPressed()) if (_uiShared.IconTextButton(FontAwesomeIcon.Trash, "Delete Character") && UiSharedService.CtrlPressed())
_serverConfigurationManager.RemoveCharacterFromServer(idx, item); _serverConfigurationManager.RemoveCharacterFromServer(idx, item);
UiSharedService.AttachToolTip("Hold CTRL to delete this entry."); UiSharedService.AttachToolTip("Hold CTRL to delete this entry.");
@@ -1409,14 +1408,14 @@ public class SettingsUi : WindowMediatorSubscriberBase
if (!selectedServer.Authentications.Exists(c => string.Equals(c.CharacterName, _uiShared.PlayerName, StringComparison.Ordinal) if (!selectedServer.Authentications.Exists(c => string.Equals(c.CharacterName, _uiShared.PlayerName, StringComparison.Ordinal)
&& c.WorldId == _uiShared.WorldId)) && c.WorldId == _uiShared.WorldId))
{ {
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.User, "Add current character")) if (_uiShared.IconTextButton(FontAwesomeIcon.User, "Add current character"))
{ {
_serverConfigurationManager.AddCurrentCharacterToServer(idx); _serverConfigurationManager.AddCurrentCharacterToServer(idx);
} }
ImGui.SameLine(); ImGui.SameLine();
} }
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Plus, "Add new character")) if (_uiShared.IconTextButton(FontAwesomeIcon.Plus, "Add new character"))
{ {
_serverConfigurationManager.AddEmptyCharacterToServer(idx); _serverConfigurationManager.AddEmptyCharacterToServer(idx);
} }
@@ -1451,7 +1450,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
if (keyInUse) ImGui.PopStyleColor(); if (keyInUse) ImGui.PopStyleColor();
if (!keyInUse) if (!keyInUse)
{ {
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Trash, "Delete Secret Key") && UiSharedService.CtrlPressed()) if (_uiShared.IconTextButton(FontAwesomeIcon.Trash, "Delete Secret Key") && UiSharedService.CtrlPressed())
{ {
selectedServer.SecretKeys.Remove(item.Key); selectedServer.SecretKeys.Remove(item.Key);
_serverConfigurationManager.Save(); _serverConfigurationManager.Save();
@@ -1468,7 +1467,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
} }
ImGui.Separator(); ImGui.Separator();
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Plus, "Add new Secret Key")) if (_uiShared.IconTextButton(FontAwesomeIcon.Plus, "Add new Secret Key"))
{ {
selectedServer.SecretKeys.Add(selectedServer.SecretKeys.Any() ? selectedServer.SecretKeys.Max(p => p.Key) + 1 : 0, new SecretKey() selectedServer.SecretKeys.Add(selectedServer.SecretKeys.Any() ? selectedServer.SecretKeys.Max(p => p.Key) + 1 : 0, new SecretKey()
{ {
@@ -1480,7 +1479,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
if (selectedServer.ServerUri == ApiController.LoporritServiceUri) if (selectedServer.ServerUri == ApiController.LoporritServiceUri)
{ {
ImGui.SameLine(); ImGui.SameLine();
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Plus, "Register a new Loporrit account")) if (_uiShared.IconTextButton(FontAwesomeIcon.Plus, "Register a new Loporrit account"))
{ {
_registrationInProgress = true; _registrationInProgress = true;
_ = Task.Run(async () => { _ = Task.Run(async () => {
@@ -1554,7 +1553,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
} }
if (isMain) if (isMain)
{ {
UiSharedService.DrawHelpText("You cannot edit the URI of the main service."); _uiShared.DrawHelpText("You cannot edit the URI of the main service.");
} }
if (ImGui.InputText("Service Name", ref serverName, 255, flags)) if (ImGui.InputText("Service Name", ref serverName, 255, flags))
@@ -1564,16 +1563,16 @@ public class SettingsUi : WindowMediatorSubscriberBase
} }
if (isMain) if (isMain)
{ {
UiSharedService.DrawHelpText("You cannot edit the name of the main service."); _uiShared.DrawHelpText("You cannot edit the name of the main service.");
} }
if (!isMain && selectedServer != _serverConfigurationManager.CurrentServer) if (!isMain && selectedServer != _serverConfigurationManager.CurrentServer)
{ {
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Trash, "Delete Service") && UiSharedService.CtrlPressed()) if (_uiShared.IconTextButton(FontAwesomeIcon.Trash, "Delete Service") && UiSharedService.CtrlPressed())
{ {
_serverConfigurationManager.DeleteServer(selectedServer); _serverConfigurationManager.DeleteServer(selectedServer);
} }
UiSharedService.DrawHelpText("Hold CTRL to delete this service"); _uiShared.DrawHelpText("Hold CTRL to delete this service");
} }
ImGui.EndTabItem(); ImGui.EndTabItem();
} }

View File

@@ -1,7 +1,6 @@
using Dalamud.Interface.Colors; using Dalamud.Interface.Colors;
using Dalamud.Interface.Textures.TextureWraps; using Dalamud.Interface.Textures.TextureWraps;
using Dalamud.Interface.Utility; using Dalamud.Interface.Utility;
using Dalamud.Interface.Utility.Raii;
using ImGuiNET; using ImGuiNET;
using MareSynchronos.API.Data.Extensions; using MareSynchronos.API.Data.Extensions;
using MareSynchronos.PlayerData.Pairs; using MareSynchronos.PlayerData.Pairs;
@@ -107,8 +106,8 @@ public class StandaloneProfileUi : WindowMediatorSubscriberBase
}; };
if (ImGui.BeginChildFrame(1000, childFrame)) if (ImGui.BeginChildFrame(1000, childFrame))
{ {
using (_uiSharedService.GameFont.Push()) using var _ = _uiSharedService.GameFont.Push();
ImGui.TextWrapped(mareProfile.Description); ImGui.TextWrapped(mareProfile.Description);
} }
ImGui.EndChildFrame(); ImGui.EndChildFrame();

View File

@@ -77,7 +77,7 @@ public class SyncshellAdminUI : WindowMediatorSubscriberBase
{ {
bool isInvitesDisabled = perm.IsDisableInvites(); bool isInvitesDisabled = perm.IsDisableInvites();
if (UiSharedService.NormalizedIconTextButton(isInvitesDisabled ? FontAwesomeIcon.Unlock : FontAwesomeIcon.Lock, if (_uiSharedService.IconTextButton(isInvitesDisabled ? FontAwesomeIcon.Unlock : FontAwesomeIcon.Lock,
isInvitesDisabled ? "Unlock Syncshell" : "Lock Syncshell")) isInvitesDisabled ? "Unlock Syncshell" : "Lock Syncshell"))
{ {
perm.SetDisableInvites(!isInvitesDisabled); perm.SetDisableInvites(!isInvitesDisabled);
@@ -87,7 +87,7 @@ public class SyncshellAdminUI : WindowMediatorSubscriberBase
ImGuiHelpers.ScaledDummy(2f); ImGuiHelpers.ScaledDummy(2f);
UiSharedService.TextWrapped("One-time invites work as single-use passwords. Use those if you do not want to distribute your Syncshell password."); UiSharedService.TextWrapped("One-time invites work as single-use passwords. Use those if you do not want to distribute your Syncshell password.");
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Envelope, "Single one-time invite")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.Envelope, "Single one-time invite"))
{ {
ImGui.SetClipboardText(_apiController.GroupCreateTempInvite(new(GroupFullInfo.Group), 1).Result.FirstOrDefault() ?? string.Empty); ImGui.SetClipboardText(_apiController.GroupCreateTempInvite(new(GroupFullInfo.Group), 1).Result.FirstOrDefault() ?? string.Empty);
} }
@@ -96,7 +96,7 @@ public class SyncshellAdminUI : WindowMediatorSubscriberBase
ImGui.SameLine(); ImGui.SameLine();
using (ImRaii.Disabled(_multiInvites <= 1 || _multiInvites > 100)) using (ImRaii.Disabled(_multiInvites <= 1 || _multiInvites > 100))
{ {
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Envelope, "Generate " + _multiInvites + " one-time invites")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.Envelope, "Generate " + _multiInvites + " one-time invites"))
{ {
_oneTimeInvites.AddRange(_apiController.GroupCreateTempInvite(new(GroupFullInfo.Group), _multiInvites).Result); _oneTimeInvites.AddRange(_apiController.GroupCreateTempInvite(new(GroupFullInfo.Group), _multiInvites).Result);
} }
@@ -106,7 +106,7 @@ public class SyncshellAdminUI : WindowMediatorSubscriberBase
{ {
var invites = string.Join(Environment.NewLine, _oneTimeInvites); var invites = string.Join(Environment.NewLine, _oneTimeInvites);
ImGui.InputTextMultiline("Generated Multi Invites", ref invites, 5000, new(0, 0), ImGuiInputTextFlags.ReadOnly); ImGui.InputTextMultiline("Generated Multi Invites", ref invites, 5000, new(0, 0), ImGuiInputTextFlags.ReadOnly);
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Copy, "Copy Invites to clipboard")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.Copy, "Copy Invites to clipboard"))
{ {
ImGui.SetClipboardText(invites); ImGui.SetClipboardText(invites);
} }
@@ -170,24 +170,24 @@ public class SyncshellAdminUI : WindowMediatorSubscriberBase
{ {
if (pair.Value.Value.IsModerator()) if (pair.Value.Value.IsModerator())
{ {
UiSharedService.NormalizedIcon(FontAwesomeIcon.UserShield); _uiSharedService.IconText(FontAwesomeIcon.UserShield);
UiSharedService.AttachToolTip("Moderator"); UiSharedService.AttachToolTip("Moderator");
} }
if (pair.Value.Value.IsPinned()) if (pair.Value.Value.IsPinned())
{ {
UiSharedService.NormalizedIcon(FontAwesomeIcon.Thumbtack); _uiSharedService.IconText(FontAwesomeIcon.Thumbtack);
UiSharedService.AttachToolTip("Pinned"); UiSharedService.AttachToolTip("Pinned");
} }
} }
else else
{ {
UiSharedService.FontText(FontAwesomeIcon.None.ToIconString(), UiBuilder.IconFont); _uiSharedService.IconText(FontAwesomeIcon.None);
} }
ImGui.TableNextColumn(); // actions ImGui.TableNextColumn(); // actions
if (_isOwner) if (_isOwner)
{ {
if (UiSharedService.NormalizedIconButton(FontAwesomeIcon.UserShield)) if (_uiSharedService.IconButton(FontAwesomeIcon.UserShield))
{ {
GroupUserInfo userInfo = pair.Value ?? GroupUserInfo.None; GroupUserInfo userInfo = pair.Value ?? GroupUserInfo.None;
@@ -201,7 +201,7 @@ public class SyncshellAdminUI : WindowMediatorSubscriberBase
if (_isOwner || (pair.Value == null || (pair.Value != null && !pair.Value.Value.IsModerator()))) if (_isOwner || (pair.Value == null || (pair.Value != null && !pair.Value.Value.IsModerator())))
{ {
if (UiSharedService.NormalizedIconButton(FontAwesomeIcon.Thumbtack)) if (_uiSharedService.IconButton(FontAwesomeIcon.Thumbtack))
{ {
GroupUserInfo userInfo = pair.Value ?? GroupUserInfo.None; GroupUserInfo userInfo = pair.Value ?? GroupUserInfo.None;
@@ -214,7 +214,7 @@ public class SyncshellAdminUI : WindowMediatorSubscriberBase
using (ImRaii.Disabled(!UiSharedService.CtrlPressed())) using (ImRaii.Disabled(!UiSharedService.CtrlPressed()))
{ {
if (UiSharedService.NormalizedIconButton(FontAwesomeIcon.Trash)) if (_uiSharedService.IconButton(FontAwesomeIcon.Trash))
{ {
_ = _apiController.GroupRemoveUser(new GroupPairDto(GroupFullInfo.Group, pair.Key.UserData)); _ = _apiController.GroupRemoveUser(new GroupPairDto(GroupFullInfo.Group, pair.Key.UserData));
} }
@@ -225,7 +225,7 @@ public class SyncshellAdminUI : WindowMediatorSubscriberBase
ImGui.SameLine(); ImGui.SameLine();
using (ImRaii.Disabled(!UiSharedService.CtrlPressed())) using (ImRaii.Disabled(!UiSharedService.CtrlPressed()))
{ {
if (UiSharedService.NormalizedIconButton(FontAwesomeIcon.Ban)) if (_uiSharedService.IconButton(FontAwesomeIcon.Ban))
{ {
Mediator.Publish(new OpenBanUserPopupMessage(pair.Key, GroupFullInfo)); Mediator.Publish(new OpenBanUserPopupMessage(pair.Key, GroupFullInfo));
} }
@@ -243,7 +243,7 @@ public class SyncshellAdminUI : WindowMediatorSubscriberBase
{ {
using (ImRaii.Disabled(!UiSharedService.CtrlPressed())) using (ImRaii.Disabled(!UiSharedService.CtrlPressed()))
{ {
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Broom, "Clear Syncshell")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.Broom, "Clear Syncshell"))
{ {
_ = _apiController.GroupClear(new(GroupFullInfo.Group)); _ = _apiController.GroupClear(new(GroupFullInfo.Group));
} }
@@ -255,7 +255,7 @@ public class SyncshellAdminUI : WindowMediatorSubscriberBase
ImGui.Separator(); ImGui.Separator();
ImGuiHelpers.ScaledDummy(2f); ImGuiHelpers.ScaledDummy(2f);
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Unlink, "Check for Inactive Users")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.Unlink, "Check for Inactive Users"))
{ {
_pruneTestTask = _apiController.GroupPrune(new(GroupFullInfo.Group), _pruneDays, execute: false); _pruneTestTask = _apiController.GroupPrune(new(GroupFullInfo.Group), _pruneDays, execute: false);
_pruneTask = null; _pruneTask = null;
@@ -291,7 +291,7 @@ public class SyncshellAdminUI : WindowMediatorSubscriberBase
{ {
using (ImRaii.Disabled(!UiSharedService.CtrlPressed())) using (ImRaii.Disabled(!UiSharedService.CtrlPressed()))
{ {
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Broom, "Prune Inactive Users")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.Broom, "Prune Inactive Users"))
{ {
_pruneTask = _apiController.GroupPrune(new(GroupFullInfo.Group), _pruneDays, execute: true); _pruneTask = _apiController.GroupPrune(new(GroupFullInfo.Group), _pruneDays, execute: true);
_pruneTestTask = null; _pruneTestTask = null;
@@ -319,7 +319,7 @@ public class SyncshellAdminUI : WindowMediatorSubscriberBase
var banNode = ImRaii.TreeNode("User Bans"); var banNode = ImRaii.TreeNode("User Bans");
if (banNode) if (banNode)
{ {
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Retweet, "Refresh Banlist from Server")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.Retweet, "Refresh Banlist from Server"))
{ {
_bannedUsers = _apiController.GroupGetBannedUsers(new GroupDto(GroupFullInfo.Group)).Result; _bannedUsers = _apiController.GroupGetBannedUsers(new GroupDto(GroupFullInfo.Group)).Result;
} }
@@ -349,7 +349,7 @@ public class SyncshellAdminUI : WindowMediatorSubscriberBase
UiSharedService.TextWrapped(bannedUser.Reason); UiSharedService.TextWrapped(bannedUser.Reason);
ImGui.TableNextColumn(); ImGui.TableNextColumn();
using var pushId = ImRaii.PushId(bannedUser.UID); using var pushId = ImRaii.PushId(bannedUser.UID);
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Check, "Unban")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.Check, "Unban"))
{ {
_ = _apiController.GroupUnbanUser(bannedUser); _ = _apiController.GroupUnbanUser(bannedUser);
_bannedUsers.RemoveAll(b => string.Equals(b.UID, bannedUser.UID, StringComparison.Ordinal)); _bannedUsers.RemoveAll(b => string.Equals(b.UID, bannedUser.UID, StringComparison.Ordinal));
@@ -372,9 +372,9 @@ public class SyncshellAdminUI : WindowMediatorSubscriberBase
ImGui.AlignTextToFramePadding(); ImGui.AlignTextToFramePadding();
ImGui.Text("Sound Sync"); ImGui.Text("Sound Sync");
UiSharedService.BooleanToColoredIcon(!isDisableSounds); _uiSharedService.BooleanToColoredIcon(!isDisableSounds);
ImGui.SameLine(230); ImGui.SameLine(230);
if (UiSharedService.NormalizedIconTextButton(isDisableSounds ? FontAwesomeIcon.VolumeUp : FontAwesomeIcon.VolumeMute, if (_uiSharedService.IconTextButton(isDisableSounds ? FontAwesomeIcon.VolumeUp : FontAwesomeIcon.VolumeMute,
isDisableSounds ? "Enable sound sync" : "Disable sound sync")) isDisableSounds ? "Enable sound sync" : "Disable sound sync"))
{ {
perm.SetDisableSounds(!perm.IsDisableSounds()); perm.SetDisableSounds(!perm.IsDisableSounds());
@@ -383,9 +383,9 @@ public class SyncshellAdminUI : WindowMediatorSubscriberBase
ImGui.AlignTextToFramePadding(); ImGui.AlignTextToFramePadding();
ImGui.Text("Animation Sync"); ImGui.Text("Animation Sync");
UiSharedService.BooleanToColoredIcon(!isDisableAnimations); _uiSharedService.BooleanToColoredIcon(!isDisableAnimations);
ImGui.SameLine(230); ImGui.SameLine(230);
if (UiSharedService.NormalizedIconTextButton(isDisableAnimations ? FontAwesomeIcon.Running : FontAwesomeIcon.Stop, if (_uiSharedService.IconTextButton(isDisableAnimations ? FontAwesomeIcon.Running : FontAwesomeIcon.Stop,
isDisableAnimations ? "Enable animation sync" : "Disable animation sync")) isDisableAnimations ? "Enable animation sync" : "Disable animation sync"))
{ {
perm.SetDisableAnimations(!perm.IsDisableAnimations()); perm.SetDisableAnimations(!perm.IsDisableAnimations());
@@ -394,9 +394,9 @@ public class SyncshellAdminUI : WindowMediatorSubscriberBase
ImGui.AlignTextToFramePadding(); ImGui.AlignTextToFramePadding();
ImGui.Text("VFX Sync"); ImGui.Text("VFX Sync");
UiSharedService.BooleanToColoredIcon(!isDisableVfx); _uiSharedService.BooleanToColoredIcon(!isDisableVfx);
ImGui.SameLine(230); ImGui.SameLine(230);
if (UiSharedService.NormalizedIconTextButton(isDisableVfx ? FontAwesomeIcon.Sun : FontAwesomeIcon.Circle, if (_uiSharedService.IconTextButton(isDisableVfx ? FontAwesomeIcon.Sun : FontAwesomeIcon.Circle,
isDisableVfx ? "Enable VFX sync" : "Disable VFX sync")) isDisableVfx ? "Enable VFX sync" : "Disable VFX sync"))
{ {
perm.SetDisableVFX(!perm.IsDisableVFX()); perm.SetDisableVFX(!perm.IsDisableVFX());
@@ -413,7 +413,7 @@ public class SyncshellAdminUI : WindowMediatorSubscriberBase
ImGui.AlignTextToFramePadding(); ImGui.AlignTextToFramePadding();
ImGui.TextUnformatted("New Password"); ImGui.TextUnformatted("New Password");
var availableWidth = ImGui.GetWindowContentRegionMax().X - ImGui.GetWindowContentRegionMin().X; var availableWidth = ImGui.GetWindowContentRegionMax().X - ImGui.GetWindowContentRegionMin().X;
var buttonSize = UiSharedService.GetNormalizedIconTextButtonSize(FontAwesomeIcon.Passport, "Change Password").X; var buttonSize = _uiSharedService.GetIconTextButtonSize(FontAwesomeIcon.Passport, "Change Password");
var textSize = ImGui.CalcTextSize("New Password").X; var textSize = ImGui.CalcTextSize("New Password").X;
var spacing = ImGui.GetStyle().ItemSpacing.X; var spacing = ImGui.GetStyle().ItemSpacing.X;
@@ -423,7 +423,7 @@ public class SyncshellAdminUI : WindowMediatorSubscriberBase
ImGui.SameLine(); ImGui.SameLine();
using (ImRaii.Disabled(_newPassword.Length < 10)) using (ImRaii.Disabled(_newPassword.Length < 10))
{ {
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Passport, "Change Password")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.Passport, "Change Password"))
{ {
_pwChangeSuccess = _apiController.GroupChangePassword(new GroupPasswordDto(GroupFullInfo.Group, _newPassword)).Result; _pwChangeSuccess = _apiController.GroupChangePassword(new GroupPasswordDto(GroupFullInfo.Group, _newPassword)).Result;
_newPassword = string.Empty; _newPassword = string.Empty;
@@ -436,7 +436,7 @@ public class SyncshellAdminUI : WindowMediatorSubscriberBase
UiSharedService.ColorTextWrapped("Failed to change the password. Password requires to be at least 10 characters long.", ImGuiColors.DalamudYellow); UiSharedService.ColorTextWrapped("Failed to change the password. Password requires to be at least 10 characters long.", ImGuiColors.DalamudYellow);
} }
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Trash, "Delete Syncshell") && UiSharedService.CtrlPressed() && UiSharedService.ShiftPressed()) if (_uiSharedService.IconTextButton(FontAwesomeIcon.Trash, "Delete Syncshell") && UiSharedService.CtrlPressed() && UiSharedService.ShiftPressed())
{ {
IsOpen = false; IsOpen = false;
_ = _apiController.GroupDelete(new(GroupFullInfo.Group)); _ = _apiController.GroupDelete(new(GroupFullInfo.Group));

View File

@@ -1,5 +1,6 @@
using Dalamud.Interface; using Dalamud.Interface;
using Dalamud.Interface.Colors; using Dalamud.Interface.Colors;
using Dalamud.Interface.Components;
using Dalamud.Interface.GameFonts; using Dalamud.Interface.GameFonts;
using Dalamud.Interface.ImGuiFileDialog; using Dalamud.Interface.ImGuiFileDialog;
using Dalamud.Interface.ManagedFontAtlas; using Dalamud.Interface.ManagedFontAtlas;
@@ -30,8 +31,10 @@ namespace MareSynchronos.UI;
public partial class UiSharedService : DisposableMediatorSubscriberBase public partial class UiSharedService : DisposableMediatorSubscriberBase
{ {
public const string TooltipSeparator = "--SEP--";
public static readonly ImGuiWindowFlags PopupWindowFlags = ImGuiWindowFlags.NoResize | public static readonly ImGuiWindowFlags PopupWindowFlags = ImGuiWindowFlags.NoResize |
ImGuiWindowFlags.NoScrollbar | ImGuiWindowFlags.NoScrollbar |
ImGuiWindowFlags.NoScrollWithMouse; ImGuiWindowFlags.NoScrollWithMouse;
public static Vector4 AccentColor = ImGuiColors.DalamudYellow; public static Vector4 AccentColor = ImGuiColors.DalamudYellow;
@@ -70,10 +73,9 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase
private bool _honorificExists = false; private bool _honorificExists = false;
private bool _isDirectoryWritable = false; private bool _isDirectoryWritable = false;
private bool _isPenumbraDirectory = false;
private bool _isOneDrive = false; private bool _isOneDrive = false;
private bool _isPenumbraDirectory = false;
private bool _moodlesExists = false;
private bool _penumbraExists = false; private bool _penumbraExists = false;
private bool _petNamesExists = false; private bool _petNamesExists = false;
@@ -96,21 +98,10 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase
_textureProvider = textureProvider; _textureProvider = textureProvider;
_localization = localization; _localization = localization;
_serverConfigurationManager = serverManager; _serverConfigurationManager = serverManager;
_localization.SetupWithLangCode("en"); _localization.SetupWithLangCode("en");
_isDirectoryWritable = IsDirectoryWritable(_configService.Current.CacheFolder); _isDirectoryWritable = IsDirectoryWritable(_configService.Current.CacheFolder);
UidFont = _pluginInterface.UiBuilder.FontAtlas.NewDelegateFontHandle(e =>
{
e.OnPreBuild(tk => tk.AddDalamudAssetFont(Dalamud.DalamudAsset.NotoSansJpMedium, new()
{
SizePx = 35,
GlyphRanges = [0x20, 0x7E, 0]
}));
});
GameFont = _pluginInterface.UiBuilder.FontAtlas.NewGameFontHandle(new(GameFontFamilyAndSize.Axis12));
Mediator.Subscribe<DelayedFrameworkUpdateMessage>(this, (_) => Mediator.Subscribe<DelayedFrameworkUpdateMessage>(this, (_) =>
{ {
_penumbraExists = _ipcManager.Penumbra.APIAvailable; _penumbraExists = _ipcManager.Penumbra.APIAvailable;
@@ -120,27 +111,36 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase
_honorificExists = _ipcManager.Honorific.APIAvailable; _honorificExists = _ipcManager.Honorific.APIAvailable;
_petNamesExists = _ipcManager.PetNames.APIAvailable; _petNamesExists = _ipcManager.PetNames.APIAvailable;
}); });
UidFont = _pluginInterface.UiBuilder.FontAtlas.NewDelegateFontHandle(e =>
{
e.OnPreBuild(tk => tk.AddDalamudAssetFont(Dalamud.DalamudAsset.NotoSansJpMedium, new()
{
SizePx = 35,
GlyphRanges = [0x20, 0x7E, 0]
}));
});
GameFont = _pluginInterface.UiBuilder.FontAtlas.NewGameFontHandle(new(GameFontFamilyAndSize.Axis12));
IconFont = _pluginInterface.UiBuilder.IconFontFixedWidthHandle;
} }
public ApiController ApiController => _apiController; public ApiController ApiController => _apiController;
public bool EditTrackerPosition { get; set; } public bool EditTrackerPosition { get; set; }
public IFontHandle GameFont { get; init; }
public bool HasValidPenumbraModPath => !(_ipcManager.Penumbra.ModDirectory ?? string.Empty).IsNullOrEmpty() && Directory.Exists(_ipcManager.Penumbra.ModDirectory); public bool HasValidPenumbraModPath => !(_ipcManager.Penumbra.ModDirectory ?? string.Empty).IsNullOrEmpty() && Directory.Exists(_ipcManager.Penumbra.ModDirectory);
public IFontHandle IconFont { get; init; }
public bool IsInGpose => _dalamudUtil.IsInCutscene; public bool IsInGpose => _dalamudUtil.IsInCutscene;
public string PlayerName => _dalamudUtil.GetPlayerName(); public string PlayerName => _dalamudUtil.GetPlayerName();
public IFontHandle UidFont { get; init; } public IFontHandle UidFont { get; init; }
public IFontHandle GameFont { get; init; }
public Dictionary<ushort, string> WorldData => _dalamudUtil.WorldData.Value; public Dictionary<ushort, string> WorldData => _dalamudUtil.WorldData.Value;
public uint WorldId => _dalamudUtil.GetHomeWorldId(); public uint WorldId => _dalamudUtil.GetHomeWorldId();
public const string TooltipSeparator = "--SEP--";
public static void AttachToolTip(string text) public static void AttachToolTip(string text)
{ {
if (ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled)) if (ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled))
@@ -165,23 +165,6 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase
} }
} }
public static void BooleanToColoredIcon(bool value, bool inline = true)
{
using var colorgreen = ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.HealerGreen, value);
using var colorred = ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.DalamudRed, !value);
if (inline) ImGui.SameLine();
if (value)
{
NormalizedIcon(FontAwesomeIcon.Check);
}
else
{
NormalizedIcon(FontAwesomeIcon.Times);
}
}
public static string ByteToString(long bytes, bool addSuffix = true) public static string ByteToString(long bytes, bool addSuffix = true)
{ {
_ = addSuffix; _ = addSuffix;
@@ -231,13 +214,6 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase
public static bool CtrlPressed() => (GetKeyState(0xA2) & 0x8000) != 0 || (GetKeyState(0xA3) & 0x8000) != 0; public static bool CtrlPressed() => (GetKeyState(0xA2) & 0x8000) != 0 || (GetKeyState(0xA3) & 0x8000) != 0;
public static void DrawHelpText(string helpText)
{
ImGui.SameLine();
NormalizedIcon(FontAwesomeIcon.QuestionCircle, ImGui.GetColorU32(ImGuiCol.TextDisabled));
AttachToolTip(helpText);
}
public static void DrawOutlinedFont(string text, Vector4 fontColor, Vector4 outlineColor, int thickness) public static void DrawOutlinedFont(string text, Vector4 fontColor, Vector4 outlineColor, int thickness)
{ {
var original = ImGui.GetCursorPos(); var original = ImGui.GetCursorPos();
@@ -294,27 +270,17 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase
drawList.AddText(textPos, fontColor, text); drawList.AddText(textPos, fontColor, text);
} }
public static void FontText(string text, ImFontPtr font, Vector4? color = null)
{
using var pushedFont = ImRaii.PushFont(font);
using var pushedColor = ImRaii.PushColor(ImGuiCol.Text, Color(color ?? new Vector4(1, 1, 1, 1)), color != null);
ImGui.TextUnformatted(text);
}
public static void FontText(string text, IFontHandle font, Vector4? color = null)
{
using var pushedFont = font.Push();
using var pushedColor = ImRaii.PushColor(ImGuiCol.Text, Color(color ?? new Vector4(1, 1, 1, 1)), color != null);
ImGui.TextUnformatted(text);
}
public static Vector4 GetBoolColor(bool input) => input ? ImGuiColors.ParsedGreen : ImGuiColors.DalamudRed; public static Vector4 GetBoolColor(bool input) => input ? ImGuiColors.ParsedGreen : ImGuiColors.DalamudRed;
public static Vector2 GetIconButtonSize(FontAwesomeIcon icon) public float GetIconTextButtonSize(FontAwesomeIcon icon, string text)
{ {
using var font = ImRaii.PushFont(UiBuilder.IconFont); Vector2 vector;
var buttonSize = ImGuiHelpers.GetButtonSize(icon.ToIconString()); using (IconFont.Push())
return buttonSize; vector = ImGui.CalcTextSize(icon.ToIconString());
Vector2 vector2 = ImGui.CalcTextSize(text);
float num = 3f * ImGuiHelpers.GlobalScale;
return vector.X + vector2.X + ImGui.GetStyle().FramePadding.X * 2f + num;
} }
public static Vector2 GetIconSize(FontAwesomeIcon icon) public static Vector2 GetIconSize(FontAwesomeIcon icon)
@@ -350,147 +316,69 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase
return ImGui.GetWindowContentRegionMax().Y - ImGui.GetWindowContentRegionMin().Y; return ImGui.GetWindowContentRegionMax().Y - ImGui.GetWindowContentRegionMin().Y;
} }
public static Vector2 GetNormalizedIconTextButtonSize(FontAwesomeIcon icon, string text, float? width = null, bool isInPopup = false) public bool IconButton(FontAwesomeIcon icon, float? height = null)
{ {
var iconData = GetIconData(icon); string text = icon.ToIconString();
var textSize = ImGui.CalcTextSize(text);
var padding = ImGui.GetStyle().FramePadding;
var buttonSizeY = ImGui.GetFrameHeight();
var iconExtraSpacing = isInPopup ? padding.X * 2 : 0;
if (width == null || width <= 0) ImGui.PushID(text);
{ Vector2 vector;
var buttonSizeX = iconData.NormalizedIconScale.X + (padding.X * 3) + iconExtraSpacing + textSize.X; using (IconFont.Push())
return new Vector2(buttonSizeX, buttonSizeY); vector = ImGui.CalcTextSize(text);
} ImDrawListPtr windowDrawList = ImGui.GetWindowDrawList();
else Vector2 cursorScreenPos = ImGui.GetCursorScreenPos();
{ float x = vector.X + ImGui.GetStyle().FramePadding.X * 2f;
return new Vector2(width.Value, buttonSizeY); float frameHeight = height ?? ImGui.GetFrameHeight();
} bool result = ImGui.Button(string.Empty, new Vector2(x, frameHeight));
Vector2 pos = new Vector2(cursorScreenPos.X + ImGui.GetStyle().FramePadding.X,
cursorScreenPos.Y + (height ?? ImGui.GetFrameHeight()) / 2f - (vector.Y / 2f));
using (IconFont.Push())
windowDrawList.AddText(pos, ImGui.GetColorU32(ImGuiCol.Text), text);
ImGui.PopID();
return result;
} }
public static Vector2 NormalizedIconButtonSize(FontAwesomeIcon icon) private bool IconTextButtonInternal(FontAwesomeIcon icon, string text, Vector4? defaultColor = null, float? width = null)
{ {
var iconData = GetIconData(icon); int num = 0;
var padding = ImGui.GetStyle().FramePadding; if (defaultColor.HasValue)
return iconData.NormalizedIconScale with { X = iconData.NormalizedIconScale.X + padding.X * 2, Y = iconData.NormalizedIconScale.Y + padding.Y * 2 };
}
public static bool NormalizedIconButton(FontAwesomeIcon icon)
{
bool wasClicked = false;
var iconData = GetIconData(icon);
var padding = ImGui.GetStyle().FramePadding;
var cursor = ImGui.GetCursorPos();
var drawList = ImGui.GetWindowDrawList();
var pos = ImGui.GetWindowPos();
var scrollPosY = ImGui.GetScrollY();
var scrollPosX = ImGui.GetScrollX();
var buttonSize = NormalizedIconButtonSize(icon);
if (ImGui.Button("###" + icon.ToIconString(), buttonSize))
{ {
wasClicked = true; ImGui.PushStyleColor(ImGuiCol.Button, defaultColor.Value);
num++;
} }
drawList.AddText(UiBuilder.IconFont, ImGui.GetFontSize() * iconData.IconScaling, ImGui.PushID(text);
new(pos.X - scrollPosX + cursor.X + iconData.OffsetX + padding.X, Vector2 vector;
pos.Y - scrollPosY + cursor.Y + (buttonSize.Y - (iconData.IconSize.Y * iconData.IconScaling)) / 2f), using (IconFont.Push())
ImGui.GetColorU32(ImGuiCol.Text), icon.ToIconString()); vector = ImGui.CalcTextSize(icon.ToIconString());
Vector2 vector2 = ImGui.CalcTextSize(text);
return wasClicked; ImDrawListPtr windowDrawList = ImGui.GetWindowDrawList();
} Vector2 cursorScreenPos = ImGui.GetCursorScreenPos();
float num2 = 3f * ImGuiHelpers.GlobalScale;
public static bool NormalizedIconTextButton(FontAwesomeIcon icon, string text, float? width = null, bool isInPopup = false) float x = width ?? vector.X + vector2.X + ImGui.GetStyle().FramePadding.X * 2f + num2;
{ float frameHeight = ImGui.GetFrameHeight();
var wasClicked = false; bool result = ImGui.Button(string.Empty, new Vector2(x, frameHeight));
Vector2 pos = new Vector2(cursorScreenPos.X + ImGui.GetStyle().FramePadding.X, cursorScreenPos.Y + ImGui.GetStyle().FramePadding.Y);
var iconData = GetIconData(icon); using (IconFont.Push())
var textSize = ImGui.CalcTextSize(text); windowDrawList.AddText(pos, ImGui.GetColorU32(ImGuiCol.Text), icon.ToIconString());
var padding = ImGui.GetStyle().FramePadding; Vector2 pos2 = new Vector2(pos.X + vector.X + num2, cursorScreenPos.Y + ImGui.GetStyle().FramePadding.Y);
var cursor = ImGui.GetCursorPos(); windowDrawList.AddText(pos2, ImGui.GetColorU32(ImGuiCol.Text), text);
var drawList = ImGui.GetWindowDrawList(); ImGui.PopID();
var pos = ImGui.GetWindowPos(); if (num > 0)
var scrollPosY = ImGui.GetScrollY();
var scrollPosX = ImGui.GetScrollX();
Vector2 buttonSize = GetNormalizedIconTextButtonSize(icon, text, width, isInPopup);
var iconExtraSpacing = isInPopup ? padding.X * 2 : 0;
using (ImRaii.PushColor(ImGuiCol.Button, ImGui.GetColorU32(ImGuiCol.PopupBg), isInPopup))
{ {
if (ImGui.Button("###" + icon.ToIconString() + text, buttonSize)) ImGui.PopStyleColor(num);
{
wasClicked = true;
}
} }
drawList.AddText(UiBuilder.DefaultFont, ImGui.GetFontSize(), return result;
new(pos.X - scrollPosX + cursor.X + iconData.NormalizedIconScale.X + (padding.X * 2) + iconExtraSpacing,
pos.Y - scrollPosY + cursor.Y + ((buttonSize.Y - textSize.Y) / 2f)),
ImGui.GetColorU32(ImGuiCol.Text), text);
drawList.AddText(UiBuilder.IconFont, ImGui.GetFontSize() * iconData.IconScaling,
new(pos.X - scrollPosX + cursor.X + iconData.OffsetX + padding.X,
pos.Y - scrollPosY + cursor.Y + (buttonSize.Y - (iconData.IconSize.Y * iconData.IconScaling)) / 2f),
ImGui.GetColorU32(ImGuiCol.Text), icon.ToIconString());
return wasClicked;
} }
public static void NormalizedIcon(FontAwesomeIcon icon, uint color) public bool IconTextButton(FontAwesomeIcon icon, string text, float? width = null, bool isInPopup = false)
{ {
var cursorPos = ImGui.GetCursorPos(); return IconTextButtonInternal(icon, text,
var iconData = GetIconData(icon); isInPopup ? ColorHelpers.RgbaUintToVector4(ImGui.GetColorU32(ImGuiCol.PopupBg)) : null,
var drawList = ImGui.GetWindowDrawList(); width <= 0 ? null : width);
var windowPos = ImGui.GetWindowPos();
var scrollPosX = ImGui.GetScrollX();
var scrollPosY = ImGui.GetScrollY();
var frameHeight = ImGui.GetFrameHeight();
var frameOffsetY = ((frameHeight - iconData.IconSize.Y * iconData.IconScaling) / 2f);
drawList.AddText(UiBuilder.IconFont, UiBuilder.IconFont.FontSize * iconData.IconScaling,
new(windowPos.X - scrollPosX + cursorPos.X + iconData.OffsetX,
windowPos.Y - scrollPosY + cursorPos.Y + frameOffsetY),
color, icon.ToIconString());
ImGui.Dummy(new(iconData.NormalizedIconScale.X, ImGui.GetFrameHeight()));
} }
public static void NormalizedIcon(FontAwesomeIcon icon, Vector4? color = null)
{
NormalizedIcon(icon, color == null ? ImGui.GetColorU32(ImGuiCol.Text) : ImGui.GetColorU32(color.Value));
}
private static IconScaleData CalcIconScaleData(FontAwesomeIcon icon)
{
using var font = ImRaii.PushFont(UiBuilder.IconFont);
var iconSize = ImGui.CalcTextSize(icon.ToIconString());
var iconscaling = (iconSize.X < iconSize.Y ? (iconSize.Y - iconSize.X) / 2f : 0f, iconSize.X > iconSize.Y ? 1f / (iconSize.X / iconSize.Y) : 1f);
var normalized = iconscaling.Item2 == 1f ?
new Vector2(iconSize.Y, iconSize.Y)
: new((iconSize.X * iconscaling.Item2) + (iconscaling.Item1 * 2), (iconSize.X * iconscaling.Item2) + (iconscaling.Item1 * 2));
return new(iconSize, normalized, iconscaling.Item1, iconscaling.Item2);
}
public static IconScaleData GetIconData(FontAwesomeIcon icon)
{
if (_iconData.TryGetValue(ImGuiHelpers.GlobalScale, out var iconCache))
{
if (iconCache.TryGetValue(icon, out var iconData)) return iconData;
return iconCache[icon] = CalcIconScaleData(icon);
}
_iconData.Add(ImGuiHelpers.GlobalScale, new());
return _iconData[ImGuiHelpers.GlobalScale][icon] = CalcIconScaleData(icon);
}
public sealed record IconScaleData(Vector2 IconSize, Vector2 NormalizedIconScale, float OffsetX, float IconScaling);
private static Dictionary<float, Dictionary<FontAwesomeIcon, IconScaleData>> _iconData = new();
public static bool IsDirectoryWritable(string dirPath, bool throwIfFails = false) public static bool IsDirectoryWritable(string dirPath, bool throwIfFails = false)
{ {
try try
@@ -582,10 +470,26 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase
return true; return true;
} }
public void BigText(string text) public void BigText(string text, Vector4? color = null)
{ {
using var font = UidFont.Push(); FontText(text, UidFont, color);
ImGui.TextUnformatted(text); }
public void BooleanToColoredIcon(bool value, bool inline = true)
{
using var colorgreen = ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.HealerGreen, value);
using var colorred = ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.DalamudRed, !value);
if (inline) ImGui.SameLine();
if (value)
{
IconText(FontAwesomeIcon.Check);
}
else
{
IconText(FontAwesomeIcon.Times);
}
} }
public void DrawCacheDirectorySetting() public void DrawCacheDirectorySetting()
@@ -598,7 +502,7 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase
ImGui.SameLine(); ImGui.SameLine();
using (ImRaii.Disabled(_cacheMonitor.MareWatcher != null)) using (ImRaii.Disabled(_cacheMonitor.MareWatcher != null))
{ {
if (NormalizedIconButton(FontAwesomeIcon.Folder)) if (IconButton(FontAwesomeIcon.Folder))
{ {
FileDialogManager.OpenFolderDialog("Pick Loporrit Storage Folder", (success, path) => FileDialogManager.OpenFolderDialog("Pick Loporrit Storage Folder", (success, path) =>
{ {
@@ -665,7 +569,7 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase
} }
public T? DrawCombo<T>(string comboName, IEnumerable<T> comboItems, Func<T, string> toName, public T? DrawCombo<T>(string comboName, IEnumerable<T> comboItems, Func<T, string> toName,
Action<T>? onSelected = null, T? initialSelectedItem = default) Action<T?>? onSelected = null, T? initialSelectedItem = default)
{ {
if (!comboItems.Any()) return default; if (!comboItems.Any()) return default;
@@ -689,7 +593,7 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase
{ {
foreach (var item in comboItems) foreach (var item in comboItems)
{ {
bool isSelected = EqualityComparer<T>.Default.Equals(item, (T)selectedItem); bool isSelected = EqualityComparer<T>.Default.Equals(item, (T?)selectedItem);
if (ImGui.Selectable(toName(item), isSelected)) if (ImGui.Selectable(toName(item), isSelected))
{ {
_selectedComboItems[comboName] = item!; _selectedComboItems[comboName] = item!;
@@ -784,24 +688,24 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase
if (_configService.Current.InitialScanComplete) if (_configService.Current.InitialScanComplete)
{ {
ImGui.SameLine(); ImGui.SameLine();
if (NormalizedIconTextButton(FontAwesomeIcon.Play, "Force rescan")) if (IconTextButton(FontAwesomeIcon.Play, "Force rescan"))
{ {
_cacheMonitor.InvokeScan(); _cacheMonitor.InvokeScan();
} }
} }
} }
} }
public void DrawHelpText(string helpText)
{
ImGui.SameLine();
IconText(FontAwesomeIcon.QuestionCircle, ImGui.GetColorU32(ImGuiCol.TextDisabled));
AttachToolTip(helpText);
}
public bool DrawOtherPluginState(bool intro = false) public bool DrawOtherPluginState(bool intro = false)
{ {
var penumbraColor = _penumbraExists ? ImGuiColors.ParsedGreen : ImGuiColors.DalamudRed; var check = FontAwesomeIcon.Check;
var glamourerColor = _glamourerExists ? ImGuiColors.ParsedGreen : ImGuiColors.DalamudRed; var cross = FontAwesomeIcon.SquareXmark;
var heelsColor = _heelsExists ? ImGuiColors.ParsedGreen : ImGuiColors.DalamudRed;
var customizeColor = _customizePlusExists ? ImGuiColors.ParsedGreen : ImGuiColors.DalamudRed;
var honorificColor = _honorificExists ? ImGuiColors.ParsedGreen : ImGuiColors.DalamudRed;
var petNamesColor = _petNamesExists ? ImGuiColors.ParsedGreen : ImGuiColors.DalamudRed;
var check = FontAwesomeIcon.Check.ToIconString();
var cross = FontAwesomeIcon.SquareXmark.ToIconString();
if (intro) if (intro)
{ {
@@ -817,7 +721,7 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase
ImGui.TextUnformatted("Penumbra"); ImGui.TextUnformatted("Penumbra");
ImGui.SameLine(); ImGui.SameLine();
FontText(_penumbraExists ? check : cross, UiBuilder.IconFont, penumbraColor); IconText(_penumbraExists ? check : cross, GetBoolColor(_penumbraExists));
ImGui.SameLine(); ImGui.SameLine();
AttachToolTip($"Penumbra is " + (_penumbraExists ? "available and up to date." : "unavailable or not up to date.")); AttachToolTip($"Penumbra is " + (_penumbraExists ? "available and up to date." : "unavailable or not up to date."));
ImGui.Spacing(); ImGui.Spacing();
@@ -825,7 +729,7 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase
ImGui.SameLine(); ImGui.SameLine();
ImGui.TextUnformatted("Glamourer"); ImGui.TextUnformatted("Glamourer");
ImGui.SameLine(); ImGui.SameLine();
FontText(_glamourerExists ? check : cross, UiBuilder.IconFont, glamourerColor); IconText(_glamourerExists ? check : cross, GetBoolColor(_glamourerExists));
ImGui.SameLine(); ImGui.SameLine();
AttachToolTip($"Glamourer is " + (_glamourerExists ? "available and up to date." : "unavailable or not up to date.")); AttachToolTip($"Glamourer is " + (_glamourerExists ? "available and up to date." : "unavailable or not up to date."));
ImGui.Spacing(); ImGui.Spacing();
@@ -845,7 +749,7 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase
ImGui.TextUnformatted("SimpleHeels"); ImGui.TextUnformatted("SimpleHeels");
ImGui.SameLine(); ImGui.SameLine();
FontText(_heelsExists ? check : cross, UiBuilder.IconFont, heelsColor); IconText(_heelsExists ? check : cross, GetBoolColor(_heelsExists));
ImGui.SameLine(); ImGui.SameLine();
AttachToolTip($"SimpleHeels is " + (_heelsExists ? "available and up to date." : "unavailable or not up to date.")); AttachToolTip($"SimpleHeels is " + (_heelsExists ? "available and up to date." : "unavailable or not up to date."));
ImGui.Spacing(); ImGui.Spacing();
@@ -853,7 +757,7 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase
ImGui.SameLine(); ImGui.SameLine();
ImGui.TextUnformatted("Customize+"); ImGui.TextUnformatted("Customize+");
ImGui.SameLine(); ImGui.SameLine();
FontText(_customizePlusExists ? check : cross, UiBuilder.IconFont, customizeColor); IconText(_customizePlusExists ? check : cross, GetBoolColor(_customizePlusExists));
ImGui.SameLine(); ImGui.SameLine();
AttachToolTip($"Customize+ is " + (_customizePlusExists ? "available and up to date." : "unavailable or not up to date.")); AttachToolTip($"Customize+ is " + (_customizePlusExists ? "available and up to date." : "unavailable or not up to date."));
ImGui.Spacing(); ImGui.Spacing();
@@ -861,7 +765,7 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase
ImGui.SameLine(); ImGui.SameLine();
ImGui.TextUnformatted("Honorific"); ImGui.TextUnformatted("Honorific");
ImGui.SameLine(); ImGui.SameLine();
FontText(_honorificExists ? check : cross, UiBuilder.IconFont, honorificColor); IconText(_honorificExists ? check : cross, GetBoolColor(_honorificExists));
ImGui.SameLine(); ImGui.SameLine();
AttachToolTip($"Honorific is " + (_honorificExists ? "available and up to date." : "unavailable or not up to date.")); AttachToolTip($"Honorific is " + (_honorificExists ? "available and up to date." : "unavailable or not up to date."));
ImGui.Spacing(); ImGui.Spacing();
@@ -869,7 +773,7 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase
ImGui.SameLine(); ImGui.SameLine();
ImGui.TextUnformatted("PetNicknames"); ImGui.TextUnformatted("PetNicknames");
ImGui.SameLine(); ImGui.SameLine();
FontText(_petNamesExists ? check : cross, UiBuilder.IconFont,petNamesColor); IconText(_petNamesExists ? check : cross, GetBoolColor(_petNamesExists));
ImGui.SameLine(); ImGui.SameLine();
AttachToolTip($"PetNicknames is " + (_petNamesExists ? "available and up to date." : "unavailable or not up to date.")); AttachToolTip($"PetNicknames is " + (_petNamesExists ? "available and up to date." : "unavailable or not up to date."));
ImGui.Spacing(); ImGui.Spacing();
@@ -927,7 +831,7 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase
ImGui.SameLine(); ImGui.SameLine();
var text = "Connect"; var text = "Connect";
if (_serverSelectionIndex == _serverConfigurationManager.CurrentServerIndex) text = "Reconnect"; if (_serverSelectionIndex == _serverConfigurationManager.CurrentServerIndex) text = "Reconnect";
if (NormalizedIconTextButton(FontAwesomeIcon.Link, text)) if (IconTextButton(FontAwesomeIcon.Link, text))
{ {
_serverConfigurationManager.SelectServer(_serverSelectionIndex); _serverConfigurationManager.SelectServer(_serverSelectionIndex);
_ = _apiController.CreateConnections(); _ = _apiController.CreateConnections();
@@ -939,7 +843,7 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase
ImGui.InputText("Custom Service URI", ref _customServerUri, 255); ImGui.InputText("Custom Service URI", ref _customServerUri, 255);
ImGui.SetNextItemWidth(250 * ImGuiHelpers.GlobalScale); ImGui.SetNextItemWidth(250 * ImGuiHelpers.GlobalScale);
ImGui.InputText("Custom Service Name", ref _customServerName, 255); ImGui.InputText("Custom Service Name", ref _customServerName, 255);
if (UiSharedService.NormalizedIconTextButton(FontAwesomeIcon.Plus, "Add Custom Service") if (IconTextButton(FontAwesomeIcon.Plus, "Add Custom Service")
&& !string.IsNullOrEmpty(_customServerUri) && !string.IsNullOrEmpty(_customServerUri)
&& !string.IsNullOrEmpty(_customServerName)) && !string.IsNullOrEmpty(_customServerName))
{ {
@@ -958,6 +862,33 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase
return _serverSelectionIndex; return _serverSelectionIndex;
} }
public Vector2 GetIconButtonSize(FontAwesomeIcon icon)
{
using var font = IconFont.Push();
return ImGuiHelpers.GetButtonSize(icon.ToIconString());
}
public Vector2 GetIconData(FontAwesomeIcon icon)
{
using var font = IconFont.Push();
return ImGui.CalcTextSize(icon.ToIconString());
}
public void IconText(FontAwesomeIcon icon, uint color)
{
FontText(icon.ToIconString(), IconFont, color);
}
public void IconText(FontAwesomeIcon icon, Vector4? color = null)
{
IconText(icon, color == null ? ImGui.GetColorU32(ImGuiCol.Text) : ImGui.GetColorU32(color.Value));
}
public IDalamudTextureWrap LoadImage(byte[] imageData)
{
return _textureProvider.CreateFromImageAsync(imageData).Result;
}
public void LoadLocalization(string languageCode) public void LoadLocalization(string languageCode)
{ {
_localization.SetupWithLangCode(languageCode); _localization.SetupWithLangCode(languageCode);
@@ -967,22 +898,29 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase
[LibraryImport("user32")] [LibraryImport("user32")]
internal static partial short GetKeyState(int nVirtKey); internal static partial short GetKeyState(int nVirtKey);
internal IDalamudTextureWrap LoadImage(byte[] imageData)
{
return _textureProvider.CreateFromImageAsync(imageData).Result;
}
private static void CenterWindow(float width, float height, ImGuiCond cond = ImGuiCond.None) private static void CenterWindow(float width, float height, ImGuiCond cond = ImGuiCond.None)
{ {
var center = ImGui.GetMainViewport().GetCenter(); var center = ImGui.GetMainViewport().GetCenter();
ImGui.SetWindowPos(new Vector2(center.X - width / 2, center.Y - height / 2), cond); ImGui.SetWindowPos(new Vector2(center.X - width / 2, center.Y - height / 2), cond);
} }
#pragma warning disable MA0009 // Add regex evaluation timeout [GeneratedRegex(@"^(?:[a-zA-Z]:\\[\w\s\-\\]+?|\/(?:[\w\s\-\/])+?)$", RegexOptions.ECMAScript, 5000)]
[GeneratedRegex(@"^(?:[a-zA-Z]:\\[\w\s\-\\]+?|\/(?:[\w\s\-\/])+?)$", RegexOptions.ECMAScript)]
#pragma warning restore MA0009 // Add regex evaluation timeout
private static partial Regex PathRegex(); private static partial Regex PathRegex();
private void FontText(string text, IFontHandle font, Vector4? color = null)
{
FontText(text, font, color == null ? ImGui.GetColorU32(ImGuiCol.Text) : ImGui.GetColorU32(color.Value));
}
private void FontText(string text, IFontHandle font, uint color)
{
using var pushedFont = font.Push();
using var pushedColor = ImRaii.PushColor(ImGuiCol.Text, color);
ImGui.TextUnformatted(text);
}
public sealed record IconScaleData(Vector2 IconSize, Vector2 NormalizedIconScale, float OffsetX, float IconScaling);
protected override void Dispose(bool disposing) protected override void Dispose(bool disposing)
{ {
if (!disposing) return; if (!disposing) return;

View File

@@ -152,10 +152,10 @@
/// <inheritdoc /> /// <inheritdoc />
public override string ToString() public override string ToString()
{ {
return _baseStream.ToString(); return _baseStream?.ToString() ?? string.Empty;
} }
private class Bandwidth private sealed class Bandwidth
{ {
private long _count; private long _count;
private int _lastSecondCheckpoint; private int _lastSecondCheckpoint;
@@ -175,7 +175,7 @@
{ {
int elapsedTime = Environment.TickCount - _lastSecondCheckpoint + 1; int elapsedTime = Environment.TickCount - _lastSecondCheckpoint + 1;
receivedBytesCount = Interlocked.Add(ref _lastTransferredBytesCount, receivedBytesCount); receivedBytesCount = Interlocked.Add(ref _lastTransferredBytesCount, receivedBytesCount);
double momentSpeed = receivedBytesCount * 1000 / elapsedTime; // B/s double momentSpeed = receivedBytesCount * 1000 / (double)elapsedTime; // B/s
if (1000 < elapsedTime) if (1000 < elapsedTime)
{ {

View File

@@ -55,7 +55,7 @@ public sealed partial class ApiController : DisposableMediatorSubscriberBase, IM
Mediator.Subscribe<DalamudLoginMessage>(this, (_) => DalamudUtilOnLogIn()); Mediator.Subscribe<DalamudLoginMessage>(this, (_) => DalamudUtilOnLogIn());
Mediator.Subscribe<DalamudLogoutMessage>(this, (_) => DalamudUtilOnLogOut()); Mediator.Subscribe<DalamudLogoutMessage>(this, (_) => DalamudUtilOnLogOut());
Mediator.Subscribe<HubClosedMessage>(this, (msg) => MareHubOnClosed(msg.Exception)); Mediator.Subscribe<HubClosedMessage>(this, (msg) => MareHubOnClosed(msg.Exception));
Mediator.Subscribe<HubReconnectedMessage>(this, async (msg) => await MareHubOnReconnected().ConfigureAwait(false)); Mediator.Subscribe<HubReconnectedMessage>(this, (msg) => _ = MareHubOnReconnected());
Mediator.Subscribe<HubReconnectingMessage>(this, (msg) => MareHubOnReconnecting(msg.Exception)); Mediator.Subscribe<HubReconnectingMessage>(this, (msg) => MareHubOnReconnecting(msg.Exception));
Mediator.Subscribe<CyclePauseMessage>(this, (msg) => _ = CyclePause(msg.UserData)); Mediator.Subscribe<CyclePauseMessage>(this, (msg) => _ = CyclePause(msg.UserData));
Mediator.Subscribe<CensusUpdateMessage>(this, (msg) => _lastCensus = msg); Mediator.Subscribe<CensusUpdateMessage>(this, (msg) => _lastCensus = msg);
@@ -113,7 +113,7 @@ public sealed partial class ApiController : DisposableMediatorSubscriberBase, IM
Logger.LogInformation("Not recreating Connection, paused"); Logger.LogInformation("Not recreating Connection, paused");
_connectionDto = null; _connectionDto = null;
await StopConnection(ServerState.Disconnected).ConfigureAwait(false); await StopConnection(ServerState.Disconnected).ConfigureAwait(false);
_connectionCancellationTokenSource.Cancel(); _connectionCancellationTokenSource?.Cancel();
return; return;
} }
@@ -134,7 +134,7 @@ public sealed partial class ApiController : DisposableMediatorSubscriberBase, IM
Logger.LogWarning("No secret key set for current character"); Logger.LogWarning("No secret key set for current character");
_connectionDto = null; _connectionDto = null;
await StopConnection(ServerState.NoSecretKey).ConfigureAwait(false); await StopConnection(ServerState.NoSecretKey).ConfigureAwait(false);
_connectionCancellationTokenSource.Cancel(); _connectionCancellationTokenSource?.Cancel();
return; return;
} }
@@ -144,7 +144,8 @@ public sealed partial class ApiController : DisposableMediatorSubscriberBase, IM
Mediator.Publish(new EventMessage(new Services.Events.Event(nameof(ApiController), Services.Events.EventSeverity.Informational, Mediator.Publish(new EventMessage(new Services.Events.Event(nameof(ApiController), Services.Events.EventSeverity.Informational,
$"Starting Connection to {_serverManager.CurrentServer.ServerName}"))); $"Starting Connection to {_serverManager.CurrentServer.ServerName}")));
_connectionCancellationTokenSource.Cancel(); _connectionCancellationTokenSource?.Cancel();
_connectionCancellationTokenSource?.Dispose();
_connectionCancellationTokenSource = new CancellationTokenSource(); _connectionCancellationTokenSource = new CancellationTokenSource();
var token = _connectionCancellationTokenSource.Token; var token = _connectionCancellationTokenSource.Token;
while (ServerState is not ServerState.Connected && !token.IsCancellationRequested) while (ServerState is not ServerState.Connected && !token.IsCancellationRequested)