# HG changeset patch
# User paulwerelds
# Date 1287253460 0
# Node ID 04dbd92d111630f4cf75a9c3f4f21fe8c37bc962
# Parent  be9534663a55d037e3faa40fb9e56873b0de6ef6
More refactoring.

diff -r be9534663a55 -r 04dbd92d1116 GUI/MainForm.cs
--- a/GUI/MainForm.cs	Sat Oct 16 14:15:41 2010 +0000
+++ b/GUI/MainForm.cs	Sat Oct 16 18:24:20 2010 +0000
@@ -44,7 +44,7 @@
 using Aga.Controls.Tree;
 using Aga.Controls.Tree.NodeControls;
 using OpenHardwareMonitor.Hardware;
-using OpenHardwareMonitor.WMIProvider;
+using OpenHardwareMonitor.Wmi;
 
 namespace OpenHardwareMonitor.GUI {
   public partial class MainForm : Form {
diff -r be9534663a55 -r 04dbd92d1116 OpenHardwareMonitor.csproj
--- a/OpenHardwareMonitor.csproj	Sat Oct 16 14:15:41 2010 +0000
+++ b/OpenHardwareMonitor.csproj	Sat Oct 16 18:24:20 2010 +0000
@@ -128,10 +128,10 @@
     <Compile Include="GUI\SensorNode.cs" />
     <Compile Include="Utilities\EmbeddedResources.cs" />
     <Compile Include="Utilities\IconFactory.cs" />
-    <Compile Include="WMIProvider\Hardware.cs" />
-    <Compile Include="WMIProvider\IWmiObject.cs" />
-    <Compile Include="WMIProvider\Sensor.cs" />
-    <Compile Include="WMIProvider\WMIProvider.cs">
+    <Compile Include="Wmi\Hardware.cs" />
+    <Compile Include="Wmi\IWmiObject.cs" />
+    <Compile Include="Wmi\Sensor.cs" />
+    <Compile Include="Wmi\WmiProvider.cs">
       <SubType>Component</SubType>
     </Compile>
   </ItemGroup>
diff -r be9534663a55 -r 04dbd92d1116 WMIProvider/WMIProvider.cs
--- a/WMIProvider/WMIProvider.cs	Sat Oct 16 14:15:41 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,141 +0,0 @@
-/*
-  
-  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 
-  Paul Werelds <paul@werelds.net>.
-  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;
-using System.Management.Instrumentation;
-using OpenHardwareMonitor.Hardware;
-
-[assembly: Instrumented("root/OpenHardwareMonitor")]
-
-[System.ComponentModel.RunInstaller(true)]
-public class InstanceInstaller : DefaultManagementProjectInstaller { }
-
-namespace OpenHardwareMonitor.WMIProvider {
-  /// <summary>
-  /// The WMI Provider.
-  /// This class is not exposed to WMI itself.
-  /// </summary>
-  public class WmiProvider : IDisposable {
-    private List<IWmiObject> _activeInstances;
-
-    public WmiProvider(IComputer computer) {
-      _activeInstances = new List<IWmiObject>();
-
-      foreach (IHardware hardware in computer.Hardware)
-        ComputerHardwareAdded(hardware);
-
-      computer.HardwareAdded += ComputerHardwareAdded;
-      computer.HardwareRemoved += ComputerHardwareRemoved;
-    }
-
-    public void Update() {
-      foreach (IWmiObject instance in _activeInstances)
-        instance.Update();
-    }
-
-    #region Eventhandlers
-    
-    private void ComputerHardwareAdded(IHardware hardware) {
-      if (!Exists(hardware.Identifier.ToString())) {
-        foreach (ISensor sensor in hardware.Sensors)
-          HardwareSensorAdded(sensor);
-
-        hardware.SensorAdded += HardwareSensorAdded;
-        hardware.SensorRemoved += HardwareSensorRemoved;
-
-        Hardware hw = new Hardware(hardware);
-        _activeInstances.Add(hw);
-
-        Instrumentation.Publish(hw);
-      }
-
-      foreach (IHardware subHardware in hardware.SubHardware)
-        ComputerHardwareAdded(subHardware);
-    }
-
-    private void HardwareSensorAdded(ISensor data) {
-      Sensor sensor = new Sensor(data);
-      _activeInstances.Add(sensor);
-
-      Instrumentation.Publish(sensor);
-    }
-
-    private void ComputerHardwareRemoved(IHardware hardware) {
-      hardware.SensorAdded -= HardwareSensorAdded;
-      hardware.SensorRemoved -= HardwareSensorRemoved;
-      
-      foreach (ISensor sensor in hardware.Sensors) 
-        HardwareSensorRemoved(sensor);
-      
-      foreach (IHardware subHardware in hardware.SubHardware)
-        ComputerHardwareRemoved(subHardware);
-
-      RevokeInstance(hardware.Identifier.ToString());
-    }
-
-    private void HardwareSensorRemoved(ISensor sensor) {
-      RevokeInstance(sensor.Identifier.ToString());
-    }
-
-    #endregion
-
-    #region Helpers
-    
-    private bool Exists(string identifier) {
-      return _activeInstances.Exists(h => h.Identifier == identifier);
-    }
-
-    private void RevokeInstance(string identifier) {
-      int instanceIndex = _activeInstances.FindIndex(
-        item => item.Identifier == identifier.ToString()
-      );
-
-      Instrumentation.Revoke(_activeInstances[instanceIndex]);
-
-      _activeInstances.RemoveAt(instanceIndex);
-    }
-
-    #endregion
-
-    public void Dispose() {
-      foreach (IWmiObject instance in _activeInstances)
-        Instrumentation.Revoke(instance);
-      _activeInstances = null;
-    }
-  }
-}
diff -r be9534663a55 -r 04dbd92d1116 Wmi/Hardware.cs
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Wmi/Hardware.cs	Sat Oct 16 18:24:20 2010 +0000
@@ -0,0 +1,60 @@
+/*
+  
+  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 
+  Paul Werelds <paul@werelds.net>.
+  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.Management.Instrumentation;
+using OpenHardwareMonitor.Hardware;
+
+namespace OpenHardwareMonitor.Wmi {
+  [InstrumentationClass(InstrumentationType.Instance)]
+  public class Hardware : IWmiObject {
+    #region WMI Exposed
+    
+    public string HardwareType { get; private set; }
+    public string Identifier { get; private set; }
+    public string Name { get; private set; }
+
+    #endregion
+
+    public Hardware(IHardware hardware) {
+      Name = hardware.Name;
+      Identifier = hardware.Identifier.ToString();
+      HardwareType = hardware.HardwareType.ToString();
+    }
+
+    public void Update() { }
+  }
+}
diff -r be9534663a55 -r 04dbd92d1116 Wmi/IWmiObject.cs
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Wmi/IWmiObject.cs	Sat Oct 16 18:24:20 2010 +0000
@@ -0,0 +1,47 @@
+/*
+  
+  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 
+  Paul Werelds <paul@werelds.net>.
+  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.
+ 
+*/
+
+namespace OpenHardwareMonitor.Wmi {
+  interface IWmiObject {
+    // Both of these get exposed to WMI
+    string Name { get; }
+    string Identifier { get; }
+
+    // Not exposed.
+    void Update();
+  }
+}
diff -r be9534663a55 -r 04dbd92d1116 Wmi/Sensor.cs
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Wmi/Sensor.cs	Sat Oct 16 18:24:20 2010 +0000
@@ -0,0 +1,81 @@
+/*
+  
+  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 
+  Paul Werelds <paul@werelds.net>.
+  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.Management.Instrumentation;
+using OpenHardwareMonitor.Hardware;
+using OpenHardwareMonitor.Wmi;
+
+namespace OpenHardwareMonitor.Wmi {
+  [InstrumentationClass(InstrumentationType.Instance)]
+  public class Sensor : IWmiObject {
+    private ISensor sensor;
+
+    #region WMI Exposed
+
+    public string SensorType { get; private set; }
+    public string Identifier { get; private set; }
+    public string Parent { get; private set; }
+    public string Name { get; private set; }
+    public float Value { get; private set; }
+    public float Min { get; private set; }
+    public float Max { get; private set; }
+    public int Index { get; private set; }
+
+    #endregion
+
+    public Sensor(ISensor sensor) {
+      Name = sensor.Name;
+      Index = sensor.Index;
+
+      SensorType = sensor.SensorType.ToString();
+      Identifier = sensor.Identifier.ToString();
+      Parent = sensor.Hardware.Identifier.ToString();
+
+      this.sensor = sensor;
+    }
+    
+    public void Update() {
+      Value = (sensor.Value != null) ? (float)sensor.Value : 0;
+
+      if (sensor.Min != null)
+        Min = (float)sensor.Min;
+
+      if (sensor.Max != null)
+        Max = (float)sensor.Max;
+    }
+  }
+}
diff -r be9534663a55 -r 04dbd92d1116 Wmi/WmiProvider.cs
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Wmi/WmiProvider.cs	Sat Oct 16 18:24:20 2010 +0000
@@ -0,0 +1,142 @@
+/*
+  
+  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 
+  Paul Werelds <paul@werelds.net>.
+  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;
+using System.Management.Instrumentation;
+using OpenHardwareMonitor.Hardware;
+using OpenHardwareMonitor.Wmi;
+
+[assembly: Instrumented("root/OpenHardwareMonitor")]
+
+[System.ComponentModel.RunInstaller(true)]
+public class InstanceInstaller : DefaultManagementProjectInstaller { }
+
+namespace OpenHardwareMonitor.Wmi {
+  /// <summary>
+  /// The WMI Provider.
+  /// This class is not exposed to WMI itself.
+  /// </summary>
+  public class WmiProvider : IDisposable {
+    private List<IWmiObject> activeInstances;
+
+    public WmiProvider(IComputer computer) {
+      activeInstances = new List<IWmiObject>();
+
+      foreach (IHardware hardware in computer.Hardware)
+        ComputerHardwareAdded(hardware);
+
+      computer.HardwareAdded += ComputerHardwareAdded;
+      computer.HardwareRemoved += ComputerHardwareRemoved;
+    }
+
+    public void Update() {
+      foreach (IWmiObject instance in activeInstances)
+        instance.Update();
+    }
+
+    #region Eventhandlers
+    
+    private void ComputerHardwareAdded(IHardware hardware) {
+      if (!Exists(hardware.Identifier.ToString())) {
+        foreach (ISensor sensor in hardware.Sensors)
+          HardwareSensorAdded(sensor);
+
+        hardware.SensorAdded += HardwareSensorAdded;
+        hardware.SensorRemoved += HardwareSensorRemoved;
+
+        Hardware hw = new Hardware(hardware);
+        activeInstances.Add(hw);
+
+        Instrumentation.Publish(hw);
+      }
+
+      foreach (IHardware subHardware in hardware.SubHardware)
+        ComputerHardwareAdded(subHardware);
+    }
+
+    private void HardwareSensorAdded(ISensor data) {
+      Sensor sensor = new Sensor(data);
+      activeInstances.Add(sensor);
+
+      Instrumentation.Publish(sensor);
+    }
+
+    private void ComputerHardwareRemoved(IHardware hardware) {
+      hardware.SensorAdded -= HardwareSensorAdded;
+      hardware.SensorRemoved -= HardwareSensorRemoved;
+      
+      foreach (ISensor sensor in hardware.Sensors) 
+        HardwareSensorRemoved(sensor);
+      
+      foreach (IHardware subHardware in hardware.SubHardware)
+        ComputerHardwareRemoved(subHardware);
+
+      RevokeInstance(hardware.Identifier.ToString());
+    }
+
+    private void HardwareSensorRemoved(ISensor sensor) {
+      RevokeInstance(sensor.Identifier.ToString());
+    }
+
+    #endregion
+
+    #region Helpers
+    
+    private bool Exists(string identifier) {
+      return activeInstances.Exists(h => h.Identifier == identifier);
+    }
+
+    private void RevokeInstance(string identifier) {
+      int instanceIndex = activeInstances.FindIndex(
+        item => item.Identifier == identifier.ToString()
+      );
+
+      Instrumentation.Revoke(activeInstances[instanceIndex]);
+
+      activeInstances.RemoveAt(instanceIndex);
+    }
+
+    #endregion
+
+    public void Dispose() {
+      foreach (IWmiObject instance in activeInstances)
+        Instrumentation.Revoke(instance);
+      activeInstances = null;
+    }
+  }
+}