//The MIT License(MIT)
//Copyright(c) 2016 Alberto Rodriguez & LiveCharts Contributors
//Permission is hereby granted, free of charge, to any person obtaining a copy
//of this software and associated documentation files (the "Software"), to deal
//in the Software without restriction, including without limitation the rights
//to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
//copies of the Software, and to permit persons to whom the Software is
//furnished to do so, subject to the following conditions:
//The above copyright notice and this permission notice shall be included in all
//copies or substantial portions of the Software.
//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
//IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
//FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
//AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
//LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
//OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
//SOFTWARE.
using System;
using LiveCharts.Charts;
using LiveCharts.Definitions.Series;
using LiveCharts.Helpers;
namespace LiveCharts
{
///
///
///
public class ChartUpdater
{
///
/// Gets or sets the chart.
///
///
/// The chart.
///
public ChartCore Chart { get; set; }
///
/// Gets or sets a value indicating whether this instance is updating.
///
///
/// true if this instance is updating; otherwise, false.
///
public bool IsUpdating { get; set; }
///
/// Gets or sets a value indicating whether [restart view requested].
///
///
/// true if [restart view requested]; otherwise, false.
///
public bool RestartViewRequested { get; set; }
private void InitializeSeriesView(ISeriesView seriesView)
{
Chart.View.EnsureElementBelongsToCurrentView(seriesView);
}
///
/// Runs the specified restart view.
///
/// if set to true [restart view].
/// if set to true [update now].
///
public virtual void Run(bool restartView = false, bool updateNow = false)
{
throw new NotImplementedException();
}
///
/// Updates the frequency.
///
/// The freq.
///
public virtual void UpdateFrequency(TimeSpan freq)
{
throw new NotImplementedException();
}
///
/// Updates the specified restarts animations.
///
/// if set to true [restarts animations].
///
protected void Update(bool restartsAnimations = false, bool force = false)
{
if (Chart.View.UpdaterState == UpdaterState.Paused) return;
if (!force && !Chart.View.IsControlLoaded) return;
if (restartsAnimations)
Chart.View.ActualSeries.ForEach(s =>
{
if (s.ActualValues == null) return;
s.ActualValues.GetPoints(s).ForEach(p =>
{
if (p == null || p.View == null) return;
p.View.RemoveFromView(Chart);
p.View = null;
});
});
Chart.AxisX = Chart.View.MapXAxes(Chart);
Chart.AxisY = Chart.View.MapYAxes(Chart);
foreach (var series in Chart.View.ActualSeries)
{
InitializeSeriesView(series);
series.ActualValues.Initialize(series);
series.InitializeColors();
series.DrawSpecializedElements();
}
Chart.PrepareAxes();
Chart.RunSpecializedChartComponents();
foreach (var series in Chart.View.ActualSeries)
{
series.OnSeriesUpdateStart();
series.ActualValues.InitializeStep(series);
series.Model.Update();
series.ActualValues.CollectGarbage(series);
series.OnSeriesUpdatedFinish();
series.PlaceSpecializedElements();
}
}
}
}