diff --git a/src/bin/base_gui.c b/src/bin/base_gui.c index 9d80dcd..8a61085 100644 --- a/src/bin/base_gui.c +++ b/src/bin/base_gui.c @@ -91,9 +91,15 @@ base_file_tab_toggle(Eina_Bool toggle) if (toggle) config_file_tab_set(!config_file_tab_get()); if (config_file_tab_get()) - elm_object_signal_emit(bd->layout, "elm,state,file_tab,show", ""); + { + file_tab_disabled_set(EINA_FALSE); + elm_object_signal_emit(bd->layout, "elm,state,file_tab,show", ""); + } else - elm_object_signal_emit(bd->layout, "elm,state,file_tab,hide", ""); + { + file_tab_disabled_set(EINA_TRUE); + elm_object_signal_emit(bd->layout, "elm,state,file_tab,hide", ""); + } } void base_file_browser_toggle(Eina_Bool toggle) diff --git a/src/bin/file_mgr.c b/src/bin/file_mgr.c index 5434b22..ac4427b 100644 --- a/src/bin/file_mgr.c +++ b/src/bin/file_mgr.c @@ -53,9 +53,7 @@ warning_replace_btn_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { file_mgr_data *fmd = data; - Enventor_Item *it = enventor_object_main_file_set(base_enventor_get(), - config_input_path_get()); - base_text_editor_set(it); + facade_main_file_set(config_input_path_get()); warning_close(fmd); } diff --git a/src/bin/file_tab.c b/src/bin/file_tab.c index ce2f660..a3a2985 100644 --- a/src/bin/file_tab.c +++ b/src/bin/file_tab.c @@ -3,12 +3,13 @@ typedef struct file_tab_s { Evas_Object *list; - Evas_Object *out_box; + Evas_Object *box; + Elm_Object_Item *selected_it; //list selected item } file_data; typedef struct file_tab_it_s { - Enventor_Item *it; + Enventor_Item *enventor_it; file_data *fd; } file_tab_it; @@ -63,9 +64,31 @@ Eina_Bool file_tab_it_selected_set(Enventor_Item *enventor_it) EINA_LIST_FOREACH(list, l, it) { file_tab_it *fti = elm_object_item_data_get(it); - if (fti->it != enventor_it) continue; + if (fti->enventor_it != enventor_it) continue; elm_list_item_selected_set(it, EINA_TRUE); + fd->selected_it = it; + return EINA_TRUE; } + + fd->selected_it = NULL; + return EINA_FALSE; +} + +void file_tab_clear(void) +{ + file_data *fd = g_fd; + if (!fd) return; + + Eina_List *list = (Eina_List*) elm_list_items_get(fd->list); + Eina_List *l; + Elm_Object_Item *it; + + EINA_LIST_FOREACH(list, l, it) + { + file_tab_it *fti = elm_object_item_data_get(it); + free(fti); + } + elm_list_clear(fd->list); } Eina_Bool file_tab_it_add(Enventor_Item *enventor_it) @@ -102,7 +125,7 @@ Eina_Bool file_tab_it_add(Enventor_Item *enventor_it) goto err; } - fti->it = enventor_it; + fti->enventor_it = enventor_it; elm_list_item_append(fd->list, filename, NULL, NULL, NULL, fti); elm_list_go(fd->list); @@ -116,6 +139,23 @@ err: return EINA_FALSE; } +void +file_tab_disabled_set(Eina_Bool disabled) +{ + file_data *fd = g_fd; + if (!fd) return; + elm_object_disabled_set(fd->box, disabled); + + if (disabled) return; + + //Re-select item. This is a little tricky. + //When we disable a list, its selected item is dismissed. + //So, we manually select the item when list is enabled again. + if (!fd->selected_it) return; + elm_list_item_selected_set(fd->selected_it, EINA_FALSE); + elm_list_item_selected_set(fd->selected_it, EINA_TRUE); +} + Evas_Object * file_tab_init(Evas_Object *parent) { @@ -128,19 +168,19 @@ file_tab_init(Evas_Object *parent) g_fd = fd; //Outer Box - Evas_Object *out_box = elm_box_add(parent); - elm_box_padding_set(out_box, ELM_SCALE_SIZE(3), 0); - elm_box_horizontal_set(out_box, EINA_TRUE); + Evas_Object *box = elm_box_add(parent); + elm_box_padding_set(box, ELM_SCALE_SIZE(3), 0); + elm_box_horizontal_set(box, EINA_TRUE); //Left Button - Evas_Object *left_btn = elm_button_add(out_box); + Evas_Object *left_btn = elm_button_add(box); elm_object_style_set(left_btn, ENVENTOR_NAME); elm_object_focus_allow_set(left_btn, EINA_FALSE); evas_object_size_hint_weight_set(left_btn, 0, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(left_btn, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_smart_callback_add(left_btn, "clicked", left_btn_clicked_cb, fd); evas_object_show(left_btn); - elm_box_pack_end(out_box, left_btn); + elm_box_pack_end(box, left_btn); //Left Button Icon Evas_Object *img1 = elm_image_add(left_btn); @@ -148,15 +188,15 @@ file_tab_init(Evas_Object *parent) elm_object_content_set(left_btn, img1); //Right Button - Evas_Object *right_btn = elm_button_add(out_box); + Evas_Object *right_btn = elm_button_add(box); elm_object_style_set(right_btn, ENVENTOR_NAME); - elm_object_focus_allow_set(left_btn, EINA_FALSE); + elm_object_focus_allow_set(right_btn, EINA_FALSE); evas_object_size_hint_weight_set(right_btn, 0, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(right_btn, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_smart_callback_add(right_btn, "clicked", right_btn_clicked_cb, fd); evas_object_show(right_btn); - elm_box_pack_end(out_box, right_btn); + elm_box_pack_end(box, right_btn); //Right Button Icon Evas_Object *img2 = elm_image_add(right_btn); @@ -164,8 +204,9 @@ file_tab_init(Evas_Object *parent) elm_object_content_set(right_btn, img2); //List - Evas_Object *list = elm_list_add(out_box); + Evas_Object *list = elm_list_add(box); elm_object_style_set(list, ENVENTOR_NAME); + elm_object_focus_allow_set(list, EINA_FALSE); elm_list_horizontal_set(list, EINA_TRUE); elm_scroller_policy_set(list, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); @@ -173,12 +214,12 @@ file_tab_init(Evas_Object *parent) EVAS_HINT_EXPAND); evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_show(list); - elm_box_pack_end(out_box, list); + elm_box_pack_end(box, list); - fd->out_box = out_box; + fd->box = box; fd->list = list; - return out_box; + return box; } void @@ -187,7 +228,7 @@ file_tab_term(void) file_data *fd = g_fd; if (!fd) return; - evas_object_del(fd->out_box); + evas_object_del(fd->box); free(fd); g_fd = NULL; diff --git a/src/bin/globals.c b/src/bin/globals.c index b1958ef..83da40e 100644 --- a/src/bin/globals.c +++ b/src/bin/globals.c @@ -1,3 +1,7 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #include "common.h" const char *DEFAULT_EDC_FORMAT = "enventor_XXXXXX.edc"; @@ -8,3 +12,19 @@ void mem_fail_msg(void) { EINA_LOG_ERR("Failed to allocate Memory!"); } + +Enventor_Item *facade_main_file_set(const char *path) +{ + Enventor_Item *it = enventor_object_main_file_set(base_enventor_get(), path); + if (!it) return NULL; + + file_tab_clear(); + file_tab_it_add(it); + file_tab_it_selected_set(it); + + base_text_editor_set(it); + base_title_set(path); + base_console_reset(); + + return it; +} diff --git a/src/bin/main.c b/src/bin/main.c index da97477..0773eac 100644 --- a/src/bin/main.c +++ b/src/bin/main.c @@ -592,14 +592,8 @@ enventor_setup(app_data *ad) enventor_common_setup(enventor); - ad->main_it = - enventor_object_main_file_set(enventor, config_input_path_get()); - file_tab_it_add(ad->main_it); - file_tab_it_selected_set(ad->main_it); - base_enventor_set(enventor); - base_text_editor_set(ad->main_it); - base_title_set(config_input_path_get()); + ad->main_it = facade_main_file_set(config_input_path_get()); base_live_view_set(enventor_object_live_view_get(enventor)); } diff --git a/src/bin/menu.c b/src/bin/menu.c index 2c684cb..8efa023 100644 --- a/src/bin/menu.c +++ b/src/bin/menu.c @@ -356,9 +356,7 @@ fileselector_save_done_cb(void *data, Evas_Object *obj, void *event_info) eina_stringshare_del(selected); return; } - Enventor_Item *it = enventor_object_main_file_set(enventor, selected); - base_text_editor_set(it); - base_title_set(selected); + facade_main_file_set(selected); } else if (is_edj) { @@ -432,11 +430,7 @@ fileselector_load_done_cb(void *data, Evas_Object *obj, void *event_info) return; } config_input_path_set(selected); - Enventor_Item *it = enventor_object_main_file_set(base_enventor_get(), - selected); - base_text_editor_set(it); - base_title_set(selected); - base_console_reset(); + facade_main_file_set(selected); fileselector_close(md); menu_close(md); file_mgr_reset(); diff --git a/src/bin/newfile.c b/src/bin/newfile.c index ac01ccd..1f4395d 100644 --- a/src/bin/newfile.c +++ b/src/bin/newfile.c @@ -57,11 +57,7 @@ newfile_set(Eina_Bool template_new) EINA_LOG_ERR(_("Cannot find file! \"%s\""), buf); return; } - Enventor_Item *eit = - enventor_object_main_file_set(base_enventor_get(), path); - base_text_editor_set(eit); - base_title_set(path); - base_console_reset(); + facade_main_file_set(path); file_mgr_reset(); } diff --git a/src/include/file_tab.h b/src/include/file_tab.h index d76f600..149fe89 100644 --- a/src/include/file_tab.h +++ b/src/include/file_tab.h @@ -2,3 +2,5 @@ Evas_Object *file_tab_init(Evas_Object *parent); void file_tab_term(void); Eina_Bool file_tab_it_add(Enventor_Item *it); Eina_Bool file_tab_it_selected_set(Enventor_Item *enventor_it); +void file_tab_disabled_set(Eina_Bool disabled); +void file_tab_clear(void); diff --git a/src/include/globals.h b/src/include/globals.h index 368725d..49d8ba6 100644 --- a/src/include/globals.h +++ b/src/include/globals.h @@ -3,3 +3,4 @@ extern char EDJE_PATH[PATH_MAX]; extern Eina_Prefix *PREFIX; extern const char *ENVENTOR_NAME; void mem_fail_msg(void); +Enventor_Item *facade_main_file_set(const char *path);