enventor - let's save the edc file with file selector

This commit is contained in:
ChunEon Park 2013-08-05 01:28:47 +09:00
parent 7c26db9b6e
commit d805f721ba
4 changed files with 84 additions and 48 deletions

View File

@ -5,10 +5,10 @@ void edit_edc_read(edit_data *ed, const char *file_path);
void edit_focus_set(edit_data *ed);
Evas_Object *edit_obj_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_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);
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);

View File

@ -20,7 +20,6 @@ struct editor_s
menu_data *md;
int line_max;
Eina_Stringshare *edc_path;
Eina_Stringshare *group_name;
Eina_Stringshare *part_name;
@ -152,28 +151,30 @@ save_msg_show(edit_data *ed)
char buf[PATH_MAX];
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
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);
}
void
Eina_Bool
edit_save(edit_data *ed)
{
if (!ed->edit_changed)
{
save_msg_show(ed);
return;
return EINA_TRUE;
}
const char *text = elm_entry_entry_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);
FILE *fp = fopen(ed->edc_path, "w");
if (!fp) return;
FILE *fp = fopen(option_edc_path_get(ed->od), "w");
if (!fp) return EINA_FALSE;
fputs(text2, fp);
fclose(fp);
@ -181,6 +182,8 @@ edit_save(edit_data *ed)
save_msg_show(ed);
//FIXME: If compile edc here? we can edit_changed FALSE;
//ed->edit_changed = EINA_FALSE;
return EINA_TRUE;
}
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));
ed->line_max = line_num;
ed->edc_path = eina_stringshare_add(file_path);
if (ed->group_name) eina_stringshare_del(ed->group_name);
ed->group_name = parser_group_name_get(ed->pd, ed->en_edit);
@ -628,9 +630,9 @@ edit_changed_get(edit_data *ed)
}
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

View File

@ -16,6 +16,7 @@ struct app_s
Evas_Object *layout;
Evas_Object *panes;
Evas_Object *win;
Eio_Monitor *edc_monitor;
Eina_Bool ctrl_pressed : 1;
Eina_Bool menu_opened : 1;
@ -30,7 +31,7 @@ rebuild_edc()
return EINA_TRUE;
}
Eina_Bool
static Eina_Bool
edc_changed_cb(void *data, int type EINA_UNUSED, void *event)
{
//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;
rebuild_edc();
edit_changed_reset(ad->ed);
edit_changed_set(ad->ed, EINA_FALSE);
return ECORE_CALLBACK_RENEW;
}
@ -334,15 +335,17 @@ option_update_cb(void *data, option_data *od)
if (view_reload_need_get(ad->vd))
{
rebuild_edc();
edit_changed_reset(ad->ed);
edit_changed_set(ad->ed, EINA_FALSE);
view_new(ad->vd, edit_group_name_get(ad->ed));
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!
else if (edit_changed_get(ad->ed))
{
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);
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.
eio_monitor_add(option_edc_path_get(ad->od));
ad->edc_monitor = eio_monitor_add(option_edc_path_get(ad->od));
ecore_event_handler_add(EIO_MONITOR_FILE_MODIFIED, edc_changed_cb, ad);
return EINA_TRUE;

View File

@ -632,9 +632,7 @@ save_btn_cb(void *data, Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
menu_data *md = data;
edit_save(md->ed);
//edc_file_save(md);
edc_file_save(md);
}
static void
@ -644,20 +642,56 @@ fileselector_save_done_cb(void *data, Evas_Object *obj EINA_UNUSED,
menu_data *md = data;
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);
menu_close(md, EINA_FALSE);
}
else fileselector_close(md);
return;
}
//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
@ -679,34 +713,32 @@ fileselector_load_done_cb(void *data, Evas_Object *obj EINA_UNUSED,
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.
char *ext = strrchr(selected, '.');
if (!ext || strcmp(ext, ".edc"))
{
elm_object_part_text_set(md->fileselector_layout,
"elm.text.msg",
"Support only edc file.");
"Support only .edc file.");
elm_object_signal_emit(md->fileselector_layout,
"elm,action,msg,show", "");
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))
{
char buf[PATH_MAX];
const char *filename = ecore_file_file_get(selected);
snprintf(buf, sizeof(buf), "Failed to load: %s.", filename);
elm_object_part_text_set(md->fileselector_layout,