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
This commit is contained in:
Jaehyun Cho 2014-10-24 13:21:10 +09:00 committed by ChunEon Park
parent 516ae82bab
commit 8c68bc9981
8 changed files with 181 additions and 19 deletions

View File

@ -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;

View File

@ -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 \

153
src/bin/file_mgr.c Normal file
View File

@ -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);
}

View File

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

View File

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

View File

@ -15,4 +15,5 @@ EXTRA_DIST = common.h \
setting.h \
search.h \
live_edit.h \
console.h
console.h \
file_mgr.h

View File

@ -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

2
src/include/file_mgr.h Normal file
View File

@ -0,0 +1,2 @@
void file_mgr_init(Evas_Object *enventor);
void file_mgr_term(void);