aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/RealTimeGraphControl.xaml.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/RealTimeGraphControl.xaml.cs')
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/RealTimeGraphControl.xaml.cs179
1 files changed, 179 insertions, 0 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/RealTimeGraphControl.xaml.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/RealTimeGraphControl.xaml.cs
new file mode 100644
index 000000000..dd9aa1414
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/RealTimeGraphControl.xaml.cs
@@ -0,0 +1,179 @@
+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
+{
+ /// <summary>
+ /// Interaction logic for RealTimeGraphControl.xaml
+ /// </summary>
+ public partial class RealTimeGraphControl : UserControl, IRealTimeGraph
+ {
+ private Grid headerGrid;
+
+ #region Properties
+
+ /// <summary>
+ /// Gets or sets the name of the sensor.
+ /// </summary>
+ 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));
+
+ /// <summary>
+ /// Gets or sets the sensor units.
+ /// </summary>
+ 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);
+ }
+
+ /// <summary>
+ /// Gets or sets the inner real-time graph control.
+ /// </summary>
+ public RealTimeGraphExBase InnerGraph { get; set; }
+
+ /// <summary>
+ /// Gets or sets the inner graph controller.
+ /// </summary>
+ public GraphControllerBase Controller { get; set; }
+
+
+ private bool _enableToolbar;
+ /// <summary>
+ /// Gets or sets a value indicating whether to enable toolbar buttons.
+ /// </summary>
+ 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<Grid>().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<Grid>().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());
+ }
+
+ }
+}