Files
ReLibreHardwareMonitor/GUI/HardwareNode.cs
T
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

116 lines
3.7 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.Collections.Generic;
using System.Drawing;
using OpenHardwareMonitor.Hardware;
namespace OpenHardwareMonitor.GUI {
public class HardwareNode : Node {
private PersistentSettings settings;
private UnitManager unitManager;
private IHardware hardware;
private List<TypeNode> typeNodes = new List<TypeNode>();
public HardwareNode(IHardware hardware, PersistentSettings settings,
UnitManager unitManager) : base()
{
this.settings = settings;
this.unitManager = unitManager;
this.hardware = hardware;
this.Image = HardwareTypeImage.Instance.GetImage(hardware.HardwareType);
foreach (SensorType sensorType in Enum.GetValues(typeof(SensorType)))
typeNodes.Add(new TypeNode(sensorType));
foreach (ISensor sensor in hardware.Sensors)
SensorAdded(sensor);
hardware.SensorAdded +=new SensorEventHandler(SensorAdded);
hardware.SensorRemoved += new SensorEventHandler(SensorRemoved);
}
public override string Text {
get { return hardware.Name; }
set { hardware.Name = value; }
}
public IHardware Hardware {
get { return hardware; }
}
private void UpdateNode(TypeNode node) {
if (node.Nodes.Count > 0) {
if (!Nodes.Contains(node)) {
int i = 0;
while (i < Nodes.Count &&
((TypeNode)Nodes[i]).SensorType < node.SensorType)
i++;
Nodes.Insert(i, node);
}
} else {
if (Nodes.Contains(node))
Nodes.Remove(node);
}
}
private void SensorRemoved(ISensor sensor) {
foreach (TypeNode typeNode in typeNodes)
if (typeNode.SensorType == sensor.SensorType) {
SensorNode sensorNode = null;
foreach (Node node in typeNode.Nodes) {
SensorNode n = node as SensorNode;
if (n != null && n.Sensor == sensor)
sensorNode = n;
}
if (sensorNode != null) {
sensorNode.PlotSelectionChanged -= SensorPlotSelectionChanged;
typeNode.Nodes.Remove(sensorNode);
UpdateNode(typeNode);
}
}
if (PlotSelectionChanged != null)
PlotSelectionChanged(this, null);
}
private void InsertSorted(Node node, ISensor sensor) {
int i = 0;
while (i < node.Nodes.Count &&
((SensorNode)node.Nodes[i]).Sensor.Index < sensor.Index)
i++;
SensorNode sensorNode = new SensorNode(sensor, settings, unitManager);
if (settings.Contains(sensor.Identifier + "/PenColor"))
sensorNode.penColor = settings.GetValue(sensor.Identifier + "/PenColor", Color.Black);
sensorNode.PlotSelectionChanged += SensorPlotSelectionChanged;
node.Nodes.Insert(i, sensorNode);
}
private void SensorPlotSelectionChanged(object sender, EventArgs e) {
if (PlotSelectionChanged != null)
PlotSelectionChanged(this, null);
}
private void SensorAdded(ISensor sensor) {
foreach (TypeNode typeNode in typeNodes)
if (typeNode.SensorType == sensor.SensorType) {
InsertSorted(typeNode, sensor);
UpdateNode(typeNode);
}
if (PlotSelectionChanged != null)
PlotSelectionChanged(this, null);
}
public event EventHandler PlotSelectionChanged;
}
}