hermet pushed a commit to branch master.

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

commit 8c68bc9981ce02f1c7efd3d050646c57afb90cf5
Author: Jaehyun Cho <[email protected]>
Date:   Fri Oct 24 13:21:10 2014 +0900

    file_mgr: Support that an edc is opened by different processes.
    
    Summary: file_mgr: Support that an edc is opened by different processes. 
Open warning window to synchronize or ignore the edc changes.
    
    Reviewers: Hermet
    
    Reviewed By: Hermet
    
    Differential Revision: https://phab.enlightenment.org/D1561
---
 data/themes/default/layout_common.edc |  16 ++--
 src/bin/Makefile.am                   |   3 +-
 src/bin/file_mgr.c                    | 153 ++++++++++++++++++++++++++++++++++
 src/bin/main.c                        |   2 +
 src/bin/menu.c                        |  20 +++--
 src/include/Makefile.am               |   3 +-
 src/include/common.h                  |   1 +
 src/include/file_mgr.h                |   2 +
 8 files changed, 181 insertions(+), 19 deletions(-)

diff --git a/data/themes/default/layout_common.edc 
b/data/themes/default/layout_common.edc
index ffa3517..0a51b8e 100644
--- a/data/themes/default/layout_common.edc
+++ b/data/themes/default/layout_common.edc
@@ -613,7 +613,6 @@ group { name: "warning_layout";
          description {
             rel1 { to: "elm.text.title"; relative: 0.5 1; offset: 0 10; }
             rel2 { to: "elm.text.title"; relative: 0.5 1; }
-            text.text: "Without save, you will lose last changes!";
             text {
                font: FN;
                size: 11;
@@ -632,7 +631,6 @@ group { name: "warning_layout";
          description {
             rel1 { to: "elm.text.desc"; relative: 0.5 1; }
             rel2 { to: "elm.text.desc"; relative: 0.5 1; }
-            text.text: "Are you sure you want to do this?";
             text {
                font: FN;
                size: 11;
@@ -644,13 +642,13 @@ group { name: "warning_layout";
             fixed: 1 1;
          }
       }
-      part { name: "elm.swallow.save";
+      part { name: "elm.swallow.btn1";
          type: SWALLOW;
          clip_to: "clipper";
          scale: 1;
          description {
-            rel1.to: "elm.swallow.yes";
-            rel2.to: "elm.swallow.yes";
+            rel1.to: "elm.swallow.btn2";
+            rel2.to: "elm.swallow.btn2";
             rel1.relative: 0 0;
             rel2.relative: 0 1;
             rel2.offset: -10 -1;
@@ -659,7 +657,7 @@ group { name: "warning_layout";
             fixed: 1 1;
          }
       }
-      part { name: "elm.swallow.yes";
+      part { name: "elm.swallow.btn2";
          type: SWALLOW;
          clip_to: "clipper";
          scale: 1;
@@ -673,13 +671,13 @@ group { name: "warning_layout";
             fixed: 1 1;
          }
       }
-      part { name: "elm.swallow.no";
+      part { name: "elm.swallow.btn3";
          type: SWALLOW;
          clip_to: "clipper";
          scale: 1;
          description {
-            rel1.to: "elm.swallow.yes";
-            rel2.to: "elm.swallow.yes";
+            rel1.to: "elm.swallow.btn2";
+            rel2.to: "elm.swallow.btn2";
             rel1.relative: 1 0;
             rel2.relative: 1 1;
             rel1.offset: 10 0;
diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am
index e353761..dc77060 100644
--- a/src/bin/Makefile.am
+++ b/src/bin/Makefile.am
@@ -23,7 +23,8 @@ enventor_SOURCES = \
        setting.c \
        globals.c \
        live_edit.c \
-       console.c
+       console.c \
+       file_mgr.c
 
 enventor_LDADD = \
        $(top_builddir)/src/lib/libenventor.la \
diff --git a/src/bin/file_mgr.c b/src/bin/file_mgr.c
new file mode 100644
index 0000000..1212377
--- /dev/null
+++ b/src/bin/file_mgr.c
@@ -0,0 +1,153 @@
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#define ENVENTOR_BETA_API_SUPPORT 1
+
+#include <Eio.h>
+#include <Enventor.h>
+#include "common.h"
+
+typedef struct file_mgr_s {
+     Evas_Object *enventor;
+     Evas_Object *warning_layout;
+
+     Eina_Bool edc_modified : 1;
+} file_mgr_data;
+
+static file_mgr_data *g_fmd = NULL;
+
+static void
+warning_dismiss_done(void *data, Evas_Object *obj EINA_UNUSED,
+                     const char *emission EINA_UNUSED,
+                     const char *source EINA_UNUSED)
+{
+   file_mgr_data *fmd = data;
+   evas_object_del(fmd->warning_layout);
+   fmd->warning_layout = NULL;
+}
+
+static void
+warning_close(file_mgr_data *fmd)
+{
+   elm_object_signal_emit(fmd->warning_layout, "elm,state,dismiss", "");
+}
+
+static void
+warning_skip_btn_cb(void *data, Evas_Object *obj EINA_UNUSED,
+                    void *event_info EINA_UNUSED)
+{
+   file_mgr_data *fmd = data;
+   enventor_object_modified_set(fmd->enventor, EINA_TRUE);
+   warning_close(fmd);
+}
+
+static void
+warning_save_btn_cb(void *data, Evas_Object *obj EINA_UNUSED,
+                    void *event_info EINA_UNUSED)
+{
+   file_mgr_data *fmd = data;
+   enventor_object_modified_set(fmd->enventor, EINA_TRUE);
+   menu_edc_save();
+   warning_close(fmd);
+}
+
+static void
+warning_load_btn_cb(void *data, Evas_Object *obj EINA_UNUSED,
+                    void *event_info EINA_UNUSED)
+{
+   file_mgr_data *fmd = data;
+   enventor_object_file_set(fmd->enventor, config_edc_path_get());
+   enventor_object_modified_set(fmd->enventor, EINA_FALSE);
+   warning_close(fmd);
+}
+
+static void
+warning_open(file_mgr_data *fmd, Evas_Smart_Cb skip_cb,
+             Evas_Smart_Cb save_cb, Evas_Smart_Cb load_cb)
+{
+   if (fmd->warning_layout) return;
+
+   //Layout
+   Evas_Object *layout = elm_layout_add(base_win_get());
+   elm_layout_file_set(layout, EDJE_PATH, "warning_layout");
+   elm_object_part_text_set(layout, "elm.text.desc",
+                            "Another program has changed the same EDC!");
+   elm_object_part_text_set(layout, "elm.text.question",
+                            "Are you sure you want to do this?");
+   elm_object_signal_callback_add(layout, "elm,state,dismiss,done", "",
+                                  warning_dismiss_done, fmd);
+   evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, 
EVAS_HINT_EXPAND);
+   evas_object_show(layout);
+   base_win_resize_object_add(layout);
+
+   Evas_Object *btn;
+
+   //Skip Button
+   btn = elm_button_add(layout);
+   elm_object_text_set(btn, "Skip");
+   evas_object_smart_callback_add(btn, "clicked", skip_cb, fmd);
+   elm_object_part_content_set(layout, "elm.swallow.btn1", btn);
+
+   //Save Button
+   btn = elm_button_add(layout);
+   elm_object_text_set(btn, "Save");
+   evas_object_smart_callback_add(btn, "clicked", save_cb, fmd);
+   elm_object_part_content_set(layout, "elm.swallow.btn2", btn);
+
+   //Load Button
+   btn = elm_button_add(layout);
+   elm_object_text_set(btn, "Load");
+   evas_object_smart_callback_add(btn, "clicked", load_cb, fmd);
+   elm_object_part_content_set(layout, "elm.swallow.btn3", btn);
+
+   fmd->warning_layout = layout;
+}
+
+static Eina_Bool
+enventor_edc_modified_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event)
+{
+   file_mgr_data *fmd = g_fmd;
+   Enventor_EDC_Modified *modified = event;
+
+   if (modified->self_changed)
+     {
+        fmd->edc_modified = EINA_FALSE;
+        return ECORE_CALLBACK_DONE;
+     }
+
+   if (!fmd->edc_modified)
+     {
+        fmd->edc_modified = EINA_TRUE;
+        return ECORE_CALLBACK_DONE;
+     }
+
+   warning_open(fmd, warning_skip_btn_cb, warning_save_btn_cb,
+                warning_load_btn_cb);
+   fmd->edc_modified = EINA_FALSE;
+   return ECORE_CALLBACK_DONE;
+}
+
+void
+file_mgr_init(Evas_Object *enventor)
+{
+   file_mgr_data *fmd = calloc(1, sizeof(file_mgr_data));
+   if (!fmd)
+     {
+        EINA_LOG_ERR("Failed to allocate Memory!");
+        return;
+     }
+   g_fmd = fmd;
+
+   fmd->enventor = enventor;
+
+   evas_object_smart_callback_add(enventor, "edc,modified",
+                                  enventor_edc_modified_cb, fmd);
+}
+
+void
+file_mgr_term(void)
+{
+   file_mgr_data *fmd = g_fmd;
+   free(fmd);
+}
diff --git a/src/bin/main.c b/src/bin/main.c
index 53ea6ad..29bd801 100644
--- a/src/bin/main.c
+++ b/src/bin/main.c
@@ -776,6 +776,7 @@ init(app_data *ad, int argc, char **argv)
    base_gui_init();
    statusbar_set();
    enventor_setup(ad);
+   file_mgr_init(ad->enventor);
    tools_set(ad->enventor);
 
    base_gui_show();
@@ -799,6 +800,7 @@ term(app_data *ad EINA_UNUSED)
 #endif
    stats_term();
    base_gui_term();
+   file_mgr_term();
    config_term();
    enventor_shutdown();
 }
diff --git a/src/bin/menu.c b/src/bin/menu.c
index e43ec6f..396d2ed 100644
--- a/src/bin/menu.c
+++ b/src/bin/menu.c
@@ -177,6 +177,10 @@ warning_open(menu_data *md, Evas_Smart_Cb yes_cb, 
Evas_Smart_Cb save_cb)
    //Layout
    Evas_Object *layout = elm_layout_add(base_win_get());
    elm_layout_file_set(layout, EDJE_PATH, "warning_layout");
+   elm_object_part_text_set(layout, "elm.text.desc",
+                            "Without save, you will lose last changes!");
+   elm_object_part_text_set(layout, "elm.text.question",
+                            "Are you sure you want to do this?");
    elm_object_signal_callback_add(layout, "elm,state,dismiss,done", "",
                                   warning_dismiss_done, md);
    evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, 
EVAS_HINT_EXPAND);
@@ -191,19 +195,19 @@ warning_open(menu_data *md, Evas_Smart_Cb yes_cb, 
Evas_Smart_Cb save_cb)
    evas_object_smart_callback_add(btn, "clicked", save_cb, md);
    evas_object_show(btn);
    elm_object_focus_set(btn, EINA_TRUE);
-   elm_object_part_content_set(layout, "elm.swallow.save", btn);
-
-   //No Button
-   btn = elm_button_add(layout);
-   elm_object_text_set(btn, "No");
-   evas_object_smart_callback_add(btn, "clicked", warning_no_btn_cb, md);
-   elm_object_part_content_set(layout, "elm.swallow.no", btn);
+   elm_object_part_content_set(layout, "elm.swallow.btn1", btn);
 
    //Yes Button
    btn = elm_button_add(layout);
    elm_object_text_set(btn, "Yes");
    evas_object_smart_callback_add(btn, "clicked", yes_cb, md);
-   elm_object_part_content_set(layout, "elm.swallow.yes", btn);
+   elm_object_part_content_set(layout, "elm.swallow.btn2", btn);
+
+   //No Button
+   btn = elm_button_add(layout);
+   elm_object_text_set(btn, "No");
+   evas_object_smart_callback_add(btn, "clicked", warning_no_btn_cb, md);
+   elm_object_part_content_set(layout, "elm.swallow.btn3", btn);
 
    md->warning_layout = layout;
    menu_activate_request();
diff --git a/src/include/Makefile.am b/src/include/Makefile.am
index 9a64c9e..6e9cdf2 100644
--- a/src/include/Makefile.am
+++ b/src/include/Makefile.am
@@ -15,4 +15,5 @@ EXTRA_DIST = common.h \
        setting.h \
        search.h \
        live_edit.h \
-       console.h
+       console.h \
+       file_mgr.h
diff --git a/src/include/common.h b/src/include/common.h
index 7185261..85f8795 100644
--- a/src/include/common.h
+++ b/src/include/common.h
@@ -22,5 +22,6 @@ typedef struct statusbar_s stats_data;
 #include "setting.h"
 #include "live_edit.h"
 #include "console.h"
+#include "file_mgr.h"
 
 #endif
diff --git a/src/include/file_mgr.h b/src/include/file_mgr.h
new file mode 100644
index 0000000..0e48d1a
--- /dev/null
+++ b/src/include/file_mgr.h
@@ -0,0 +1,2 @@
+void file_mgr_init(Evas_Object *enventor);
+void file_mgr_term(void);

-- 


Reply via email to