From 2be4e6c3d32ab30d43e666d833218c782d01410e Mon Sep 17 00:00:00 2001 From: Jaehyun Cho Date: Fri, 15 Apr 2016 19:36:27 +0900 Subject: [PATCH] file_browser: Show workspace directory. File browser shows workspace directory and its sub files. Workspace directory is set with argument "-w" and directory path. (e.g. enventor -w ./workspace) This commit implements T3389. --- README | 5 +- data/about/ABOUT | 5 +- data/themes/default/images.edc | 4 + data/themes/default/images/Makefile.am | 2 + data/themes/default/images/icon_file.png | Bin 0 -> 2454 bytes data/themes/default/images/icon_folder.png | Bin 0 -> 4145 bytes src/bin/base_gui.c | 1 + src/bin/config_data.c | 12 ++ src/bin/file_browser.c | 154 +++++++++++++++++++-- src/bin/main.c | 18 ++- src/include/config_data.h | 3 +- 11 files changed, 183 insertions(+), 21 deletions(-) create mode 100644 data/themes/default/images/icon_file.png create mode 100644 data/themes/default/images/icon_folder.png diff --git a/README b/README index d2bb4fa..95e8a25 100644 --- a/README +++ b/README @@ -74,7 +74,7 @@ Ctrl+Space - Search candidate keywords in the context [Command Line Usage] enventor --help -enventor [input file] [output file] [-t] [-i image path] [-s sound path] [-f font path] [-d data path] +enventor [input file] [output file] [-t] [-i image path] [-s sound path] [-f font path] [-d data path] [-w workspace path] input file = EDC file to open. If input file is skipped, Enventor will open a default template code with a temporary file. output file = EDJ file to store compiled file. If output file is skipped, Enventor will store the binary file to the temporary directory. @@ -83,12 +83,13 @@ output file = EDJ file to store compiled file. If output file is skipped, Envent -s = path to sound resources that the edc includes -f = path to font resources that the edc includes -d = path to data resources that the edc includes +-w = workspace directory path that contains group edc files Examples of Enventor command line usage: $ enventor $ enventor -t $ enventor newfile.edc -t -$ enventor sample.edc output.edj -i ./images -s ./sounds +$ enventor sample.edc output.edj -i ./images -s ./sounds -w ./workspace [Developers] diff --git a/data/about/ABOUT b/data/about/ABOUT index d2f5bf7..868391f 100644 --- a/data/about/ABOUT +++ b/data/about/ABOUT @@ -56,7 +56,7 @@ Ctrl+Space - Search candidate keywords in the context
[Command Line Usage]

enventor --help
-enventor [input file] [output file] [-t] [-i image path] [-s sound path] [-f font path] [-d data path]
+enventor [input file] [output file] [-t] [-i image path] [-s sound path] [-f font path] [-d data path] [-w workspace path]

input file = EDC file to open. If input file is skipped, Enventor will open a default template code with a temporary file.
output file = EDJ file to store compiled file. If output file is skipped, Enventor will store the binary file to the temporary directory.
@@ -65,12 +65,13 @@ output file = EDJ file to store compiled file. If output file is skipped, Envent -s = path to sound resources that the edc includes
-f = path to font resources that the edc includes
-d = path to data resources that the edc includes
+-w = workspace directory path that contains group edc files

Examples of Enventor command line usage:
$ enventor
$ enventor -t
$ enventor newfile.edc -t
-$ enventor sample.edc output.edj -i ./images -s ./sounds
+$ enventor sample.edc output.edj -i ./images -s ./sounds -w ./workspace


[Developers]
diff --git a/data/themes/default/images.edc b/data/themes/default/images.edc index 38661db..cf18c1c 100644 --- a/data/themes/default/images.edc +++ b/data/themes/default/images.edc @@ -1,5 +1,7 @@ images { image: "icon_close.png" COMP; + image: "icon_file.png" COMP; + image: "icon_folder.png" COMP; image: "slider_up.png" COMP; image: "slider_down.png" COMP; image: "menu.png" COMP; @@ -69,6 +71,8 @@ ICON_GROUP("Swallow", "live_swallow.png") ICON_GROUP("Text", "live_text.png") ICON_GROUP("Textblock", "live_textblock.png") ICON_GROUP("close", "icon_close.png") +ICON_GROUP("file", "icon_file.png") +ICON_GROUP("folder", "icon_folder.png") ICON_GROUP("file_browser", "file_browser.png") ICON_GROUP("edc_navigator", "edc_navigator.png") ICON_GROUP("navi_group", "navi_group.png") diff --git a/data/themes/default/images/Makefile.am b/data/themes/default/images/Makefile.am index 4376181..9db2492 100644 --- a/data/themes/default/images/Makefile.am +++ b/data/themes/default/images/Makefile.am @@ -70,6 +70,8 @@ EXTRA_DIST = \ expand.png \ invert.png \ icon_close.png \ + icon_file.png \ + icon_folder.png \ file_browser.png \ edc_navigator.png \ cursor_arrow.png \ diff --git a/data/themes/default/images/icon_file.png b/data/themes/default/images/icon_file.png new file mode 100644 index 0000000000000000000000000000000000000000..a3fc2365ad93d5217abbb15df7ee7c6bee7cbe8c GIT binary patch literal 2454 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 UzbKLJTL1t607*qoM6N<$f)HJ%N&o-= literal 0 HcmV?d00001 diff --git a/data/themes/default/images/icon_folder.png b/data/themes/default/images/icon_folder.png new file mode 100644 index 0000000000000000000000000000000000000000..b99006be17c7a1b0302ad3711644092f2cf00f47 GIT binary patch literal 4145 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, output_path); + if (workspace_path[0]) + eina_stringshare_replace(&cd->workspace_path, workspace_path); if (img_path) g_cd->img_path_list = img_path; @@ -357,6 +361,7 @@ config_term(void) eina_stringshare_del(cd->input_path); eina_stringshare_del(cd->output_path); + eina_stringshare_del(cd->workspace_path); Eina_Stringshare *str; EINA_LIST_FREE(cd->img_path_list, str) eina_stringshare_del(str); @@ -624,6 +629,13 @@ config_output_path_get(void) return cd->output_path; } +const char * +config_workspace_path_get(void) +{ + config_data *cd = g_cd; + return cd->workspace_path; +} + void config_syntax_color_set(Enventor_Syntax_Color_Type color_type, const char *val) diff --git a/src/bin/file_browser.c b/src/bin/file_browser.c index de9e744..0e044cf 100644 --- a/src/bin/file_browser.c +++ b/src/bin/file_browser.c @@ -22,6 +22,7 @@ struct file_browser_file_s typedef struct file_browser_s { brows_file *col_edc; //collections edc + brows_file *workspace; //workspace directory Evas_Object *genlist; Elm_Genlist_Item_Class *itc; @@ -44,35 +45,119 @@ gl_file_selected_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) } static Elm_Object_Item * -file_genlist_item_append(char *file_name, Elm_Object_Item *parent_it, - Elm_Genlist_Item_Type it_type, brows_file *file) +file_genlist_item_append(brows_file *file, Elm_Object_Item *parent_it, + Elm_Genlist_Item_Type it_type) { brows_data *bd = g_bd; if (!bd) return NULL; - if (!file_name) return NULL; if (!file) return NULL; Elm_Object_Item *it = elm_genlist_item_append(bd->genlist, bd->itc, /* item class */ - file_name, /* item data */ + file, /* item data */ parent_it, /* parent */ it_type, /* item type */ gl_file_selected_cb, /* select cb */ file); /* select cb data */ + + char it_str[EINA_PATH_MAX]; + snprintf(it_str, EINA_PATH_MAX, "%p", it); + evas_object_data_set(bd->genlist, it_str, file); + + elm_genlist_item_expanded_set(it, EINA_FALSE); + return it; } static char * gl_file_text_get_cb(void *data, Evas_Object *obj EINA_UNUSED, const char *part EINA_UNUSED) +{ + brows_file *file = data; + return strdup(file->name); +} + +static Evas_Object * +gl_file_content_get_cb(void *data, Evas_Object *obj, const char *part) +{ + brows_file *file = data; + + if (!strcmp(part, "elm.swallow.icon")) + { + Evas_Object *img = elm_image_add(obj); + + if (ecore_file_is_dir(file->path)) + elm_image_file_set(img, EDJE_PATH, "folder"); + else + elm_image_file_set(img, EDJE_PATH, "file"); + + return img; + } + else return NULL; +} + +static char * +gl_group_text_get_cb(void *data, Evas_Object *obj EINA_UNUSED, + const char *part EINA_UNUSED) { char *file_name = data; return strdup(file_name); } -/* Find including sub edc files and Create a list of brows_file. */ +static void +gl_exp_req(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) +{ + Elm_Object_Item *it = event_info; + elm_genlist_item_expanded_set(it, EINA_TRUE); +} + +static void +gl_con_req(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) +{ + Elm_Object_Item *it = event_info; + elm_genlist_item_expanded_set(it, EINA_FALSE); +} + +static void +gl_exp(void *data, Evas_Object *obj, void *event_info) +{ + brows_data *bd = data; + if (!bd) return; + + Elm_Object_Item *it = event_info; + + char it_str[EINA_PATH_MAX]; + snprintf(it_str, EINA_PATH_MAX, "%p", it); + brows_file *file = evas_object_data_get(obj, it_str); + if (!file) return; + + if (file->sub_file_list) + { + Eina_List *l = NULL; + brows_file *sub_file = NULL; + EINA_LIST_FOREACH(file->sub_file_list, l, sub_file) + { + Elm_Genlist_Item_Type type = ELM_GENLIST_ITEM_NONE; + if (sub_file->sub_file_list) + type = ELM_GENLIST_ITEM_TREE; + sub_file->it = file_genlist_item_append(sub_file, file->it, type); + + if (type == ELM_GENLIST_ITEM_TREE) + gl_exp_req(NULL, NULL, sub_file->it); + } + } +} + +static void +gl_con(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) +{ + Elm_Object_Item *it = event_info; + elm_genlist_item_subitems_clear(it); +} + +/* Find sub files and Create a list of brows_file. */ static Eina_List * sub_file_list_create(brows_file *file) { @@ -90,9 +175,6 @@ sub_file_list_create(brows_file *file) char *dir_path = file->path; EINA_LIST_FOREACH(sub_file_name_list, l, sub_file_name) { - if (!strcmp(".", sub_file_name) || !strcmp("..", sub_file_name)) - continue; - brows_file *sub_file = calloc(1, sizeof(brows_file)); int sub_file_path_len = strlen(dir_path) + strlen(sub_file_name) + 2; @@ -174,7 +256,7 @@ file_set_internal(const char *file_path, File_Browser_File_Type file_type) Elm_Genlist_Item_Type it_type = ELM_GENLIST_ITEM_NONE; if (file->sub_file_list) it_type = ELM_GENLIST_ITEM_TREE; - file->it = file_genlist_item_append(file->name, NULL, it_type, file); + file->it = file_genlist_item_append(file, NULL, it_type); return file; } @@ -183,6 +265,46 @@ file_set_internal(const char *file_path, File_Browser_File_Type file_type) /* Externally accessible calls */ /*****************************************************************************/ +/* Set workspace directory. */ +void +file_browser_workspace_set(const char *workspace_path) +{ + brows_data *bd = g_bd; + if (!bd) return; + + if (!workspace_path) return; + if (!ecore_file_exists(workspace_path)) return; + if (!ecore_file_is_dir(workspace_path)) return; + + if (bd->workspace) + { + if (!strcmp(workspace_path, bd->workspace->path)) + return; + + brows_file_free(bd->workspace); + bd->workspace = NULL; + } + + Elm_Object_Item *group_it = + elm_genlist_item_append(bd->genlist, + bd->group_itc, /* item class */ + "Workspace", /* item data */ + NULL, /* parent */ + ELM_GENLIST_ITEM_NONE, /* item type */ + NULL, /* select_cb */ + NULL); /* select_cb data */ + elm_genlist_item_select_mode_set(group_it, + ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY); + + brows_file *workspace = file_set_internal(workspace_path, + FILE_BROWSER_FILE_TYPE_DIR); + if (!workspace) return; + bd->workspace = workspace; + + if (workspace->sub_file_list) + gl_exp_req(NULL, NULL, workspace->it); +} + /* Set "collections" edc file. */ void file_browser_edc_file_set(const char *edc_file) @@ -209,7 +331,7 @@ file_browser_edc_file_set(const char *edc_file) Elm_Object_Item *group_it = elm_genlist_item_append(bd->genlist, bd->group_itc, /* item class */ - "Collections", /* item data */ + "Collections EDC", /* item data */ NULL, /* parent */ ELM_GENLIST_ITEM_NONE, /* item type */ NULL, /* select_cb */ @@ -236,18 +358,25 @@ file_browser_init(Evas_Object *parent) Evas_Object *genlist = elm_genlist_add(parent); elm_object_focus_allow_set(genlist, EINA_FALSE); + evas_object_smart_callback_add(genlist, "expand,request", gl_exp_req, NULL); + evas_object_smart_callback_add(genlist, "contract,request", gl_con_req, + NULL); + evas_object_smart_callback_add(genlist, "expanded", gl_exp, bd); + evas_object_smart_callback_add(genlist, "contracted", gl_con, NULL); + //Item Class Elm_Genlist_Item_Class *itc; itc = elm_genlist_item_class_new(); - itc->item_style = "no_icon"; + itc->item_style = "default"; itc->func.text_get = gl_file_text_get_cb; + itc->func.content_get = gl_file_content_get_cb; bd->itc = itc; //Group Index Item Class Elm_Genlist_Item_Class *group_itc; group_itc = elm_genlist_item_class_new(); group_itc->item_style = "group_index"; - group_itc->func.text_get = gl_file_text_get_cb; + group_itc->func.text_get = gl_group_text_get_cb; bd->group_itc = group_itc; bd->genlist = genlist; @@ -262,6 +391,7 @@ file_browser_term(void) if (!bd) return; if (bd->col_edc) brows_file_free(bd->col_edc); + if (bd->workspace) brows_file_free(bd->workspace); elm_genlist_item_class_free(bd->itc); elm_genlist_item_class_free(bd->group_itc); diff --git a/src/bin/main.c b/src/bin/main.c index 1a03a32..c2124c1 100644 --- a/src/bin/main.c +++ b/src/bin/main.c @@ -223,7 +223,8 @@ tools_set(void) } static void -args_dispatch(int argc, char **argv, char *edc_path, char *edj_path, +args_dispatch(int argc, char **argv, + char *edc_path, char *edj_path, char *workspace_path, Eina_List **img_path, Eina_List **snd_path, Eina_List **fnt_path, Eina_List **dat_path, Eina_Bool *default_edc, Eina_Bool *template, @@ -235,6 +236,8 @@ args_dispatch(int argc, char **argv, char *edc_path, char *edj_path, Eina_List *sd = NULL; Eina_List *dd = NULL; + char *wd = NULL; + Eina_Bool quit = EINA_FALSE; Eina_Bool help = EINA_FALSE; @@ -259,6 +262,8 @@ args_dispatch(int argc, char **argv, char *edc_path, char *edj_path, "path", ECORE_GETOPT_TYPE_STR), ECORE_GETOPT_APPEND_METAVAR('d', "dd", "Data path", "path", ECORE_GETOPT_TYPE_STR), + ECORE_GETOPT_STORE('w', "wd", "Workspace path", + ECORE_GETOPT_TYPE_STR), ECORE_GETOPT_VERSION('v', "version"), ECORE_GETOPT_COPYRIGHT('c', "copyright"), ECORE_GETOPT_LICENSE('l', "license"), @@ -273,6 +278,7 @@ args_dispatch(int argc, char **argv, char *edc_path, char *edj_path, ECORE_GETOPT_VALUE_LIST(sd), ECORE_GETOPT_VALUE_LIST(fd), ECORE_GETOPT_VALUE_LIST(dd), + ECORE_GETOPT_VALUE_STR(wd), ECORE_GETOPT_VALUE_BOOL(quit), ECORE_GETOPT_VALUE_BOOL(quit), ECORE_GETOPT_VALUE_BOOL(quit), @@ -336,6 +342,7 @@ defaults: *dat_path = eina_list_append(*dat_path, eina_stringshare_add(s)); free(s); } + if (wd) sprintf(workspace_path, "%s", wd); ecore_getopt_list_free(id); ecore_getopt_list_free(fd); @@ -349,14 +356,17 @@ config_data_set(app_data *ad, int argc, char **argv, Eina_Bool *default_edc, { char edc_path[PATH_MAX] = { 0, }; char edj_path[PATH_MAX] = { 0, }; + char workspace_path[PATH_MAX] = { 0, }; Eina_List *img_path = NULL; Eina_List *snd_path = NULL; Eina_List *fnt_path = NULL; Eina_List *dat_path = NULL; - args_dispatch(argc, argv, edc_path, edj_path, &img_path, &snd_path, - &fnt_path, &dat_path, default_edc, template, PATH_MAX); - if (!config_init(edc_path, edj_path, img_path, snd_path, fnt_path, dat_path)) + args_dispatch(argc, argv, edc_path, edj_path, workspace_path, + &img_path, &snd_path, &fnt_path, &dat_path, + default_edc, template, PATH_MAX); + if (!config_init(edc_path, edj_path, workspace_path, + img_path, snd_path, fnt_path, dat_path)) return EINA_FALSE; config_update_cb_set(config_update_cb, ad); diff --git a/src/include/config_data.h b/src/include/config_data.h index 562a6b5..3e0ca07 100644 --- a/src/include/config_data.h +++ b/src/include/config_data.h @@ -3,10 +3,11 @@ #define MAX_VIEW_SCALE 5.0 #define MIN_VIEW_SCALE 0.1 -Eina_Bool config_init(const char *input_path, const char *output_path, Eina_List *img_path, Eina_List *snd_path, Eina_List *fnt_path, Eina_List *dat_path); +Eina_Bool config_init(const char *input_path, const char *output_path, const char *workspace_path, Eina_List *img_path, Eina_List *snd_path, Eina_List *fnt_path, Eina_List *dat_path); void config_term(void); const char *config_input_path_get(void); const char *config_output_path_get(void); +const char *config_workspace_path_get(void); const char *config_img_path_get(void); const char *config_snd_path_get(void); const char *config_fnt_path_get(void);