hermet pushed a commit to branch master. http://git.enlightenment.org/tools/enventor.git/commit/?id=d47b69099d9f5c302f8489501896bc8cfdc0f28d
commit d47b69099d9f5c302f8489501896bc8cfdc0f28d Author: ChunEon Park <[email protected]> Date: Thu Feb 6 18:19:59 2014 +0900 config - save/load config to eet --- src/bin/config_data.c | 175 +++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 158 insertions(+), 17 deletions(-) diff --git a/src/bin/config_data.c b/src/bin/config_data.c index 190fef1..6c9ffb8 100644 --- a/src/bin/config_data.c +++ b/src/bin/config_data.c @@ -1,6 +1,18 @@ #include <Elementary.h> #include "common.h" +const char *IMGPATH = "imgpath"; +const char *SNDPATH = "sndpath"; +const char *FNTPATH = "fntpath"; +const char *DATPATH = "datpath"; +const char *FNTSIZE = "fntsize"; +const char *VIEWSCALE = "viewscale"; +const char *STATSBAR = "statsbar"; +const char *LINENUM = "linenum"; +const char *HIGHLIGHT = "highlight"; +const char *SWALLOW = "swallow"; +const char *INDENT = "indent"; + typedef struct config_s { const char *edc_path; @@ -22,12 +34,12 @@ typedef struct config_s void *update_cb_data; Evas_Coord_Size view_size; - Eina_Bool stats_bar : 1; - Eina_Bool linenumber : 1; - Eina_Bool part_highlight : 1; - Eina_Bool dummy_swallow : 1; - Eina_Bool auto_indent : 1; - Eina_Bool hotkeys : 1; + Eina_Bool stats_bar; + Eina_Bool linenumber; + Eina_Bool part_highlight; + Eina_Bool dummy_swallow; + Eina_Bool auto_indent; + Eina_Bool hotkeys; } config_data; static config_data *g_cd = NULL; @@ -50,6 +62,127 @@ config_edj_path_update(config_data *cd) eina_stringshare_replace(&cd->edj_path, edj_path); } + +static Eina_Bool +config_load(config_data *cd) +{ + char buf[PATH_MAX]; + snprintf(buf, sizeof(buf), "%s/.enventor/config.eet", getenv("HOME")); + Eet_File *ef = eet_open(buf, EET_FILE_MODE_READ); + if (!ef) + { + EINA_LOG_ERR("Cannot load a config file \"%s\"", buf); + return EINA_FALSE; + } + + int size; + char *ret; + + ret = eet_read(ef, IMGPATH, &size); + if (size > 0) { config_edc_img_path_set(ret); free(ret); } + ret = eet_read(ef, SNDPATH, &size); + if (size > 0) { config_edc_snd_path_set(ret); free(ret); } + ret = eet_read(ef, FNTPATH, &size); + if (size > 0) { config_edc_fnt_path_set(ret); free(ret); } + ret = eet_read(ef, DATPATH, &size); + if (size > 0) { config_edc_data_path_set(ret); free(ret); } + ret = eet_read(ef, FNTSIZE, &size); + if (size > 0) { cd->font_size = atof(ret); free(ret); } + ret = eet_read(ef, VIEWSCALE, &size); + if (size > 0) { cd->view_scale = atof(ret); free(ret); } + ret = eet_read(ef, STATSBAR, &size); + if (size > 0) { cd->stats_bar = (Eina_Bool) atoi(ret); free(ret); } + ret = eet_read(ef, LINENUM, &size); + if (size > 0) { cd->linenumber = (Eina_Bool) atoi(ret); free(ret); } + ret = eet_read(ef, HIGHLIGHT, &size); + if (size > 0) { cd->part_highlight = (Eina_Bool) atoi(ret); free(ret); } + ret = eet_read(ef, SWALLOW, &size); + if (size > 0) { cd->dummy_swallow = (Eina_Bool) atoi(ret); free(ret); } + ret = eet_read(ef, INDENT, &size); + if (size > 0) { cd->auto_indent = (Eina_Bool) atoi(ret); free(ret); } + + eet_close(ef); + + return EINA_TRUE; +} + +static void +edc_paths_write(Eet_File *ef, const char *key, Eina_List *paths, + Eina_Strbuf *strbuf) +{ + Eina_List *l; + char *path; + + eina_strbuf_reset(strbuf); + + EINA_LIST_FOREACH(paths, l, path) + { + eina_strbuf_append(strbuf, path); + eina_strbuf_append(strbuf, ";"); + } + + const char *str = eina_strbuf_string_get(strbuf); + eet_write(ef, key, str, strlen(str) + 1, 0); +} + +static void +config_save(config_data *cd) +{ + char buf[PATH_MAX]; + snprintf(buf, sizeof(buf), "%s/.enventor", getenv("HOME")); + + //Create config folder if it doesn't exist. + if (!ecore_file_exists(buf)) + { + Eina_Bool success = ecore_file_mkdir(buf); + if (!success) + { + EINA_LOG_ERR("Cannot create a config folder \"%s\"", buf); + return; + } + } + + //Save config file. + snprintf(buf, sizeof(buf), "%s/.enventor/config.eet", getenv("HOME")); + Eet_File *ef = eet_open(buf, EET_FILE_MODE_WRITE); + if (!ef) + { + EINA_LOG_ERR("Cannot save a config file \"%s\"", buf); + return; + } + + //TODO: Use Eet Descriptor if the attributes are getting bigger and bigger + Eina_Strbuf *strbuf = eina_strbuf_new(); + edc_paths_write(ef, IMGPATH, cd->edc_img_path_list, strbuf); + edc_paths_write(ef, SNDPATH, cd->edc_snd_path_list, strbuf); + edc_paths_write(ef, FNTPATH, cd->edc_fnt_path_list, strbuf); + edc_paths_write(ef, DATPATH, cd->edc_data_path_list, strbuf); + eina_strbuf_free(strbuf); + + snprintf(buf, sizeof(buf), "%f", cd->font_size); + eet_write(ef, FNTSIZE, buf, strlen(buf) + 1, 0); + + snprintf(buf, sizeof(buf), "%f", cd->view_scale); + eet_write(ef, VIEWSCALE, buf, strlen(buf) + 1, 0); + + snprintf(buf, sizeof(buf), "%d", cd->stats_bar); + eet_write(ef, STATSBAR, buf, strlen(buf) + 1, 0); + + snprintf(buf, sizeof(buf), "%d", cd->linenumber); + eet_write(ef, LINENUM, buf, strlen(buf) + 1, 0); + + snprintf(buf, sizeof(buf), "%d", cd->part_highlight); + eet_write(ef, HIGHLIGHT, buf, strlen(buf) + 1, 0); + + snprintf(buf, sizeof(buf), "%d", cd->dummy_swallow); + eet_write(ef, SWALLOW, buf, strlen(buf) + 1, 0); + + snprintf(buf, sizeof(buf), "%d", cd->auto_indent); + eet_write(ef, INDENT, buf, strlen(buf) + 1, 0); + + eet_close(ef); +} + void config_edc_path_set(const char *edc_path) { @@ -68,17 +201,23 @@ config_init(const char *edc_path, const char *edc_img_path, cd->edc_path = eina_stringshare_add(edc_path); config_edj_path_update(cd); - config_edc_img_path_set(edc_img_path); - config_edc_snd_path_set(edc_snd_path); - config_edc_fnt_path_set(edc_fnt_path); - config_edc_data_path_set(edc_data_path); - - cd->font_size = 1.0f; - cd->view_scale = 1; - cd->linenumber = EINA_TRUE; - cd->part_highlight = EINA_TRUE; - cd->dummy_swallow = EINA_TRUE; - cd->auto_indent = EINA_TRUE; + + if (!config_load(cd)) + { + //failed to load config file. set default values. + config_edc_img_path_set(edc_img_path); + config_edc_snd_path_set(edc_snd_path); + config_edc_fnt_path_set(edc_fnt_path); + config_edc_data_path_set(edc_data_path); + + cd->font_size = 1.0f; + cd->view_scale = 1; + cd->linenumber = EINA_TRUE; + cd->part_highlight = EINA_TRUE; + cd->dummy_swallow = EINA_TRUE; + cd->auto_indent = EINA_TRUE; + } + //hotkey is not decided yet to keep the function or not. cd->hotkeys = EINA_TRUE; } @@ -87,6 +226,8 @@ config_term() { config_data *cd = g_cd; + config_save(cd); + eina_stringshare_del(cd->edc_path); eina_stringshare_del(cd->edj_path); --
