This commit is contained in:
Phyxion
2019-09-13 15:34:42 +02:00
committed by GitHub
parent d92d88d905
commit 22a229eda1
55 changed files with 8818 additions and 9312 deletions
+99 -93
View File
@@ -1,113 +1,119 @@
/*
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>
*/
// Mozilla Public License 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) LibreHardwareMonitor and Contributors
// All Rights Reserved
using System;
using System.Collections.Generic;
using System.Drawing;
using OpenHardwareMonitor.Hardware;
using OpenHardwareMonitor.Utilities;
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()
namespace OpenHardwareMonitor.GUI
{
public class HardwareNode : Node
{
this.settings = settings;
this.unitManager = unitManager;
this.hardware = hardware;
this.Image = HardwareTypeImage.Instance.GetImage(hardware.HardwareType);
private readonly PersistentSettings _settings;
private readonly UnitManager _unitManager;
private readonly List<TypeNode> _typeNodes = new List<TypeNode>();
foreach (SensorType sensorType in Enum.GetValues(typeof(SensorType)))
typeNodes.Add(new TypeNode(sensorType));
public event EventHandler PlotSelectionChanged;
foreach (ISensor sensor in hardware.Sensors)
SensorAdded(sensor);
public HardwareNode(IHardware hardware, PersistentSettings settings, UnitManager unitManager)
{
_settings = settings;
_unitManager = unitManager;
Hardware = hardware;
Image = HardwareTypeImage.Instance.GetImage(hardware.HardwareType);
hardware.SensorAdded +=new SensorEventHandler(SensorAdded);
hardware.SensorRemoved += new SensorEventHandler(SensorRemoved);
}
foreach (SensorType sensorType in Enum.GetValues(typeof(SensorType)))
_typeNodes.Add(new TypeNode(sensorType));
public override string Text {
get { return hardware.Name; }
set { hardware.Name = value; }
}
foreach (ISensor sensor in hardware.Sensors)
SensorAdded(sensor);
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);
hardware.SensorAdded += SensorAdded;
hardware.SensorRemoved += SensorRemoved;
}
} 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);
}
public override string Text
{
get { return Hardware.Name; }
set { Hardware.Name = value; }
}
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);
sensorNode.PlotSelectionChanged += SensorPlotSelectionChanged;
node.Nodes.Insert(i, sensorNode);
}
public IHardware Hardware { get; }
private void SensorPlotSelectionChanged(object sender, EventArgs e) {
if (PlotSelectionChanged != null)
PlotSelectionChanged(this, null);
}
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++;
private void SensorAdded(ISensor sensor) {
foreach (TypeNode typeNode in typeNodes)
if (typeNode.SensorType == sensor.SensorType) {
InsertSorted(typeNode, sensor);
UpdateNode(typeNode);
Nodes.Insert(i, node);
}
}
else
{
if (Nodes.Contains(node))
Nodes.Remove(node);
}
}
if (PlotSelectionChanged != null)
PlotSelectionChanged(this, null);
}
public event EventHandler PlotSelectionChanged;
}
private void SensorRemoved(ISensor sensor)
{
foreach (TypeNode typeNode in _typeNodes)
{
if (typeNode.SensorType == sensor.SensorType)
{
SensorNode sensorNode = null;
foreach (Node node in typeNode.Nodes)
{
if (node is SensorNode n && n.Sensor == sensor)
sensorNode = n;
}
if (sensorNode != null)
{
sensorNode.PlotSelectionChanged -= SensorPlotSelectionChanged;
typeNode.Nodes.Remove(sensorNode);
UpdateNode(typeNode);
}
}
}
PlotSelectionChanged?.Invoke(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);
sensorNode.PlotSelectionChanged += SensorPlotSelectionChanged;
node.Nodes.Insert(i, sensorNode);
}
private void SensorPlotSelectionChanged(object sender, EventArgs e)
{
PlotSelectionChanged?.Invoke(this, null);
}
private void SensorAdded(ISensor sensor)
{
foreach (TypeNode typeNode in _typeNodes)
{
if (typeNode.SensorType == sensor.SensorType)
{
InsertSorted(typeNode, sensor);
UpdateNode(typeNode);
}
}
PlotSelectionChanged?.Invoke(this, null);
}
}
}