# HG changeset patch # User moel.mich # Date 1269694629 0 # Node ID 3fdadd4a830f35a9fb5c34102517f8fe54d66763 # Parent 91edecb084a13b90918fa89e0da41d530023bda2 Added a dialog for the report filename. Added additional checks to T-Balancer code for cases where the port gets closed. Moved the timer to the Computer class. diff -r 91edecb084a1 -r 3fdadd4a830f GUI/MainForm.Designer.cs --- a/GUI/MainForm.Designer.cs Fri Mar 26 20:58:10 2010 +0000 +++ b/GUI/MainForm.Designer.cs Sat Mar 27 12:57:09 2010 +0000 @@ -102,7 +102,6 @@ this.hddMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.timer = new System.Windows.Forms.Timer(this.components); this.splitContainer = new System.Windows.Forms.SplitContainer(); this.plotPanel = new OpenHardwareMonitor.GUI.PlotPanel(); this.notifyContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); @@ -110,6 +109,7 @@ this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator(); this.exitToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.sensorContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.saveFileDialog = new System.Windows.Forms.SaveFileDialog(); this.columnsContextMenuStrip.SuspendLayout(); this.menuStrip.SuspendLayout(); this.splitContainer.Panel1.SuspendLayout(); @@ -314,14 +314,14 @@ // saveReportToolStripMenuItem // this.saveReportToolStripMenuItem.Name = "saveReportToolStripMenuItem"; - this.saveReportToolStripMenuItem.Size = new System.Drawing.Size(136, 22); - this.saveReportToolStripMenuItem.Text = "Save Report"; + this.saveReportToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.saveReportToolStripMenuItem.Text = "Save Report..."; this.saveReportToolStripMenuItem.Click += new System.EventHandler(this.saveReportToolStripMenuItem_Click); // // exitToolStripMenuItem // this.exitToolStripMenuItem.Name = "exitToolStripMenuItem"; - this.exitToolStripMenuItem.Size = new System.Drawing.Size(136, 22); + this.exitToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.exitToolStripMenuItem.Text = "Exit"; this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click); // @@ -486,11 +486,6 @@ this.aboutToolStripMenuItem.Text = "About"; this.aboutToolStripMenuItem.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click); // - // timer - // - this.timer.Interval = 1000; - this.timer.Tick += new System.EventHandler(this.timer_Tick); - // // splitContainer // this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill; @@ -528,25 +523,25 @@ this.toolStripMenuItem2, this.exitToolStripMenuItem1}); this.notifyContextMenuStrip.Name = "notifyContextMenuStrip"; - this.notifyContextMenuStrip.Size = new System.Drawing.Size(153, 76); + this.notifyContextMenuStrip.Size = new System.Drawing.Size(137, 54); // // hideShowToolStripMenuItem // this.hideShowToolStripMenuItem.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); this.hideShowToolStripMenuItem.Name = "hideShowToolStripMenuItem"; - this.hideShowToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.hideShowToolStripMenuItem.Size = new System.Drawing.Size(136, 22); this.hideShowToolStripMenuItem.Text = "Hide/Show"; this.hideShowToolStripMenuItem.Click += new System.EventHandler(this.hideShowClick); // // toolStripMenuItem2 // this.toolStripMenuItem2.Name = "toolStripMenuItem2"; - this.toolStripMenuItem2.Size = new System.Drawing.Size(149, 6); + this.toolStripMenuItem2.Size = new System.Drawing.Size(133, 6); // // exitToolStripMenuItem1 // this.exitToolStripMenuItem1.Name = "exitToolStripMenuItem1"; - this.exitToolStripMenuItem1.Size = new System.Drawing.Size(152, 22); + this.exitToolStripMenuItem1.Size = new System.Drawing.Size(136, 22); this.exitToolStripMenuItem1.Text = "Exit"; this.exitToolStripMenuItem1.Click += new System.EventHandler(this.exitToolStripMenuItem_Click); // @@ -555,6 +550,14 @@ this.sensorContextMenuStrip.Name = "sensorContextMenuStrip"; this.sensorContextMenuStrip.Size = new System.Drawing.Size(61, 4); // + // saveFileDialog + // + this.saveFileDialog.DefaultExt = "txt"; + this.saveFileDialog.FileName = "OpenHardwareMonitor.Report.txt"; + this.saveFileDialog.Filter = "Text Documents|*.txt|All Files|*.*"; + this.saveFileDialog.RestoreDirectory = true; + this.saveFileDialog.Title = "Save Report As"; + // // MainForm // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); @@ -596,7 +599,6 @@ private Aga.Controls.Tree.NodeControls.NodeTextBox nodeTextBoxValue; private Aga.Controls.Tree.NodeControls.NodeTextBox nodeTextBoxMin; private Aga.Controls.Tree.NodeControls.NodeTextBox nodeTextBoxMax; - private System.Windows.Forms.Timer timer; private System.Windows.Forms.SplitContainer splitContainer; private PlotPanel plotPanel; private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem; @@ -631,6 +633,7 @@ private System.Windows.Forms.ToolStripMenuItem startMinMenuItem; private System.Windows.Forms.ToolStripMenuItem flowsMenuItem; private System.Windows.Forms.ToolStripMenuItem startupMenuItem; + private System.Windows.Forms.SaveFileDialog saveFileDialog; } } diff -r 91edecb084a1 -r 3fdadd4a830f GUI/MainForm.cs --- a/GUI/MainForm.cs Fri Mar 26 20:58:10 2010 +0000 +++ b/GUI/MainForm.cs Sat Mar 27 12:57:09 2010 +0000 @@ -40,6 +40,7 @@ using System.ComponentModel; using System.Configuration; using System.Drawing; +using System.IO; using System.Text; using System.Windows.Forms; using Aga.Controls.Tree; @@ -112,6 +113,7 @@ computer.HardwareAdded += new HardwareEventHandler(HardwareAdded); computer.HardwareRemoved += new HardwareEventHandler(HardwareRemoved); + computer.Updated += new UpdateEventHandler(Updated); computer.Open(); plotColorPalette = new Color[14]; @@ -145,9 +147,7 @@ loadMenuItem.Checked = Config.Get(loadMenuItem.Name, true); tempMenuItem.Checked = Config.Get(tempMenuItem.Name, true); fansMenuItem.Checked = Config.Get(fansMenuItem.Name, true); - flowsMenuItem.Checked = Config.Get(flowsMenuItem.Name, true); - - timer.Enabled = true; + flowsMenuItem.Checked = Config.Get(flowsMenuItem.Name, true); if (startMinMenuItem.Checked) { if (!minTrayMenuItem.Checked) { @@ -239,19 +239,7 @@ Close(); } - private void timer_Tick(object sender, EventArgs e) { - - #if !DEBUG - try { - #endif - computer.Update(); - #if !DEBUG - } catch (Exception exception) { - CrashReport.Save(exception); - Close(); - } - #endif - + private void Updated() { treeView.Invalidate(); plotPanel.Invalidate(); sensorSystemTray.Redraw(); @@ -359,7 +347,12 @@ } private void saveReportToolStripMenuItem_Click(object sender, EventArgs e) { - computer.SaveReport(new Version(Application.ProductVersion)); + string report = computer.GetReport(); + if (saveFileDialog.ShowDialog() == DialogResult.OK) { + using (TextWriter w = new StreamWriter(saveFileDialog.FileName)) { + w.Write(report); + } + } } private void hddsensorsToolStripMenuItem_CheckedChanged(object sender, diff -r 91edecb084a1 -r 3fdadd4a830f GUI/MainForm.resx --- a/GUI/MainForm.resx Fri Mar 26 20:58:10 2010 +0000 +++ b/GUI/MainForm.resx Sat Mar 27 12:57:09 2010 +0000 @@ -118,19 +118,19 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 204, 15 + 125, 17 17, 17 - - 124, 15 - - 399, 15 + 322, 17 - 571, 15 + 504, 17 + + + 690, 17 55 diff -r 91edecb084a1 -r 3fdadd4a830f GUI/SensorSystemTray.cs --- a/GUI/SensorSystemTray.cs Fri Mar 26 20:58:10 2010 +0000 +++ b/GUI/SensorSystemTray.cs Sat Mar 27 12:57:09 2010 +0000 @@ -45,10 +45,10 @@ namespace OpenHardwareMonitor.GUI { public class SensorSystemTray : IDisposable { - private Computer computer; + private IComputer computer; private List list = new List(); - public SensorSystemTray(Computer computer) { + public SensorSystemTray(IComputer computer) { this.computer = computer; computer.HardwareAdded += new HardwareEventHandler(HardwareAdded); computer.HardwareRemoved += new HardwareEventHandler(HardwareRemoved); diff -r 91edecb084a1 -r 3fdadd4a830f Hardware/Computer.cs --- a/Hardware/Computer.cs Fri Mar 26 20:58:10 2010 +0000 +++ b/Hardware/Computer.cs Sat Mar 27 12:57:09 2010 +0000 @@ -40,12 +40,13 @@ using System.IO; using System.Globalization; using System.Text; +using System.Threading; namespace OpenHardwareMonitor.Hardware { - public delegate void HardwareEventHandler(IHardware hardware); + public class Computer : IComputer { - public class Computer { + private Timer timer; private List groups = new List(); @@ -61,7 +62,7 @@ groups.Add(group); if (HardwareAdded != null) - foreach (IHardware hardware in group.Hardware) + foreach (IHardware hardware in group.Hardware) HardwareAdded(hardware); } @@ -72,7 +73,7 @@ groups.Remove(group); if (HardwareRemoved != null) - foreach (IHardware hardware in group.Hardware) + foreach (IHardware hardware in group.Hardware) HardwareRemoved(hardware); } @@ -86,10 +87,24 @@ Add(new Nvidia.NvidiaGroup()); Add(new TBalancer.TBalancerGroup()); - if (hddEnabled) + if (hddEnabled) Add(new HDD.HDDGroup()); open = true; + + timer = new Timer( + delegate(Object stateInfo) { + #if !DEBUG + try { + #endif + Update(); + #if !DEBUG + } catch (Exception exception) { + Utilities.CrashReport.Save(exception); + throw; + } + #endif + }, null, 1000, 1000); } private void SubHardwareUpdate(IHardware hardware) { @@ -99,12 +114,14 @@ } } - public void Update() { + private void Update() { foreach (IGroup group in groups) foreach (IHardware hardware in group.Hardware) { hardware.Update(); SubHardwareUpdate(hardware); } + if (Updated != null) + Updated(); } public bool HDDEnabled { @@ -118,17 +135,19 @@ if (group is HDD.HDDGroup) list.Add(group); foreach (IGroup group in list) - Remove(group); + Remove(group); } hddEnabled = value; } } - public IEnumerable Hardware { - get { + public IHardware[] Hardware { + get { + List list = new List(); foreach (IGroup group in groups) foreach (IHardware hardware in group.Hardware) - yield return hardware; + list.Add(hardware); + return list.ToArray(); } } @@ -139,11 +158,10 @@ writer.WriteLine(); } - private void ReportHardwareTree(IHardware hardware, TextWriter w, - string space) - { + private void ReportHardwareTree(IHardware hardware, TextWriter w, + string space) { w.WriteLine("{0}|", space); - w.WriteLine("{0}+-+ {1} ({2})", + w.WriteLine("{0}+-+ {1} ({2})", space, hardware.Name, hardware.Identifier); foreach (ISensor sensor in hardware.Sensors) { w.WriteLine("{0}| +- {1} : {2} : {3} : {4}", @@ -171,15 +189,16 @@ ReportHardware(subHardware, w); } - public void SaveReport(Version version) { + public string GetReport() { - using (TextWriter w = - new StreamWriter("OpenHardwareMonitor.Report.txt")) { + using (StringWriter w = new StringWriter()) { w.WriteLine(); w.WriteLine("Open Hardware Monitor Report"); w.WriteLine(); + Version version = typeof(Computer).Assembly.GetName().Version; + NewSection(w); w.Write("Version: "); w.WriteLine(version.ToString()); w.WriteLine(); @@ -187,7 +206,7 @@ NewSection(w); foreach (IGroup group in groups) { foreach (IHardware hardware in group.Hardware) - ReportHardwareTree(hardware, w, ""); + ReportHardwareTree(hardware, w, ""); } w.WriteLine(); @@ -201,12 +220,16 @@ IHardware[] hardwareArray = group.Hardware; foreach (IHardware hardware in hardwareArray) ReportHardware(hardware, w); - + } + return w.ToString(); } } - public void Close() { + public void Close() { + timer.Dispose(); + timer = null; + if (!open) return; @@ -217,6 +240,7 @@ open = false; } + public event UpdateEventHandler Updated; public event HardwareEventHandler HardwareAdded; public event HardwareEventHandler HardwareRemoved; diff -r 91edecb084a1 -r 3fdadd4a830f Hardware/IComputer.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Hardware/IComputer.cs Sat Mar 27 12:57:09 2010 +0000 @@ -0,0 +1,58 @@ +/* + + Version: MPL 1.1/GPL 2.0/LGPL 2.1 + + The contents of this file are subject to the Mozilla Public License Version + 1.1 (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" basis, + WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + for the specific language governing rights and limitations under the License. + + The Original Code is the Open Hardware Monitor code. + + The Initial Developer of the Original Code is + Michael Möller . + Portions created by the Initial Developer are Copyright (C) 2009-2010 + the Initial Developer. All Rights Reserved. + + Contributor(s): + + Alternatively, the contents of this file may be used under the terms of + either the GNU General Public License Version 2 or later (the "GPL"), or + the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + in which case the provisions of the GPL or the LGPL are applicable instead + of those above. If you wish to allow use of your version of this file only + under the terms of either the GPL or the LGPL, and not to allow others to + use your version of this file under the terms of the MPL, indicate your + decision by deleting the provisions above and replace them with the notice + and other provisions required by the GPL or the LGPL. If you do not delete + the provisions above, a recipient may use your version of this file under + the terms of any one of the MPL, the GPL or the LGPL. + +*/ + +using System; +using System.Collections.Generic; + +namespace OpenHardwareMonitor.Hardware { + + public delegate void UpdateEventHandler(); + public delegate void HardwareEventHandler(IHardware hardware); + + public interface IComputer { + + IHardware[] Hardware { get; } + + bool HDDEnabled { get; set; } + + string GetReport(); + + event UpdateEventHandler Updated; + event HardwareEventHandler HardwareAdded; + event HardwareEventHandler HardwareRemoved; + } +} diff -r 91edecb084a1 -r 3fdadd4a830f Hardware/TBalancer/TBalancer.cs --- a/Hardware/TBalancer/TBalancer.cs Fri Mar 26 20:58:10 2010 +0000 +++ b/Hardware/TBalancer/TBalancer.cs Sat Mar 27 12:57:09 2010 +0000 @@ -326,17 +326,23 @@ } public void Update() { - while (serialPort.BytesToRead >= 285) - ReadData(); - if (serialPort.BytesToRead == 1) - serialPort.ReadByte(); + try { + while (serialPort.IsOpen && serialPort.BytesToRead >= 285) + ReadData(); + if (serialPort.BytesToRead == 1) + serialPort.ReadByte(); - serialPort.Write(new byte[] { 0x38 }, 0, 1); - alternativeRequest.BeginInvoke(null, null); + serialPort.Write(new byte[] { 0x38 }, 0, 1); + alternativeRequest.BeginInvoke(null, null); + } catch (InvalidOperationException) { + foreach (Sensor sensor in active) + sensor.Value = null; + } } public void Close() { - serialPort.Close(); + if (serialPort.IsOpen) + serialPort.Close(); } public event SensorEventHandler SensorAdded; diff -r 91edecb084a1 -r 3fdadd4a830f OpenHardwareMonitor.csproj --- a/OpenHardwareMonitor.csproj Fri Mar 26 20:58:10 2010 +0000 +++ b/OpenHardwareMonitor.csproj Sat Mar 27 12:57:09 2010 +0000 @@ -76,6 +76,7 @@ +