aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/TechItems/MonitorItem.cs
blob: f475876f5d4a6876fb228c25a32711cef8bfeeb6 (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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media;
using System.Xml.Serialization;
using Tango.BL.Entities;
using Tango.SharedUI.Helpers;

namespace Tango.MachineStudio.Technician.TechItems
{
    /// <summary>
    /// Represents an analog style integer monitor item.
    /// </summary>
    /// <seealso cref="Tango.MachineStudio.Technician.TechItems.TechItem" />
    [TechItem(2, true)]
    public class MonitorItem : TechItem
    {
        private String _format;

        private TechMonitor _techMonitor;
        /// <summary>
        /// Gets or sets the db tech monitor.
        /// </summary>
        [XmlIgnore]
        public TechMonitor TechMonitor
        {
            get { return _techMonitor; }
            set { _techMonitor = value; RaisePropertyChangedAuto(); TechName = _techMonitor != null ? _techMonitor.Description : null; ItemGuid = value != null ? value.Guid : null; }
        }

        private double _value;
        /// <summary>
        /// Gets or sets the current value.
        /// </summary>
        [XmlIgnore]
        public double Value
        {
            get { return _value; }
            set
            {
                _value = Math.Round(value, DecimalPoints);
                RaisePropertyChanged(nameof(Value));
                RaisePropertyChanged(nameof(ValueString));
                LastUpdateTime = DateTime.Now;
            }
        }

        public String ValueString
        {
            get
            {
                return _value.ToString($"F{DecimalPoints}");
            }
        }

        private int _updateInterval;
        /// <summary>
        /// Gets or sets the update interval.
        /// </summary>
        public int UpdateInterval
        {
            get { return _updateInterval; }
            set { _updateInterval = value; RaisePropertyChangedAuto(); }
        }

        private int _decimalPoints;
        /// <summary>
        /// Gets or sets the decimal points.
        /// </summary>
        public int DecimalPoints
        {
            get { return _decimalPoints; }
            set
            {
                _decimalPoints = value; RaisePropertyChangedAuto();

                if (_decimalPoints > 0)
                {
                    _format = "0." + String.Join("", Enumerable.Range(0, DecimalPoints).Select(x => "#"));
                }
                else
                {
                    _format = "0";
                }
            }
        }


        /// <summary>
        /// Gets or sets the last update time.
        /// </summary>
        [XmlIgnore]
        public DateTime LastUpdateTime { get; set; }

        /// <summary>
        /// Initializes a new instance of the <see cref="MonitorItem"/> class.
        /// </summary>
        public MonitorItem() : base()
        {
            Name = "Monitor";
            Color = Colors.White;
            Description = "Simple analogue monitor";
            Image = ResourceHelper.GetImageFromResources("Images/analog.png");
            LastUpdateTime = DateTime.Now;
            UpdateInterval = 10;
            DecimalPoints = 2;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="MonitorItem"/> class.
        /// </summary>
        /// <param name="techMonitor">The db tech monitor.</param>
        public MonitorItem(TechMonitor techMonitor) : this()
        {
            TechMonitor = techMonitor;
        }

        /// <summary>
        /// Clones this instance.
        /// </summary>
        /// <returns></returns>
        public override TechItem Clone()
        {
            MonitorItem cloned = base.Clone() as MonitorItem;
            cloned.TechMonitor = TechMonitor;
            cloned.UpdateInterval = UpdateInterval;
            cloned.DecimalPoints = DecimalPoints;
            return cloned;
        }
    }
}