using System;
using System.Collections.Generic;
using System.Threading;
using System.Windows;
using System.Windows.Media;
using DataService;
using Microsoft.Research.DynamicDataDisplay;
namespace CoreTest
{
///
/// Interaction logic for RuntimeChart.xaml
///
///
/// Interaction logic for RuntimeChart.xaml
///
public partial class RuntimeChart : Window
{
int TICK = 5000;
ITag currentTag;
Timer timer;
bool writelock;
DateTime timestamp = DateTime.Now;
QueueListSource source1 = new QueueListSource(ConfigCache.RtCap);
public RuntimeChart()
{
InitializeComponent();
this.SetWindowState();
var brush = chartPlotter1.Background as SolidColorBrush;
if (brush != null)
colorpicker.SelectedColor = brush.Color;
TICK = ConfigCache.RtWaitTick;
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
comb1.ItemsSource = App.Server.ArchiveList;
source1.SetXMapping(X => hTimeSpanAxis.ConvertToDouble(X.TimeStamp));
graph = chartPlotter1.AddLineGraph(source1, 2, "");
IGroup grp = App.Server.GetGroupByName(null);
if (grp != null)
{
grp.DataChange += new DataChangeEventHandler(grp_DataChange);
}
timer = new Timer(onTimer, null, 0, TICK);
}
void grp_DataChange(object sender, DataChangeEventArgs e)
{
writelock = true;
var arr = e.Values;
if (arr != null && currentTag != null)
{
foreach (HistoryData data in arr)
{
if (data.ID == currentTag.ID)
{
source1.AppendAsync(Dispatcher, data);
timestamp = DateTime.Now;
}
}
}
writelock = false;
}
void onTimer(object state)
{
if (!writelock && (DateTime.Now - timestamp).TotalMilliseconds > TICK)
{
HistoryData data = HistoryData.Empty;
if (currentTag != null)
{
data.Value = currentTag.Value;
data.TimeStamp = DateTime.Now;
source1.AppendAsync(Dispatcher, data);
}
}
}
private void Window_Closed(object sender, System.EventArgs e)
{
IGroup grp = App.Server.GetGroupByName(null);
if (grp != null)
{
grp.DataChange -= new DataChangeEventHandler(grp_DataChange);
}
timer.Dispose();
this.SaveWindowState();
}
LineGraph graph;
private void comb1_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
{
if (e.AddedItems.Count > 0)
{
currentTag = null;
source1.Collection.Clear();
var str = (KeyValuePair)e.AddedItems[0];
graph.Description = new PenDescription(str.Value ?? "");
currentTag = App.Server[str.Key];
int index = App.Server.GetItemProperties(str.Key);
if (index >= 0)
{
hilevel.Value = App.Server.MetaDataList[index].Maximum;
lolevel.Value = App.Server.MetaDataList[index].Minimum;
}
if (hilevel.Value == lolevel.Value)
{
hilevel.Value = 100000;
lolevel.Value = -100000;
}
source1.SetSourceMapping(currentTag);
chartPlotter1.FitToView();
}
}
private void ColorPicker_SelectedColorChanged(object sender, RoutedPropertyChangedEventArgs e)
{
chartPlotter1.Background = new SolidColorBrush(e.NewValue);
}
}
}