]> O.S.I.I.S - jp/crow.git/commitdiff
Configuration class
authorjp <jp_bruyere@hotmail.com>
Fri, 18 Mar 2016 11:30:14 +0000 (12:30 +0100)
committerjp <jp_bruyere@hotmail.com>
Fri, 18 Mar 2016 11:30:14 +0000 (12:30 +0100)
Crow.csproj
src/Configuration.cs [new file with mode: 0644]

index f0d0aa632f0d507a0c569c2b4ab87d12a2855be6..7dbe2fa7b896822e93326ddb1073381f7c22c6df 100644 (file)
@@ -22,6 +22,7 @@
     <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
     <ReleaseVersion>0.4</ReleaseVersion>
+    <Description>Crow project description</Description>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
     <DebugSymbols>true</DebugSymbols>
     <Compile Include="src\rsvg\RsvgSharp.SizeFuncNative.cs" />
     <Compile Include="src\rsvg\SizeFunc.cs" />
     <Compile Include="src\MouseCursorChangedEventArgs.cs" />
+    <Compile Include="src\GraphicObjects\IBindable.cs" />
+    <Compile Include="src\Input\KeyPressEventArgs.cs" />
+    <Compile Include="src\Configuration.cs" />
   </ItemGroup>
   <ItemGroup>
     <Reference Include="System" />
diff --git a/src/Configuration.cs b/src/Configuration.cs
new file mode 100644 (file)
index 0000000..c3e2020
--- /dev/null
@@ -0,0 +1,108 @@
+//
+//  Configuration.cs
+//
+//  Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+//  Copyright (c) 2016 jp
+//
+//  This program is free software: you can redistribute it and/or modify
+//  it under the terms of the GNU General Public License as published by
+//  the Free Software Foundation, either version 3 of the License, or
+//  (at your option) any later version.
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU General Public License
+//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+using System;
+using System.Reflection;
+using System.IO;
+using System.Collections.Generic;
+
+namespace Crow
+{
+       public static class Configuration
+       {
+               static string configPath, configFileName = "app.config";
+               static Dictionary<string, string> items;
+
+               static Configuration ()
+               {
+                       items = new Dictionary<string, string> ();
+                       string configRoot = 
+                               Path.Combine(
+                                       Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),
+                                       ".config");
+
+                       Assembly a = Assembly.GetEntryAssembly ();
+                       string appName = a.GetName().Name;
+
+                       OperatingSystem os = Environment.OSVersion;
+                       switch (os.Platform) {
+                       case PlatformID.Win32S:
+                       case PlatformID.Win32Windows:
+                       case PlatformID.Win32NT:
+                       case PlatformID.WinCE:
+                               break;
+                       case PlatformID.Unix:
+                               configPath = Path.Combine (configRoot, appName);
+                               break;
+                       case PlatformID.Xbox:
+                               break;
+                       case PlatformID.MacOSX:
+                               break;
+                       }
+                       if (!Directory.Exists(configPath))
+                               Directory.CreateDirectory (configPath);
+                       load ();
+               }
+               public static T Get<T>(string key)
+               {
+                       if (!items.ContainsKey (key))
+                               return default(T);
+                       Type type = typeof(T);
+                       MethodInfo miParse = type.GetMethod ("Parse", BindingFlags.Static);
+                       if (miParse == null)                            
+                               return (T)Convert.ChangeType (items [key], typeof(T));
+
+                       return (T)Convert.ChangeType (miParse.Invoke (null, new object[]{ items [key] }), type);
+               }
+               public static void Set<T>(string key, T value)
+               {
+                       items [key] = value.ToString();
+                       save ();
+               }
+               static void save(){
+                       using (Stream s = new FileStream(Path.Combine(configPath, configFileName),FileMode.Create)){
+                               using (StreamWriter sw = new StreamWriter (s)) {
+                                       foreach (string key in items.Keys) {                                            
+                                               sw.WriteLine(key + "=" + items[key]);
+                                       }
+                               }
+                       }
+               }
+               static void load(){                     
+                       string path = Path.Combine(configPath, configFileName);
+                       if (!File.Exists (path))
+                               return;
+                       using (Stream s = new FileStream(path, FileMode.Open)){
+                               using (StreamReader sr = new StreamReader (s)) {
+                                       while (!sr.EndOfStream) {                                               
+                                               string l = sr.ReadLine();
+                                               if (string.IsNullOrEmpty (l.Trim ()))
+                                                       continue;
+                                               string[] tmp = l.Trim ().Split ('=');
+                                               if (tmp.Length != 2)
+                                                       continue;
+                                               items[tmp [0].Trim ()] = tmp [1].Trim ();
+                                       }
+                               }
+                       }
+               }
+       }
+}
+