#include "conf.h" int sort_cb(void *d1, void *d2); static int PATH_MAX = 256; static Eet_Data_Descriptor *_e_config_carrage_edd = NULL; static Eet_Data_Descriptor *_e_config_theme_edd = NULL; static Eet_Data_Descriptor *_e_config_theme_list_edd = NULL; /*************************************************** / Function: / Purpose: / / / / *****************************************************/ int _e_config_init() { Evas_List *ts_list; _e_config_carrage_edd = NEWD("CarRageSettings", CarRageSettings); #undef T #undef D #define T CarRageSettings #define D _e_config_carrage_edd EL_CONFIG_VAL(D, T, theme, EET_T_STRING); EL_CONFIG_VAL(D, T, res_w, EET_T_INT); EL_CONFIG_VAL(D, T, res_v, EET_T_INT); _e_config_theme_edd = NEWD("Theme_Settings", Theme_Settings); #undef T #undef D #define T Theme_Settings #define D _e_config_theme_edd EL_CONFIG_VAL(D,T, but_id, EET_T_STRING); EL_CONFIG_VAL(D,T, screen_id, EET_T_STRING); EL_CONFIG_VAL(D,T, fun_id, EET_T_STRING); EL_CONFIG_VAL(D,T, screen_act, EET_T_STRING); _e_config_theme_list_edd = NEWD("ThemeSettingsList",ThemeSettingsList); #undef T #undef D #define T ThemeSettingsList #define D _e_config_theme_list_edd EL_CONFIG_LIST(D, T, ts_list, _e_config_theme_edd); return 1; } /*************************************************** / Function: / Purpose: / / / / *****************************************************/ int _e_config_shutdown() { FREED(_e_config_theme_edd); FREED(_e_config_carrage_edd); return 1; } /*************************************************** / Function: / Purpose: / / / / *****************************************************/ int _e_config_load(CarRageSettings *ss, ThemeSettingsList *tsl) { Eet_File *ef; Eet_File *ef2; char buf[PATH_MAX]; char buf2[PATH_MAX]; char *home; int size; int starth = 800; int startw = 600; home = getenv("HOME"); snprintf(buf, sizeof(buf), "%s/.e/CarRage", home); if(!ecore_file_is_dir(buf)) { if(ecore_file_exists(buf)) { ss->res_v = starth; ss->res_w = startw; ss->theme = strdup("default"); return 0; } if(!ecore_file_mkdir(buf)) { ss->res_v = starth; ss->res_w = startw; ss->theme = strdup("default"); return 0; } } snprintf(buf, sizeof(buf), "%s/.e/CarRage/config.eet", home); snprintf(buf2, sizeof(buf2), "%s/.e/CarRage/", home); /* if( (!ecore_file_exists(buf)) || (ecore_file_size(buf) == 0) ) { ss->res_v = starth; ss->res_w = startw; ss->theme = strdup("default"); int good = _e_config_save(ss, NULL); return 0; } */ ef = eet_open(buf, EET_FILE_MODE_READ); if(!ef) { ss->res_v = starth; ss->res_w = startw; ss->theme = strdup("default"); int good = _e_config_save(ss, NULL); return 0; } //ss = eet_data_read(ef,_e_config_carrage_edd, "sskey"); strcat(buf2,ss->theme); strcat(buf2,"/theme_config.eet"); if(!ecore_file_exists(buf2) || ecore_file_size(buf2) == 0) { /* no saved config */ return 0; } ef2 = eet_open(buf2, EET_FILE_MODE_READ); if(!ef2) { return 0; } tsl = eet_data_read(ef2, _e_config_theme_list_edd, "tskey"); eet_close(ef); eet_close(ef2); // tsl = evas_list_sort(tsl, evas_list_count(tsl), sort_cb); /* if (evas_list_alloc_error()) { fprintf(stderr, "ERROR: Memory is low. List Sorting failed.\n"); exit(-1); } */ return 1; } /*************************************************** / Function: / Purpose: / / / / *****************************************************/ int _e_config_save(CarRageSettings *ss, ThemeSettingsList *tsl) { Eet_File *ef; char buf[PATH_MAX]; char *home; int ret; home = getenv("HOME"); if(!home) return 0; snprintf(buf, sizeof(buf), "%s/.e/CarRage/config.eet", home); ef = eet_open(buf, EET_FILE_MODE_WRITE); if(!ef) return 0; ret = eet_data_write(ef,_e_config_carrage_edd, "sskey", ss, 1); eet_close(ef); return ret; } /*************************************************** / Function: / Purpose: / / / / *****************************************************/ void MakeConfig(char *buf ) { ThemeSettingsList *tsl; FILE *fp; char read_line[120]; unsigned int value; Eet_File *ef; char *screenID; char *butID; char *funID; char *screen_act; int ok; Theme_Settings *ts; char buf2[256]; tsl = calloc(1,sizeof(ThemeSettingsList)); ts = calloc(1,sizeof(Theme_Settings)); fp = fopen(buf,"r"); if (fp) { while ((fgets(read_line, sizeof(read_line), fp))) { sscanf(read_line, "%s %s %s %s", screenID, butID, funID, screen_act); ts->but_id = strdup(butID); ts->screen_id = strdup(screenID); ts->fun_id = strdup(funID); ts->screen_act = strdup(screen_act); tsl->ts_list = evas_list_append(tsl->ts_list, &ts); } } fclose(fp); strcpy(buf2,"new_confg.eet"); ef = eet_open(buf2, EET_FILE_MODE_WRITE); if (ef) { ok = eet_data_write(ef, _e_config_theme_list_edd, "tskey", tsl, 1); eet_close(ef); } free(tsl); free(ts); } /*************************************************** / Function: / Purpose: / / / / *****************************************************/ int sort_cb(void *d1, void *d2) { const char *txt = NULL; const char *txt2 = NULL; Theme_Settings *First; Theme_Settings *Second; if(!d1) return(1); if(!d2) return(-1); First = d1; Second = d2; return(strcmp((const char*)First->screen_id, (const char*)Second->screen_id)); } /////////////////////////////////////////////////////////////////////////////// #ifndef _CONF_H #define _CONF_H #include "carrage.h" #define NEWD(str, typ) \ eet_data_descriptor_new(str, sizeof(typ), \ (void *(*) (void *))evas_list_next, \ (void *(*) (void *, void *))evas_list_append, \ (void *(*) (void *))evas_list_data, \ (void *(*) (void *))evas_list_free, \ (void (*) (void *, int (*) (void *, const char *, void *, void *), void *))evas_hash_foreach, \ (void *(*) (void *, const char *, void *))evas_hash_add, \ (void (*) (void *))evas_hash_free) #define EL_CONFIG_VAL(edd, type, member, dtype) EET_DATA_DESCRIPTOR_ADD_BASIC(edd, type, #member, member, dtype) #define EL_CONFIG_SUB(edd, type, member, eddtype) EET_DATA_DESCRIPTOR_ADD_SUB(edd, type, #member, member, eddtype) #define EL_CONFIG_LIST(edd, type, member, eddtype) EET_DATA_DESCRIPTOR_ADD_LIST(edd, type, #member, member, eddtype) #define FREED(eed) \ if (eed) \ { \ eet_data_descriptor_free((eed)); \ (eed) = NULL; \ } typedef struct _CarRageSettings CarRageSettings; typedef struct _theme_settings_list ThemeSettingsList; typedef Eet_Data_Descriptor EL_Config_DD; struct _CarRageSettings { char *theme; int res_w; int res_v; }; struct _theme_settings_list { Evas_List *ts_list; }; void MakeConfig(char *buf); int _e_config_init(); int _e_config_shutdown(); int _e_config_load(CarRageSettings *ss, ThemeSettingsList *tsl); int _e_config_save(CarRageSettings *ss, ThemeSettingsList *tsl); int _e_conf_init(); #endif //////////////////////////////////////////////////////////////////////// #ifndef _CARRAGE_H #define _CARRAGE_H #include #include #include #include #include #include #include #include #include #include #include #include "conf.h" #include "button_func.h" typedef struct _theme_settings Theme_Settings; typedef struct _button Button; typedef struct _screen Screen; struct _button { Evas_Object *but_o; char *butid; }; struct _screen { Evas_Object *screen_o; char *screenID; Evas_List *button_list; }; struct _theme_settings { char *but_id; char *screen_id; char *fun_id; char *screen_act; }; #define CTXT_MAIN 0 #define CTXT_VIDEO 1 #endif ////////////////////////////////////////////