00001 #include "dEvian.h"
00002
00003 static E_Config_DD *_devian_config_main_edd_init(E_Config_DD *o);
00004 static E_Config_DD *_devian_config_devians_edd_init();
00005
00006
00007
00008 Config_dEvian_Main *devian_config_init(void)
00009 {
00010 Config_dEvian_Main *conf;
00011
00012 dEvianM->conf_edd_devians = _devian_config_devians_edd_init();
00013 if (!dEvianM->conf_edd_devians)
00014 return NULL;
00015 dEvianM->conf_edd = _devian_config_main_edd_init(dEvianM->conf_edd_devians);
00016 if (!dEvianM->conf_edd)
00017 return NULL;
00018
00019 conf = devian_config_load(dEvianM->conf_edd);
00020 if (!conf)
00021 return NULL;
00022
00023 return conf;
00024 }
00025
00026 Config_dEvian_Main *devian_config_load(E_Config_DD *cfg_main_edd)
00027 {
00028 Config_dEvian_Main *cfg_main;
00029
00030 cfg_main = e_config_domain_load("module.devian", cfg_main_edd);
00031
00032
00033 if (cfg_main)
00034 {
00035 if (cfg_main->conf_version < CONFIG_VERSION)
00036 {
00037 char buf[4096];
00038 snprintf(buf, sizeof(buf),
00039 _(
00040 "<title>Configuration Upgraded</title><br>"
00041 "Configuration v. needed : %d<br>"
00042 "Your config file v. : %d<br><br>"
00043 "Your old configuration of dEvian module<br>"
00044 "has been upgraded<br>"
00045 "Your settings were removed<br>"
00046 "Sorry for the inconvenience"),
00047 CONFIG_VERSION,
00048 cfg_main->conf_version);
00049 e_module_dialog_show(_("dEvian Module"), buf);
00050
00051 cfg_main = NULL;
00052 }
00053 else
00054 {
00055 if (cfg_main->conf_version > CONFIG_VERSION)
00056 {
00057 char buf[4096];
00058 snprintf(buf, sizeof(buf),
00059 _(
00060 "<title>Configuration Downgraded</title><br>"
00061 "Configuration v. needed : %d<br>"
00062 "Your config file v. : %d<br><br>"
00063 "Your old configuration of dEvian module<br>"
00064 "has been downgraded<br>"
00065 "Your settings were removed<br>"
00066 "Sorry for the inconvenience"),
00067 CONFIG_VERSION,
00068 cfg_main->conf_version);
00069 e_module_dialog_show(_("dEvian Module"), buf);
00070 cfg_main = NULL;
00071 }
00072 }
00073 }
00074
00075 if (!cfg_main)
00076 cfg_main = devian_config_main_new();
00077
00078 if (cfg_main->nb_devian != evas_list_count(cfg_main->devians_conf))
00079 {
00080 fprintf(stderr, "dEvian: nb_devian (%d) != count(devians_conf) (%d) !!!\n",
00081 cfg_main->nb_devian, evas_list_count(cfg_main->devians_conf));
00082 cfg_main->nb_devian = evas_list_count(cfg_main->devians_conf);
00083 }
00084
00085 E_CONFIG_LIMIT(cfg_main->high_quality, 0, 1);
00086
00087
00088 DMAIN(("dEvian: config initialised"));
00089
00090 return cfg_main;
00091 }
00092
00093 void devian_config_save(void)
00094 {
00095 Config_dEvian_Main *cfg_main;
00096 Evas_List *l;
00097 dEvian *devian;
00098
00099 cfg_main = dEvianM->conf;
00100 if (!cfg_main)
00101 return;
00102
00103
00104 cfg_main->nb_devian = evas_list_count(dEvianM->devians);
00105
00106
00107 cfg_main->devians_conf = NULL;
00108 for (l = dEvianM->devians; l; l=evas_list_next(l))
00109 {
00110 devian = evas_list_data(l);
00111 devian_config_devian_save(devian);
00112 cfg_main->devians_conf = evas_list_append(cfg_main->devians_conf,
00113 devian->conf);
00114 DMAIN(("Config saved"));
00115 }
00116 }
00117
00118 void devian_config_devian_save(dEvian *devian)
00119 {
00120 Container_Box *box;
00121
00122 if (!devian->conf)
00123 return;
00124
00125 if (devian->conf->container_type == CONTAINER_BOX)
00126 {
00127 box = devian->container;
00128 devian->conf->box_x = box->x;
00129 devian->conf->box_y = box->y;
00130 }
00131 }
00132
00133
00134 void devian_config_free(void)
00135 {
00136 Evas_List *l;
00137
00138 Config_dEvian_Main *cfg_main;
00139
00140 cfg_main = dEvianM->conf;
00141
00142 evas_stringshare_del(cfg_main->theme);
00143 evas_stringshare_del(cfg_main->sources_picture_data_import_dir);
00144
00145 for (l = dEvianM->devians; l; l=evas_list_next(l))
00146 {
00147 devian_config_devian_free(evas_list_data(l));
00148 }
00149
00150 E_FREE(dEvianM->conf);
00151
00152 E_CONFIG_DD_FREE(dEvianM->conf_edd);
00153 E_CONFIG_DD_FREE(dEvianM->conf_edd_devians);
00154 }
00155
00156 void devian_config_devian_free(dEvian *devian)
00157 {
00158 if (!devian->conf)
00159 return;
00160
00161 E_FREE(devian->conf);
00162 devian->conf = NULL;
00163 }
00164
00165 Config_dEvian_Main *devian_config_main_new(void)
00166 {
00167 Config_dEvian_Main *cfg_main;
00168 char buf[DEVIAN_MAX_PATH];
00169
00170
00171 DMAIN(("dEvian: New config creation ..."));
00172 cfg_main = E_NEW(Config_dEvian_Main, 1);
00173 cfg_main->conf_version = CONFIG_VERSION;
00174 cfg_main->high_quality = 0;
00175 cfg_main->nb_devian = 0;
00176 strcpy(buf, "simple");
00177 cfg_main->theme = (char *)evas_stringshare_add(buf);
00178
00179 cfg_main->source_default = SOURCE_PICTURE;
00180 snprintf(buf, DEVIAN_MAX_PATH, "%s/Tofs", e_user_homedir_get());
00181 cfg_main->sources_picture_data_import_dir = (char *)evas_stringshare_add(buf);
00182 cfg_main->sources_picture_data_import_thumbs_warn = 1;
00183 cfg_main->sources_picture_data_import_recursive = 0;
00184 cfg_main->sources_picture_default_location = DATA_PICTURE_LOCAL;
00185 cfg_main->sources_picture_set_bg_purge = SOURCE_PICTURE_SET_BG_PURGE_DEFAULT;
00186
00187 cfg_main->container_default = CONTAINER_BOX;
00188 cfg_main->boxs_always_number = CONTAINER_BOX_ALWAYS_NUMBER_DEFAULT;
00189 cfg_main->boxs_always_infos = CONTAINER_BOX_ALWAYS_INFOS_DEFAULT;
00190 cfg_main->boxs_stacking = CONTAINER_BOX_STACKING_DEFAULT;
00191 cfg_main->boxs_default_max_size = CONTAINER_BOX_SIZE_DEFAULT;
00192 cfg_main->boxs_default_anim = CONTAINER_BOX_ANIM_DEFAULT;
00193 cfg_main->boxs_anim_ghost_timer = CONTAINER_BOX_ANIM_GHOST_TIMER_DEFAULT;
00194 cfg_main->boxs_nice_resize = CONTAINER_BOX_NICE_RESIZE_DEFAULT;
00195 cfg_main->boxs_nice_trans = CONTAINER_BOX_NICE_TRANS_DEFAULT;
00196
00197 cfg_main->data_picture_thumb_default_size = DATA_PICTURE_THUMB_SIZE_DEFAULT;
00198 cfg_main->data_picture_cache_size = DATA_PICTURE_CACHE_SIZE_DEFAULT;
00199
00200 cfg_main->devians_conf = NULL;
00201
00202 return cfg_main;
00203 }
00204
00205
00206
00207
00208
00209
00210
00211
00212 Config_dEvian *devian_config_devian_new(Config_dEvian *conf)
00213 {
00214 Config_dEvian *cfg;
00215
00216 cfg = E_NEW(Config_dEvian, 1);
00217
00218 if (conf)
00219 {
00220 cfg->source_type = conf->source_type;
00221 cfg->picture_timer_active = conf->picture_timer_active;
00222 cfg->picture_timer_s = conf->picture_timer_s;
00223
00224 cfg->container_type = conf->container_type;
00225 cfg->box_speed = conf->box_speed;
00226 cfg->box_max_size = conf->box_max_size;
00227 cfg->box_x = conf->box_x;
00228 cfg->box_y = conf->box_y;
00229 cfg->box_auto_resize = conf->box_auto_resize;
00230 cfg->box_anim = conf->box_anim;
00231 }
00232 else
00233 {
00234 cfg->source_type = dEvianM->conf->source_default;
00235 cfg->picture_timer_active = 1;
00236 cfg->picture_timer_s = SOURCE_PICTURE_TIMER_DEFAULT;
00237
00238 cfg->container_type = dEvianM->conf->container_default;
00239 cfg->box_speed = CONTAINER_BOX_SPEED_DEFAULT;
00240 cfg->box_max_size = dEvianM->conf->boxs_default_max_size;
00241 devian_container_box_random_pos_get(&cfg->box_x, &cfg->box_y,
00242 cfg->box_max_size);
00243 cfg->box_auto_resize = CONTAINER_BOX_AUTO_RESIZE_DEFAULT;
00244 cfg->box_anim = dEvianM->conf->boxs_default_anim;
00245 }
00246
00247 DMAIN(("New config created"));
00248
00249 return cfg;
00250 }
00251
00252
00253
00254 static E_Config_DD *_devian_config_main_edd_init(E_Config_DD *devians)
00255 {
00256 E_Config_DD *edd_main;
00257
00258 edd_main = E_CONFIG_DD_NEW("dEvian_Config", Config_dEvian_Main);
00259
00260 #undef T
00261 #undef D
00262 #define T Config_dEvian_Main
00263 #define D edd_main
00264
00265 E_CONFIG_VAL(D, T, conf_version, INT);
00266 E_CONFIG_VAL(D, T, high_quality, INT);
00267 E_CONFIG_VAL(D, T, nb_devian, INT);
00268 E_CONFIG_VAL(D, T, theme, STR);
00269
00270
00271 E_CONFIG_VAL(D, T, source_default, INT);
00272
00273 E_CONFIG_VAL(D, T, sources_picture_data_import_dir, STR);
00274 E_CONFIG_VAL(D, T, sources_picture_data_import_thumbs_warn, INT);
00275 E_CONFIG_VAL(D, T, sources_picture_data_import_recursive, INT);
00276 E_CONFIG_VAL(D, T, sources_picture_default_location, INT);
00277 E_CONFIG_VAL(D, T, sources_picture_set_bg_purge, INT);
00278
00279
00280 E_CONFIG_VAL(D, T, container_default, INT);
00281
00282 E_CONFIG_VAL(D, T, boxs_always_number, INT);
00283 E_CONFIG_VAL(D, T, boxs_always_infos, INT);
00284 E_CONFIG_VAL(D, T, boxs_stacking, INT);
00285 E_CONFIG_VAL(D, T, boxs_default_max_size, INT);
00286 E_CONFIG_VAL(D, T, boxs_default_anim, INT);
00287 E_CONFIG_VAL(D, T, boxs_anim_ghost_timer, INT);
00288 E_CONFIG_VAL(D, T, boxs_nice_resize, INT);
00289 E_CONFIG_VAL(D, T, boxs_nice_trans, INT);
00290
00291 E_CONFIG_VAL(D, T, data_picture_thumb_default_size, INT);
00292 E_CONFIG_VAL(D, T, data_picture_cache_size, INT);
00293
00294 E_CONFIG_LIST(D, T, devians_conf, devians);
00295
00296 return edd_main;
00297 }
00298
00299 static E_Config_DD *_devian_config_devians_edd_init(void)
00300 {
00301 E_Config_DD *devians;
00302
00303 devians = E_CONFIG_DD_NEW("dEvian_Config_dEvians", Config_dEvian);
00304
00305 #undef T
00306 #undef D
00307 #define T Config_dEvian
00308 #define D devians
00309
00310 E_CONFIG_VAL(D, T, source_type, INT);
00311 E_CONFIG_VAL(D, T, picture_timer_active, INT);
00312 E_CONFIG_VAL(D, T, picture_timer_s, INT);
00313
00314 E_CONFIG_VAL(D, T, container_type, INT);
00315
00316 E_CONFIG_VAL(D, T, box_speed, INT);
00317 E_CONFIG_VAL(D, T, box_x, INT);
00318 E_CONFIG_VAL(D, T, box_y, INT);
00319 E_CONFIG_VAL(D, T, box_max_size, INT);
00320 E_CONFIG_VAL(D, T, box_auto_resize, INT);
00321 E_CONFIG_VAL(D, T, box_anim, INT);
00322
00323 return devians;
00324 }