forked from amkovkov/GranuSightSoftware2
refactor: ResouceView
Move ResourceView and all related to ui core namespace GSS2.UI.Core Split ResourceView on separate elements Make parts folding depended on size
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
using System.Collections.ObjectModel;
|
||||
|
||||
using Avalonia;
|
||||
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
|
||||
using LiveChartsCore;
|
||||
using LiveChartsCore.Defaults;
|
||||
using LiveChartsCore.SkiaSharpView;
|
||||
|
||||
namespace GSS2.UI.Core.ViewModels;
|
||||
|
||||
public partial class ResourceBarViewModel : ViewModelBase
|
||||
{
|
||||
[ObservableProperty] private ObservableCollection<ISeries> _series;
|
||||
[ObservableProperty] private Rect _bounds;
|
||||
|
||||
public ResourceBarViewModel(IEnumerable<ISeries> series)
|
||||
{
|
||||
Series = new ObservableCollection<ISeries>(series);
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user