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();

-- 


Reply via email to