aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.Console/ConsoleControl.xaml.cs
blob: 83ba09bd72ffc13c3a0af14bff4101efa93680d2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
using System;
using System.Collections.Generic;
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.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace Tango.Console
{
    /// <summary>
    /// Interaction logic for ConsoleControl.xaml
    /// </summary>
    public partial class ConsoleControl : UserControl
    {
        public ConsoleControl()
        {
            InitializeComponent();
            MouseDown += ConsoleControl_MouseDown;
        }

        public Brush SelectionBrush
        {
            get { return (Brush)GetValue(SelectionBrushProperty); }
            set { SetValue(SelectionBrushProperty, value); }
        }
        public static readonly DependencyProperty SelectionBrushProperty =
            DependencyProperty.Register("SelectionBrush", typeof(Brush), typeof(ConsoleControl), new PropertyMetadata(Brushes.DimGray));

        public Brush CaretBrush
        {
            get { return (Brush)GetValue(CaretBrushProperty); }
            set { SetValue(CaretBrushProperty, value); }
        }
        public static readonly DependencyProperty CaretBrushProperty =
            DependencyProperty.Register("CaretBrush", typeof(Brush), typeof(ConsoleControl), new PropertyMetadata(Brushes.White));

        public DataTemplate BusyTemplate
        {
            get { return (DataTemplate)GetValue(BusyTemplateProperty); }
            set { SetValue(BusyTemplateProperty, value); }
        }
        public static readonly DependencyProperty BusyTemplateProperty =
            DependencyProperty.Register("BusyTemplate", typeof(DataTemplate), typeof(ConsoleControl), new PropertyMetadata(null));

        public Brush SuggestionsBorderBrush
        {
            get { return (Brush)GetValue(SuggestionsBorderBrushProperty); }
            set { SetValue(SuggestionsBorderBrushProperty, value); }
        }
        public static readonly DependencyProperty SuggestionsBorderBrushProperty =
            DependencyProperty.Register("SuggestionsBorderBrush", typeof(Brush), typeof(ConsoleControl), new PropertyMetadata(null));

        public Brush SuggestionsBackground
        {
            get { return (Brush)GetValue(SuggestionsBackgroundProperty); }
            set { SetValue(SuggestionsBackgroundProperty, value); }
        }
        public static readonly DependencyProperty SuggestionsBackgroundProperty =
            DependencyProperty.Register("SuggestionsBackground", typeof(Brush), typeof(ConsoleControl), new PropertyMetadata(null));

        public Brush SuggestionsForeground
        {
            get { return (Brush)GetValue(SuggestionsForegroundProperty); }
            set { SetValue(SuggestionsForegroundProperty, value); }
        }
        public static readonly DependencyProperty SuggestionsForegroundProperty =
            DependencyProperty.Register("SuggestionsForeground", typeof(Brush), typeof(ConsoleControl), new PropertyMetadata(null));


        private void ConsoleControl_MouseDown(object sender, MouseButtonEventArgs e)
        {
            Keyboard.Focus(txtCurrentCommand);
        }

        private void ScrollViewer_PreviewMouseDown(object sender, MouseButtonEventArgs e)
        {
            Keyboard.Focus(txtCurrentCommand);
        }
    }
}
class="n">DependencyProperty ControllerProperty = DependencyProperty.Register("Controller", typeof(GraphController), typeof(RealTimeGraphExReachCircle), new PropertyMetadata(null, new PropertyChangedCallback(GraphControllerChanged))); private static void GraphControllerChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var control = d as RealTimeGraphExReachCircle; if (control.Controller != null) { control.Controller.RegisterMethods(control.ClearGraph, control.StartPushThread, control.SetPaused, control.ChangeRenderMode, null); control._graphController = control.Controller; } } /// <summary> /// Gets or sets the collection of VU range data determines how to fill the VU graph. /// </summary> public ObservableCollection<Models.RangeData> Ranges { get { return (ObservableCollection<Models.RangeData>)GetValue(RangesProperty); } set { SetValue(RangesProperty, value); } } public static readonly DependencyProperty RangesProperty = DependencyProperty.Register("Ranges", typeof(ObservableCollection<Models.RangeData>), typeof(RealTimeGraphExReachCircle), new PropertyMetadata(null)); /// <summary> /// Gets or sets whether to animate the circle when when it's value doens not change. /// </summary> public bool Animate { get { return (bool)GetValue(AnimateProperty); } set { SetValue(AnimateProperty, value); } } public static readonly DependencyProperty AnimateProperty = DependencyProperty.Register("Animate", typeof(bool), typeof(RealTimeGraphExReachCircle), new PropertyMetadata(false)); /// <summary> /// Gets or sets the height value to animate when the Animate property is set to true. /// </summary> public double AnimationAmount { get { return (double)GetValue(AnimationAmountProperty); } set { SetValue(AnimationAmountProperty, value); } } public static readonly DependencyProperty AnimationAmountProperty = DependencyProperty.Register("AnimationAmount", typeof(double), typeof(RealTimeGraphExReachCircle), new PropertyMetadata(10.0)); /// <summary> /// Gets or sets the duration of the animation when the Animate property is set to true. /// </summary> public Duration AnimationDuration { get { return (Duration)GetValue(AnimationDurationProperty); } set { SetValue(AnimationDurationProperty, value); } } public static readonly DependencyProperty AnimationDurationProperty = DependencyProperty.Register("AnimationDuration", typeof(Duration), typeof(RealTimeGraphExReachCircle), new PropertyMetadata(new Duration(TimeSpan.FromMilliseconds(500)))); #endregion #region Constructors public RealTimeGraphExReachCircle() : base() { Ranges = new ObservableCollection<Models.RangeData>(); } #endregion #region Override Methods protected override void Initialize() { base.Initialize(); if (ellipse == null) { ellipse = new Ellipse() { Tag = "Default" }; ellipse.Height = 0; } gridLinesAndImageWrapperGrid.Children.Remove(img); if (!gridLinesAndImageWrapperGrid.Children.Contains(ellipse)) { gridLinesAndImageWrapperGrid.Children.Add(ellipse); } //TODO: Base on developer selection vertical/horizontal VU. ellipse.HorizontalAlignment = System.Windows.HorizontalAlignment.Center; ellipse.VerticalAlignment = System.Windows.VerticalAlignment.Center; } protected override void OnSetCrossThreadFields() { base.OnSetCrossThreadFields(); this.Dispatcher.Invoke(() => { _graphController = Controller; _stroke = Stroke; _fill = Fill; if (ellipse.Tag != null && ellipse.Tag.ToString() == "Default") { ellipse.Fill = Fill; ellipse.Stroke = Stroke; } if (_graphController != null && _graphController.dataSeries != null && _graphController.dataSeries.useFillandStroke) { ellipse.Fill = _graphController.dataSeries.fill; ellipse.Stroke = _graphController.dataSeries.stroke; } }, DispatcherPriority.Send); } protected override void OnClearGraph() { base.OnClearGraph(); this.Dispatcher.Invoke(() => { ellipse.BeginAnimation(WidthProperty, null); ellipse.BeginAnimation(HeightProperty, null); ellipse.Height = 0; ellipse.Width = 0; }); } protected internal override void OnRenderGraph() { if (_graphController != null && _graphController.dataSeries.Points != null && _graphController.dataSeries.Points.Count > 0 && _width > 1 && _height > 1) { double value = _graphController.dataSeries.Points[_graphController.dataSeries.Points.Count - 1]; //Get last value. if (value == lastValue) { _graphController.ClearPoints(); return; } lastValue = value; double valueHeightPrecentage = ConvertYToImageY(value); double valueWidthPrecentage = ConvertYToImageX(value); updateCounter++; if (updateCounter >= 1 && !_isPaused) { updateCounter = 0; OnDrawVisuals(valueHeightPrecentage, valueWidthPrecentage); } _graphController.ClearPoints(); } } #endregion #region Virtual Methods protected virtual void OnDrawVisuals(double valueHeightPrecentage, double valueWidthPrecentage) { this.Dispatcher.Invoke(() => { ellipse.BeginAnimation(WidthProperty, null); ellipse.BeginAnimation(HeightProperty, null); ellipse.Height = valueHeightPrecentage; ellipse.Width = valueWidthPrecentage; ellipse.Fill = GetEllipseBrush(); if (Animate) { DoubleAnimation ani = new DoubleAnimation(); ani.CurrentTimeInvalidated += (x, y) => { ellipse.Fill = GetEllipseBrush(); }; ani.To = ellipse.Width - AnimationAmount; ani.From = ellipse.Width; ani.RepeatBehavior = RepeatBehavior.Forever; ani.AutoReverse = true; ani.Duration = AnimationDuration; ellipse.BeginAnimation(WidthProperty, ani); ellipse.BeginAnimation(HeightProperty, ani); } }); } private Brush GetEllipseBrush() { if (Ranges != null && Ranges.Count > 0) { RadialGradientBrush rangesBrush = new RadialGradientBrush(); rangesBrush.MappingMode = BrushMappingMode.Absolute; rangesBrush.Center = new Point(ellipse.Width / 2, ellipse.Height / 2); rangesBrush.GradientOrigin = new Point(ellipse.Width / 2, ellipse.Height / 2); rangesBrush.RadiusX = _width; rangesBrush.RadiusY = _height; for (int i = Ranges.Count - 1; i >= 0; i--) { var range = Ranges[i]; double rangeValuePrecentage = ConvertYToImageY(range.Value); GradientStop stop = new GradientStop(); stop.Color = range.Color; stop.Offset = ((rangeValuePrecentage * 100) / _height) / 100; rangesBrush.GradientStops.Add(stop); } return rangesBrush; } return Fill; } #endregion } }