Refactoring: New class Computer manages all the hardware and creates events.

This commit is contained in:
Michael Möller
2010-02-07 16:37:15 +00:00
parent 15162a2a12
commit 31adbedc3c
9 changed files with 325 additions and 164 deletions
+28 -8
View File
@@ -94,6 +94,8 @@ namespace OpenHardwareMonitor.GUI {
this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();
this.plotMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.minTrayMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripMenuItem3 = new System.Windows.Forms.ToolStripSeparator();
this.hddMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@@ -409,16 +411,32 @@ namespace OpenHardwareMonitor.GUI {
// optionsToolStripMenuItem
//
this.optionsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.minTrayMenuItem,
this.toolStripMenuItem3,
this.hddMenuItem});
this.optionsToolStripMenuItem.Name = "optionsToolStripMenuItem";
this.optionsToolStripMenuItem.Size = new System.Drawing.Size(61, 20);
this.optionsToolStripMenuItem.Text = "Options";
//
// minTrayMenuItem
//
this.minTrayMenuItem.Checked = true;
this.minTrayMenuItem.CheckOnClick = true;
this.minTrayMenuItem.CheckState = System.Windows.Forms.CheckState.Checked;
this.minTrayMenuItem.Name = "minTrayMenuItem";
this.minTrayMenuItem.Size = new System.Drawing.Size(166, 22);
this.minTrayMenuItem.Text = "Minimize To Tray";
//
// toolStripMenuItem3
//
this.toolStripMenuItem3.Name = "toolStripMenuItem3";
this.toolStripMenuItem3.Size = new System.Drawing.Size(163, 6);
//
// hddMenuItem
//
this.hddMenuItem.CheckOnClick = true;
this.hddMenuItem.Name = "hddMenuItem";
this.hddMenuItem.Size = new System.Drawing.Size(141, 22);
this.hddMenuItem.Size = new System.Drawing.Size(166, 22);
this.hddMenuItem.Text = "HDD sensors";
this.hddMenuItem.CheckedChanged += new System.EventHandler(this.hddsensorsToolStripMenuItem_CheckedChanged);
//
@@ -477,7 +495,7 @@ namespace OpenHardwareMonitor.GUI {
this.notifyIcon.ContextMenuStrip = this.notifyContextMenuStrip;
this.notifyIcon.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon.Icon")));
this.notifyIcon.Text = "Open Hardware Monitor";
this.notifyIcon.Click += new System.EventHandler(this.notifyIcon_Click);
this.notifyIcon.DoubleClick += new System.EventHandler(this.restoreClick);
//
// notifyContextMenuStrip
//
@@ -486,25 +504,25 @@ namespace OpenHardwareMonitor.GUI {
this.toolStripMenuItem2,
this.exitToolStripMenuItem1});
this.notifyContextMenuStrip.Name = "notifyContextMenuStrip";
this.notifyContextMenuStrip.Size = new System.Drawing.Size(153, 76);
this.notifyContextMenuStrip.Size = new System.Drawing.Size(119, 54);
//
// restoreToolStripMenuItem
//
this.restoreToolStripMenuItem.Font = new System.Drawing.Font("Segoe UI", 9F);
this.restoreToolStripMenuItem.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold);
this.restoreToolStripMenuItem.Name = "restoreToolStripMenuItem";
this.restoreToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.restoreToolStripMenuItem.Size = new System.Drawing.Size(118, 22);
this.restoreToolStripMenuItem.Text = "Restore";
this.restoreToolStripMenuItem.Click += new System.EventHandler(this.restoreToolStripMenuItem_Click);
this.restoreToolStripMenuItem.Click += new System.EventHandler(this.restoreClick);
//
// toolStripMenuItem2
//
this.toolStripMenuItem2.Name = "toolStripMenuItem2";
this.toolStripMenuItem2.Size = new System.Drawing.Size(149, 6);
this.toolStripMenuItem2.Size = new System.Drawing.Size(115, 6);
//
// exitToolStripMenuItem1
//
this.exitToolStripMenuItem1.Name = "exitToolStripMenuItem1";
this.exitToolStripMenuItem1.Size = new System.Drawing.Size(152, 22);
this.exitToolStripMenuItem1.Size = new System.Drawing.Size(118, 22);
this.exitToolStripMenuItem1.Text = "Exit";
this.exitToolStripMenuItem1.Click += new System.EventHandler(this.exitToolStripMenuItem_Click);
//
@@ -579,6 +597,8 @@ namespace OpenHardwareMonitor.GUI {
private System.Windows.Forms.ToolStripMenuItem restoreToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem2;
private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem1;
private System.Windows.Forms.ToolStripMenuItem minTrayMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem3;
}
}
+59 -79
View File
@@ -45,19 +45,19 @@ using System.Windows.Forms;
using Aga.Controls.Tree;
using Aga.Controls.Tree.NodeControls;
using OpenHardwareMonitor.Hardware;
using OpenHardwareMonitor.Utilities;
namespace OpenHardwareMonitor.GUI {
public partial class MainForm : Form {
private Computer computer = new Computer();
private Node root;
private List<IGroup> groupList = new List<IGroup>();
private TreeModel treeModel;
private IDictionary<ISensor, Color> sensorPlotColors =
new Dictionary<ISensor, Color>();
private Color[] plotColorPalette;
public MainForm() {
public MainForm() {
InitializeComponent();
this.Font = SystemFonts.MessageBoxFont;
treeView.Font = SystemFonts.MessageBoxFont;
@@ -99,13 +99,10 @@ namespace OpenHardwareMonitor.GUI {
treeModel.Nodes.Add(root);
treeView.Model = treeModel;
AddGroup(new Hardware.SMBIOS.SMBIOSGroup());
AddGroup(new Hardware.LPC.LPCGroup());
AddGroup(new Hardware.CPU.CPUGroup());
AddGroup(new Hardware.ATI.ATIGroup());
AddGroup(new Hardware.Nvidia.NvidiaGroup());
AddGroup(new Hardware.TBalancer.TBalancerGroup());
computer.HardwareAdded += new HardwareEventHandler(HardwareAdded);
computer.HardwareRemoved += new HardwareEventHandler(HardwareRemoved);
computer.Open();
plotColorPalette = new Color[14];
plotColorPalette[0] = Color.Blue;
plotColorPalette[1] = Color.OrangeRed;
@@ -122,38 +119,36 @@ namespace OpenHardwareMonitor.GUI {
plotColorPalette[12] = Color.Olive;
plotColorPalette[13] = Color.Firebrick;
plotMenuItem.Checked = Utilities.Config.Get(plotMenuItem.Name, false);
minMenuItem.Checked = Utilities.Config.Get(minMenuItem.Name, false);
maxMenuItem.Checked = Utilities.Config.Get(maxMenuItem.Name, true);
limitMenuItem.Checked = Utilities.Config.Get(limitMenuItem.Name, false);
hddMenuItem.Checked = Utilities.Config.Get(hddMenuItem.Name, true);
plotMenuItem.Checked = Config.Get(plotMenuItem.Name, false);
minMenuItem.Checked = Config.Get(minMenuItem.Name, false);
maxMenuItem.Checked = Config.Get(maxMenuItem.Name, true);
limitMenuItem.Checked = Config.Get(limitMenuItem.Name, false);
voltMenuItem.Checked = Utilities.Config.Get(voltMenuItem.Name, true);
clocksMenuItem.Checked = Utilities.Config.Get(clocksMenuItem.Name, true);
loadMenuItem.Checked = Utilities.Config.Get(loadMenuItem.Name, true);
tempMenuItem.Checked = Utilities.Config.Get(tempMenuItem.Name, true);
fansMenuItem.Checked = Utilities.Config.Get(fansMenuItem.Name, true);
minTrayMenuItem.Checked = Config.Get(minTrayMenuItem.Name, true);
hddMenuItem.Checked = Config.Get(hddMenuItem.Name, true);
timer.Enabled = true;
voltMenuItem.Checked = Config.Get(voltMenuItem.Name, true);
clocksMenuItem.Checked = Config.Get(clocksMenuItem.Name, true);
loadMenuItem.Checked = Config.Get(loadMenuItem.Name, true);
tempMenuItem.Checked = Config.Get(tempMenuItem.Name, true);
fansMenuItem.Checked = Config.Get(fansMenuItem.Name, true);
timer.Enabled = true;
}
private void AddGroup(IGroup group) {
groupList.Add(group);
foreach (IHardware hardware in group.Hardware)
root.Nodes.Add(new HardwareNode(hardware));
private void HardwareAdded(IHardware hardware) {
root.Nodes.Add(new HardwareNode(hardware));
}
private void RemoveGroup(IGroup group) {
private void HardwareRemoved(IHardware hardware) {
List<Node> nodesToRemove = new List<Node>();
foreach (IHardware hardware in group.Hardware)
foreach (Node node in root.Nodes) {
HardwareNode hardwareNode = node as HardwareNode;
if (hardwareNode != null && hardwareNode.Hardware == hardware)
nodesToRemove.Add(node);
}
foreach (Node node in root.Nodes) {
HardwareNode hardwareNode = node as HardwareNode;
if (hardwareNode != null && hardwareNode.Hardware == hardware)
nodesToRemove.Add(node);
}
foreach (Node node in nodesToRemove)
root.Nodes.Remove(node);
groupList.Remove(group);
}
private void nodeTextBoxLimit_DrawText(object sender, DrawEventArgs e) {
@@ -213,12 +208,10 @@ namespace OpenHardwareMonitor.GUI {
#if !DEBUG
try {
#endif
foreach (IGroup group in groupList)
foreach (IHardware hardware in group.Hardware)
hardware.Update();
computer.Update();
#if !DEBUG
} catch (Exception exception) {
Utilities.CrashReport.Save(exception);
CrashReport.Save(exception);
Close();
}
#endif
@@ -228,27 +221,29 @@ namespace OpenHardwareMonitor.GUI {
}
private void MainForm_FormClosed(object sender, FormClosedEventArgs e) {
Utilities.Config.Set(plotMenuItem.Name, plotMenuItem.Checked);
Utilities.Config.Set(minMenuItem.Name, minMenuItem.Checked);
Utilities.Config.Set(maxMenuItem.Name, maxMenuItem.Checked);
Utilities.Config.Set(limitMenuItem.Name, limitMenuItem.Checked);
Utilities.Config.Set(hddMenuItem.Name, hddMenuItem.Checked);
Config.Set(plotMenuItem.Name, plotMenuItem.Checked);
Config.Set(minMenuItem.Name, minMenuItem.Checked);
Config.Set(maxMenuItem.Name, maxMenuItem.Checked);
Config.Set(limitMenuItem.Name, limitMenuItem.Checked);
Utilities.Config.Set(voltMenuItem.Name, voltMenuItem.Checked);
Utilities.Config.Set(clocksMenuItem.Name, clocksMenuItem.Checked);
Utilities.Config.Set(loadMenuItem.Name, loadMenuItem.Checked);
Utilities.Config.Set(tempMenuItem.Name, tempMenuItem.Checked);
Utilities.Config.Set(fansMenuItem.Name, fansMenuItem.Checked);
Config.Set(minTrayMenuItem.Name, minTrayMenuItem.Checked);
Config.Set(hddMenuItem.Name, hddMenuItem.Checked);
Config.Set(voltMenuItem.Name, voltMenuItem.Checked);
Config.Set(clocksMenuItem.Name, clocksMenuItem.Checked);
Config.Set(loadMenuItem.Name, loadMenuItem.Checked);
Config.Set(tempMenuItem.Name, tempMenuItem.Checked);
Config.Set(fansMenuItem.Name, fansMenuItem.Checked);
if (WindowState != FormWindowState.Minimized) {
Utilities.Config.Set("mainForm.Location.X", Location.X);
Utilities.Config.Set("mainForm.Location.Y", Location.Y);
Utilities.Config.Set("mainForm.Width", Width);
Utilities.Config.Set("mainForm.Height", Height);
Config.Set("mainForm.Location.X", Location.X);
Config.Set("mainForm.Location.Y", Location.Y);
Config.Set("mainForm.Width", Width);
Config.Set("mainForm.Height", Height);
}
foreach (IGroup group in groupList)
group.Close();
computer.Close();
}
private void aboutToolStripMenuItem_Click(object sender, EventArgs e) {
@@ -290,31 +285,21 @@ namespace OpenHardwareMonitor.GUI {
return;
NodeControlInfo info = treeView.GetNodeControlInfoAt(new Point(m.X, m.Y));
if (info.Control == null)
if (info.Control == null) {
columnsContextMenuStrip.Show(treeView, m.X, m.Y);
}
}
private void saveReportToolStripMenuItem_Click(object sender, EventArgs e) {
ReportWriter.Save(groupList, new Version(Application.ProductVersion));
computer.SaveReport(new Version(Application.ProductVersion));
}
private void hddsensorsToolStripMenuItem_CheckedChanged(object sender,
EventArgs e)
{
if (hddMenuItem.Checked) {
AddGroup(new Hardware.HDD.HDDGroup());
UpdateSensorTypeChecked(null, null);
} else {
List<IGroup> groupsToRemove = new List<IGroup>();
foreach (IGroup group in groupList)
if (group is Hardware.HDD.HDDGroup)
groupsToRemove.Add(group);
foreach (IGroup group in groupsToRemove) {
group.Close();
RemoveGroup(group);
}
UpdatePlotSelection(null, null);
}
computer.HDDEnabled = hddMenuItem.Checked;
UpdateSensorTypeChecked(null, null);
UpdatePlotSelection(null, null);
}
private void UpdateSensorTypeChecked(object sender, EventArgs e) {
@@ -334,29 +319,24 @@ namespace OpenHardwareMonitor.GUI {
} else {
Visible = true;
notifyIcon.Visible = false;
BringToFront();
}
}
protected override void WndProc(ref Message m) {
const int WM_SYSCOMMAND = 0x112;
const int SC_MINIMIZE = 0xF020;
if (m.Msg == WM_SYSCOMMAND && m.WParam.ToInt32() == SC_MINIMIZE) {
if (minTrayMenuItem.Checked &&
m.Msg == WM_SYSCOMMAND && m.WParam.ToInt32() == SC_MINIMIZE) {
ToggleSysTray();
} else {
base.WndProc(ref m);
}
}
private void notifyIcon_Click(object sender, EventArgs e) {
MouseEventArgs m = e as MouseEventArgs;
if (m == null || m.Button != MouseButtons.Left)
return;
ToggleSysTray();
private void restoreClick(object sender, EventArgs e) {
ToggleSysTray();
}
private void restoreToolStripMenuItem_Click(object sender, EventArgs e) {
ToggleSysTray();
}
}
}