using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using RealTimeGraphEx;
using RealTimeGraphEx.Controllers;
namespace Tango.MachineStudio.Common.Controls
{
///
/// Interaction logic for RealTimeGraphControl.xaml
///
public partial class RealTimeGraphControl : UserControl, IRealTimeGraph
{
private Grid headerGrid;
#region Properties
///
/// Gets or sets the name of the sensor.
///
public String SensorName
{
get { return (String)GetValue(SensorNameProperty); }
set { SetValue(SensorNameProperty, value); }
}
public static readonly DependencyProperty SensorNameProperty =
DependencyProperty.Register("SensorName", typeof(String), typeof(RealTimeGraphControl), new PropertyMetadata(null));
///
/// Gets or sets the sensor units.
///
public String SensorUnits
{
get { return (String)GetValue(SensorUnitsProperty); }
set { SetValue(SensorUnitsProperty, value); }
}
public static readonly DependencyProperty SensorUnitsProperty =
DependencyProperty.Register("SensorUnits", typeof(String), typeof(RealTimeGraphControl), new PropertyMetadata(null));
public double Minimum
{
get { return (double)GetValue(MinimumProperty); }
set { SetValue(MinimumProperty, value); }
}
public static readonly DependencyProperty MinimumProperty =
DependencyProperty.Register("Minimum", typeof(double), typeof(RealTimeGraphControl), new PropertyMetadata(0.0));
public double Maximum
{
get { return (double)GetValue(MaximumProperty); }
set { SetValue(MaximumProperty, value); }
}
public static readonly DependencyProperty MaximumProperty =
DependencyProperty.Register("Maximum", typeof(double), typeof(RealTimeGraphControl), new PropertyMetadata(100.0));
public Color Color
{
get { return (Color)GetValue(ColorProperty); }
set { SetValue(ColorProperty, value); }
}
public static readonly DependencyProperty ColorProperty =
DependencyProperty.Register("Color", typeof(Color), typeof(RealTimeGraphControl), new PropertyMetadata(Colors.DodgerBlue));
public void InvalidateGraph()
{
InnerGraph.Clear();
yAxis.Render(InnerGraph);
yAxisTicks.Render(InnerGraph);
}
///
/// Gets or sets the inner real-time graph control.
///
public RealTimeGraphExBase InnerGraph { get; set; }
///
/// Gets or sets the inner graph controller.
///
public GraphControllerBase Controller { get; set; }
private bool _enableToolbar;
///
/// Gets or sets a value indicating whether to enable toolbar buttons.
///
public bool EnableToolBar
{
get { return _enableToolbar; }
set
{
_enableToolbar = value;
if (!value)
{
if (headerGrid != null)
{
ThicknessAnimation ani = new ThicknessAnimation();
ani.To = new Thickness(0, -35, 0, 0);
ani.Duration = TimeSpan.FromSeconds(0.2);
headerGrid.BeginAnimation(Grid.MarginProperty, ani);
}
}
}
}
#endregion
#region Events
public event EventHandler GraphRemoveButtonPressed;
public event EventHandler GraphFullScreenButtonPressed;
#endregion
public RealTimeGraphControl()
{
InitializeComponent();
EnableToolBar = true;
InnerGraph = Graph;
Controller = new GraphController();
}
private void OnGraphFullScreen(object sender, RoutedEventArgs e)
{
GraphFullScreenButtonPressed?.Invoke(this, new EventArgs());
}
private void Graph_MouseEnter(object sender, MouseEventArgs e)
{
if (EnableToolBar)
{
Grid mainGrid = sender as Grid;
headerGrid = mainGrid.Children.OfType().ToList().First();
ThicknessAnimation ani = new ThicknessAnimation();
ani.To = new Thickness(0, 0, 0, 0);
ani.Duration = TimeSpan.FromSeconds(0.2);
headerGrid.BeginAnimation(Grid.MarginProperty, ani);
}
}
private void Graph_MouseLeave(object sender, MouseEventArgs e)
{
Grid mainGrid = sender as Grid;
headerGrid = mainGrid.Children.OfType().ToList().First();
ThicknessAnimation ani = new ThicknessAnimation();
ani.To = new Thickness(0, -35, 0, 0);
ani.Duration = TimeSpan.FromSeconds(0.2);
headerGrid.BeginAnimation(Grid.MarginProperty, ani);
}
private void OnGraphRemove(object sender, RoutedEventArgs e)
{
GraphRemoveButtonPressed?.Invoke(this, new EventArgs());
}
}
}