Esempio n. 1
0
        public void SetSensors(List <ISensor> sensors, IDictionary <ISensor, Color> colors)
        {
            _model.Series.Clear();
            var types = new HashSet <SensorType>();


            DataPoint CreateDataPoint(SensorType type, SensorValue value)
            {
                float displayedValue;

                if (type == SensorType.Temperature && _unitManager.TemperatureUnit == TemperatureUnit.Fahrenheit)
                {
                    displayedValue = UnitManager.CelsiusToFahrenheit(value.Value).Value;
                }
                else
                {
                    displayedValue = value.Value;
                }

                return(new DataPoint((_now - value.Time).TotalSeconds, displayedValue));
            }

            foreach (ISensor sensor in sensors)
            {
                var series = new LineSeries
                {
                    ItemsSource     = sensor.Values.Select(value => CreateDataPoint(sensor.SensorType, value)),
                    Color           = colors[sensor].ToOxyColor(),
                    StrokeThickness = 1,
                    YAxisKey        = _axes[sensor.SensorType].Key,
                    Title           = sensor.Hardware.Name + " " + sensor.Name
                };

                _model.Series.Add(series);

                types.Add(sensor.SensorType);
            }

            foreach (KeyValuePair <SensorType, LinearAxis> pair in _axes.Reverse())
            {
                LinearAxis axis = pair.Value;
                SensorType type = pair.Key;
                axis.IsAxisVisible = types.Contains(type);
            }

            UpdateAxesPosition();
            InvalidatePlot();
        }
        public void SetSensors(List <ISensor> sensors, IDictionary <ISensor, Color> colors)
        {
            _model.Series.Clear();
            var types = new System.Collections.Generic.HashSet <SensorType>();

            foreach (ISensor sensor in sensors)
            {
                var series = new LineSeries();
                if (sensor.SensorType == SensorType.Temperature)
                {
                    series.ItemsSource = sensor.Values.Select(value => new DataPoint
                    {
                        X = (_now - value.Time).TotalSeconds,
                        Y = _unitManager.TemperatureUnit == TemperatureUnit.Celsius ?
                            value.Value : UnitManager.CelsiusToFahrenheit(value.Value).Value
                    });
                }
                else
                {
                    series.ItemsSource = sensor.Values.Select(value => new DataPoint
                    {
                        X = (_now - value.Time).TotalSeconds,
                        Y = value.Value
                    });
                }
                series.Color           = colors[sensor].ToOxyColor();
                series.StrokeThickness = 1;
                series.YAxisKey        = _axes[sensor.SensorType].Key;
                series.Title           = sensor.Hardware.Name + " " + sensor.Name;
                _model.Series.Add(series);

                types.Add(sensor.SensorType);
            }

            foreach (KeyValuePair <SensorType, LinearAxis> pair in _axes.Reverse())
            {
                LinearAxis axis = pair.Value;
                SensorType type = pair.Key;
                axis.IsAxisVisible = types.Contains(type);
            }

            UpdateAxesPosition();
            InvalidatePlot();
        }
Esempio n. 3
0
        protected override void OnPaint(PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            int      w = Size.Width;

            g.Clear(Color.Transparent);
            DrawBackground(g);

            int x;
            int y = _topMargin;

            if (_sensors.Count == 0)
            {
                x = LeftBorder + 1;
                g.DrawString("Right-click on a sensor in the main window and select " +
                             "\"Show in Gadget\" to show the sensor here.",
                             _smallFont, Brushes.White,
                             new Rectangle(x, y - 1, w - RightBorder - x, 0));
            }

            foreach (KeyValuePair <IHardware, IList <ISensor> > pair in _sensors)
            {
                if (_hardwareNames.Value)
                {
                    if (y > _topMargin)
                    {
                        y += _hardwareLineHeight - _sensorLineHeight;
                    }
                    x = LeftBorder + 1;
                    g.DrawImage(HardwareTypeImage.Instance.GetImage(pair.Key.HardwareType), new Rectangle(x, y + 1, _iconSize, _iconSize));
                    x += _iconSize + 1;
                    g.DrawString(pair.Key.Name, _largeFont, Brushes.White, new Rectangle(x, y - 1, w - RightBorder - x, 0), _stringFormat);
                    y += _hardwareLineHeight;
                }

                foreach (ISensor sensor in pair.Value)
                {
                    int remainingWidth;


                    if ((sensor.SensorType != SensorType.Load &&
                         sensor.SensorType != SensorType.Control &&
                         sensor.SensorType != SensorType.Level) || !sensor.Value.HasValue)
                    {
                        string formatted;

                        if (sensor.Value.HasValue)
                        {
                            string format = "";
                            switch (sensor.SensorType)
                            {
                            case SensorType.Voltage:
                                format = "{0:F3} V";
                                break;

                            case SensorType.Clock:
                                format = "{0:F0} MHz";
                                break;

                            case SensorType.Frequency:
                                format = "{0:F0} Hz";
                                break;

                            case SensorType.Temperature:
                                format = "{0:F1} °C";
                                break;

                            case SensorType.Fan:
                                format = "{0:F0} RPM";
                                break;

                            case SensorType.Flow:
                                format = "{0:F0} L/h";
                                break;

                            case SensorType.Power:
                                format = "{0:F1} W";
                                break;

                            case SensorType.Data:
                                format = "{0:F1} GB";
                                break;

                            case SensorType.SmallData:
                                format = "{0:F0} MB";
                                break;

                            case SensorType.Factor:
                                format = "{0:F3}";
                                break;
                            }

                            if (sensor.SensorType == SensorType.Temperature && _unitManager.TemperatureUnit == TemperatureUnit.Fahrenheit)
                            {
                                formatted = $"{UnitManager.CelsiusToFahrenheit(sensor.Value):F1} °F";
                            }
                            else if (sensor.SensorType == SensorType.Throughput)
                            {
                                string result;
                                switch (sensor.Name)
                                {
                                case "Connection Speed":
                                {
                                    switch (sensor.Value)
                                    {
                                    case 100000000:
                                        result = "100Mbps";
                                        break;

                                    case 1000000000:
                                        result = "1Gbps";
                                        break;

                                    default:
                                    {
                                        if (sensor.Value < 1024)
                                        {
                                            result = $"{sensor.Value:F0} bps";
                                        }
                                        else if (sensor.Value < 1048576)
                                        {
                                            result = $"{sensor.Value / 1024:F1} Kbps";
                                        }
                                        else if (sensor.Value < 1073741824)
                                        {
                                            result = $"{sensor.Value / 1048576:F1} Mbps";
                                        }
                                        else
                                        {
                                            result = $"{sensor.Value / 1073741824:F1} Gbps";
                                        }
                                    }
                                    break;
                                    }
                                }
                                break;

                                default:
                                {
                                    if (sensor.Value < 1048576)
                                    {
                                        result = $"{sensor.Value / 1024:F1} KB/s";
                                    }
                                    else
                                    {
                                        result = $"{sensor.Value / 1048576:F1} MB/s";
                                    }
                                }
                                break;
                                }
                                formatted = result;
                            }
                            else
                            {
                                formatted = string.Format(format, sensor.Value);
                            }
                        }
                        else
                        {
                            formatted = "-";
                        }

                        g.DrawString(formatted, _smallFont, _darkWhite, new RectangleF(-1, y - 1, w - _rightMargin + 3, 0), _alignRightStringFormat);

                        remainingWidth = w - (int)Math.Floor(g.MeasureString(formatted, _smallFont, w, StringFormat.GenericTypographic).Width) - _rightMargin;
                    }
                    else
                    {
                        DrawProgress(g, w - _progressWidth - _rightMargin, y + 0.35f * _sensorLineHeight, _progressWidth, 0.6f * _sensorLineHeight, 0.01f * sensor.Value.Value);
                        remainingWidth = w - _progressWidth - _rightMargin;
                    }

                    remainingWidth -= _leftMargin + 2;
                    if (remainingWidth > 0)
                    {
                        g.DrawString(sensor.Name, _smallFont, _darkWhite, new RectangleF(_leftMargin - 1, y - 1, remainingWidth, 0), _trimStringFormat);
                    }
                    y += _sensorLineHeight;
                }
            }
        }
Esempio n. 4
0
        public void Update()
        {
            Icon icon = _notifyIcon.Icon;

            switch (Sensor.SensorType)
            {
            case SensorType.Load:
            case SensorType.Control:
            case SensorType.Level:
                _notifyIcon.Icon = CreatePercentageIcon();
                break;

            default:
                _notifyIcon.Icon = CreateTransparentIcon();
                break;
            }

            icon?.Dispose();

            string format = "";

            switch (Sensor.SensorType)
            {
            case SensorType.Voltage: format = "\n{0}: {1:F2} V"; break;

            case SensorType.Clock: format = "\n{0}: {1:F0} MHz"; break;

            case SensorType.Load: format = "\n{0}: {1:F1} %"; break;

            case SensorType.Temperature: format = "\n{0}: {1:F1} °C"; break;

            case SensorType.Fan: format = "\n{0}: {1:F0} RPM"; break;

            case SensorType.Flow: format = "\n{0}: {1:F0} L/h"; break;

            case SensorType.Control: format = "\n{0}: {1:F1} %"; break;

            case SensorType.Level: format = "\n{0}: {1:F1} %"; break;

            case SensorType.Power: format = "\n{0}: {1:F0} W"; break;

            case SensorType.Data: format = "\n{0}: {1:F0} GB"; break;

            case SensorType.Factor: format = "\n{0}: {1:F3} GB"; break;
            }
            string formattedValue = string.Format(format, Sensor.Name, Sensor.Value);

            if (Sensor.SensorType == SensorType.Temperature && _unitManager.TemperatureUnit == TemperatureUnit.Fahrenheit)
            {
                format         = "\n{0}: {1:F1} °F";
                formattedValue = string.Format(format, Sensor.Name, UnitManager.CelsiusToFahrenheit(Sensor.Value));
            }

            string hardwareName = Sensor.Hardware.Name;

            hardwareName = hardwareName.Substring(0, Math.Min(63 - formattedValue.Length, hardwareName.Length));
            string text = hardwareName + formattedValue;

            if (text.Length > 63)
            {
                text = null;
            }

            _notifyIcon.Text    = text;
            _notifyIcon.Visible = true;
        }
Esempio n. 5
0
        private string GetString()
        {
            if (!Sensor.Value.HasValue)
            {
                return("-");
            }

            switch (Sensor.SensorType)
            {
            case SensorType.Voltage:
                return($"{Sensor.Value:F1}");

            case SensorType.Clock:
                return($"{1e-3f * Sensor.Value:F1}");

            case SensorType.Load:
                return($"{Sensor.Value:F0}");

            case SensorType.Temperature:
                return(_unitManager.TemperatureUnit == TemperatureUnit.Fahrenheit ? $"{UnitManager.CelsiusToFahrenheit(Sensor.Value):F0}" : $"{Sensor.Value:F0}");

            case SensorType.Fan:
                return($"{1e-3f * Sensor.Value:F1}");

            case SensorType.Flow:
                return($"{1e-3f * Sensor.Value:F1}");

            case SensorType.Control:
                return($"{Sensor.Value:F0}");

            case SensorType.Level:
                return($"{Sensor.Value:F0}");

            case SensorType.Power:
                return($"{Sensor.Value:F0}");

            case SensorType.Data:
                return($"{Sensor.Value:F0}");

            case SensorType.Factor:
                return($"{Sensor.Value:F1}");
            }
            return("-");
        }
Esempio n. 6
0
        private string GetString()
        {
            if (!Sensor.Value.HasValue)
            {
                return("-");
            }

            switch (Sensor.SensorType)
            {
            case SensorType.Temperature:
                return(_unitManager.TemperatureUnit == TemperatureUnit.Fahrenheit ? $"{UnitManager.CelsiusToFahrenheit(Sensor.Value):F0}" : $"{Sensor.Value:F0}");

            case SensorType.TimeSpan:
                return($"{TimeSpan.FromSeconds(Sensor.Value.Value):g}");

            case SensorType.Clock:
            case SensorType.Fan:
            case SensorType.Flow:
                return($"{1e-3f * Sensor.Value:F1}");

            case SensorType.Voltage:
            case SensorType.Current:
            case SensorType.SmallData:
            case SensorType.Factor:
            case SensorType.Throughput:
                return($"{Sensor.Value:F1}");

            case SensorType.Control:
            case SensorType.Frequency:
            case SensorType.Level:
            case SensorType.Power:
            case SensorType.Data:
            case SensorType.Load:
            case SensorType.Energy:
                return($"{Sensor.Value:F0}");

            default:
                return("-");
            }
        }