hermet pushed a commit to branch master. http://git.enlightenment.org/tools/enventor.git/commit/?id=d9cbfba323c10c7e29defb2cad1daafb2faa4594
commit d9cbfba323c10c7e29defb2cad1daafb2faa4594 Author: YeongJong Lee <[email protected]> Date: Wed Nov 30 13:25:56 2016 +0900 edc_navigator: Add dragable bar for edc_navigator Summary: edc_navigator can be resized. in order to prevent collision between edc_navigator and file_browser, limit the size to half each other. Test Plan: 1. Run enventor 2-1. Drag the bar between text editor and edc_navigator 2-2. Toggle edc_navigator using key F10 3. Check edc_navigator size is saved after restart envertor Reviewers: Jaehyun_Cho, Hermet Differential Revision: https://phab.enlightenment.org/D4439 --- data/themes/default/layout_common.edc | 172 +++++++++++++++++++++++++++++++--- src/bin/base_gui.c | 16 ++++ src/bin/config_data.c | 22 +++++ src/bin/edc_navigator.c | 75 +++++++++++++++ src/include/common.h | 2 +- src/include/config_data.h | 2 + src/include/edc_navigator.h | 4 + 7 files changed, 281 insertions(+), 12 deletions(-) diff --git a/data/themes/default/layout_common.edc b/data/themes/default/layout_common.edc index 2c02872..061a38d 100644 --- a/data/themes/default/layout_common.edc +++ b/data/themes/default/layout_common.edc @@ -2422,28 +2422,26 @@ group { "main_layout"; to_y: "elm.swallow.file_tab"; } align: 0 0; - min: 200 0; - max: 0 -1; fixed: 1 0; visible: 0; } desc { "visible"; inherit: "default"; - align: 1 0; rel1 { relative: 1.0 0.0; - } - rel2 { - relative: 1.0 0.0; - to_y: "elm.swallow.file_tab"; + to: "elm.bar.right"; } visible: 1; } } spacer { "whole_left"; desc { "default"; - rel2.relative: 0.0 1.0; - rel2.to: "elm.swallow.edc_navigator"; + rel2.relative: 0.5 1.0; + } + } + spacer { "whole_right"; + desc { "default"; + rel1.relative: 0.5 0.0; } } spacer { "elm.bar.left"; @@ -2455,8 +2453,21 @@ group { "main_layout"; max: 0 99999; min: 0 14; fixed: 1 1; - rel1.relative: 0.0 0.5; - rel2.relative: 1.0 0.5; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + } + } + spacer { "elm.bar.right"; + dragable { confine: "whole_right"; + x: 1 1 1; + y: 0 0 0; + } + desc { "default"; + max: 0 99999; + min: 0 14; + fixed: 1 1; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; } } spacer { "elm.bar.event_left"; @@ -2467,6 +2478,14 @@ group { "main_layout"; rel2.relative: 1.0 0.0; } } + spacer { "elm.bar.event_right"; + desc { "default"; + rel1.to_x: "elm.bar.right"; + rel2.to_x: "elm.bar.right"; + rel2.to_y: "elm.swallow.file_tab"; + rel2.relative: 1.0 0.0; + } + } swallow { "bar_left"; dragable.events: "elm.bar.left"; desc { "default"; @@ -2480,6 +2499,19 @@ group { "main_layout"; color: 0 0 0 0; } } + swallow { "bar_right"; + dragable.events: "elm.bar.right"; + desc { "default"; + min: 10 0; + max: 99999 99999; + fixed: 1 0; + rel1.to_x: "elm.bar.event_right"; + rel1.relative: 0.0 0.25; + rel2.to: "elm.bar.event_right"; + rel2.relative: 1.0 0.75; + color: 0 0 0 0; + } + } rect { "bar_left1"; repeat_events: 1; desc { "default"; @@ -2500,6 +2532,26 @@ group { "main_layout"; color: 0 0 0 0; } } + rect { "bar_right1"; + repeat_events: 1; + desc { "default"; + fixed: 1 1; + rel1.to: "bar_right"; + rel2.to: "bar_right"; + rel2.relative: 0.5 1.0; + color: 0 0 0 0; + } + } + rect { "bar_right2"; + repeat_events: 1; + desc { "default"; + fixed: 1 1; + rel1.to: "bar_right"; + rel1.relative: 0.5 0.0; + rel2.to: "bar_right"; + color: 0 0 0 0; + } + } image { "glow1a_left"; nomouse; desc { "default"; @@ -2566,6 +2618,72 @@ group { "main_layout"; color: 255 255 255 255; } } + image { "glow1a_right"; + nomouse; + desc { "default"; + image.normal: "downlight_glow_left.png"; + image.border: 0 3 0 0; + max: 32 99999; + rel2.to_x: "elm.bar.right"; + 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_right"; + nomouse; + desc { "default"; + image.normal: "downlight_glow_right.png"; + max: 4 99999; + rel1.to_x: "elm.bar.right"; + 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_right"; + nomouse; + desc { "default"; + image.normal: "downlight_glow_left.png"; + max: 4 99999; + rel2.to_x: "elm.bar.right"; + 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_right"; + nomouse; + desc { "default"; + image.normal: "downlight_glow_right.png"; + image.border: 0 3 0 0; + max: 32 99999; + rel1.to_x: "elm.bar.right"; + 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"; @@ -2595,6 +2713,10 @@ group { "main_layout"; action: STATE_SET "default"; target: "elm.swallow.edc_navigator"; transition: DECELERATE 0.25; + after: "edc_navigator_hide_done"; + } + program { "edc_navigator_hide_done"; + action: SIGNAL_EMIT "elm,state,edc_navigator_hide,done" ""; } program { "statusbar_show"; signal: "elm,state,statusbar,show"; @@ -2659,6 +2781,34 @@ group { "main_layout"; target: "glow2a_left"; target: "glow2b_left"; } + program { "right_bar_mouse_in1"; + signal: "mouse,in"; source: "bar_right1"; + action: STATE_SET "active"; + transition: BOUNCE 0.4 0.5 4; + target: "glow1a_right"; + target: "glow1b_right"; + } + program { "right_bar_mouse_out1"; + signal: "mouse,out"; source: "bar_right1"; + action: STATE_SET "default"; + transition: DECELERATE 0.5; + target: "glow1a_right"; + target: "glow1b_right"; + } + program { "right_bar_mouse_in2"; + signal: "mouse,in"; source: "bar_right2"; + action: STATE_SET "active"; + transition: BOUNCE 0.4 0.5 4; + target: "glow2a_right"; + target: "glow2b_right"; + } + program { "right_bar_mouse_out2"; + signal: "mouse,out"; source: "bar_right2"; + action: STATE_SET "default"; + transition: DECELERATE 0.5; + target: "glow2a_right"; + target: "glow2b_right"; + } } } diff --git a/src/bin/base_gui.c b/src/bin/base_gui.c index e754db7..3d419cb 100644 --- a/src/bin/base_gui.c +++ b/src/bin/base_gui.c @@ -146,6 +146,18 @@ base_edc_navigator_deselect(void) edc_navigator_deselect(); } +static void +edc_navigator_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,edc_navigator_hide,done", "", + edc_navigator_hide_done); + edc_navigator_hide(); +} + void base_edc_navigator_toggle(Eina_Bool toggle) { base_data *bd = g_bd; @@ -157,9 +169,13 @@ void base_edc_navigator_toggle(Eina_Bool toggle) { base_edc_navigator_group_update(); elm_object_signal_emit(bd->layout, "elm,state,edc_navigator,show", ""); + edc_navigator_show(); } else { + elm_object_signal_callback_add(bd->layout, + "elm,state,edc_navigator_hide,done", "", + edc_navigator_hide_done, bd); elm_object_signal_emit(bd->layout, "elm,state,edc_navigator,hide", ""); edc_navigator_deselect(); } diff --git a/src/bin/config_data.c b/src/bin/config_data.c index 4419dd6..c619340 100644 --- a/src/bin/config_data.c +++ b/src/bin/config_data.c @@ -24,6 +24,7 @@ typedef struct config_s double editor_size; double console_size; double file_browser_size; + double edc_navigator_size; void (*update_cb)(void *data); void *update_cb_data; @@ -186,6 +187,7 @@ config_load(void) cd->editor_size = DEFAULT_EDITOR_SIZE; cd->console_size = DEFAULT_CONSOLE_SIZE; cd->file_browser_size = DEFAULT_FILE_BROWSER_SIZE; + cd->edc_navigator_size = DEFAULT_EDC_NAVIGATOR_SIZE; cd->stats_bar = EINA_TRUE; cd->linenumber = EINA_TRUE; cd->part_highlight = EINA_TRUE; @@ -291,6 +293,8 @@ eddc_init(void) 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, "edc_navigator_size", + edc_navigator_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", @@ -1099,3 +1103,21 @@ config_edc_navigator_get(void) return cd->edc_navigator; } + +void +config_edc_navigator_size_set(double size) +{ + config_data *cd = g_cd; + EINA_SAFETY_ON_NULL_RETURN(cd); + + cd->edc_navigator_size = size; +} + +double +config_edc_navigator_size_get(void) +{ + config_data *cd = g_cd; + EINA_SAFETY_ON_NULL_RETURN_VAL(cd, 0.0); + + return cd->edc_navigator_size; +} diff --git a/src/bin/edc_navigator.c b/src/bin/edc_navigator.c index a3f5c70..440f030 100644 --- a/src/bin/edc_navigator.c +++ b/src/bin/edc_navigator.c @@ -1351,6 +1351,44 @@ gl_contract_request_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.right", &w, NULL); + if (w > 0.99) + { + config_edc_navigator_set(EINA_FALSE); + tools_edc_navigator_update(EINA_FALSE); + config_edc_navigator_size_set(0.0); + } + else + config_edc_navigator_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.right", &w, NULL); + if (w > 0.99) + { + config_edc_navigator_set(EINA_TRUE); + tools_edc_navigator_update(EINA_FALSE); + } +} /*****************************************************************************/ /* Externally accessible calls */ /*****************************************************************************/ @@ -1536,9 +1574,21 @@ edc_navigator_init(Evas_Object *parent) nd->program_itc = 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_right", bar); + nd->base_layout = base_layout; nd->genlist = genlist; + if (config_edc_navigator_get()) + config_edc_navigator_size_set(config_edc_navigator_size_get()); + return base_layout; } @@ -1585,3 +1635,28 @@ edc_navigator_tools_visible_set(Eina_Bool visible) else elm_object_signal_emit(nd->base_layout, "elm,state,tools,hide", ""); } + +void +edc_navigator_show() +{ + navi_data *nd = g_nd; + if (!nd) return; + + Evas_Object *main_layout = evas_object_smart_parent_get(nd->base_layout); + if (!main_layout) return; + + double w = config_edc_navigator_size_get(); + edje_object_part_drag_value_set(main_layout, "elm.bar.right", w, 0.0); +} + +void +edc_navigator_hide() +{ + navi_data *nd = g_nd; + if (!nd) return; + + Evas_Object *main_layout = evas_object_smart_parent_get(nd->base_layout); + if (!main_layout) return; + + edje_object_part_drag_value_set(main_layout, "elm.bar.right", 1.0, 0.0); +} diff --git a/src/include/common.h b/src/include/common.h index c490ca3..50f4c1e 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 14 +#define ENVENTOR_CONFIG_VERSION 15 #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 dba9e9f..b87aa74 100644 --- a/src/include/config_data.h +++ b/src/include/config_data.h @@ -67,6 +67,8 @@ 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); +void config_edc_navigator_size_set(double size); +double config_edc_navigator_size_get(void); Eina_Bool config_mirror_mode_get(void); void config_mirror_mode_set(Eina_Bool mirror_mode); void config_red_alert_set(Eina_Bool enabled); diff --git a/src/include/edc_navigator.h b/src/include/edc_navigator.h index d48ff90..1c1ac00 100644 --- a/src/include/edc_navigator.h +++ b/src/include/edc_navigator.h @@ -1,6 +1,10 @@ +#define DEFAULT_EDC_NAVIGATOR_SIZE 0.3 + Evas_Object *edc_navigator_init(Evas_Object *parent); void edc_navigator_term(void); void edc_navigator_group_update(const char *cur_group); void edc_navigator_deselect(void); void edc_navigator_tools_set(void); void edc_navigator_tools_visible_set(Eina_Bool visible); +void edc_navigator_show(); +void edc_navigator_hide(); --
