Added pause button for all syncshells and grouped syncshells.
This commit is contained in:
@@ -1,4 +1,3 @@
|
|||||||
using System;
|
|
||||||
using Dalamud.Bindings.ImGui;
|
using Dalamud.Bindings.ImGui;
|
||||||
using Dalamud.Interface;
|
using Dalamud.Interface;
|
||||||
using Dalamud.Interface.Utility;
|
using Dalamud.Interface.Utility;
|
||||||
@@ -16,12 +15,14 @@ using LightlessSync.Services.Mediator;
|
|||||||
using LightlessSync.Services.ServerConfiguration;
|
using LightlessSync.Services.ServerConfiguration;
|
||||||
using LightlessSync.UI.Components;
|
using LightlessSync.UI.Components;
|
||||||
using LightlessSync.UI.Handlers;
|
using LightlessSync.UI.Handlers;
|
||||||
|
using LightlessSync.UI.Models;
|
||||||
using LightlessSync.Utils;
|
using LightlessSync.Utils;
|
||||||
using LightlessSync.WebAPI;
|
using LightlessSync.WebAPI;
|
||||||
using LightlessSync.WebAPI.Files;
|
using LightlessSync.WebAPI.Files;
|
||||||
using LightlessSync.WebAPI.Files.Models;
|
using LightlessSync.WebAPI.Files.Models;
|
||||||
using LightlessSync.WebAPI.SignalR.Utils;
|
using LightlessSync.WebAPI.SignalR.Utils;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
using System;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Collections.Immutable;
|
using System.Collections.Immutable;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
@@ -708,23 +709,23 @@ public class CompactUi : WindowMediatorSubscriberBase
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Filter of not foldered syncshells
|
//Filter of not foldered syncshells
|
||||||
var groupFolders = new List<IDrawFolder>();
|
var groupFolders = new List<GroupFolder>();
|
||||||
foreach (var group in _pairManager.GroupPairs.Select(g => g.Key).OrderBy(g => g.GroupAliasOrGID, StringComparer.OrdinalIgnoreCase))
|
foreach (var group in _pairManager.GroupPairs.Select(g => g.Key).OrderBy(g => g.GroupAliasOrGID, StringComparer.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
GetGroups(allPairs, filteredPairs, group, out ImmutableList<Pair> allGroupPairs, out Dictionary<Pair, List<GroupFullInfoDto>> filteredGroupPairs);
|
GetGroups(allPairs, filteredPairs, group, out ImmutableList<Pair> allGroupPairs, out Dictionary<Pair, List<GroupFullInfoDto>> filteredGroupPairs);
|
||||||
|
|
||||||
if (FilterNotTaggedSyncshells(group))
|
if (FilterNotTaggedSyncshells(group))
|
||||||
{
|
{
|
||||||
groupFolders.Add(_drawEntityFactory.CreateDrawGroupFolder(group, filteredGroupPairs, allGroupPairs));
|
groupFolders.Add(new GroupFolder(group, _drawEntityFactory.CreateDrawGroupFolder(group, filteredGroupPairs, allGroupPairs)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Filter of grouped up syncshells (All Syncshells Folder)
|
//Filter of grouped up syncshells (All Syncshells Folder)
|
||||||
if (_configService.Current.GroupUpSyncshells)
|
if (_configService.Current.GroupUpSyncshells)
|
||||||
drawFolders.Add(new DrawGroupedGroupFolder(groupFolders, _tagHandler, _uiSharedService,
|
drawFolders.Add(new DrawGroupedGroupFolder(groupFolders, _tagHandler, _apiController, _uiSharedService,
|
||||||
_selectSyncshellForTagUi, _renameSyncshellTagUi, ""));
|
_selectSyncshellForTagUi, _renameSyncshellTagUi, ""));
|
||||||
else
|
else
|
||||||
drawFolders.AddRange(groupFolders);
|
drawFolders.AddRange(groupFolders.Select(v => v.GroupDrawFolder));
|
||||||
|
|
||||||
//Filter of grouped/foldered pairs
|
//Filter of grouped/foldered pairs
|
||||||
foreach (var tag in _tagHandler.GetAllPairTagsSorted())
|
foreach (var tag in _tagHandler.GetAllPairTagsSorted())
|
||||||
@@ -738,7 +739,7 @@ public class CompactUi : WindowMediatorSubscriberBase
|
|||||||
//Filter of grouped/foldered syncshells
|
//Filter of grouped/foldered syncshells
|
||||||
foreach (var syncshellTag in _tagHandler.GetAllSyncshellTagsSorted())
|
foreach (var syncshellTag in _tagHandler.GetAllSyncshellTagsSorted())
|
||||||
{
|
{
|
||||||
var syncshellFolderTags = new List<IDrawFolder>();
|
var syncshellFolderTags = new List<GroupFolder>();
|
||||||
foreach (var group in _pairManager.GroupPairs.Select(g => g.Key).OrderBy(g => g.GroupAliasOrGID, StringComparer.OrdinalIgnoreCase))
|
foreach (var group in _pairManager.GroupPairs.Select(g => g.Key).OrderBy(g => g.GroupAliasOrGID, StringComparer.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
if (_tagHandler.HasSyncshellTag(group.GID, syncshellTag))
|
if (_tagHandler.HasSyncshellTag(group.GID, syncshellTag))
|
||||||
@@ -747,11 +748,11 @@ public class CompactUi : WindowMediatorSubscriberBase
|
|||||||
out ImmutableList<Pair> allGroupPairs,
|
out ImmutableList<Pair> allGroupPairs,
|
||||||
out Dictionary<Pair, List<GroupFullInfoDto>> filteredGroupPairs);
|
out Dictionary<Pair, List<GroupFullInfoDto>> filteredGroupPairs);
|
||||||
|
|
||||||
syncshellFolderTags.Add(_drawEntityFactory.CreateDrawGroupFolder($"tag_{group.GID}", group, filteredGroupPairs, allGroupPairs));
|
syncshellFolderTags.Add(new GroupFolder(group, _drawEntityFactory.CreateDrawGroupFolder($"tag_{group.GID}", group, filteredGroupPairs, allGroupPairs)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
drawFolders.Add(new DrawGroupedGroupFolder(syncshellFolderTags, _tagHandler, _uiSharedService, _selectSyncshellForTagUi, _renameSyncshellTagUi, syncshellTag));
|
drawFolders.Add(new DrawGroupedGroupFolder(syncshellFolderTags, _tagHandler, _apiController, _uiSharedService, _selectSyncshellForTagUi, _renameSyncshellTagUi, syncshellTag));
|
||||||
}
|
}
|
||||||
|
|
||||||
//Filter of not grouped/foldered and offline pairs
|
//Filter of not grouped/foldered and offline pairs
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
using Dalamud.Bindings.ImGui;
|
using Dalamud.Bindings.ImGui;
|
||||||
using Dalamud.Interface;
|
using Dalamud.Interface;
|
||||||
using Dalamud.Interface.Utility.Raii;
|
using Dalamud.Interface.Utility.Raii;
|
||||||
|
using LightlessSync.API.Data.Extensions;
|
||||||
|
using LightlessSync.API.Dto.Group;
|
||||||
using LightlessSync.UI.Handlers;
|
using LightlessSync.UI.Handlers;
|
||||||
|
using LightlessSync.UI.Models;
|
||||||
|
using LightlessSync.WebAPI;
|
||||||
using System.Collections.Immutable;
|
using System.Collections.Immutable;
|
||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
|
|
||||||
@@ -10,19 +14,20 @@ namespace LightlessSync.UI.Components;
|
|||||||
public class DrawGroupedGroupFolder : IDrawFolder
|
public class DrawGroupedGroupFolder : IDrawFolder
|
||||||
{
|
{
|
||||||
private readonly string _tag;
|
private readonly string _tag;
|
||||||
private readonly IEnumerable<IDrawFolder> _groups;
|
private readonly IEnumerable<GroupFolder> _groups;
|
||||||
private readonly TagHandler _tagHandler;
|
private readonly TagHandler _tagHandler;
|
||||||
private readonly UiSharedService _uiSharedService;
|
private readonly UiSharedService _uiSharedService;
|
||||||
|
private readonly ApiController _apiController;
|
||||||
private readonly SelectSyncshellForTagUi _selectSyncshellForTagUi;
|
private readonly SelectSyncshellForTagUi _selectSyncshellForTagUi;
|
||||||
private readonly RenameSyncshellTagUi _renameSyncshellTagUi;
|
private readonly RenameSyncshellTagUi _renameSyncshellTagUi;
|
||||||
private bool _wasHovered = false;
|
private bool _wasHovered = false;
|
||||||
private float _menuWidth;
|
private float _menuWidth;
|
||||||
|
|
||||||
public IImmutableList<DrawUserPair> DrawPairs => throw new NotSupportedException();
|
public IImmutableList<DrawUserPair> DrawPairs => _groups.SelectMany(g => g.GroupDrawFolder.DrawPairs).ToImmutableList();
|
||||||
public int OnlinePairs => _groups.SelectMany(g => g.DrawPairs).Where(g => g.Pair.IsOnline).DistinctBy(g => g.Pair.UserData.UID).Count();
|
public int OnlinePairs => _groups.SelectMany(g => g.GroupDrawFolder.DrawPairs).Where(g => g.Pair.IsOnline).DistinctBy(g => g.Pair.UserData.UID).Count();
|
||||||
public int TotalPairs => _groups.Sum(g => g.TotalPairs);
|
public int TotalPairs => _groups.Sum(g => g.GroupDrawFolder.TotalPairs);
|
||||||
|
|
||||||
public DrawGroupedGroupFolder(IEnumerable<IDrawFolder> groups, TagHandler tagHandler, UiSharedService uiSharedService, SelectSyncshellForTagUi selectSyncshellForTagUi, RenameSyncshellTagUi renameSyncshellTagUi, string tag)
|
public DrawGroupedGroupFolder(IEnumerable<GroupFolder> groups, TagHandler tagHandler, ApiController apiController, UiSharedService uiSharedService, SelectSyncshellForTagUi selectSyncshellForTagUi, RenameSyncshellTagUi renameSyncshellTagUi, string tag)
|
||||||
{
|
{
|
||||||
_groups = groups;
|
_groups = groups;
|
||||||
_tagHandler = tagHandler;
|
_tagHandler = tagHandler;
|
||||||
@@ -30,6 +35,7 @@ public class DrawGroupedGroupFolder : IDrawFolder
|
|||||||
_selectSyncshellForTagUi = selectSyncshellForTagUi;
|
_selectSyncshellForTagUi = selectSyncshellForTagUi;
|
||||||
_renameSyncshellTagUi = renameSyncshellTagUi;
|
_renameSyncshellTagUi = renameSyncshellTagUi;
|
||||||
_tag = tag;
|
_tag = tag;
|
||||||
|
_apiController = apiController;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Draw()
|
public void Draw()
|
||||||
@@ -42,7 +48,7 @@ public class DrawGroupedGroupFolder : IDrawFolder
|
|||||||
|
|
||||||
using var id = ImRaii.PushId(_id);
|
using var id = ImRaii.PushId(_id);
|
||||||
var color = ImRaii.PushColor(ImGuiCol.ChildBg, ImGui.GetColorU32(ImGuiCol.FrameBgHovered), _wasHovered);
|
var color = ImRaii.PushColor(ImGuiCol.ChildBg, ImGui.GetColorU32(ImGuiCol.FrameBgHovered), _wasHovered);
|
||||||
using (ImRaii.Child("folder__" + _id, new System.Numerics.Vector2(UiSharedService.GetWindowContentRegionWidth() - ImGui.GetCursorPosX(), ImGui.GetFrameHeight())))
|
using (ImRaii.Child("folder__" + _id, new Vector2(UiSharedService.GetWindowContentRegionWidth() - ImGui.GetCursorPosX(), ImGui.GetFrameHeight())))
|
||||||
{
|
{
|
||||||
ImGui.Dummy(new Vector2(0f, ImGui.GetFrameHeight()));
|
ImGui.Dummy(new Vector2(0f, ImGui.GetFrameHeight()));
|
||||||
using (ImRaii.PushStyle(ImGuiStyleVar.ItemSpacing, new Vector2(0f, 0f)))
|
using (ImRaii.PushStyle(ImGuiStyleVar.ItemSpacing, new Vector2(0f, 0f)))
|
||||||
@@ -83,11 +89,16 @@ public class DrawGroupedGroupFolder : IDrawFolder
|
|||||||
{
|
{
|
||||||
ImGui.TextUnformatted(_tag);
|
ImGui.TextUnformatted(_tag);
|
||||||
|
|
||||||
|
ImGui.SameLine();
|
||||||
|
DrawPauseButton();
|
||||||
ImGui.SameLine();
|
ImGui.SameLine();
|
||||||
DrawMenu();
|
DrawMenu();
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
ImGui.TextUnformatted("All Syncshells");
|
ImGui.TextUnformatted("All Syncshells");
|
||||||
|
|
||||||
|
ImGui.SameLine();
|
||||||
|
DrawPauseButton();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
color.Dispose();
|
color.Dispose();
|
||||||
@@ -100,10 +111,47 @@ public class DrawGroupedGroupFolder : IDrawFolder
|
|||||||
using var indent = ImRaii.PushIndent(20f);
|
using var indent = ImRaii.PushIndent(20f);
|
||||||
foreach (var entry in _groups)
|
foreach (var entry in _groups)
|
||||||
{
|
{
|
||||||
entry.Draw();
|
entry.GroupDrawFolder.Draw();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
protected void DrawPauseButton()
|
||||||
|
{
|
||||||
|
if (DrawPairs.Count > 0)
|
||||||
|
{
|
||||||
|
var isPaused = _groups.Select(g => g.GroupFullInfo).All(g => g.GroupUserPermissions.IsPaused());
|
||||||
|
FontAwesomeIcon pauseIcon = isPaused ? FontAwesomeIcon.Play : FontAwesomeIcon.Pause;
|
||||||
|
|
||||||
|
var pauseButtonSize = _uiSharedService.GetIconButtonSize(pauseIcon);
|
||||||
|
var windowEndX = ImGui.GetWindowContentRegionMin().X + UiSharedService.GetWindowContentRegionWidth();
|
||||||
|
if (_tag != "")
|
||||||
|
{
|
||||||
|
var spacingX = ImGui.GetStyle().ItemSpacing.X;
|
||||||
|
var menuButtonSize = _uiSharedService.GetIconButtonSize(FontAwesomeIcon.EllipsisV);
|
||||||
|
ImGui.SameLine(windowEndX - pauseButtonSize.X - menuButtonSize.X - spacingX);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ImGui.SameLine(windowEndX - pauseButtonSize.X);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (_uiSharedService.IconButton(pauseIcon))
|
||||||
|
{
|
||||||
|
ChangePauseStateGroups();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void ChangePauseStateGroups()
|
||||||
|
{
|
||||||
|
foreach(var group in _groups)
|
||||||
|
{
|
||||||
|
var perm = group.GroupFullInfo.GroupUserPermissions;
|
||||||
|
perm.SetPaused(!perm.IsPaused());
|
||||||
|
_ = _apiController.GroupChangeIndividualPermissionState(new GroupPairUserPermissionDto(group.GroupFullInfo.Group, new(_apiController.UID), perm));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected void DrawMenu()
|
protected void DrawMenu()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
|
using System.Collections.Immutable;
|
||||||
using System.Collections.Immutable;
|
|
||||||
|
|
||||||
namespace LightlessSync.UI.Components;
|
namespace LightlessSync.UI.Components;
|
||||||
|
|
||||||
|
|||||||
6
LightlessSync/UI/Models/GroupFolder.cs
Normal file
6
LightlessSync/UI/Models/GroupFolder.cs
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
using LightlessSync.API.Dto.Group;
|
||||||
|
using LightlessSync.UI.Components;
|
||||||
|
|
||||||
|
namespace LightlessSync.UI.Models;
|
||||||
|
|
||||||
|
public record GroupFolder(GroupFullInfoDto GroupFullInfo, IDrawFolder GroupDrawFolder);
|
||||||
Reference in New Issue
Block a user