hermet pushed a commit to branch master.

http://git.enlightenment.org/tools/enventor.git/commit/?id=f0623301d9fda0456e76b8637126cd274f96ab91

commit f0623301d9fda0456e76b8637126cd274f96ab91
Author: Hermet Park <her...@hermet.pe.kr>
Date:   Thu Jun 30 16:50:20 2016 +0900

    file_browser/file_tab: ++ multi file support implementaion
---
 src/bin/file_browser.c    | 47 +++++++++++++++++++++++++++++++++++++++++++++++
 src/bin/file_tab.c        |  2 +-
 src/bin/globals.c         | 14 ++++++++++++++
 src/include/globals.h     |  1 +
 src/lib/Enventor_Legacy.h |  3 ++-
 src/lib/enventor_smart.c  | 45 +++++++++++++++++++++++++++++++++++++++++++++
 6 files changed, 110 insertions(+), 2 deletions(-)

diff --git a/src/bin/file_browser.c b/src/bin/file_browser.c
index fc4b146..53d17d7 100644
--- a/src/bin/file_browser.c
+++ b/src/bin/file_browser.c
@@ -55,6 +55,51 @@ static Eina_List *sub_brows_file_list_create(brows_file 
*file);
 static void brows_file_list_free(Eina_List *file_list);
 static void refresh_btn_clicked_cb(void *data EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, void *event_info EINA_UNUSED);
 
+static void
+gl_clicked_double_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
+                     void *event_info)
+{
+   Elm_Object_Item *it = event_info;
+   brows_file *file = elm_object_item_data_get(it);
+   if (!file)
+     {
+        EINA_LOG_ERR("No item data??");
+        return;
+     }
+
+   if (!file->path)
+     {
+        EINA_LOG_ERR("No item file path??");
+        return;
+     }
+
+   // Open a double clicked edc file.
+   if (!eina_str_has_extension(file->path, "edc")) return;
+   int selected_file_len = strlen(file->path);
+
+   //Let's check if the file is already opened or not.
+   Eina_List *sub_items =
+      (Eina_List *)enventor_object_sub_items_get(base_enventor_get());
+   Eina_List *l;
+   Enventor_Item *eit;
+   EINA_LIST_FOREACH(sub_items, l, eit)
+     {
+        const char *it_file_path = enventor_item_file_get(eit);
+        if (!it_file_path) continue;
+        if (selected_file_len != strlen(it_file_path)) continue;
+
+        //Ok, This selected file is already openend, let's activte the item.
+        if (!strcmp(file->path, it_file_path))
+          {
+             //TODO:
+             return;
+          }
+     }
+
+   //This selected file hasn't been opened yet, so let's open this file newly.
+   facade_sub_file_set(file->path);
+}
+
 static Elm_Object_Item *
 file_genlist_item_append(brows_file *file, Elm_Object_Item *parent_it,
                          Elm_Genlist_Item_Type it_type)
@@ -663,6 +708,8 @@ file_browser_init(Evas_Object *parent)
    evas_object_smart_callback_add(genlist, "expanded", gl_expanded_cb, NULL);
    evas_object_smart_callback_add(genlist, "contracted", gl_contracted_cb,
                                   NULL);
+   evas_object_smart_callback_add(genlist, "clicked,double",
+                                  gl_clicked_double_cb, NULL);
    evas_object_show(genlist);
    elm_box_pack_end(main_box, genlist);
 
diff --git a/src/bin/file_tab.c b/src/bin/file_tab.c
index a3a2985..3d2f257 100644
--- a/src/bin/file_tab.c
+++ b/src/bin/file_tab.c
@@ -144,7 +144,7 @@ file_tab_disabled_set(Eina_Bool disabled)
 {
    file_data *fd = g_fd;
    if (!fd) return;
-   elm_object_disabled_set(fd->box, disabled);
+   elm_object_disabled_set(fd->list, disabled);
 
    if (disabled) return;
 
diff --git a/src/bin/globals.c b/src/bin/globals.c
index 83da40e..f4c9ac3 100644
--- a/src/bin/globals.c
+++ b/src/bin/globals.c
@@ -13,6 +13,20 @@ void mem_fail_msg(void)
    EINA_LOG_ERR("Failed to allocate Memory!");
 }
 
+Enventor_Item *facade_sub_file_set(const char *path)
+{
+   Enventor_Item *it = enventor_object_sub_file_add(base_enventor_get(), path);
+   if (!it) return NULL;
+
+   file_tab_it_add(it);
+   file_tab_it_selected_set(it);
+
+   base_text_editor_set(it);
+   base_title_set(path);
+
+   return it;
+}
+
 Enventor_Item *facade_main_file_set(const char *path)
 {
    Enventor_Item *it = enventor_object_main_file_set(base_enventor_get(), 
path);
diff --git a/src/include/globals.h b/src/include/globals.h
index 49d8ba6..6ddcf0c 100644
--- a/src/include/globals.h
+++ b/src/include/globals.h
@@ -4,3 +4,4 @@ extern Eina_Prefix *PREFIX;
 extern const char *ENVENTOR_NAME;
 void mem_fail_msg(void);
 Enventor_Item *facade_main_file_set(const char *path);
+Enventor_Item *facade_sub_file_set(const char *path);
diff --git a/src/lib/Enventor_Legacy.h b/src/lib/Enventor_Legacy.h
index 698fbf3..1499709 100644
--- a/src/lib/Enventor_Legacy.h
+++ b/src/lib/Enventor_Legacy.h
@@ -4,7 +4,8 @@ EAPI Evas_Object *enventor_object_add(Evas_Object *parent);
 
 //FIXME: Should be eofied.
 EAPI Enventor_Item *enventor_object_main_file_set(Evas_Object *obj, const char 
*file);
+EAPI Enventor_Item *enventor_object_sub_file_add(Evas_Object *obj, const char 
*file);
+EAPI const Eina_List *enventor_object_sub_items_get(const Evas_Object *obj);
 EAPI Evas_Object *enventor_item_editor_get(const Enventor_Item *it);
 EAPI const char *enventor_item_file_get(const Enventor_Item *it);
-
 #include "enventor_object.eo.legacy.h"
diff --git a/src/lib/enventor_smart.c b/src/lib/enventor_smart.c
index bd3a51e..6720705 100644
--- a/src/lib/enventor_smart.c
+++ b/src/lib/enventor_smart.c
@@ -37,6 +37,7 @@ struct _Enventor_Object_Data
 {
    Enventor_Object *obj;
    Enventor_Item_Data main_it;
+   Eina_List *sub_its;
 
    Eina_Stringshare *group_name;
 
@@ -948,6 +949,43 @@ enventor_object_add(Enventor_Object *parent)
 }
 
 EAPI Enventor_Item *
+enventor_object_sub_file_add(Enventor_Object *obj, const char *file)
+{
+   Enventor_Object_Data *pd = eo_data_scope_get(obj, ENVENTOR_OBJECT_CLASS);
+
+   if (!file)
+     {
+        EINA_LOG_ERR("No file path!!");
+        return NULL;
+     }
+
+   Enventor_Item_Data *it = calloc(1, sizeof(Enventor_Item_Data));
+   if (!it)
+     {
+        mem_fail_msg();
+        return NULL;
+     }
+
+   pd->sub_its = eina_list_append(pd->sub_its, it);
+
+   it->enventor = obj;
+   it->ed = edit_init(obj);
+
+   autocomp_target_set(it->ed);
+   edit_load(it->ed, file);
+   edit_changed_set(it->ed, EINA_FALSE);
+
+   //Update Editor State
+   if (pd->linenumber != DEFAULT_LINENUMBER)
+     edit_linenumber_set(it->ed, pd->linenumber);
+   if (pd->font_scale != DEFAULT_FONT_SCALE)
+     edit_font_scale_set(it->ed, pd->font_scale);
+   if (pd->disabled) edit_disabled_set(it->ed, EINA_TRUE);
+
+   return it;
+}
+
+EAPI Enventor_Item *
 enventor_object_main_file_set(Enventor_Object *obj, const char *file)
 {
    Enventor_Object_Data *pd = eo_data_scope_get(obj, ENVENTOR_OBJECT_CLASS);
@@ -975,6 +1013,13 @@ enventor_object_main_file_set(Enventor_Object *obj, const 
char *file)
    return &pd->main_it;
 }
 
+EAPI const Eina_List *
+enventor_object_sub_items_get(const Enventor_Object *obj)
+{
+   Enventor_Object_Data *pd = eo_data_scope_get(obj, ENVENTOR_OBJECT_CLASS);
+   return pd->sub_its;
+}
+
 ///////////////////////////////////////////////////////////////////////////////
 /* Enventor_Item Functions.                                                  */
 ///////////////////////////////////////////////////////////////////////////////

-- 


Reply via email to