private void GraphItem(LogItemSchema schema)
{
if (schema.IsNumeric)
{
ChartStack.Visibility = Visibility.Visible;
ChartStack.UpdateLayout();
SimpleLineChart chart = new SimpleLineChart();
chart.Margin = defaultChartMargin;
chart.Focusable = false;
chart.Closed += OnChartClosed;
chart.LineColor = HlsColor.GetRandomColor();
chart.StrokeThickness = 1;
chart.Tag = schema;
if (currentFlightLog != null && schema.Root == currentFlightLog.Schema)
{
List<DataValue> values = new List<DataValue>(currentFlightLog.GetDataValues(schema, DateTime.MinValue, TimeSpan.MaxValue));
InitializeChartData(schema, chart, values);
// now turn on live scrolling...
chart.LiveScrolling = true;
// now start watching the live update for new values that need to be added to this chart.
Task.Run(() =>
{
LiveUpdate(chart, currentFlightLog, schema);
});
}
else
{
List<DataValue> values = new List<DataValue>(GetSelectedDataValues(schema));
InitializeChartData(schema, chart, values);
}
if (chartGroup != null)
{
SimpleLineChart last = null;
if (chartGroup.Children.Count > 0)
{
last = chartGroup.Children[chartGroup.Children.Count - 1] as SimpleLineChart;
}
chartGroup.Children.Add(chart);
if (chartGroup.Parent == null)
{
ChartStack.AddChart(chartGroup);
}
if (last != null)
{
last.Next = chart;
}
}
else
{
ChartStack.AddChart(chart);
}
LayoutCharts();
Messages.Visibility = Visibility.Collapsed;
}
else
{
Paragraph p = new Paragraph();
foreach (var value in GetSelectedDataValues(schema))
{
p.Inlines.Add(new Run(value.Label));
p.Inlines.Add(new LineBreak());
}
var doc = Messages.Document;
doc.Blocks.Add(p);
Messages.Visibility = Visibility.Visible;
Messages.Focus();
}
}