openhardwaremonitor/GUI/SensorNode.cs
shrddr 9479c08df9 Added customizable pen colors
New node property, penColor, is null by default; this means that color
will be picked using the existing plotColorPalette method.
New node context menu item, Pen color, lets user choose the color to be
used when plotting this particular node.
This property is also saved/loaded from settings based on sensor
identifier.
2016-07-13 23:09:05 +03:00

126 lines
3.6 KiB
C#

/*
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
Copyright (C) 2009-2012 Michael Möller <mmoeller@openhardwaremonitor.org>
*/
using System;
using System.Drawing;
using System.Collections.Generic;
using OpenHardwareMonitor.Hardware;
using OpenHardwareMonitor.Utilities;
namespace OpenHardwareMonitor.GUI {
public class SensorNode : Node {
private ISensor sensor;
private PersistentSettings settings;
private UnitManager unitManager;
private string format;
private bool plot = false;
public Color? penColor = null;
public string ValueToString(float? value) {
if (value.HasValue) {
if (sensor.SensorType == SensorType.Temperature &&
unitManager.TemperatureUnit == TemperatureUnit.Fahrenheit) {
return string.Format("{0:F1} °F", value * 1.8 + 32);
} else {
return string.Format(format, value);
}
} else
return "-";
}
public SensorNode(ISensor sensor, PersistentSettings settings,
UnitManager unitManager) : base() {
this.sensor = sensor;
this.settings = settings;
this.unitManager = unitManager;
switch (sensor.SensorType) {
case SensorType.Voltage: format = "{0:F3} V"; break;
case SensorType.Clock: format = "{0:F0} MHz"; break;
case SensorType.Load: format = "{0:F1} %"; 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.Control: format = "{0:F1} %"; break;
case SensorType.Level: format = "{0:F1} %"; break;
case SensorType.Power: format = "{0:F1} W"; break;
case SensorType.Data: format = "{0:F1} GB"; break;
case SensorType.Factor: format = "{0:F3}"; break;
}
bool hidden = settings.GetValue(new Identifier(sensor.Identifier,
"hidden").ToString(), sensor.IsDefaultHidden);
base.IsVisible = !hidden;
this.Plot = settings.GetValue(new Identifier(sensor.Identifier,
"plot").ToString(), false);
}
public override string Text {
get { return sensor.Name; }
set { sensor.Name = value; }
}
public override bool IsVisible {
get { return base.IsVisible; }
set {
base.IsVisible = value;
settings.SetValue(new Identifier(sensor.Identifier,
"hidden").ToString(), !value);
}
}
public bool Plot {
get { return plot; }
set {
plot = value;
settings.SetValue(new Identifier(sensor.Identifier, "plot").ToString(),
value);
if (PlotSelectionChanged != null)
PlotSelectionChanged(this, null);
}
}
public event EventHandler PlotSelectionChanged;
public ISensor Sensor {
get { return sensor; }
}
public string Value {
get { return ValueToString(sensor.Value); }
}
public string Min {
get { return ValueToString(sensor.Min); }
}
public string Max {
get { return ValueToString(sensor.Max); }
}
public override bool Equals(System.Object obj) {
if (obj == null)
return false;
SensorNode s = obj as SensorNode;
if (s == null)
return false;
return (sensor == s.sensor);
}
public override int GetHashCode() {
return sensor.GetHashCode();
}
}
}