Add keysbinding to the settings
[valaterm:valaterm.git] / src / config-file.vala
1 /****************************
2 ** Copyright © 2011 Jacques-Pascal Deplaix
3 **
4 ** ValaTerm is free software: you can redistribute it and/or modify
5 ** it under the terms of the GNU General Public License as published by
6 ** the Free Software Foundation, either version 3 of the License, or
7 ** (at your option) any later version.
8 **
9 ** This program is distributed in the hope that it will be useful,
10 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
11 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 ** GNU General Public License for more details.
13 **
14 ** You should have received a copy of the GNU General Public License
15 ** along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 ****************************/
17
18 public class ConfigFile : GLib.Object
19 {
20     private GLib.KeyFile file = new GLib.KeyFile();
21     private bool has_errors = false;
22
23     public ConfigFile()
24     {
25         try
26         {
27             this.file.load_from_file(this.filename(), KeyFileFlags.NONE);
28         }
29         catch(GLib.Error error)
30         {
31             if(!(error is GLib.KeyFileError.PARSE))
32             {
33                 this.has_errors = true;
34                 // FIXME: Do something !
35             }
36         }
37     }
38
39     public string get_string_key(string group, string key, string default_value)
40     {
41         try
42         {
43             return this.file.get_string(group, key);
44         }
45         catch(GLib.KeyFileError error)
46         {
47 #if DEBUG
48             this.display_get_key_error(error.message);
49 #endif
50         }
51
52         this.file.set_string(group, key, default_value);
53         return default_value;
54     }
55
56     public int get_integer_key(string group, string key, int default_value)
57     {
58         try
59         {
60             return this.file.get_integer(group, key);
61         }
62         catch(GLib.KeyFileError error)
63         {
64 #if DEBUG
65             this.display_get_key_error(error.message);
66 #endif
67         }
68
69         this.file.set_integer(group, key, default_value);
70         return default_value;
71     }
72
73     public bool get_boolean_key(string group, string key, bool default_value)
74     {
75         try
76         {
77             return this.file.get_boolean(group, key);
78         }
79         catch(GLib.KeyFileError error)
80         {
81 #if DEBUG
82             this.display_get_key_error(error.message);
83 #endif
84         }
85
86         this.file.set_boolean(group, key, default_value);
87         return default_value;
88     }
89
90     public Gdk.Color get_color_key(string group, string key, Gdk.Color default_value)
91     {
92         try
93         {
94             return Colors.parse(this.file.get_string(group, key));
95         }
96         catch(GLib.Error error)
97         {
98 #if DEBUG
99             this.display_get_key_error(error.message);
100 #endif
101         }
102
103         this.file.set_string(group, key, default_value.to_string());
104         return default_value;
105     }
106
107     public uint get_uint_key(string group, string key, uint default_value)
108     {
109         try
110         {
111             return (uint)this.file.get_uint64(group, key);
112         }
113         catch(GLib.Error error)
114         {
115 #if DEBUG
116             this.display_get_key_error(error.message);
117 #endif
118         }
119
120         this.file.set_uint64(group, key, default_value);
121         return default_value;
122     }
123
124     public void write()
125     {
126         if(!this.has_errors)
127         {
128             try
129             {
130                 FileUtils.set_contents(this.filename(), this.file.to_data());
131             }
132             catch(GLib.FileError error)
133             {
134                 // FIXME: Do something !
135             }
136         }
137     }
138
139     public void set_string(string group_name, string key, string str)
140     {
141         this.file.set_string(group_name, key, str);
142     }
143
144     public void set_boolean(string group_name, string key, bool value)
145     {
146         this.file.set_boolean(group_name, key, value);
147     }
148
149     public void set_integer(string group_name, string key, int value)
150     {
151         this.file.set_integer(group_name, key, value);
152     }
153
154     public void set_uint(string group_name, string key, uint value)
155     {
156         this.file.set_uint64(group_name, key, value);
157     }
158
159     private string filename()
160     {
161         string path = GLib.Environment.get_user_config_dir() + "/valaterm/";
162         this.verify_dir(path);
163
164         string file = path + "config.ini";
165         this.verify_file(file);
166
167         return file;
168     }
169
170     private void verify_dir(string dir)
171     {
172         if(!FileUtils.test(dir, FileTest.EXISTS))
173         {
174             // Create the dir
175             DirUtils.create(dir, 0700);
176         }
177     }
178
179     private void verify_file(string file)
180     {
181         if(!FileUtils.test(file, FileTest.EXISTS))
182         {
183             // Create the file
184             FileStream.open(file, "w");
185         }
186     }
187
188 #if DEBUG
189     private void display_get_key_error(string message)
190     {
191         GLib.stderr.printf("Error: %s. Using the default value.\n", message);
192     }
193 #endif
194 }