71 lines
2 KiB
C#
71 lines
2 KiB
C#
using System.Collections.ObjectModel;
|
|
using System.Windows.Media;
|
|
using CommunityToolkit.Mvvm.ComponentModel;
|
|
using CommunityToolkit.Mvvm.Messaging;
|
|
using Livia.Utility;
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
namespace Livia.Models;
|
|
|
|
public class LegendItem
|
|
{
|
|
public string ItemFullName { get; init; } = string.Empty;
|
|
public string ItemName { get; init; } = string.Empty;
|
|
public Color ItemColor { get; init; }
|
|
}
|
|
|
|
public interface IRoiLegendManager
|
|
{
|
|
void Clear();
|
|
void AddItem(int tabKey, string id, string name, string fullName, Color color);
|
|
}
|
|
|
|
public class RoiLegendManager : ObservableRecipient, IRoiLegendManager, IRecipient<RoiTabChangedMessage>
|
|
{
|
|
public ObservableCollection<LegendItem> LegendItems { get; } = [];
|
|
private Dictionary<int, List<LegendItem>> LegendItemsDict { get; } = new();
|
|
|
|
private readonly HashSet<string> _currentItems = [];
|
|
private readonly ILogger _logger;
|
|
|
|
public RoiLegendManager(ILogger logger)
|
|
{
|
|
_logger = logger;
|
|
WeakReferenceMessenger.Default.RegisterAll(this);
|
|
}
|
|
|
|
public void Clear()
|
|
{
|
|
LegendItems.Clear();
|
|
LegendItemsDict.Clear();
|
|
_currentItems.Clear();
|
|
}
|
|
|
|
public void AddItem(int tabKey, string id, string name, string fullName, Color color)
|
|
{
|
|
string hashKey = $"{tabKey}###{id}";
|
|
if (!_currentItems.Add(hashKey))
|
|
return;
|
|
|
|
LegendItem item = new()
|
|
{
|
|
ItemName = LiviaUtility.ParseServerString(name),
|
|
ItemFullName = LiviaUtility.ParseServerString(fullName),
|
|
ItemColor = color
|
|
};
|
|
LegendItemsDict.AddToCollectionWithKey(tabKey, item);
|
|
}
|
|
|
|
public void Receive(RoiTabChangedMessage message)
|
|
{
|
|
if (LegendItemsDict.TryGetValue(message.Value, out List<LegendItem>? list))
|
|
{
|
|
LegendItems.Clear();
|
|
LegendItems.AddRange(list);
|
|
}
|
|
else
|
|
{
|
|
_logger.LogWarning("Unknown Roi tab index for legends: {id}", message.Value);
|
|
}
|
|
}
|
|
} |