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(); }
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; } } }
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; }
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("-"); }
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("-"); } }