file_browser: Support "Show All Files" function.

By default, file browser shows resource type files only such as edc,
image, sound, and font type files.
If the "Show All Files" check is on, then file browser shows all types
of files.

@T3390
This commit is contained in:
Jaehyun Cho 2016-05-02 15:20:17 +09:00
parent 48fb17f938
commit a176e619e6
2 changed files with 86 additions and 7 deletions

View File

@ -59,6 +59,23 @@ group { "workspace";
to: "title_base";
relative: 0.0 1.0;
}
rel2 {
to: "show_all_check";
relative: 1.0 0.0;
}
}
}
swallow { "show_all_check";
scale: 1.0;
desc { "default";
rel1 {
to: "title_base";
relative: 0.0 1.0;
}
min: 0 22;
max: -1 22;
align: 0.0 1.0;
fixed: 0 1;
}
}
}

View File

@ -3,7 +3,11 @@
typedef enum
{
FILE_BROWSER_FILE_TYPE_DIR = 0,
FILE_BROWSER_FILE_TYPE_FILE
FILE_BROWSER_FILE_TYPE_EDC,
FILE_BROWSER_FILE_TYPE_IMAGE,
FILE_BROWSER_FILE_TYPE_SOUND,
FILE_BROWSER_FILE_TYPE_FONT,
FILE_BROWSER_FILE_TYPE_OTHERS
} File_Browser_File_Type;
typedef struct file_browser_file_s brows_file;
@ -26,6 +30,7 @@ typedef struct file_browser_s
Evas_Object *workspace_ly;
Evas_Object *refresh_btn;
Evas_Object *genlist;
Evas_Object *show_all_check;
Elm_Genlist_Item_Class *itc;
} brows_data;
@ -141,6 +146,10 @@ gl_exp(void *data, Evas_Object *obj, void *event_info)
brows_file *sub_file = NULL;
EINA_LIST_FOREACH(file->sub_file_list, l, sub_file)
{
if (!elm_check_state_get(bd->show_all_check) &&
(sub_file->type == FILE_BROWSER_FILE_TYPE_OTHERS))
continue;
Elm_Genlist_Item_Type type = ELM_GENLIST_ITEM_NONE;
if (sub_file->sub_file_list)
type = ELM_GENLIST_ITEM_TREE;
@ -168,6 +177,44 @@ file_strcmp_cb(const void *data1, const void *data2)
return strcmp(file1->name, file2->name);
}
static File_Browser_File_Type
brows_file_type_get(const char *file_path)
{
if (!file_path) return FILE_BROWSER_FILE_TYPE_OTHERS;
if (ecore_file_is_dir(file_path)) return FILE_BROWSER_FILE_TYPE_DIR;
const char *file_path_end = file_path + strlen(file_path);
char *file_ext = strrchr(file_path, '.');
if (!file_ext) return FILE_BROWSER_FILE_TYPE_OTHERS;
file_ext++;
if (file_ext >= file_path_end) return FILE_BROWSER_FILE_TYPE_OTHERS;
if (!strcmp(file_ext, "edc") || !strcmp(file_ext, "EDC"))
return FILE_BROWSER_FILE_TYPE_EDC;
if (!strcmp(file_ext, "png") || !strcmp(file_ext, "PNG") ||
!strcmp(file_ext, "jpg") || !strcmp(file_ext, "JPG") ||
!strcmp(file_ext, "jpeg") || !strcmp(file_ext, "JPEG") ||
!strcmp(file_ext, "bmp") || !strcmp(file_ext, "BMP") ||
!strcmp(file_ext, "gif") || !strcmp(file_ext, "GIF") ||
!strcmp(file_ext, "svg") || !strcmp(file_ext, "SVG"))
return FILE_BROWSER_FILE_TYPE_IMAGE;
if (!strcmp(file_ext, "wav") || !strcmp(file_ext, "WAV") ||
!strcmp(file_ext, "ogg") || !strcmp(file_ext, "OGG") ||
!strcmp(file_ext, "mp3") || !strcmp(file_ext, "MP3"))
return FILE_BROWSER_FILE_TYPE_SOUND;
if (!strcmp(file_ext, "ttf") || !strcmp(file_ext, "TTF") ||
!strcmp(file_ext, "fon") || !strcmp(file_ext, "FON"))
return FILE_BROWSER_FILE_TYPE_FONT;
return FILE_BROWSER_FILE_TYPE_OTHERS;
}
static brows_file *
brows_file_create(const char *file_path)
{
@ -185,12 +232,7 @@ brows_file_create(const char *file_path)
char *file_abs_path = ecore_file_realpath(file_path);
file->path = file_abs_path;
file->name = strdup(ecore_file_file_get(file_abs_path));
if (ecore_file_is_dir(file_abs_path))
file->type = FILE_BROWSER_FILE_TYPE_DIR;
else
file->type = FILE_BROWSER_FILE_TYPE_FILE;
file->type = brows_file_type_get(file_abs_path);
file->sub_file_list = sub_brows_file_list_create(file);
file->it = NULL;
@ -296,6 +338,19 @@ refresh_btn_clicked_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
file_browser_workspace_set(config_workspace_path_get());
}
static void
show_all_check_changed_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
brows_data *bd = g_bd;
if (!bd) return;
if (!bd->workspace) return;
gl_con_req(NULL, NULL, bd->workspace->it);
gl_exp_req(NULL, NULL, bd->workspace->it);
}
/*****************************************************************************/
/* Externally accessible calls */
/*****************************************************************************/
@ -376,6 +431,12 @@ file_browser_init(Evas_Object *parent)
elm_object_part_content_set(workspace_ly, "content", genlist);
Evas_Object *show_all_check = elm_check_add(workspace_ly);
elm_object_text_set(show_all_check, "Show All Files");
evas_object_smart_callback_add(show_all_check, "changed",
show_all_check_changed_cb, NULL);
elm_object_part_content_set(workspace_ly, "show_all_check", show_all_check);
//Item Class
Elm_Genlist_Item_Class *itc;
itc = elm_genlist_item_class_new();
@ -386,6 +447,7 @@ file_browser_init(Evas_Object *parent)
bd->workspace_ly = workspace_ly;
bd->genlist = genlist;
bd->show_all_check = show_all_check;
return workspace_ly;
}