forked from enlightenment/enventor
enventor - let's save the edc file with file selector
This commit is contained in:
parent
7c26db9b6e
commit
d805f721ba
|
@ -5,10 +5,10 @@ void edit_edc_read(edit_data *ed, const char *file_path);
|
||||||
void edit_focus_set(edit_data *ed);
|
void edit_focus_set(edit_data *ed);
|
||||||
Evas_Object *edit_obj_get(edit_data *ed);
|
Evas_Object *edit_obj_get(edit_data *ed);
|
||||||
Eina_Bool edit_changed_get(edit_data *ed);
|
Eina_Bool edit_changed_get(edit_data *ed);
|
||||||
void edit_changed_reset(edit_data *ed);
|
void edit_changed_set(edit_data *ed, Eina_Bool changed);
|
||||||
void edit_line_number_toggle(edit_data *ed);
|
void edit_line_number_toggle(edit_data *ed);
|
||||||
void edit_editable_set(edit_data *ed, Eina_Bool editable);
|
void edit_editable_set(edit_data *ed, Eina_Bool editable);
|
||||||
void edit_save(edit_data *ed);
|
Eina_Bool edit_save(edit_data *ed);
|
||||||
const char *edit_group_name_get(edit_data *ed);
|
const char *edit_group_name_get(edit_data *ed);
|
||||||
void edit_new(edit_data* ed);
|
void edit_new(edit_data* ed);
|
||||||
void edit_part_changed_cb_set(edit_data *ed, void (*cb)(void *data, const char *part_name), void *data);
|
void edit_part_changed_cb_set(edit_data *ed, void (*cb)(void *data, const char *part_name), void *data);
|
||||||
|
|
|
@ -20,7 +20,6 @@ struct editor_s
|
||||||
menu_data *md;
|
menu_data *md;
|
||||||
|
|
||||||
int line_max;
|
int line_max;
|
||||||
Eina_Stringshare *edc_path;
|
|
||||||
Eina_Stringshare *group_name;
|
Eina_Stringshare *group_name;
|
||||||
Eina_Stringshare *part_name;
|
Eina_Stringshare *part_name;
|
||||||
|
|
||||||
|
@ -152,28 +151,30 @@ save_msg_show(edit_data *ed)
|
||||||
char buf[PATH_MAX];
|
char buf[PATH_MAX];
|
||||||
|
|
||||||
if (ed->edit_changed)
|
if (ed->edit_changed)
|
||||||
snprintf(buf, sizeof(buf), "File saved. \"%s\"", ed->edc_path);
|
snprintf(buf, sizeof(buf), "File saved. \"%s\"",
|
||||||
|
option_edc_path_get(ed->od));
|
||||||
else
|
else
|
||||||
snprintf(buf, sizeof(buf), "Already saved. \"%s\"", ed->edc_path);
|
snprintf(buf, sizeof(buf), "Already saved. \"%s\"",
|
||||||
|
option_edc_path_get(ed->od));
|
||||||
|
|
||||||
stats_info_msg_update(ed->sd, buf);
|
stats_info_msg_update(ed->sd, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
Eina_Bool
|
||||||
edit_save(edit_data *ed)
|
edit_save(edit_data *ed)
|
||||||
{
|
{
|
||||||
if (!ed->edit_changed)
|
if (!ed->edit_changed)
|
||||||
{
|
{
|
||||||
save_msg_show(ed);
|
save_msg_show(ed);
|
||||||
return;
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *text = elm_entry_entry_get(ed->en_edit);
|
const char *text = elm_entry_entry_get(ed->en_edit);
|
||||||
Evas_Object *tb = elm_entry_textblock_get(ed->en_edit);
|
Evas_Object *tb = elm_entry_textblock_get(ed->en_edit);
|
||||||
const char *text2 = evas_textblock_text_markup_to_utf8(tb, text);
|
const char *text2 = evas_textblock_text_markup_to_utf8(tb, text);
|
||||||
|
|
||||||
FILE *fp = fopen(ed->edc_path, "w");
|
FILE *fp = fopen(option_edc_path_get(ed->od), "w");
|
||||||
if (!fp) return;
|
if (!fp) return EINA_FALSE;
|
||||||
|
|
||||||
fputs(text2, fp);
|
fputs(text2, fp);
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
@ -181,6 +182,8 @@ edit_save(edit_data *ed)
|
||||||
save_msg_show(ed);
|
save_msg_show(ed);
|
||||||
//FIXME: If compile edc here? we can edit_changed FALSE;
|
//FIXME: If compile edc here? we can edit_changed FALSE;
|
||||||
//ed->edit_changed = EINA_FALSE;
|
//ed->edit_changed = EINA_FALSE;
|
||||||
|
|
||||||
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -602,7 +605,6 @@ edit_edc_read(edit_data *ed, const char *file_path)
|
||||||
elm_entry_entry_append(ed->en_edit, eina_strbuf_string_get(strbuf));
|
elm_entry_entry_append(ed->en_edit, eina_strbuf_string_get(strbuf));
|
||||||
|
|
||||||
ed->line_max = line_num;
|
ed->line_max = line_num;
|
||||||
ed->edc_path = eina_stringshare_add(file_path);
|
|
||||||
if (ed->group_name) eina_stringshare_del(ed->group_name);
|
if (ed->group_name) eina_stringshare_del(ed->group_name);
|
||||||
ed->group_name = parser_group_name_get(ed->pd, ed->en_edit);
|
ed->group_name = parser_group_name_get(ed->pd, ed->en_edit);
|
||||||
|
|
||||||
|
@ -628,9 +630,9 @@ edit_changed_get(edit_data *ed)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
edit_changed_reset(edit_data *ed)
|
edit_changed_set(edit_data *ed, Eina_Bool changed)
|
||||||
{
|
{
|
||||||
ed->edit_changed = EINA_FALSE;
|
ed->edit_changed = changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
14
src/main.c
14
src/main.c
|
@ -16,6 +16,7 @@ struct app_s
|
||||||
Evas_Object *layout;
|
Evas_Object *layout;
|
||||||
Evas_Object *panes;
|
Evas_Object *panes;
|
||||||
Evas_Object *win;
|
Evas_Object *win;
|
||||||
|
Eio_Monitor *edc_monitor;
|
||||||
|
|
||||||
Eina_Bool ctrl_pressed : 1;
|
Eina_Bool ctrl_pressed : 1;
|
||||||
Eina_Bool menu_opened : 1;
|
Eina_Bool menu_opened : 1;
|
||||||
|
@ -30,7 +31,7 @@ rebuild_edc()
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
Eina_Bool
|
static Eina_Bool
|
||||||
edc_changed_cb(void *data, int type EINA_UNUSED, void *event)
|
edc_changed_cb(void *data, int type EINA_UNUSED, void *event)
|
||||||
{
|
{
|
||||||
//FIXME: Why does this callback called multiple times?
|
//FIXME: Why does this callback called multiple times?
|
||||||
|
@ -43,7 +44,7 @@ edc_changed_cb(void *data, int type EINA_UNUSED, void *event)
|
||||||
return ECORE_CALLBACK_RENEW;
|
return ECORE_CALLBACK_RENEW;
|
||||||
|
|
||||||
rebuild_edc();
|
rebuild_edc();
|
||||||
edit_changed_reset(ad->ed);
|
edit_changed_set(ad->ed, EINA_FALSE);
|
||||||
|
|
||||||
return ECORE_CALLBACK_RENEW;
|
return ECORE_CALLBACK_RENEW;
|
||||||
}
|
}
|
||||||
|
@ -334,15 +335,17 @@ option_update_cb(void *data, option_data *od)
|
||||||
if (view_reload_need_get(ad->vd))
|
if (view_reload_need_get(ad->vd))
|
||||||
{
|
{
|
||||||
rebuild_edc();
|
rebuild_edc();
|
||||||
edit_changed_reset(ad->ed);
|
edit_changed_set(ad->ed, EINA_FALSE);
|
||||||
view_new(ad->vd, edit_group_name_get(ad->ed));
|
view_new(ad->vd, edit_group_name_get(ad->ed));
|
||||||
part_changed_cb(ad, NULL);
|
part_changed_cb(ad, NULL);
|
||||||
|
if (ad->edc_monitor) eio_monitor_del(ad->edc_monitor);
|
||||||
|
ad->edc_monitor = eio_monitor_add(option_edc_path_get(ad->od));
|
||||||
}
|
}
|
||||||
//If the edc is reloaded, then rebuild it!
|
//If the edc is reloaded, then rebuild it!
|
||||||
else if (edit_changed_get(ad->ed))
|
else if (edit_changed_get(ad->ed))
|
||||||
{
|
{
|
||||||
rebuild_edc();
|
rebuild_edc();
|
||||||
edit_changed_reset(ad->ed);
|
edit_changed_set(ad->ed, EINA_FALSE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -461,8 +464,7 @@ init(app_data *ad, int argc, char **argv)
|
||||||
edc_view_set(ad, ad->od, ad->sd);
|
edc_view_set(ad, ad->od, ad->sd);
|
||||||
ad->md = menu_init(ad->win, ad->ed, ad->od, ad->vd, menu_close_cb, ad);
|
ad->md = menu_init(ad->win, ad->ed, ad->od, ad->vd, menu_close_cb, ad);
|
||||||
|
|
||||||
//FIXME: update the edc path whenever file is changed.
|
ad->edc_monitor = eio_monitor_add(option_edc_path_get(ad->od));
|
||||||
eio_monitor_add(option_edc_path_get(ad->od));
|
|
||||||
ecore_event_handler_add(EIO_MONITOR_FILE_MODIFIED, edc_changed_cb, ad);
|
ecore_event_handler_add(EIO_MONITOR_FILE_MODIFIED, edc_changed_cb, ad);
|
||||||
|
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
|
|
92
src/menu.c
92
src/menu.c
|
@ -632,9 +632,7 @@ save_btn_cb(void *data, Evas_Object *obj EINA_UNUSED,
|
||||||
void *event_info EINA_UNUSED)
|
void *event_info EINA_UNUSED)
|
||||||
{
|
{
|
||||||
menu_data *md = data;
|
menu_data *md = data;
|
||||||
edit_save(md->ed);
|
edc_file_save(md);
|
||||||
|
|
||||||
//edc_file_save(md);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -644,20 +642,56 @@ fileselector_save_done_cb(void *data, Evas_Object *obj EINA_UNUSED,
|
||||||
menu_data *md = data;
|
menu_data *md = data;
|
||||||
const char *selected = event_info;
|
const char *selected = event_info;
|
||||||
|
|
||||||
if (selected)
|
if (!selected)
|
||||||
{
|
{
|
||||||
//Filter to read only edc extension file.
|
|
||||||
char *ext = strrchr(selected, '.');
|
|
||||||
if (!ext || strcmp(ext, ".edc"))
|
|
||||||
{
|
|
||||||
//show failed message box.
|
|
||||||
fileselector_close(md);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
fileselector_close(md);
|
fileselector_close(md);
|
||||||
menu_close(md, EINA_FALSE);
|
return;
|
||||||
}
|
}
|
||||||
else fileselector_close(md);
|
|
||||||
|
//Filter to read only edc extension file.
|
||||||
|
char *ext = strrchr(selected, '.');
|
||||||
|
if (!ext || strcmp(ext, ".edc"))
|
||||||
|
{
|
||||||
|
elm_object_part_text_set(md->fileselector_layout,
|
||||||
|
"elm.text.msg",
|
||||||
|
"Support only .edc file.");
|
||||||
|
elm_object_signal_emit(md->fileselector_layout,
|
||||||
|
"elm,action,msg,show", "");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Directory?
|
||||||
|
if (ecore_file_is_dir(selected))
|
||||||
|
{
|
||||||
|
elm_object_part_text_set(md->fileselector_layout,
|
||||||
|
"elm.text.msg", "Choose a file to save.");
|
||||||
|
elm_object_signal_emit(md->fileselector_layout,
|
||||||
|
"elm,action,msg,show", "");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Update the edc file and try to save.
|
||||||
|
if (strcmp(option_edc_path_get(md->od), selected))
|
||||||
|
edit_changed_set(md->ed, EINA_TRUE);
|
||||||
|
|
||||||
|
option_edc_path_set(md->od, selected);
|
||||||
|
|
||||||
|
if (!edit_save(md->ed))
|
||||||
|
{
|
||||||
|
char buf[PATH_MAX];
|
||||||
|
snprintf(buf, sizeof(buf), "Failed to load: %s.", selected);
|
||||||
|
elm_object_part_text_set(md->fileselector_layout,
|
||||||
|
"elm.text.msg", buf);
|
||||||
|
elm_object_signal_emit(md->fileselector_layout,
|
||||||
|
"elm,action,msg,show", "");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
view_reload_need_set(md->vd, EINA_TRUE);
|
||||||
|
option_apply(md->od);
|
||||||
|
|
||||||
|
fileselector_close(md);
|
||||||
|
menu_close(md, EINA_FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -679,34 +713,32 @@ fileselector_load_done_cb(void *data, Evas_Object *obj EINA_UNUSED,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
char buf[PATH_MAX];
|
|
||||||
|
|
||||||
//Directory?
|
|
||||||
if (ecore_file_is_dir(selected))
|
|
||||||
{
|
|
||||||
snprintf(buf, sizeof(buf), "Choose a file to load.");
|
|
||||||
elm_object_part_text_set(md->fileselector_layout,
|
|
||||||
"elm.text.msg", buf);
|
|
||||||
elm_object_signal_emit(md->fileselector_layout,
|
|
||||||
"elm,action,msg,show", "");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Filter to read only edc extension file.
|
//Filter to read only edc extension file.
|
||||||
char *ext = strrchr(selected, '.');
|
char *ext = strrchr(selected, '.');
|
||||||
if (!ext || strcmp(ext, ".edc"))
|
if (!ext || strcmp(ext, ".edc"))
|
||||||
{
|
{
|
||||||
elm_object_part_text_set(md->fileselector_layout,
|
elm_object_part_text_set(md->fileselector_layout,
|
||||||
"elm.text.msg",
|
"elm.text.msg",
|
||||||
"Support only edc file.");
|
"Support only .edc file.");
|
||||||
elm_object_signal_emit(md->fileselector_layout,
|
elm_object_signal_emit(md->fileselector_layout,
|
||||||
"elm,action,msg,show", "");
|
"elm,action,msg,show", "");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Show a message if the it failed to load the file.
|
//Directory?
|
||||||
|
if (ecore_file_is_dir(selected))
|
||||||
|
{
|
||||||
|
elm_object_part_text_set(md->fileselector_layout,
|
||||||
|
"elm.text.msg", "Choose a file to load.");
|
||||||
|
elm_object_signal_emit(md->fileselector_layout,
|
||||||
|
"elm,action,msg,show", "");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Show a message if it failed to load the file.
|
||||||
if (!ecore_file_can_read(selected))
|
if (!ecore_file_can_read(selected))
|
||||||
{
|
{
|
||||||
|
char buf[PATH_MAX];
|
||||||
const char *filename = ecore_file_file_get(selected);
|
const char *filename = ecore_file_file_get(selected);
|
||||||
snprintf(buf, sizeof(buf), "Failed to load: %s.", filename);
|
snprintf(buf, sizeof(buf), "Failed to load: %s.", filename);
|
||||||
elm_object_part_text_set(md->fileselector_layout,
|
elm_object_part_text_set(md->fileselector_layout,
|
||||||
|
|
Loading…
Reference in New Issue