Utilities/PersistentSettings.cs
author moel.mich
Sun, 08 Aug 2010 13:57:26 +0000
changeset 165 813d8bc3192f
child 166 fa9dfbfc4145
permissions -rw-r--r--
Refactored the hardware monitoring code into a library (Issue 101).
moel@165
     1
/*
moel@165
     2
  
moel@165
     3
  Version: MPL 1.1/GPL 2.0/LGPL 2.1
moel@165
     4
moel@165
     5
  The contents of this file are subject to the Mozilla Public License Version
moel@165
     6
  1.1 (the "License"); you may not use this file except in compliance with
moel@165
     7
  the License. You may obtain a copy of the License at
moel@165
     8
 
moel@165
     9
  http://www.mozilla.org/MPL/
moel@165
    10
moel@165
    11
  Software distributed under the License is distributed on an "AS IS" basis,
moel@165
    12
  WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
moel@165
    13
  for the specific language governing rights and limitations under the License.
moel@165
    14
moel@165
    15
  The Original Code is the Open Hardware Monitor code.
moel@165
    16
moel@165
    17
  The Initial Developer of the Original Code is 
moel@165
    18
  Michael Möller <m.moeller@gmx.ch>.
moel@165
    19
  Portions created by the Initial Developer are Copyright (C) 2009-2010
moel@165
    20
  the Initial Developer. All Rights Reserved.
moel@165
    21
moel@165
    22
  Contributor(s):
moel@165
    23
moel@165
    24
  Alternatively, the contents of this file may be used under the terms of
moel@165
    25
  either the GNU General Public License Version 2 or later (the "GPL"), or
moel@165
    26
  the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
moel@165
    27
  in which case the provisions of the GPL or the LGPL are applicable instead
moel@165
    28
  of those above. If you wish to allow use of your version of this file only
moel@165
    29
  under the terms of either the GPL or the LGPL, and not to allow others to
moel@165
    30
  use your version of this file under the terms of the MPL, indicate your
moel@165
    31
  decision by deleting the provisions above and replace them with the notice
moel@165
    32
  and other provisions required by the GPL or the LGPL. If you do not delete
moel@165
    33
  the provisions above, a recipient may use your version of this file under
moel@165
    34
  the terms of any one of the MPL, the GPL or the LGPL.
moel@165
    35
 
moel@165
    36
*/
moel@165
    37
moel@165
    38
using System;
moel@165
    39
using System.Collections.Generic;
moel@165
    40
using System.Drawing;
moel@165
    41
using System.Text;
moel@165
    42
using System.Xml;
moel@165
    43
using OpenHardwareMonitor.Hardware;
moel@165
    44
moel@165
    45
namespace OpenHardwareMonitor {
moel@165
    46
  public class PersistentSettings : ISettings {
moel@165
    47
moel@165
    48
    private IDictionary<string, string> settings = 
moel@165
    49
      new Dictionary<string, string>();
moel@165
    50
moel@165
    51
    public void Load(string fileName) {
moel@165
    52
      XmlDocument doc = new XmlDocument();
moel@165
    53
      try {
moel@165
    54
        doc.Load(fileName);
moel@165
    55
      } catch {
moel@165
    56
        return;
moel@165
    57
      }
moel@165
    58
      XmlNodeList list = doc.GetElementsByTagName("appSettings");
moel@165
    59
      foreach (XmlNode node in list) {
moel@165
    60
        XmlNode parent = node.ParentNode;
moel@165
    61
        if (parent != null && parent.Name == "configuration" && 
moel@165
    62
          parent.ParentNode is XmlDocument) {
moel@165
    63
          foreach (XmlNode child in node.ChildNodes) {
moel@165
    64
            if (child.Name == "add") {
moel@165
    65
              XmlAttributeCollection attributes = child.Attributes;
moel@165
    66
              XmlAttribute keyAttribute = attributes["key"];
moel@165
    67
              XmlAttribute valueAttribute = attributes["value"];
moel@165
    68
              if (keyAttribute != null && valueAttribute != null && 
moel@165
    69
                keyAttribute.Value != null) {
moel@165
    70
                settings.Add(keyAttribute.Value, valueAttribute.Value);
moel@165
    71
              }
moel@165
    72
            }
moel@165
    73
          }
moel@165
    74
        }
moel@165
    75
      }      
moel@165
    76
    }
moel@165
    77
moel@165
    78
    public void Save(string fileName) {
moel@165
    79
      XmlDocument doc = new XmlDocument();
moel@165
    80
      doc.AppendChild(doc.CreateXmlDeclaration("1.0", "utf-8", null));
moel@165
    81
      XmlElement configuration = doc.CreateElement("configuration");
moel@165
    82
      doc.AppendChild(configuration);
moel@165
    83
      XmlElement appSettings = doc.CreateElement("appSettings");
moel@165
    84
      configuration.AppendChild(appSettings);
moel@165
    85
      foreach (KeyValuePair<string, string> keyValuePair in settings) {
moel@165
    86
        XmlElement add = doc.CreateElement("add");
moel@165
    87
        add.SetAttribute("key", keyValuePair.Key);
moel@165
    88
        add.SetAttribute("value", keyValuePair.Value);
moel@165
    89
        appSettings.AppendChild(add);
moel@165
    90
      }
moel@165
    91
      doc.Save(fileName);
moel@165
    92
    }
moel@165
    93
moel@165
    94
    public bool Contains(string name) {
moel@165
    95
      return settings.ContainsKey(name);
moel@165
    96
    }
moel@165
    97
moel@165
    98
    public void Set(string name, string value) {
moel@165
    99
      settings[name] = value;
moel@165
   100
    }
moel@165
   101
moel@165
   102
    public string Get(string name, string value) {
moel@165
   103
      string result;
moel@165
   104
      if (settings.TryGetValue(name, out result))
moel@165
   105
        return result;
moel@165
   106
      else
moel@165
   107
        return value;
moel@165
   108
    }
moel@165
   109
moel@165
   110
    public void Remove(string name) {
moel@165
   111
      settings.Remove(name);
moel@165
   112
    }
moel@165
   113
moel@165
   114
    public void Set(string name, int value) {
moel@165
   115
      settings[name] = value.ToString();
moel@165
   116
    }
moel@165
   117
moel@165
   118
    public int Get(string name, int value) {
moel@165
   119
      string str;
moel@165
   120
      if (settings.TryGetValue(name, out str)) {
moel@165
   121
        int parsedValue;
moel@165
   122
        if (int.TryParse(str, out parsedValue))
moel@165
   123
          return parsedValue;
moel@165
   124
        else
moel@165
   125
          return value;
moel@165
   126
      } else {
moel@165
   127
        return value;
moel@165
   128
      }
moel@165
   129
    }
moel@165
   130
moel@165
   131
    public void Set(string name, bool value) {
moel@165
   132
      settings[name] = value ? "true" : "false";
moel@165
   133
    }
moel@165
   134
moel@165
   135
    public bool Get(string name, bool value) {
moel@165
   136
      string str;
moel@165
   137
      if (settings.TryGetValue(name, out str)) {
moel@165
   138
        return str == "true";
moel@165
   139
      } else {
moel@165
   140
        return value;
moel@165
   141
      }
moel@165
   142
    }
moel@165
   143
moel@165
   144
    public void Set(string name, Color color) {
moel@165
   145
      settings[name] = color.ToArgb().ToString("X8");
moel@165
   146
    }
moel@165
   147
moel@165
   148
    public Color Get(string name, Color value) {
moel@165
   149
      string str;
moel@165
   150
      if (settings.TryGetValue(name, out str)) {
moel@165
   151
        int parsedValue;
moel@165
   152
        if (int.TryParse(str,
moel@165
   153
          System.Globalization.NumberStyles.HexNumber,
moel@165
   154
          System.Globalization.CultureInfo.InvariantCulture, out parsedValue))
moel@165
   155
          return Color.FromArgb(parsedValue);
moel@165
   156
        else
moel@165
   157
          return value;
moel@165
   158
      } else {
moel@165
   159
        return value;
moel@165
   160
      }
moel@165
   161
    }
moel@165
   162
  }
moel@165
   163
}