make local groups more usable for pause/resume
This commit is contained in:
@@ -2,24 +2,29 @@
|
||||
using Dalamud.Interface.Components;
|
||||
using Dalamud.Interface.Utility.Raii;
|
||||
using ImGuiNET;
|
||||
using MareSynchronos.PlayerData.Pairs;
|
||||
using MareSynchronos.UI.Handlers;
|
||||
using System.Collections.Immutable;
|
||||
|
||||
namespace MareSynchronos.UI.Components;
|
||||
|
||||
public abstract class DrawFolderBase : IDrawFolder
|
||||
{
|
||||
public IEnumerable<DrawUserPair> DrawPairs { get; private set; }
|
||||
public IImmutableList<DrawUserPair> DrawPairs { get; init; }
|
||||
protected readonly string _id;
|
||||
protected readonly IImmutableList<Pair> _allPairs;
|
||||
protected readonly TagHandler _tagHandler;
|
||||
private float _menuWidth = -1;
|
||||
public int OnlinePairs => DrawPairs.Count(u => u.Pair.IsOnline);
|
||||
public int TotalPairs { get; }
|
||||
protected DrawFolderBase(string id, IEnumerable<DrawUserPair> drawPairs, TagHandler tagHandler, int totalPairs)
|
||||
public int TotalPairs => _allPairs.Count;
|
||||
|
||||
protected DrawFolderBase(string id, IImmutableList<DrawUserPair> drawPairs,
|
||||
IImmutableList<Pair> allPairs, TagHandler tagHandler)
|
||||
{
|
||||
_id = id;
|
||||
DrawPairs = drawPairs;
|
||||
_allPairs = allPairs;
|
||||
_tagHandler = tagHandler;
|
||||
TotalPairs = totalPairs;
|
||||
}
|
||||
|
||||
protected abstract bool RenderIfEmpty { get; }
|
||||
|
||||
@@ -6,9 +6,11 @@ using Dalamud.Interface.Utility.Raii;
|
||||
using ImGuiNET;
|
||||
using MareSynchronos.API.Data.Extensions;
|
||||
using MareSynchronos.API.Dto.Group;
|
||||
using MareSynchronos.PlayerData.Pairs;
|
||||
using MareSynchronos.Services.Mediator;
|
||||
using MareSynchronos.UI.Handlers;
|
||||
using MareSynchronos.WebAPI;
|
||||
using System.Collections.Immutable;
|
||||
|
||||
namespace MareSynchronos.UI.Components;
|
||||
|
||||
@@ -20,9 +22,9 @@ public class DrawFolderGroup : DrawFolderBase
|
||||
private readonly MareMediator _mareMediator;
|
||||
|
||||
public DrawFolderGroup(string id, GroupFullInfoDto groupFullInfoDto, ApiController apiController,
|
||||
IEnumerable<DrawUserPair> drawPairs, TagHandler tagHandler, IdDisplayHandler idDisplayHandler,
|
||||
MareMediator mareMediator, int totalPairs) :
|
||||
base(id, drawPairs, tagHandler, totalPairs)
|
||||
IImmutableList<DrawUserPair> drawPairs, IImmutableList<Pair> allPairs, TagHandler tagHandler, IdDisplayHandler idDisplayHandler,
|
||||
MareMediator mareMediator) :
|
||||
base(id, drawPairs, allPairs, tagHandler)
|
||||
{
|
||||
_groupFullInfoDto = groupFullInfoDto;
|
||||
_apiController = apiController;
|
||||
|
||||
@@ -3,8 +3,10 @@ using Dalamud.Interface.Components;
|
||||
using Dalamud.Interface.Utility.Raii;
|
||||
using ImGuiNET;
|
||||
using MareSynchronos.API.Data.Extensions;
|
||||
using MareSynchronos.PlayerData.Pairs;
|
||||
using MareSynchronos.UI.Handlers;
|
||||
using MareSynchronos.WebAPI;
|
||||
using System.Collections.Immutable;
|
||||
|
||||
namespace MareSynchronos.UI.Components;
|
||||
|
||||
@@ -13,8 +15,9 @@ public class DrawFolderTag : DrawFolderBase
|
||||
private readonly ApiController _apiController;
|
||||
private readonly SelectPairForTagUi _selectPairForTagUi;
|
||||
|
||||
public DrawFolderTag(string id, IEnumerable<DrawUserPair> drawPairs, TagHandler tagHandler, ApiController apiController, SelectPairForTagUi selectPairForTagUi, int totalPairs)
|
||||
: base(id, drawPairs, tagHandler, totalPairs)
|
||||
public DrawFolderTag(string id, IImmutableList<DrawUserPair> drawPairs, IImmutableList<Pair> allPairs,
|
||||
TagHandler tagHandler, ApiController apiController, SelectPairForTagUi selectPairForTagUi)
|
||||
: base(id, drawPairs, allPairs, tagHandler)
|
||||
{
|
||||
_apiController = apiController;
|
||||
_selectPairForTagUi = selectPairForTagUi;
|
||||
@@ -51,7 +54,7 @@ public class DrawFolderTag : DrawFolderBase
|
||||
TagHandler.CustomAllTag => false,
|
||||
TagHandler.CustomOfflineSyncshellTag => false,
|
||||
_ => true,
|
||||
} && DrawPairs.Any();
|
||||
} && _allPairs.Any();
|
||||
|
||||
private bool RenderCount => _id switch
|
||||
{
|
||||
@@ -135,7 +138,7 @@ public class DrawFolderTag : DrawFolderBase
|
||||
{
|
||||
if (!RenderPause) return currentRightSideX;
|
||||
|
||||
var allArePaused = DrawPairs.All(pair => pair.UserPair!.OwnPermissions.IsPaused());
|
||||
var allArePaused = _allPairs.All(pair => pair.UserPair!.OwnPermissions.IsPaused());
|
||||
var pauseButton = allArePaused ? FontAwesomeIcon.Play : FontAwesomeIcon.Pause;
|
||||
var pauseButtonX = UiSharedService.GetIconButtonSize(pauseButton).X;
|
||||
|
||||
@@ -145,11 +148,11 @@ public class DrawFolderTag : DrawFolderBase
|
||||
{
|
||||
if (allArePaused)
|
||||
{
|
||||
ResumeAllPairs(DrawPairs);
|
||||
ResumeAllPairs(_allPairs);
|
||||
}
|
||||
else
|
||||
{
|
||||
PauseRemainingPairs(DrawPairs);
|
||||
PauseRemainingPairs(_allPairs);
|
||||
}
|
||||
}
|
||||
if (allArePaused)
|
||||
@@ -164,10 +167,10 @@ public class DrawFolderTag : DrawFolderBase
|
||||
return currentRightSideX;
|
||||
}
|
||||
|
||||
private void PauseRemainingPairs(IEnumerable<DrawUserPair> availablePairs)
|
||||
private void PauseRemainingPairs(IEnumerable<Pair> availablePairs)
|
||||
{
|
||||
_ = _apiController.SetBulkPermissions(new(availablePairs
|
||||
.ToDictionary(g => g.UID, g =>
|
||||
.ToDictionary(g => g.UserData.UID, g =>
|
||||
{
|
||||
var perm = g.UserPair.OwnPermissions;
|
||||
perm.SetPaused(paused: true);
|
||||
@@ -176,10 +179,10 @@ public class DrawFolderTag : DrawFolderBase
|
||||
.ConfigureAwait(false);
|
||||
}
|
||||
|
||||
private void ResumeAllPairs(IEnumerable<DrawUserPair> availablePairs)
|
||||
private void ResumeAllPairs(IEnumerable<Pair> availablePairs)
|
||||
{
|
||||
_ = _apiController.SetBulkPermissions(new(availablePairs
|
||||
.ToDictionary(g => g.UID, g =>
|
||||
.ToDictionary(g => g.UserData.UID, g =>
|
||||
{
|
||||
var perm = g.UserPair.OwnPermissions;
|
||||
perm.SetPaused(paused: false);
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
using Dalamud.Interface.Utility.Raii;
|
||||
using ImGuiNET;
|
||||
using MareSynchronos.UI.Handlers;
|
||||
using System.Collections.Immutable;
|
||||
|
||||
namespace MareSynchronos.UI.Components;
|
||||
|
||||
@@ -9,8 +10,8 @@ public class DrawGroupedGroupFolder : IDrawFolder
|
||||
{
|
||||
private readonly IEnumerable<IDrawFolder> _groups;
|
||||
private readonly TagHandler _tagHandler;
|
||||
public IEnumerable<DrawUserPair> DrawPairs => throw new NotSupportedException();
|
||||
public int OnlinePairs => _groups.SelectMany(g => g.DrawPairs).Where(g => g.Pair.IsOnline).DistinctBy(g => g.UID).Count();
|
||||
public IImmutableList<DrawUserPair> DrawPairs => throw new NotSupportedException();
|
||||
public int OnlinePairs => _groups.SelectMany(g => g.DrawPairs).Where(g => g.Pair.IsOnline).DistinctBy(g => g.Pair.UserData.UID).Count();
|
||||
public int TotalPairs => _groups.Sum(g => g.TotalPairs);
|
||||
|
||||
public DrawGroupedGroupFolder(IEnumerable<IDrawFolder> groups, TagHandler tagHandler)
|
||||
|
||||
@@ -43,15 +43,11 @@ public class DrawUserPair
|
||||
}
|
||||
|
||||
public Pair Pair => _pair;
|
||||
public string UID => _pair.UserData.UID;
|
||||
public UserFullPairDto UserPair => _pair.UserPair!;
|
||||
|
||||
public void DrawPairedClient()
|
||||
{
|
||||
using var id = ImRaii.PushId(GetType() + _id);
|
||||
var originalY = ImGui.GetCursorPosY();
|
||||
var pauseIconSize = UiSharedService.GetIconButtonSize(FontAwesomeIcon.Bars);
|
||||
var textSize = ImGui.CalcTextSize(_pair.UserData.AliasOrUID);
|
||||
|
||||
DrawLeftSide();
|
||||
ImGui.SameLine();
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
|
||||
using System.Collections.Immutable;
|
||||
|
||||
namespace MareSynchronos.UI.Components;
|
||||
|
||||
public interface IDrawFolder
|
||||
{
|
||||
int TotalPairs { get; }
|
||||
int OnlinePairs { get; }
|
||||
IEnumerable<DrawUserPair> DrawPairs { get; }
|
||||
|
||||
IImmutableList<DrawUserPair> DrawPairs { get; }
|
||||
void Draw();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user