Main Page | Data Structures | Directories | File List | Data Fields | Globals

e_mod_config.c

Go to the documentation of this file.
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 /* Public functions */
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   /* If loaded, check for good version */
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   //... ADD all config limits
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   /* Save number of devians */
00104   cfg_main->nb_devian = evas_list_count(dEvianM->devians);
00105 
00106   /* Save config of each devian in main config */
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   /* Create new config */
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   Creates a new config for a devian
00207   Args:
00208     - Conf: if !NULL, the returned config will be a copy of this one
00209   Return:
00210     The new config
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 /* Private functions */
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 }

Generated on Fri Jan 6 02:26:26 2006 for dEvian by  doxygen 1.4.4