2 Copyright (C) 2010-2011 jeanfi@gmail.com
4 This program 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 2 of the License, or
7 (at your option) any later version.
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.
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
25 #include <gconf/gconf-client.h>
29 #define KEY_SENSOR_UPDATE_INTERVAL "/apps/psensor/sensor/update_interval"
31 #define KEY_GRAPH_UPDATE_INTERVAL "/apps/psensor/graph/update_interval"
32 #define KEY_GRAPH_MONITORING_DURATION "/apps/psensor/graph/monitoring_duration"
34 #define KEY_GRAPH_BACKGROUND_COLOR "/apps/psensor/graph/background_color"
35 #define DEFAULT_GRAPH_BACKGROUND_COLOR "#e8f4e8f4a8f5"
37 #define KEY_GRAPH_BACKGROUND_ALPHA "/apps/psensor/graph/background_alpha"
38 #define DEFAULT_GRAPH_BACKGROUND_ALPHA "1.0"
40 #define KEY_GRAPH_FOREGROUND_COLOR "/apps/psensor/graph/foreground_color"
41 #define DEFAULT_GRAPH_FOREGROUND_COLOR "#000000000000"
43 #define KEY_ALPHA_CHANNEL_ENABLED "/apps/psensor/graph/alpha_channel_enabled"
44 #define DEFAULT_ALPHA_CHANNEL_ENABLED 0
46 #define KEY_INTERFACE_SENSORLIST_POSITION \
47 "/apps/psensor/interface/sensorlist_position"
49 #define KEY_INTERFACE_WINDOW_DECORATION_DISABLED \
50 "/apps/psensor/interface/window_decoration_disabled"
52 #define KEY_INTERFACE_WINDOW_KEEP_BELOW_ENABLED \
53 "/apps/psensor/interface/window_keep_below_enabled"
55 #define KEY_INTERFACE_MENU_BAR_DISABLED \
56 "/apps/psensor/interface/menu_bar_disabled"
58 #define KEY_INTERFACE_UNITY_LAUNCHER_COUNT_DISABLED \
59 "/apps/psensor/interface/unity_launcher_count_disabled"
63 static char *get_string(char *key, char *default_value)
65 char *value = gconf_client_get_string(client,
70 value = strdup(default_value);
72 gconf_client_set_string(client, key, default_value, NULL);
78 struct color *config_get_background_color()
81 char *scolor = get_string(KEY_GRAPH_BACKGROUND_COLOR,
82 DEFAULT_GRAPH_BACKGROUND_COLOR);
84 struct color *c = string_to_color(scolor);
89 return color_new(0xffff, 0xffff, 0xffff);
94 struct color *config_get_foreground_color()
96 char *scolor = get_string(KEY_GRAPH_FOREGROUND_COLOR,
97 DEFAULT_GRAPH_FOREGROUND_COLOR);
99 struct color *c = string_to_color(scolor);
104 return color_new(0x0000, 0x0000, 0x0000);
109 int config_is_alpha_channel_enabled()
111 gboolean b = gconf_client_get_bool(client,
112 KEY_ALPHA_CHANNEL_ENABLED,
118 void config_set_alpha_channel_enabled(int enabled)
121 gconf_client_set_bool(client,
122 KEY_ALPHA_CHANNEL_ENABLED, TRUE, NULL);
124 gconf_client_set_bool(client,
125 KEY_ALPHA_CHANNEL_ENABLED, FALSE, NULL);
128 int config_get_sensorlist_position()
130 return gconf_client_get_int(client,
131 KEY_INTERFACE_SENSORLIST_POSITION, NULL);
134 void config_set_sensorlist_position(int pos)
136 gconf_client_set_int(client,
137 KEY_INTERFACE_SENSORLIST_POSITION, pos, NULL);
140 double config_get_graph_background_alpha()
142 double a = gconf_client_get_float(client,
143 KEY_GRAPH_BACKGROUND_ALPHA,
147 gconf_client_set_float(client,
148 KEY_GRAPH_BACKGROUND_ALPHA, 1.0, NULL);
152 void config_set_graph_background_alpha(double alpha)
154 gconf_client_set_float(client, KEY_GRAPH_BACKGROUND_ALPHA, alpha, NULL);
157 void config_set_background_color(struct color *color)
159 char *scolor = color_to_string(color);
162 scolor = strdup(DEFAULT_GRAPH_BACKGROUND_COLOR);
164 gconf_client_set_string(client,
165 KEY_GRAPH_BACKGROUND_COLOR, scolor, NULL);
170 void config_set_foreground_color(struct color *color)
172 char *scolor = color_to_string(color);
175 scolor = strdup(DEFAULT_GRAPH_FOREGROUND_COLOR);
177 gconf_client_set_string(client,
178 KEY_GRAPH_FOREGROUND_COLOR, scolor, NULL);
183 char *config_get_sensor_key(char *sensor_name)
185 char *escaped_name = gconf_escape_key(sensor_name, -1);
186 /* /apps/psensor/sensors/[sensor_name]/color */
187 char *key = malloc(22 + 2 * strlen(escaped_name) + 6 + 1);
189 sprintf(key, "/apps/psensor/sensors/%s/color", escaped_name);
196 struct color *config_get_sensor_color(char *sensor_name,
197 struct color *default_color)
199 char *key = config_get_sensor_key(sensor_name);
201 char *scolor = gconf_client_get_string(client,
205 struct color *color = NULL;
208 color = string_to_color(scolor);
210 if (!scolor || !color) {
211 color = color_new(default_color->red,
212 default_color->green, default_color->blue);
214 scolor = color_to_string(color);
216 gconf_client_set_string(client, key, scolor, NULL);
225 void config_set_sensor_color(char *sensor_name, struct color *color)
227 char *key = config_get_sensor_key(sensor_name);
229 char *scolor = color_to_string(color);
231 gconf_client_set_string(client, key, scolor, NULL);
236 int config_get_sensor_alarm_limit(char *sensor_name, int def)
239 char *escaped_name = gconf_escape_key(sensor_name, -1);
240 /* /apps/psensor/sensors/[sensor_name]/alarmlimit */
241 char *key = malloc(22 + 2 * strlen(escaped_name) + 1 + 10 + 1);
243 sprintf(key, "/apps/psensor/sensors/%s/alarmlimit", escaped_name);
245 res = gconf_client_get_int(client, key, NULL);
249 return res ? res : def;
252 void config_set_sensor_alarm_limit(char *sensor_name, int alarm_limit)
254 char *escaped_name = gconf_escape_key(sensor_name, -1);
255 /* /apps/psensor/sensors/[sensor_name]/alarmlimit */
256 char *key = malloc(22 + 2 * strlen(escaped_name) + 1 + 10 + 1);
258 sprintf(key, "/apps/psensor/sensors/%s/alarmlimit", escaped_name);
260 gconf_client_set_int(client, key, alarm_limit, NULL);
265 int config_get_sensor_alarm_enabled(char *sid)
268 char *escaped_name = gconf_escape_key(sid, -1);
269 /* /apps/psensor/sensors/[sensor_name]/alarmenabled */
270 char *key = malloc(22 + 2 * strlen(escaped_name) + 1 + 12 + 1);
272 sprintf(key, "/apps/psensor/sensors/%s/alarmenabled", escaped_name);
274 res = gconf_client_get_bool(client, key, NULL);
281 void config_set_sensor_alarm_enabled(char *sid, int enabled)
283 char *escaped_name = gconf_escape_key(sid, -1);
284 /* /apps/psensor/sensors/[sensor_name]/alarmenabled */
285 char *key = malloc(22 + 2 * strlen(escaped_name) + 1 + 12 + 1);
287 sprintf(key, "/apps/psensor/sensors/%s/alarmenabled", escaped_name);
289 gconf_client_set_bool(client, key, enabled, NULL);
294 int config_is_sensor_enabled(char *sid)
297 char *escaped_name = gconf_escape_key(sid, -1);
298 /* /apps/psensor/sensors/[sensor_name]/enabled */
299 char *key = malloc(22 + 2 * strlen(escaped_name) + 1 + 7 + 1);
301 sprintf(key, "/apps/psensor/sensors/%s/enabled", escaped_name);
303 res = gconf_client_get_bool(client, key, NULL);
311 void config_set_sensor_enabled(char *sid, int enabled)
313 char *escaped_name = gconf_escape_key(sid, -1);
314 /* /apps/psensor/sensors/[sensor_name]/enabled */
315 char *key = malloc(22 + 2 * strlen(escaped_name) + 1 + 7 + 1);
317 sprintf(key, "/apps/psensor/sensors/%s/enabled", escaped_name);
319 gconf_client_set_bool(client, key, enabled, NULL);
324 char *config_get_sensor_name(char *sid)
327 char *escaped_name = gconf_escape_key(sid, -1);
328 /* /apps/psensor/sensors/[sensor_name]/name */
329 char *key = malloc(22 + 2 * strlen(escaped_name) + 1 + 4 + 1);
331 sprintf(key, "/apps/psensor/sensors/%s/name", escaped_name);
333 res = gconf_client_get_string(client, key, NULL);
340 void config_set_sensor_name(char *sid, const char *name)
342 char *escaped_name = gconf_escape_key(sid, -1);
343 /* /apps/psensor/sensors/[sensor_name]/name */
344 char *key = malloc(22 + 2 * strlen(escaped_name) + 1 + 4 + 1);
346 sprintf(key, "/apps/psensor/sensors/%s/name", escaped_name);
348 gconf_client_set_string(client, key, name, NULL);
353 int config_is_window_decoration_enabled()
357 b = gconf_client_get_bool(client,
358 KEY_INTERFACE_WINDOW_DECORATION_DISABLED,
364 int config_is_window_keep_below_enabled()
368 b = gconf_client_get_bool(client,
369 KEY_INTERFACE_WINDOW_KEEP_BELOW_ENABLED,
375 void config_set_window_decoration_enabled(int enabled)
378 gconf_client_set_bool
380 KEY_INTERFACE_WINDOW_DECORATION_DISABLED, FALSE, NULL);
382 gconf_client_set_bool
384 KEY_INTERFACE_WINDOW_DECORATION_DISABLED, TRUE, NULL);
387 void config_set_window_keep_below_enabled(int enabled)
390 gconf_client_set_bool(client,
391 KEY_INTERFACE_WINDOW_KEEP_BELOW_ENABLED,
394 gconf_client_set_bool(client,
395 KEY_INTERFACE_WINDOW_KEEP_BELOW_ENABLED,
401 client = gconf_client_get_default();
404 struct config *config_load()
406 struct config *cfg = malloc(sizeof(struct config));
408 cfg->graph_bgcolor = config_get_background_color();
409 cfg->graph_fgcolor = config_get_foreground_color();
410 cfg->graph_bg_alpha = config_get_graph_background_alpha();
411 cfg->alpha_channel_enabled = config_is_alpha_channel_enabled();
412 cfg->sensorlist_position = config_get_sensorlist_position();
413 cfg->window_decoration_enabled = config_is_window_decoration_enabled();
414 cfg->window_keep_below_enabled = config_is_window_keep_below_enabled();
416 cfg->sensor_update_interval
417 = gconf_client_get_int(client, KEY_SENSOR_UPDATE_INTERVAL, NULL);
418 if (cfg->sensor_update_interval < 1)
419 cfg->sensor_update_interval = 1;
421 cfg->graph_update_interval
422 = gconf_client_get_int(client, KEY_GRAPH_UPDATE_INTERVAL, NULL);
423 if (cfg->graph_update_interval < 1)
424 cfg->graph_update_interval = 1;
426 cfg->graph_monitoring_duration
427 = gconf_client_get_int(client, KEY_GRAPH_MONITORING_DURATION, NULL);
429 if (cfg->graph_monitoring_duration < 1)
430 cfg->graph_monitoring_duration = 10;
432 cfg->sensor_values_max_length
434 (cfg->graph_monitoring_duration * 60) / cfg->sensor_update_interval;
435 if (cfg->sensor_values_max_length < 3)
436 cfg->sensor_values_max_length = 3;
438 cfg->menu_bar_disabled = gconf_client_get_bool
440 KEY_INTERFACE_MENU_BAR_DISABLED,
443 cfg->unity_launcher_count_disabled = gconf_client_get_bool
445 KEY_INTERFACE_UNITY_LAUNCHER_COUNT_DISABLED,
451 void config_save(struct config *cfg)
453 config_set_background_color(cfg->graph_bgcolor);
454 config_set_foreground_color(cfg->graph_fgcolor);
455 config_set_graph_background_alpha(cfg->graph_bg_alpha);
456 config_set_sensorlist_position(cfg->sensorlist_position);
457 config_set_window_decoration_enabled(cfg->window_decoration_enabled);
458 config_set_window_keep_below_enabled(cfg->window_keep_below_enabled);
460 gconf_client_set_int(client,
461 KEY_GRAPH_UPDATE_INTERVAL,
462 cfg->graph_update_interval, NULL);
464 gconf_client_set_int(client,
465 KEY_GRAPH_MONITORING_DURATION,
466 cfg->graph_monitoring_duration, NULL);
468 gconf_client_set_int(client,
469 KEY_SENSOR_UPDATE_INTERVAL,
470 cfg->sensor_update_interval, NULL);
472 gconf_client_set_bool(client,
473 KEY_INTERFACE_MENU_BAR_DISABLED,
474 cfg->menu_bar_disabled, NULL);
476 gconf_client_set_bool(client,
477 KEY_INTERFACE_UNITY_LAUNCHER_COUNT_DISABLED,
478 cfg->unity_launcher_count_disabled, NULL);