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

View File

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

View File

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

View File

@ -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)
{ {
fileselector_close(md);
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"))
{ {
//show failed message box. elm_object_part_text_set(md->fileselector_layout,
fileselector_close(md); "elm.text.msg",
"Support only .edc file.");
elm_object_signal_emit(md->fileselector_layout,
"elm,action,msg,show", "");
return; 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); fileselector_close(md);
menu_close(md, EINA_FALSE); menu_close(md, EINA_FALSE);
}
else fileselector_close(md);
} }
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,