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
+171 -156
View File
@@ -1,170 +1,185 @@
/*
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 System.Text;
using System.Windows.Forms;
using OpenHardwareMonitor.Hardware;
using OpenHardwareMonitor.Utilities;
namespace OpenHardwareMonitor.GUI {
public class SystemTray : IDisposable {
private IComputer computer;
private PersistentSettings settings;
private UnitManager unitManager;
private List<SensorNotifyIcon> list = new List<SensorNotifyIcon>();
private bool mainIconEnabled = false;
private NotifyIconAdv mainIcon;
public SystemTray(IComputer computer, PersistentSettings settings,
UnitManager unitManager)
namespace OpenHardwareMonitor.GUI
{
public class SystemTray : IDisposable
{
this.computer = computer;
this.settings = settings;
this.unitManager = unitManager;
computer.HardwareAdded += new HardwareEventHandler(HardwareAdded);
computer.HardwareRemoved += new HardwareEventHandler(HardwareRemoved);
private IComputer _computer;
private readonly PersistentSettings _settings;
private readonly UnitManager _unitManager;
private readonly List<SensorNotifyIcon> _sensorList = new List<SensorNotifyIcon>();
private bool _mainIconEnabled;
private readonly NotifyIconAdv _mainIcon;
this.mainIcon = new NotifyIconAdv();
public SystemTray(IComputer computer, PersistentSettings settings, UnitManager unitManager)
{
_computer = computer;
_settings = settings;
_unitManager = unitManager;
computer.HardwareAdded += HardwareAdded;
computer.HardwareRemoved += HardwareRemoved;
ContextMenu contextMenu = new ContextMenu();
MenuItem hideShowItem = new MenuItem("Hide/Show");
hideShowItem.Click += delegate(object obj, EventArgs args) {
SendHideShowCommand();
};
contextMenu.MenuItems.Add(hideShowItem);
contextMenu.MenuItems.Add(new MenuItem("-"));
MenuItem exitItem = new MenuItem("Exit");
exitItem.Click += delegate(object obj, EventArgs args) {
SendExitCommand();
};
contextMenu.MenuItems.Add(exitItem);
this.mainIcon.ContextMenu = contextMenu;
this.mainIcon.DoubleClick += delegate(object obj, EventArgs args) {
SendHideShowCommand();
};
this.mainIcon.Icon = EmbeddedResources.GetIcon("smallicon.ico");
this.mainIcon.Text = "Open Hardware Monitor";
}
_mainIcon = new NotifyIconAdv();
private void HardwareRemoved(IHardware hardware) {
hardware.SensorAdded -= new SensorEventHandler(SensorAdded);
hardware.SensorRemoved -= new SensorEventHandler(SensorRemoved);
foreach (ISensor sensor in hardware.Sensors)
SensorRemoved(sensor);
foreach (IHardware subHardware in hardware.SubHardware)
HardwareRemoved(subHardware);
}
private void HardwareAdded(IHardware hardware) {
foreach (ISensor sensor in hardware.Sensors)
SensorAdded(sensor);
hardware.SensorAdded += new SensorEventHandler(SensorAdded);
hardware.SensorRemoved += new SensorEventHandler(SensorRemoved);
foreach (IHardware subHardware in hardware.SubHardware)
HardwareAdded(subHardware);
}
private void SensorAdded(ISensor sensor) {
if (settings.GetValue(new Identifier(sensor.Identifier,
"tray").ToString(), false))
Add(sensor, false);
}
private void SensorRemoved(ISensor sensor) {
if (Contains(sensor))
Remove(sensor, false);
}
public void Dispose() {
foreach (SensorNotifyIcon icon in list)
icon.Dispose();
mainIcon.Dispose();
}
public void Redraw() {
foreach (SensorNotifyIcon icon in list)
icon.Update();
}
public bool Contains(ISensor sensor) {
foreach (SensorNotifyIcon icon in list)
if (icon.Sensor == sensor)
return true;
return false;
}
public void Add(ISensor sensor, bool balloonTip) {
if (Contains(sensor)) {
return;
} else {
list.Add(new SensorNotifyIcon(this, sensor, balloonTip, settings, unitManager));
UpdateMainIconVisibilty();
settings.SetValue(new Identifier(sensor.Identifier, "tray").ToString(), true);
}
}
public void Remove(ISensor sensor) {
Remove(sensor, true);
}
private void Remove(ISensor sensor, bool deleteConfig) {
if (deleteConfig) {
settings.Remove(
new Identifier(sensor.Identifier, "tray").ToString());
settings.Remove(
new Identifier(sensor.Identifier, "traycolor").ToString());
}
SensorNotifyIcon instance = null;
foreach (SensorNotifyIcon icon in list)
if (icon.Sensor == sensor)
instance = icon;
if (instance != null) {
list.Remove(instance);
UpdateMainIconVisibilty();
instance.Dispose();
}
}
public event EventHandler HideShowCommand;
public void SendHideShowCommand() {
if (HideShowCommand != null)
HideShowCommand(this, null);
}
public event EventHandler ExitCommand;
public void SendExitCommand() {
if (ExitCommand != null)
ExitCommand(this, null);
}
private void UpdateMainIconVisibilty() {
if (mainIconEnabled) {
mainIcon.Visible = list.Count == 0;
} else {
mainIcon.Visible = false;
}
}
public bool IsMainIconEnabled {
get { return mainIconEnabled; }
set {
if (mainIconEnabled != value) {
mainIconEnabled = value;
UpdateMainIconVisibilty();
ContextMenu contextMenu = new ContextMenu();
MenuItem hideShowItem = new MenuItem("Hide/Show");
hideShowItem.Click += delegate
{
SendHideShowCommand();
};
contextMenu.MenuItems.Add(hideShowItem);
contextMenu.MenuItems.Add(new MenuItem("-"));
MenuItem exitItem = new MenuItem("Exit");
exitItem.Click += delegate
{
SendExitCommand();
};
contextMenu.MenuItems.Add(exitItem);
_mainIcon.ContextMenu = contextMenu;
_mainIcon.DoubleClick += delegate
{
SendHideShowCommand();
};
_mainIcon.Icon = EmbeddedResources.GetIcon("smallicon.ico");
_mainIcon.Text = "Open Hardware Monitor";
}
private void HardwareRemoved(IHardware hardware)
{
hardware.SensorAdded -= SensorAdded;
hardware.SensorRemoved -= SensorRemoved;
foreach (ISensor sensor in hardware.Sensors)
SensorRemoved(sensor);
foreach (IHardware subHardware in hardware.SubHardware)
HardwareRemoved(subHardware);
}
private void HardwareAdded(IHardware hardware)
{
foreach (ISensor sensor in hardware.Sensors)
SensorAdded(sensor);
hardware.SensorAdded += SensorAdded;
hardware.SensorRemoved += SensorRemoved;
foreach (IHardware subHardware in hardware.SubHardware)
HardwareAdded(subHardware);
}
private void SensorAdded(ISensor sensor)
{
if (_settings.GetValue(new Identifier(sensor.Identifier, "tray").ToString(), false))
Add(sensor, false);
}
private void SensorRemoved(ISensor sensor)
{
if (Contains(sensor))
Remove(sensor, false);
}
public void Dispose()
{
foreach (SensorNotifyIcon icon in _sensorList)
icon.Dispose();
_mainIcon.Dispose();
}
public void Redraw()
{
foreach (SensorNotifyIcon icon in _sensorList)
icon.Update();
}
public bool Contains(ISensor sensor)
{
foreach (SensorNotifyIcon icon in _sensorList)
if (icon.Sensor == sensor)
return true;
return false;
}
public void Add(ISensor sensor, bool balloonTip)
{
if (Contains(sensor))
return;
_sensorList.Add(new SensorNotifyIcon(this, sensor, _settings, _unitManager));
UpdateMainIconVisibility();
_settings.SetValue(new Identifier(sensor.Identifier, "tray").ToString(), true);
}
public void Remove(ISensor sensor)
{
Remove(sensor, true);
}
private void Remove(ISensor sensor, bool deleteConfig)
{
if (deleteConfig)
{
_settings.Remove(new Identifier(sensor.Identifier, "tray").ToString());
_settings.Remove(new Identifier(sensor.Identifier, "traycolor").ToString());
}
SensorNotifyIcon instance = null;
foreach (SensorNotifyIcon icon in _sensorList)
{
if (icon.Sensor == sensor)
instance = icon;
}
if (instance != null)
{
_sensorList.Remove(instance);
UpdateMainIconVisibility();
instance.Dispose();
}
}
public event EventHandler HideShowCommand;
public void SendHideShowCommand()
{
HideShowCommand?.Invoke(this, null);
}
public event EventHandler ExitCommand;
public void SendExitCommand()
{
ExitCommand?.Invoke(this, null);
}
private void UpdateMainIconVisibility()
{
if (_mainIconEnabled)
_mainIcon.Visible = _sensorList.Count == 0;
else
_mainIcon.Visible = false;
}
public bool IsMainIconEnabled
{
get { return _mainIconEnabled; }
set
{
if (_mainIconEnabled != value)
{
_mainIconEnabled = value;
UpdateMainIconVisibility();
}
}
}
}
}
}
}