moel@63: /* moel@63: moel@63: Version: MPL 1.1/GPL 2.0/LGPL 2.1 moel@63: moel@63: The contents of this file are subject to the Mozilla Public License Version moel@63: 1.1 (the "License"); you may not use this file except in compliance with moel@63: the License. You may obtain a copy of the License at moel@63: moel@63: http://www.mozilla.org/MPL/ moel@63: moel@63: Software distributed under the License is distributed on an "AS IS" basis, moel@63: WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License moel@63: for the specific language governing rights and limitations under the License. moel@63: moel@63: The Original Code is the Open Hardware Monitor code. moel@63: moel@63: The Initial Developer of the Original Code is moel@63: Michael Möller . moel@63: Portions created by the Initial Developer are Copyright (C) 2009-2010 moel@63: the Initial Developer. All Rights Reserved. moel@63: moel@63: Contributor(s): moel@63: moel@63: Alternatively, the contents of this file may be used under the terms of moel@63: either the GNU General Public License Version 2 or later (the "GPL"), or moel@63: the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), moel@63: in which case the provisions of the GPL or the LGPL are applicable instead moel@63: of those above. If you wish to allow use of your version of this file only moel@63: under the terms of either the GPL or the LGPL, and not to allow others to moel@63: use your version of this file under the terms of the MPL, indicate your moel@63: decision by deleting the provisions above and replace them with the notice moel@63: and other provisions required by the GPL or the LGPL. If you do not delete moel@63: the provisions above, a recipient may use your version of this file under moel@63: the terms of any one of the MPL, the GPL or the LGPL. moel@63: moel@63: */ moel@63: moel@63: using System; moel@63: using System.Collections.Generic; moel@63: using System.Drawing; moel@63: using System.IO; moel@63: moel@63: namespace OpenHardwareMonitor.Utilities { moel@63: moel@63: public sealed class Config { moel@63: private static readonly Config instance = new Config(); moel@63: moel@63: private string fileName; moel@63: moel@63: private System.Configuration.Configuration config; moel@63: moel@63: private Config() { moel@63: this.fileName = Path.ChangeExtension( moel@63: System.Windows.Forms.Application.ExecutablePath, ".config"); moel@63: System.Configuration.ExeConfigurationFileMap fileMap = moel@63: new System.Configuration.ExeConfigurationFileMap(); moel@63: fileMap.ExeConfigFilename = fileName; moel@63: config = System.Configuration.ConfigurationManager. moel@63: OpenMappedExeConfiguration(fileMap, moel@63: System.Configuration.ConfigurationUserLevel.None); moel@63: } moel@63: moel@63: ~Config() { moel@63: string tempName = Path.ChangeExtension(fileName, ".tmp"); moel@63: moel@63: if (File.Exists(tempName)) moel@63: File.Delete(tempName); moel@63: try { moel@63: config.SaveAs(tempName); moel@63: if (File.Exists(fileName) && File.Exists(tempName)) moel@63: File.Delete(fileName); moel@63: File.Move(tempName, fileName); moel@63: } catch (System.Configuration.ConfigurationErrorsException) { } moel@63: } moel@63: moel@63: public static Config Settings { moel@63: get { moel@63: return instance; moel@63: } moel@63: } moel@63: moel@63: public string this[string name] { moel@63: get { moel@63: System.Configuration.KeyValueConfigurationElement element = moel@63: config.AppSettings.Settings[name]; moel@63: if (element != null) moel@63: return element.Value; moel@63: else moel@63: return null; moel@63: } moel@63: set { moel@63: config.AppSettings.Settings.Remove(name); moel@63: config.AppSettings.Settings.Add(name, value); moel@63: } moel@63: } moel@63: moel@63: public static bool Contains(string name) { moel@63: System.Configuration.KeyValueConfigurationElement element = moel@63: instance.config.AppSettings.Settings[name]; moel@63: return element != null; moel@63: } moel@63: moel@63: public static void Remove(string name) { moel@63: instance.config.AppSettings.Settings.Remove(name); moel@63: } moel@63: moel@63: public static void Set(string name, bool value) { moel@63: instance[name] = value ? "true" : "false"; moel@63: } moel@63: moel@63: public static bool Get(string name, bool value) { moel@63: System.Configuration.KeyValueConfigurationElement element = moel@63: instance.config.AppSettings.Settings[name]; moel@63: if (element == null) moel@63: return value; moel@63: else moel@63: return element.Value == "true"; moel@63: } moel@63: moel@63: public static void Set(string name, int value) { moel@63: instance[name] = value.ToString(); moel@63: } moel@63: moel@63: public static int Get(string name, int value) { moel@63: System.Configuration.KeyValueConfigurationElement element = moel@63: instance.config.AppSettings.Settings[name]; moel@63: if (element == null) moel@63: return value; moel@63: else { moel@63: int parsedValue; moel@63: if (int.TryParse(element.Value, out parsedValue)) moel@63: return parsedValue; moel@63: else moel@63: return value; moel@63: } moel@63: } moel@63: moel@63: public static void Set(string name, Color color) { moel@63: instance[name] = color.ToArgb().ToString("X8"); moel@63: } moel@63: moel@63: public static Color Get(string name, Color value) { moel@63: System.Configuration.KeyValueConfigurationElement element = moel@63: instance.config.AppSettings.Settings[name]; moel@63: if (element == null) moel@63: return value; moel@63: else { moel@63: int parsedValue; moel@63: if (int.TryParse(element.Value, moel@63: System.Globalization.NumberStyles.HexNumber, moel@63: System.Globalization.CultureInfo.InvariantCulture, out parsedValue)) moel@63: return Color.FromArgb(parsedValue); moel@63: else moel@63: return value; moel@63: } moel@63: } moel@63: moel@63: public static void Set(string name, float value) { moel@63: instance[name] = value.ToString( moel@63: System.Globalization.CultureInfo.InvariantCulture.NumberFormat); moel@63: } moel@63: moel@63: public static float Get(string name, float value) { moel@63: System.Configuration.KeyValueConfigurationElement element = moel@63: instance.config.AppSettings.Settings[name]; moel@63: if (element == null) moel@63: return value; moel@63: else { moel@63: float parsedValue; moel@63: if (float.TryParse(element.Value, moel@63: System.Globalization.NumberStyles.Float, moel@63: System.Globalization.CultureInfo.InvariantCulture, out parsedValue)) moel@63: return parsedValue; moel@63: else moel@63: return value; moel@63: } moel@63: } moel@63: } moel@63: }