aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/PPC/Modules/Tango.PPC.Events/EventsModule.cs
blob: 0ad82654621b0ce82fa133b606c2e530408448e3 (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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media.Imaging;
using Tango.BL.Enumerations;
using Tango.PPC.Common;
using Tango.PPC.Events.Views;
using Tango.SharedUI.Helpers;

namespace Tango.PPC.Events
{
    /// <summary>
    /// Represents a PPC <see cref="EventsModule"/>.
    /// </summary>
    /// <seealso cref="Tango.PPC.Common.PPCModuleBase" />
    [PPCModule(2)]
    public class EventsModule : PPCModuleBase
    {
        /// <summary>
        /// Gets the module name.
        /// </summary>
        public override string Name
        {
            get
            {
                return "Events";
            }
        }

        /// <summary>
        /// Gets the module description.
        /// </summary>
        public override string Description
        {
            get
            {
                return "PPC Events Module";
            }
        }

        /// <summary>
        /// Gets the module cover image.
        /// </summary>
        public override BitmapSource Image
        {
            get
            {
                return ResourceHelper.GetImageFromResources("Images/events.png");
            }
        }

        /// <summary>
        /// Gets the module entry point view type.
        /// </summary>
        public override Type MainViewType
        {
            get
            {
                return typeof(MainView);
            }
        }

        /// <summary>
        /// Gets the permission required to see and load this module.
        /// </summary>
        public override Permissions Permission
        {
            get
            {
                return Permissions.RunPPC;
            }
        }

        /// <summary>
        /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
        /// </summary>
        public override void Dispose()
        {
            //Dispose module here...
        }
    }
}
/span>System.Windows.Shapes; using Tango.SharedUI.Controls; namespace Tango.Touch.Controls { public class TouchNumericTextBox : TouchInput, IValueControl { private TextBox _text_box; private bool _prevent_text_change; private TextBlock _text_block; private double _lastValue; Regex regex_integer = new Regex(@"^-?[0-9]\d*(\d+)?$"); Regex regex_double = new Regex(@"^-?[0-9]\d*(\.\d+)?$"); public static readonly RoutedEvent ValueChangedEvent = EventManager.RegisterRoutedEvent("ValueChanged", RoutingStrategy.Bubble, typeof(DoubleValueChangedEventHandler), typeof(TouchNumericTextBox)); public event DoubleValueChangedEventHandler ValueChanged { add { AddHandler(ValueChangedEvent, value); } remove { RemoveHandler(ValueChangedEvent, value); } } public double Value { get { return (double)GetValue(ValueProperty); } set { SetValue(ValueProperty, value); } } public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(double), typeof(TouchNumericTextBox), new FrameworkPropertyMetadata(0.0, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, (d, e) => (d as TouchNumericTextBox).OnValueChanged(), (d, e) => (d as TouchNumericTextBox).CoerceValue(d, e), false, UpdateSourceTrigger.Explicit)); public String Watermark { get { return (String)GetValue(WatermarkProperty); } set { SetValue(WatermarkProperty, value); } } public static readonly DependencyProperty WatermarkProperty = DependencyProperty.Register("Watermark", typeof(String), typeof(TouchNumericTextBox), new PropertyMetadata(null)); public bool DisplayWatermarkHint { get { return (bool)GetValue(DisplayWatermarkHintProperty); } set { SetValue(DisplayWatermarkHintProperty, value); } } public static readonly DependencyProperty DisplayWatermarkHintProperty = DependencyProperty.Register("DisplayWatermarkHint", typeof(bool), typeof(TouchNumericTextBox), new PropertyMetadata(false)); public String StringFormat { get { return (String)GetValue(StringFormatProperty); } set { SetValue(StringFormatProperty, value); } } public static readonly DependencyProperty StringFormatProperty = DependencyProperty.Register("StringFormat", typeof(String), typeof(TouchNumericTextBox), new PropertyMetadata(null)); public bool HasDecimalPoint { get { return (bool)GetValue(HasDecimalPointProperty); } set { SetValue(HasDecimalPointProperty, value); } } public static readonly DependencyProperty HasDecimalPointProperty = DependencyProperty.Register("HasDecimalPoint", typeof(bool), typeof(TouchNumericTextBox), new PropertyMetadata(false)); public double Minimum { get { return (double)GetValue(MinimumProperty); } set { SetValue(MinimumProperty, value); } } public static readonly DependencyProperty MinimumProperty = DependencyProperty.Register("Minimum", typeof(double), typeof(TouchNumericTextBox), 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(TouchNumericTextBox), new PropertyMetadata(100.0)); public double JoggingFactor { get { return (double)GetValue(JoggingFactorProperty); } set { SetValue(JoggingFactorProperty, value); } } public static readonly DependencyProperty JoggingFactorProperty = DependencyProperty.Register("JoggingFactor", typeof(double), typeof(TouchNumericTextBox), new PropertyMetadata(1.0)); public bool AutoCalculateJogStep { get { return (bool)GetValue(AutoCalculateJogStepProperty); } set { SetValue(AutoCalculateJogStepProperty, value); } } public static readonly DependencyProperty AutoCalculateJogStepProperty = DependencyProperty.Register("AutoCalculateJogStep", typeof(bool), typeof(TouchNumericTextBox), new PropertyMetadata(true)); public override void OnApplyTemplate() { base.OnApplyTemplate(); _text_box = GetTemplateChild("PART_TextBox") as TextBox; _text_block = GetTemplateChild("PART_TextDisplay") as TextBlock; _text_box.PreviewTextInput += _text_box_PreviewTextInput; _text_box.PreviewKeyDown += _text_box_PreviewKeyDown; _text_box.LostFocus += _text_box_LostFocus; _text_box.GotFocus += _text_box_GotFocus; _text_box.TextChanged += _text_box_TextChanged; Value = Value; OnValueChanged(); } private async void _text_box_GotFocus(object sender, RoutedEventArgs e) { await Task.Delay(50); if (FocusSelectionMode == FocusSelectionMode.SelectAll) { _text_box.SelectAll(); } else if (FocusSelectionMode == FocusSelectionMode.ScrollToEnd) { _text_box.CaretIndex = _text_box.Text.Length; } } private object CoerceValue(DependencyObject d, object e) { double value = (double)e; if (_text_box != null) //Min and max not being set yet... { if (!HasDecimalPoint) { value = Math.Round(value, 0); } if (value < Minimum) { value = Minimum; } else if (value > Maximum) { value = Maximum; } } return value; } private void _text_box_LostFocus(object sender, RoutedEventArgs e) { double d = 0.0; if (double.TryParse(_text_box.Text, out d)) { Value = d; _text_box.Text = Value.ToString(); } _text_block.Text = Value.ToString(StringFormat); BindingExpression b = GetBindingExpression(ValueProperty); if (b != null) { b.UpdateSource(); } DoubleValueChangedEventArgs args = new DoubleValueChangedEventArgs(ValueChangedEvent, this, Value); RaiseEvent(args); } private void _text_box_PreviewKeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Space) { e.Handled = true; } } private void OnValueChanged() { if (_text_box != null && !_prevent_text_change) { if (StringFormat != null) { _text_box.Text = Value.ToString(StringFormat); } else { _text_box.Text = Value.ToString(); } _text_block.Text = _text_box.Text; } if (Value != _lastValue) { BindingExpression b = GetBindingExpression(ValueProperty); if (b != null) { b.UpdateSource(); } _lastValue = Value; DoubleValueChangedEventArgs args = new DoubleValueChangedEventArgs(ValueChangedEvent, this, Value); RaiseEvent(args); } } private void _text_box_PreviewTextInput(object sender, TextCompositionEventArgs e) { if (e.Text == "." && _text_box.Text.Contains('.')) { e.Handled = true; return; } if (e.Text == "-" && !_text_box.Text.Contains("-")) { e.Handled = false; return; } else if (e.Text == "-") { e.Handled = true; return; } if (HasDecimalPoint) { e.Handled = !regex_double.IsMatch(e.Text); } else { e.Handled = !regex_integer.IsMatch(e.Text); } } private void _text_box_TextChanged(object sender, TextChangedEventArgs e) { double d = 0.0; if (double.TryParse(_text_box.Text, out d)) { _prevent_text_change = true; Value = d; _prevent_text_change = false; } } static TouchNumericTextBox() { DefaultStyleKeyProperty.OverrideMetadata(typeof(TouchNumericTextBox), new FrameworkPropertyMetadata(typeof(TouchNumericTextBox))); } } }