Hardware/Hardware.cs
author StephaneLenclud
Sun, 03 Feb 2013 18:01:50 +0100
branchMiniDisplay
changeset 433 090259cfd699
parent 298 96263190189a
permissions -rw-r--r--
Adding SoundGraphDisplay and SensorFrontView classes.
They were respectively based on SystemTray and SensorNotifyIcon.
SoundGraphDisplay is now able to load iMONDisplay.dll providing it lives on your PATH.
Adding option to sensor context menu for adding it into FrontView.
     1 /*
     2  
     3   This Source Code Form is subject to the terms of the Mozilla Public
     4   License, v. 2.0. If a copy of the MPL was not distributed with this
     5   file, You can obtain one at http://mozilla.org/MPL/2.0/.
     6  
     7   Copyright (C) 2009-2011 Michael Möller <mmoeller@openhardwaremonitor.org>
     8 	
     9 */
    10 
    11 using System;
    12 using OpenHardwareMonitor.Collections;
    13 
    14 namespace OpenHardwareMonitor.Hardware {
    15   internal abstract class Hardware : IHardware {
    16 
    17     private readonly Identifier identifier;
    18     protected readonly string name;
    19     private string customName;
    20     protected readonly ISettings settings;
    21     protected readonly ListSet<ISensor> active = new ListSet<ISensor>();
    22 
    23     public Hardware(string name, Identifier identifier, ISettings settings) {
    24       this.settings = settings;
    25       this.identifier = identifier;
    26       this.name = name;
    27       this.customName = settings.GetValue(
    28         new Identifier(Identifier, "name").ToString(), name);
    29     }
    30 
    31     public IHardware[] SubHardware {
    32       get { return new IHardware[0]; }
    33     }
    34 
    35     public virtual IHardware Parent {
    36       get { return null; }
    37     }
    38 
    39     public virtual ISensor[] Sensors {
    40       get { return active.ToArray(); }
    41     }
    42 
    43     protected virtual void ActivateSensor(ISensor sensor) {
    44       if (active.Add(sensor)) 
    45         if (SensorAdded != null)
    46           SensorAdded(sensor);
    47     }
    48 
    49     protected virtual void DeactivateSensor(ISensor sensor) {
    50       if (active.Remove(sensor))
    51         if (SensorRemoved != null)
    52           SensorRemoved(sensor);     
    53     }
    54 
    55     public string Name {
    56       get {
    57         return customName;
    58       }
    59       set {
    60         if (!string.IsNullOrEmpty(value))
    61           customName = value;
    62         else
    63           customName = name;
    64         settings.SetValue(new Identifier(Identifier, "name").ToString(), 
    65           customName);
    66       }
    67     }
    68 
    69     public Identifier Identifier {
    70       get {
    71         return identifier;
    72       }
    73     }
    74 
    75     #pragma warning disable 67
    76     public event SensorEventHandler SensorAdded;
    77     public event SensorEventHandler SensorRemoved;
    78     #pragma warning restore 67
    79   
    80     
    81     public abstract HardwareType HardwareType { get; }
    82 
    83     public virtual string GetReport() {
    84       return null;
    85     }
    86 
    87     public abstract void Update();
    88 
    89     public event HardwareEventHandler Closing;
    90 
    91     public virtual void Close() {
    92       if (Closing != null)
    93         Closing(this);
    94     }
    95 
    96     public void Accept(IVisitor visitor) {
    97       if (visitor == null)
    98         throw new ArgumentNullException("visitor");
    99       visitor.VisitHardware(this);
   100     }
   101 
   102     public virtual void Traverse(IVisitor visitor) {
   103       foreach (ISensor sensor in active)
   104         sensor.Accept(visitor);
   105     }
   106   }
   107 }