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);
|
||||
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);
|
||||
|
|
|
@ -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
|
||||
|
|
14
src/main.c
14
src/main.c
|
@ -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;
|
||||
|
|
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)
|
||||
{
|
||||
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,
|
||||
|
|
Loading…
Reference in New Issue