00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include <iostream>
00027
00028 #include <string>
00029 #include <config.h>
00030
00031 #include "gxsm_conf.h"
00032 #include "xsmdebug.h"
00033
00034
00035
00036
00037
00038
00039
00040
00041 extern int force_gconf_defaults;
00042
00043
00044
00045
00046 XsmRescourceManager::XsmRescourceManager(const gchar *prefix, const gchar *group){
00047 client = gconf_client_get_default ();
00048 if (prefix)
00049 Prefix = g_strconcat ("/apps/gxsm2/", prefix, NULL);
00050 else
00051 Prefix = g_strdup ("/apps/gxsm2/global");
00052 if (group)
00053 Group = g_strdup (group);
00054 else
00055 Group = g_strdup ("default");
00056 }
00057
00058 XsmRescourceManager::~XsmRescourceManager(){
00059 g_free(Prefix);
00060 g_free(Group);
00061 }
00062
00063 void XsmRescourceManager::SetGroup(const gchar *group){
00064 g_free(Group);
00065 if (group)
00066 Group = g_strdup (group);
00067 else
00068 Group = g_strdup ("default");
00069 }
00070
00071 gchar* XsmRescourceManager::KeyTranslate(const gchar *name){
00072 gchar *name_key = g_strdelimit (g_strdup (name), ".", '/');
00073 gchar *tmp = g_strconcat (Prefix, "/", Group, "/", name_key, NULL);
00074 g_free (name_key);
00075 return tmp;
00076 }
00077
00078 void XsmRescourceManager::PutBool(gchar *name, gboolean value){
00079 gchar *key = KeyTranslate (name);
00080 XSM_DEBUG (DBG_L2, "XsmRM::put-bool: " << key << " = " << value);
00081 gconf_client_set_bool (client, key, value, NULL);
00082 g_free(key);
00083 }
00084
00085 void XsmRescourceManager::Put(gchar *name, double value){
00086 gchar *key = KeyTranslate (name);
00087 XSM_DEBUG (DBG_L2, "XsmRM::put-double: " << key << " = " << value);
00088 gconf_client_set_float (client, key, value, NULL);
00089 g_free(key);
00090 }
00091
00092 void XsmRescourceManager::Put(gchar *name, int value){
00093 gchar *key = KeyTranslate (name);
00094 XSM_DEBUG (DBG_L2, "XsmRM::put-int: " << key << " = " << value);
00095 gconf_client_set_int (client, key, value, NULL);
00096 g_free(key);
00097 }
00098
00099 void XsmRescourceManager::Put(gchar *name, gchar *value){
00100 gchar *key = KeyTranslate (name);
00101 XSM_DEBUG (DBG_L2, "XsmRM::put-string: " << key << " = " << value);
00102 gconf_client_set_string (client, key, value, NULL);
00103 g_free(key);
00104 }
00105
00106 int XsmRescourceManager::GetBool(gchar *name, gboolean defaultv){
00107 gchar *key = KeyTranslate (name);
00108 gboolean value = gconf_client_get_bool (client, key, NULL);
00109 XSM_DEBUG (DBG_L2, "XsmRM::get-bool: " << key << " = " << value << " default: " << defaultv);
00110 if (force_gconf_defaults){
00111 if (defaultv){
00112 value = defaultv;
00113 gconf_client_set_bool (client, key, value, NULL);
00114 }
00115 }
00116 g_free(key);
00117 return value;
00118 }
00119
00120 int XsmRescourceManager::Get(gchar *name, double *value, gchar *defaultv){
00121 gchar *key = KeyTranslate (name);
00122 *value = gconf_client_get_float (client, key, NULL);
00123 XSM_DEBUG (DBG_L2, "XsmRM::get-float: " << key << " = " << *value << " default: " << defaultv);
00124 if (force_gconf_defaults || *value == 0.){
00125 if (defaultv){
00126 *value = atof (defaultv);
00127 gconf_client_set_float (client, key, (gfloat) (*value), NULL);
00128 }
00129 }
00130 g_free(key);
00131 return 0;
00132 }
00133
00134 int XsmRescourceManager::Get(gchar *name, int *value, gchar *defaultv){
00135 gchar *key = KeyTranslate (name);
00136 *value = gconf_client_get_int (client, key, NULL);
00137 XSM_DEBUG(DBG_L2, "XsmRM::get-int: " << key << " = " << *value << " default: " << defaultv);
00138 if (force_gconf_defaults || *value == 0){
00139 if (defaultv){
00140 *value = atoi (defaultv);
00141 gconf_client_set_int (client, key, *value, NULL);
00142 }
00143 }
00144 g_free(key);
00145 return 0;
00146 }
00147
00148 int XsmRescourceManager::Get(gchar *name, gchar **value, gchar *defaultv){
00149 gchar *key = KeyTranslate (name);
00150 *value = gconf_client_get_string (client, key, NULL);
00151 XSM_DEBUG(DBG_L2, "XsmRM::get-string: " << key << " = " << (*value?*value:"-UnSet-") << " default: " << defaultv);
00152 if (!(*value) || force_gconf_defaults){
00153 if (defaultv){
00154 *value = defaultv;
00155 gconf_client_set_string (client, key, defaultv, NULL);
00156 } else {
00157 *value = "?!-ERROR-!?";
00158 }
00159 }
00160 g_free(key);
00161 *value = g_strdup (*value);
00162 return 0;
00163 }
00164
00165 gchar *XsmRescourceManager::GetStr(gchar *name, gchar *defaultv){
00166 gchar *value;
00167 gchar *key = KeyTranslate (name);
00168 value = gconf_client_get_string (client, key, NULL);
00169 XSM_DEBUG(DBG_L2, "XsmRM::get-string*: " << key << " = " << (value?value:"-UnSet-") << " default: " << defaultv);
00170 if (!value || force_gconf_defaults){
00171 if (defaultv){
00172 value = defaultv;
00173 gconf_client_set_string (client, key, defaultv, NULL);
00174 } else {
00175 g_free(key);
00176 return NULL;
00177 }
00178 }
00179 g_free(key);
00180 return g_strdup (value);
00181 }