Hardware/Hardware.cs
author moel.mich
Thu, 11 Nov 2010 21:22:24 +0000
changeset 241 52007c404f32
parent 182 4801e9eaf979
child 247 6dc755f1970e
permissions -rw-r--r--
Fixed a problem, where the MainForm location and size was lost when the application is started minimized and exited without ever showing the form. This caused MainForm_Load to be never called (location and size was not loaded), but the default size and location were still saved. The new implementation only saves the location and size when one of the two is changed.
moel@31
     1
/*
moel@31
     2
  
moel@31
     3
  Version: MPL 1.1/GPL 2.0/LGPL 2.1
moel@31
     4
moel@31
     5
  The contents of this file are subject to the Mozilla Public License Version
moel@31
     6
  1.1 (the "License"); you may not use this file except in compliance with
moel@31
     7
  the License. You may obtain a copy of the License at
moel@31
     8
 
moel@31
     9
  http://www.mozilla.org/MPL/
moel@31
    10
moel@31
    11
  Software distributed under the License is distributed on an "AS IS" basis,
moel@31
    12
  WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
moel@31
    13
  for the specific language governing rights and limitations under the License.
moel@31
    14
moel@31
    15
  The Original Code is the Open Hardware Monitor code.
moel@31
    16
moel@31
    17
  The Initial Developer of the Original Code is 
moel@31
    18
  Michael Möller <m.moeller@gmx.ch>.
moel@31
    19
  Portions created by the Initial Developer are Copyright (C) 2009-2010
moel@31
    20
  the Initial Developer. All Rights Reserved.
moel@31
    21
moel@31
    22
  Contributor(s):
moel@31
    23
moel@31
    24
  Alternatively, the contents of this file may be used under the terms of
moel@31
    25
  either the GNU General Public License Version 2 or later (the "GPL"), or
moel@31
    26
  the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
moel@31
    27
  in which case the provisions of the GPL or the LGPL are applicable instead
moel@31
    28
  of those above. If you wish to allow use of your version of this file only
moel@31
    29
  under the terms of either the GPL or the LGPL, and not to allow others to
moel@31
    30
  use your version of this file under the terms of the MPL, indicate your
moel@31
    31
  decision by deleting the provisions above and replace them with the notice
moel@31
    32
  and other provisions required by the GPL or the LGPL. If you do not delete
moel@31
    33
  the provisions above, a recipient may use your version of this file under
moel@31
    34
  the terms of any one of the MPL, the GPL or the LGPL.
moel@31
    35
 
moel@31
    36
*/
moel@31
    37
moel@31
    38
using System;
moel@165
    39
using OpenHardwareMonitor.Collections;
moel@31
    40
moel@31
    41
namespace OpenHardwareMonitor.Hardware {
moel@165
    42
  internal abstract class Hardware : IHardware {
moel@31
    43
moel@195
    44
    private readonly ListSet<ISensor> active = new ListSet<ISensor>();
moel@31
    45
moel@64
    46
    public IHardware[] SubHardware {
moel@64
    47
      get { return new IHardware[0]; }
moel@64
    48
    }
moel@64
    49
moel@176
    50
    public virtual IHardware Parent {
moel@176
    51
      get { return null; }
moel@176
    52
    }
moel@176
    53
moel@31
    54
    public ISensor[] Sensors {
moel@31
    55
      get { return active.ToArray(); }
moel@31
    56
    }
moel@31
    57
moel@31
    58
    protected void ActivateSensor(Sensor sensor) {
moel@110
    59
      if (active.Add(sensor)) 
moel@31
    60
        if (SensorAdded != null)
moel@31
    61
          SensorAdded(sensor);
moel@31
    62
    }
moel@31
    63
moel@31
    64
    protected void DeactivateSensor(Sensor sensor) {
moel@110
    65
      if (active.Remove(sensor))
moel@31
    66
        if (SensorRemoved != null)
moel@110
    67
          SensorRemoved(sensor);     
moel@31
    68
    }
moel@31
    69
moel@64
    70
    #pragma warning disable 67
moel@31
    71
    public event SensorEventHandler SensorAdded;
moel@31
    72
    public event SensorEventHandler SensorRemoved;
moel@64
    73
    #pragma warning restore 67
moel@110
    74
  
moel@110
    75
    public abstract string Name { get; }
moel@110
    76
    public abstract Identifier Identifier { get; }
moel@165
    77
    public abstract HardwareType HardwareType { get; }
moel@110
    78
moel@110
    79
    public virtual string GetReport() {
moel@110
    80
      return null;
moel@110
    81
    }
moel@110
    82
moel@110
    83
    public abstract void Update();
moel@110
    84
moel@110
    85
    public void Accept(IVisitor visitor) {
moel@167
    86
      if (visitor == null)
moel@167
    87
        throw new ArgumentNullException("visitor");
moel@167
    88
      visitor.VisitHardware(this);
moel@110
    89
    }
moel@110
    90
moel@110
    91
    public void Traverse(IVisitor visitor) {
moel@110
    92
      foreach (ISensor sensor in active)
moel@110
    93
        sensor.Accept(visitor);
moel@110
    94
    }
moel@31
    95
  }
moel@31
    96
}