From c13134d6095aba439c2888056dd9e897844f1845 Mon Sep 17 00:00:00 2001 From: YeongJong Lee Date: Tue, 29 Nov 2016 12:51:29 +0900 Subject: [PATCH] file_browser: Add dragable bar for file_browser Summary: file_browser can be resized. Test Plan: 1. Run enventor 2-1. Drag the bar between file_browser and live view 2-2. Toggle file_browser using key F9 3. Check file_browser size is saved after restart envertor Reviewers: Jaehyun_Cho, Hermet Differential Revision: https://phab.enlightenment.org/D4431 --- data/themes/default/layout_common.edc | 167 +++++++++++++++++++++++++- src/bin/base_gui.c | 24 +++- src/bin/config_data.c | 22 ++++ src/bin/file_browser.c | 75 ++++++++++++ src/include/common.h | 2 +- src/include/config_data.h | 2 + src/include/file_browser.h | 4 + 7 files changed, 291 insertions(+), 5 deletions(-) diff --git a/data/themes/default/layout_common.edc b/data/themes/default/layout_common.edc index e912c72..2c02872 100644 --- a/data/themes/default/layout_common.edc +++ b/data/themes/default/layout_common.edc @@ -12,6 +12,8 @@ images { image: "navi_group.png" COMP; image: "bg_demo.png" COMP; image: "help_bg.png" COMP; + image: "downlight_glow_left.png" COMP; + image: "downlight_glow_right.png" COMP; } group { "fileselector_layout"; @@ -2396,13 +2398,16 @@ group { "main_layout"; to_y: "elm.swallow.file_tab"; } align: 1 0; - min: 200 0; fixed: 1 0; visible: 0; } desc { "visible"; inherit: "default"; - align: 0 0; + rel2 { + relative: 1.0 0.0; + to_x: "elm.bar.left"; + to_y: "elm.swallow.file_tab"; + } visible: 1; } } @@ -2435,6 +2440,132 @@ group { "main_layout"; visible: 1; } } + spacer { "whole_left"; + desc { "default"; + rel2.relative: 0.0 1.0; + rel2.to: "elm.swallow.edc_navigator"; + } + } + spacer { "elm.bar.left"; + dragable { confine: "whole_left"; + x: 1 1 1; + y: 0 0 0; + } + desc { "default"; + max: 0 99999; + min: 0 14; + fixed: 1 1; + rel1.relative: 0.0 0.5; + rel2.relative: 1.0 0.5; + } + } + spacer { "elm.bar.event_left"; + desc { "default"; + rel1.to_x: "elm.bar.left"; + rel2.to_x: "elm.bar.left"; + rel2.to_y: "elm.swallow.file_tab"; + rel2.relative: 1.0 0.0; + } + } + swallow { "bar_left"; + dragable.events: "elm.bar.left"; + desc { "default"; + min: 10 0; + max: 99999 99999; + fixed: 1 0; + rel1.to_x: "elm.bar.event_left"; + rel1.relative: 0.0 0.25; + rel2.to: "elm.bar.event_left"; + rel2.relative: 1.0 0.75; + color: 0 0 0 0; + } + } + rect { "bar_left1"; + repeat_events: 1; + desc { "default"; + fixed: 1 1; + rel1.to: "bar_left"; + rel2.to: "bar_left"; + rel2.relative: 0.5 1.0; + color: 0 0 0 0; + } + } + rect { "bar_left2"; + repeat_events: 1; + desc { "default"; + fixed: 1 1; + rel1.to: "bar_left"; + rel1.relative: 0.5 0.0; + rel2.to: "bar_left"; + color: 0 0 0 0; + } + } + image { "glow1a_left"; + nomouse; + desc { "default"; + image.normal: "downlight_glow_left.png"; + image.border: 0 3 0 0; + max: 32 99999; + rel2.to_x: "elm.bar.left"; + rel2.to_y: "elm.swallow.file_tab"; + rel2.relative: 1.0 0.0; + color: 255 255 255 0; + align: 1.0 0.5; + } + desc { "active"; + inherit: "default"; + color: 255 255 255 255; + } + } + image { "glow1b_left"; + nomouse; + desc { "default"; + image.normal: "downlight_glow_right.png"; + max: 4 99999; + rel1.to_x: "elm.bar.left"; + rel2.to_y: "elm.swallow.file_tab"; + rel2.relative: 1.0 0.0; + color: 255 255 255 0; + align: 0.0 0.5; + } + desc { "active"; + inherit: "default"; + color: 255 255 255 255; + } + } + image { "glow2a_left"; + nomouse; + desc { "default"; + image.normal: "downlight_glow_left.png"; + max: 4 99999; + rel2.to_x: "elm.bar.left"; + rel2.to_y: "elm.swallow.file_tab"; + rel2.relative: 1.0 0.0; + color: 255 255 255 0; + align: 1.0 0.5; + } + desc { "active"; + inherit: "default"; + color: 255 255 255 255; + } + } + image { "glow2b_left"; + nomouse; + desc { "default"; + image.normal: "downlight_glow_right.png"; + image.border: 0 3 0 0; + max: 32 99999; + rel1.to_x: "elm.bar.left"; + rel2.to_y: "elm.swallow.file_tab"; + rel2.relative: 1.0 0.0; + color: 255 255 255 0; + align: 0.0 0.5; + } + desc { "active"; + inherit: "default"; + color: 255 255 255 255; + } + } } programs { program { "file_browser_show"; @@ -2448,6 +2579,10 @@ group { "main_layout"; action: STATE_SET "default"; target: "elm.swallow.file_browser"; transition: DECELERATE 0.25; + after: "file_browser_hide_done"; + } + program { "file_browser_hide_done"; + action: SIGNAL_EMIT "elm,state,file_browser_hide,done" ""; } program { "edc_navigator_show"; signal: "elm,state,edc_navigator,show"; @@ -2496,6 +2631,34 @@ group { "main_layout"; target: "error_alert"; transition: DECELERATE 1; } + program { "left_bar_mouse_in1"; + signal: "mouse,in"; source: "bar_left1"; + action: STATE_SET "active"; + transition: BOUNCE 0.4 0.5 4; + target: "glow1a_left"; + target: "glow1b_left"; + } + program { "left_bar_mouse_out1"; + signal: "mouse,out"; source: "bar_left1"; + action: STATE_SET "default"; + transition: DECELERATE 0.5; + target: "glow1a_left"; + target: "glow1b_left"; + } + program { "left_bar_mouse_in2"; + signal: "mouse,in"; source: "bar_left2"; + action: STATE_SET "active"; + transition: BOUNCE 0.4 0.5 4; + target: "glow2a_left"; + target: "glow2b_left"; + } + program { "left_bar_mouse_out2"; + signal: "mouse,out"; source: "bar_left2"; + action: STATE_SET "default"; + transition: DECELERATE 0.5; + target: "glow2a_left"; + target: "glow2b_left"; + } } } diff --git a/src/bin/base_gui.c b/src/bin/base_gui.c index 3e4f5e7..e754db7 100644 --- a/src/bin/base_gui.c +++ b/src/bin/base_gui.c @@ -105,6 +105,18 @@ base_file_tab_toggle(Eina_Bool toggle) } } +static void +file_browser_hide_done(void *data, Evas_Object *obj EINA_UNUSED, + const char *emission EINA_UNUSED, + const char *source EINA_UNUSED) +{ + base_data *bd = data; + elm_object_signal_callback_del(bd->layout, + "elm,state,file_browser_hide,done", "", + file_browser_hide_done); + file_browser_hide(); +} + void base_file_browser_toggle(Eina_Bool toggle) { @@ -114,9 +126,17 @@ base_file_browser_toggle(Eina_Bool toggle) if (toggle) config_file_browser_set(!config_file_browser_get()); if (config_file_browser_get()) - elm_object_signal_emit(bd->layout, "elm,state,file_browser,show", ""); + { + elm_object_signal_emit(bd->layout, "elm,state,file_browser,show", ""); + file_browser_show(); + } else - elm_object_signal_emit(bd->layout, "elm,state,file_browser,hide", ""); + { + elm_object_signal_callback_add(bd->layout, + "elm,state,file_browser_hide,done", "", + file_browser_hide_done, bd); + elm_object_signal_emit(bd->layout, "elm,state,file_browser,hide", ""); + } } void diff --git a/src/bin/config_data.c b/src/bin/config_data.c index 658ef28..4419dd6 100644 --- a/src/bin/config_data.c +++ b/src/bin/config_data.c @@ -23,6 +23,7 @@ typedef struct config_s float font_scale; double editor_size; double console_size; + double file_browser_size; void (*update_cb)(void *data); void *update_cb_data; @@ -184,6 +185,7 @@ config_load(void) cd->win_size_h = WIN_DEFAULT_H; cd->editor_size = DEFAULT_EDITOR_SIZE; cd->console_size = DEFAULT_CONSOLE_SIZE; + cd->file_browser_size = DEFAULT_FILE_BROWSER_SIZE; cd->stats_bar = EINA_TRUE; cd->linenumber = EINA_TRUE; cd->part_highlight = EINA_TRUE; @@ -287,6 +289,8 @@ eddc_init(void) editor_size, EET_T_DOUBLE); EET_DATA_DESCRIPTOR_ADD_BASIC(edd_base, config_data, "console_size", console_size, EET_T_DOUBLE); + EET_DATA_DESCRIPTOR_ADD_BASIC(edd_base, config_data, "file_browser_size", + file_browser_size, EET_T_DOUBLE); EET_DATA_DESCRIPTOR_ADD_BASIC(edd_base, config_data, "view_size_w", view_size_w, EET_T_INT); EET_DATA_DESCRIPTOR_ADD_BASIC(edd_base, config_data, "view_size_h", @@ -1060,6 +1064,24 @@ config_file_browser_get(void) return cd->file_browser; } +void +config_file_browser_size_set(double size) +{ + config_data *cd = g_cd; + EINA_SAFETY_ON_NULL_RETURN(cd); + + cd->file_browser_size = size; +} + +double +config_file_browser_size_get(void) +{ + config_data *cd = g_cd; + EINA_SAFETY_ON_NULL_RETURN_VAL(cd, 0.0); + + return cd->file_browser_size; +} + void config_edc_navigator_set(Eina_Bool enabled) { diff --git a/src/bin/file_browser.c b/src/bin/file_browser.c index eb65bb2..58ceaf2 100644 --- a/src/bin/file_browser.c +++ b/src/bin/file_browser.c @@ -624,6 +624,44 @@ show_all_check_changed_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, } } +static void +dragable_bar_mouse_up_cb(void *data, Evas *e EINA_UNUSED, + Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + Evas_Object *main_layout = data; + if (!main_layout) return; + + double w; + edje_object_part_drag_value_get + (elm_layout_edje_get(main_layout), "elm.bar.left", &w, NULL); + if (w < 0.01) + { + config_file_browser_set(EINA_FALSE); + tools_file_browser_update(EINA_FALSE); + config_file_browser_size_set(0.0); + } + else + config_file_browser_size_set(w); +} + +static void +dragable_bar_mouse_down_cb(void *data, Evas *e EINA_UNUSED, + Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + Evas_Object *main_layout = data; + if (!main_layout) return; + + double w; + edje_object_part_drag_value_get + (elm_layout_edje_get(main_layout), "elm.bar.left", &w, NULL); + if (w < 0.01) + { + config_file_browser_set(EINA_TRUE); + tools_file_browser_update(EINA_FALSE); + } +} /*****************************************************************************/ /* Externally accessible calls */ /*****************************************************************************/ @@ -772,11 +810,23 @@ file_browser_init(Evas_Object *parent) search_itc->func.content_get = gl_search_content_get_cb; bd->search_itc = search_itc; + //Dragable Bar + Evas_Object *bar = evas_object_rectangle_add(evas_object_evas_get(parent)); + evas_object_color_set(bar, 0, 0, 0, 0); + evas_object_event_callback_add(bar, EVAS_CALLBACK_MOUSE_DOWN, + dragable_bar_mouse_down_cb, parent); + evas_object_event_callback_add(bar, EVAS_CALLBACK_MOUSE_UP, + dragable_bar_mouse_up_cb, parent); + elm_object_part_content_set(parent, "bar_left", bar); + bd->base_layout = base_layout; bd->search_entry = search_entry; bd->genlist = genlist; bd->show_all_check = show_all_check; + if (config_file_browser_get()) + config_file_browser_size_set(config_file_browser_size_get()); + elm_object_disabled_set(base_layout, EINA_TRUE); return base_layout; @@ -923,3 +973,28 @@ file_browser_selected_file_main_set(void) config_input_path_set(file->path); elm_genlist_realized_items_update(bd->genlist); } + +void +file_browser_show() +{ + brows_data *bd = g_bd; + if (!bd) return; + + Evas_Object *main_layout = evas_object_smart_parent_get(bd->base_layout); + if (!main_layout) return; + + double w = config_file_browser_size_get(); + edje_object_part_drag_value_set(main_layout, "elm.bar.left", w, 0.0); +} + +void +file_browser_hide() +{ + brows_data *bd = g_bd; + if (!bd) return; + + Evas_Object *main_layout = evas_object_smart_parent_get(bd->base_layout); + if (!main_layout) return; + + edje_object_part_drag_value_set(main_layout, "elm.bar.left", 0.0, 0.0); +} diff --git a/src/include/common.h b/src/include/common.h index 613f8f3..c490ca3 100644 --- a/src/include/common.h +++ b/src/include/common.h @@ -59,7 +59,7 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n" #define ROUNDING(x, dig) (floor((x) * pow(10, dig) + 0.5) / pow(10, dig)) -#define ENVENTOR_CONFIG_VERSION 13 +#define ENVENTOR_CONFIG_VERSION 14 #define EVENT_KEY_MODIFIER_CHECK(NAME, MASK) \ ((MASK & ECORE_EVENT_MODIFIER_##NAME) && \ diff --git a/src/include/config_data.h b/src/include/config_data.h index 31b902a..dba9e9f 100644 --- a/src/include/config_data.h +++ b/src/include/config_data.h @@ -63,6 +63,8 @@ void config_smart_undo_redo_set(Eina_Bool smart_undo_redo); Eina_Bool config_smart_undo_redo_get(void); void config_file_browser_set(Eina_Bool enabled); Eina_Bool config_file_browser_get(void); +void config_file_browser_size_set(double size); +double config_file_browser_size_get(void); void config_edc_navigator_set(Eina_Bool enabled); Eina_Bool config_edc_navigator_get(void); Eina_Bool config_mirror_mode_get(void); diff --git a/src/include/file_browser.h b/src/include/file_browser.h index e341d51..852095f 100644 --- a/src/include/file_browser.h +++ b/src/include/file_browser.h @@ -1,3 +1,5 @@ +#define DEFAULT_FILE_BROWSER_SIZE 0.3 + Evas_Object *file_browser_init(Evas_Object *parent); void file_browser_term(void); void file_browser_workspace_set(const char *workspace_dir); @@ -7,3 +9,5 @@ void file_browser_refresh(void); void file_browser_selected_file_main_set(void); void file_brwser_refresh(void); void file_browser_main_file_unset(void); +void file_browser_show(); +void file_browser_hide();