using System.Collections.ObjectModel; using Microsoft.Extensions.Logging; using CommunityToolkit.Mvvm.ComponentModel; using Avalonia; using LiveChartsCore; using LiveChartsCore.SkiaSharpView; namespace GSS2.UI.Core.ViewModels; public partial class ResourceChartViewModel : ViewModelBase { private readonly ILogger _logger; [ObservableProperty] private ObservableCollection _series; [ObservableProperty] private ObservableCollection _yAxes; [ObservableProperty] private ObservableCollection _xAxes; [ObservableProperty] private Rect _bounds; public ResourceChartViewModel(ILogger logger, IEnumerable series, IEnumerable yAxes, IEnumerable xAxes) { _logger = logger; _logger.LogInformation("Initialization"); Series = new ObservableCollection(series); YAxes = new ObservableCollection(yAxes); XAxes = new ObservableCollection(xAxes); _logger.LogInformation("Initialized"); } partial void OnBoundsChanged(Rect value) { var textSize = value.Height switch { < 100 => 8, < 150 => 10, < 200 => 12, _ => 14 }; var labelsDensity = value.Height switch { < 100 => 0.2f, < 150 => 0.3f, < 200 => 0.4f, _ => 0.5f }; foreach (var axis in YAxes) { axis.TextSize = textSize; axis.NameTextSize = textSize; axis.LabelsDensity = labelsDensity; } } public void AppendValue(double value, int maxValuesCount) { if (Series.Count() != 1 || Series.First().Values is not ObservableCollection values) return; values.Add(value); while (values.Count() > maxValuesCount || values.Count() == 0) values.RemoveAt(0); } }