forked from amkovkov/GranuSightSoftware2
69 lines
1.9 KiB
C#
69 lines
1.9 KiB
C#
using System.Collections.ObjectModel;
|
|
|
|
using CommunityToolkit.Mvvm.ComponentModel;
|
|
|
|
using Avalonia;
|
|
|
|
using LiveChartsCore;
|
|
using LiveChartsCore.Defaults;
|
|
using LiveChartsCore.SkiaSharpView;
|
|
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
namespace GSS2.UI.Core.ViewModels;
|
|
|
|
public partial class ResourceBarViewModel : ViewModelBase
|
|
{
|
|
private readonly ILogger<ResourceBarViewModel> _logger;
|
|
|
|
[ObservableProperty] private ObservableCollection<ISeries> _series;
|
|
[ObservableProperty] private Rect _bounds;
|
|
|
|
public ResourceBarViewModel(ILogger<ResourceBarViewModel> logger, IEnumerable<ISeries> series)
|
|
{
|
|
_logger = logger;
|
|
_logger.LogInformation("Initialization");
|
|
|
|
Series = new ObservableCollection<ISeries>(series);
|
|
|
|
_logger.LogInformation("Initialized");
|
|
}
|
|
|
|
partial void OnBoundsChanged(Rect value)
|
|
{
|
|
var size = Math.Min(value.Width, value.Height);
|
|
|
|
var textSize = size switch
|
|
{
|
|
< 100 => 8,
|
|
< 150 => 10,
|
|
< 175 => 12,
|
|
_ => 14
|
|
};
|
|
var innerRadius = size switch
|
|
{
|
|
< 50 => size / 2,
|
|
< 120 => size / 3,
|
|
_ => size / 4,
|
|
};
|
|
|
|
foreach (var series in Series.OfType<PieSeries<ObservableValue>>())
|
|
{
|
|
series.DataLabelsSize = textSize;
|
|
series.InnerRadius = innerRadius;
|
|
series.OuterRadiusOffset = 0;
|
|
series.RelativeOuterRadius = 1;
|
|
}
|
|
}
|
|
|
|
public void UpdateValue(double value, double maxValue)
|
|
{
|
|
if (Series.Count() == 2 &&
|
|
Series.Skip(0).First().Values is ObservableCollection<ObservableValue> value1 &&
|
|
Series.Skip(1).First().Values is ObservableCollection<ObservableValue> value2)
|
|
{
|
|
value1.First().Value = value > maxValue ? maxValue : value;
|
|
value2.First().Value = value > maxValue ? 0 : maxValue - value;
|
|
}
|
|
}
|
|
} |