redoundo: do coupling with edc_edit instance.
one redoundo should work with it's owner editor. This is a refactoring for multiple edc editor.
This commit is contained in:
parent
dc916f0dfe
commit
ae7f3e30b3
|
@ -498,7 +498,7 @@ insert_completed_text(autocomp_data *ad)
|
|||
}
|
||||
|
||||
int cursor_pos2 = elm_entry_cursor_pos_get(entry);
|
||||
redoundo_data *rd = evas_object_data_get(entry, "redoundo");
|
||||
redoundo_data *rd = edit_redoundo_get(ad->ed);
|
||||
redoundo_entry_region_push(rd, cursor_pos, cursor_pos2);
|
||||
|
||||
entry_anchor_off(ad);
|
||||
|
|
|
@ -1489,13 +1489,18 @@ edit_init(Evas_Object *enventor)
|
|||
ed->select_pos = -1;
|
||||
ed->font_scale = 1;
|
||||
ed->pd = parser_init();
|
||||
ed->sh = syntax_init(en_edit);
|
||||
ed->rd = redoundo_init(en_edit, ed);
|
||||
evas_object_data_set(ed->en_edit, "redoundo", ed->rd);
|
||||
ed->rd = redoundo_init(ed);
|
||||
ed->sh = syntax_init(ed);
|
||||
|
||||
return ed;
|
||||
}
|
||||
|
||||
redoundo_data *
|
||||
edit_redoundo_get(edit_data *ed)
|
||||
{
|
||||
return ed->rd;
|
||||
}
|
||||
|
||||
Evas_Object *
|
||||
edit_obj_get(edit_data *ed)
|
||||
{
|
||||
|
|
|
@ -129,14 +129,14 @@ void parser_bracket_find(parser_data *pd, Evas_Object *entry, Bracket_Update_Cb
|
|||
void parser_bracket_cancel(parser_data *pd);
|
||||
|
||||
/* syntax helper */
|
||||
syntax_helper *syntax_init(Evas_Object *entry);
|
||||
syntax_helper *syntax_init(edit_data *ed);
|
||||
void syntax_term(syntax_helper *sh);
|
||||
color_data *syntax_color_data_get(syntax_helper *sh);
|
||||
indent_data *syntax_indent_data_get(syntax_helper *sh);
|
||||
|
||||
|
||||
/* indent */
|
||||
indent_data *indent_init(Eina_Strbuf *strbuf, Evas_Object *entry);
|
||||
indent_data *indent_init(Eina_Strbuf *strbuf, edit_data *ed);
|
||||
void indent_term(indent_data *id);
|
||||
int indent_space_get(indent_data *id);
|
||||
int indent_insert_apply(indent_data *id, const char *insert, int cur_line);
|
||||
|
@ -179,7 +179,7 @@ void edj_mgr_all_views_reload(void);
|
|||
|
||||
|
||||
/* redoundo */
|
||||
redoundo_data *redoundo_init(Evas_Object *entry, edit_data *ed);
|
||||
redoundo_data *redoundo_init(edit_data *ed);
|
||||
void redoundo_term(redoundo_data *rd);
|
||||
void redoundo_clear(redoundo_data *rd);
|
||||
void redoundo_text_push(redoundo_data *rd, const char *text, int pos, int length, Eina_Bool insert);
|
||||
|
@ -278,5 +278,5 @@ void edit_disabled_set(edit_data *ed, Eina_Bool disabled);
|
|||
void edit_error_set(edit_data *ed, int line, const char *target);
|
||||
void edit_text_insert(edit_data *ed, const char *text);
|
||||
void edit_part_cursor_set(edit_data *ed, const char *group_name, const char *part_name);
|
||||
|
||||
redoundo_data *edit_redoundo_get(edit_data *ed);
|
||||
#endif
|
||||
|
|
|
@ -168,7 +168,7 @@ call_error:
|
|||
if (line_num || target)
|
||||
edit_syntax_color_full_apply(pd->ed, EINA_TRUE);
|
||||
|
||||
redoundo_data *rd = evas_object_data_get(edit_entry_get(pd->ed), "redoundo");
|
||||
redoundo_data *rd = edit_redoundo_get(pd->ed);
|
||||
|
||||
// When msg == NULL it mean, that needed to reset error state
|
||||
if (msg)
|
||||
|
|
|
@ -382,9 +382,14 @@ redoundo_text_push(redoundo_data *rd, const char *text, int pos, int length,
|
|||
}
|
||||
|
||||
redoundo_data *
|
||||
redoundo_init(Evas_Object *entry, edit_data *ed)
|
||||
redoundo_init(edit_data *ed)
|
||||
{
|
||||
if (!entry) return NULL;
|
||||
Evas_Object *entry = edit_entry_get(ed);
|
||||
if (!entry)
|
||||
{
|
||||
EINA_LOG_ERR("Should be initialized after edit entry is initialized!");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
redoundo_data *rd = calloc(1, sizeof(redoundo_data));
|
||||
if (!rd)
|
||||
|
@ -402,7 +407,7 @@ redoundo_init(Evas_Object *entry, edit_data *ed)
|
|||
rd->edit_data = ed;
|
||||
|
||||
//FIXME: Why signal callback? not smart callback?
|
||||
elm_object_signal_callback_add(entry, "entry,changed,user", "*",
|
||||
elm_object_signal_callback_add(rd->entry, "entry,changed,user", "*",
|
||||
entry_changed_user_cb, rd);
|
||||
return rd;
|
||||
}
|
||||
|
|
|
@ -35,7 +35,7 @@ buf_flush_timer_cb(void *data)
|
|||
/*****************************************************************************/
|
||||
|
||||
syntax_helper *
|
||||
syntax_init(Evas_Object *entry)
|
||||
syntax_init(edit_data *ed)
|
||||
{
|
||||
syntax_helper *sh = malloc(sizeof(syntax_helper));
|
||||
if (!sh)
|
||||
|
@ -47,7 +47,7 @@ syntax_init(Evas_Object *entry)
|
|||
sh->buf_flush_timer = ecore_timer_add(1800, buf_flush_timer_cb, sh);
|
||||
|
||||
sh->cd = color_init(sh->strbuf);
|
||||
sh->id = indent_init(sh->strbuf, entry);
|
||||
sh->id = indent_init(sh->strbuf, ed);
|
||||
|
||||
return sh;
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@ struct indent_s
|
|||
{
|
||||
Eina_Strbuf *strbuf;
|
||||
Evas_Object *entry;
|
||||
redoundo_data *rd;
|
||||
};
|
||||
|
||||
typedef struct indent_line_s
|
||||
|
@ -58,7 +59,6 @@ indent_insert_br_case(indent_data *id)
|
|||
Evas_Object *entry = id->entry;
|
||||
Evas_Object *tb = elm_entry_textblock_get(entry);
|
||||
Evas_Textblock_Cursor *cur = evas_object_textblock_cursor_get(tb);
|
||||
redoundo_data *rd = evas_object_data_get(entry, "redoundo");
|
||||
const char *text = evas_textblock_cursor_paragraph_text_get(cur);
|
||||
char *utf8 = elm_entry_markup_to_utf8(text);
|
||||
Eina_Strbuf* diff = id->strbuf;
|
||||
|
@ -77,7 +77,7 @@ indent_insert_br_case(indent_data *id)
|
|||
}
|
||||
}
|
||||
free(utf8);
|
||||
redoundo_text_push(rd, eina_strbuf_string_get(diff), rd_cur_pos, 0,
|
||||
redoundo_text_push(id->rd, eina_strbuf_string_get(diff), rd_cur_pos, 0,
|
||||
EINA_FALSE);
|
||||
|
||||
int space = indent_space_get(id);
|
||||
|
@ -88,7 +88,7 @@ indent_insert_br_case(indent_data *id)
|
|||
memset(p, ' ', space);
|
||||
p[space] = '\0';
|
||||
|
||||
redoundo_text_push(rd, p, elm_entry_cursor_pos_get(entry), 0, EINA_TRUE);
|
||||
redoundo_text_push(id->rd, p, elm_entry_cursor_pos_get(entry), 0, EINA_TRUE);
|
||||
|
||||
elm_entry_entry_insert(entry, p);
|
||||
}
|
||||
|
@ -381,8 +381,6 @@ indent_text_auto_format(indent_data *id, const char *insert)
|
|||
Evas_Textblock_Cursor *cur_end = evas_object_textblock_cursor_get(tb);
|
||||
int tb_cur_pos = 0;
|
||||
|
||||
redoundo_data *rd = evas_object_data_get(id->entry, "redoundo");
|
||||
|
||||
Eina_List *code_line_list = indent_code_line_list_create(id, utf8);
|
||||
indent_line *code_line = NULL;
|
||||
free(utf8);
|
||||
|
@ -458,7 +456,7 @@ indent_text_auto_format(indent_data *id, const char *insert)
|
|||
evas_textblock_cursor_range_delete(cur_start, cur_end);
|
||||
|
||||
//Cancel last added diff, that was created when text pasted into entry.
|
||||
redoundo_n_diff_cancel(rd, 1);
|
||||
redoundo_n_diff_cancel(id->rd, 1);
|
||||
|
||||
evas_textblock_cursor_line_char_first(cur_start);
|
||||
|
||||
|
@ -484,7 +482,7 @@ indent_text_auto_format(indent_data *id, const char *insert)
|
|||
tb_cur_pos = evas_textblock_cursor_pos_get(cur_end);
|
||||
/* Add data about removal of prior spaces into the redoundo
|
||||
queue. */
|
||||
redoundo_text_push(rd, prior_space, tb_cur_pos, 0,
|
||||
redoundo_text_push(id->rd, prior_space, tb_cur_pos, 0,
|
||||
EINA_FALSE);
|
||||
free(prior_space);
|
||||
}
|
||||
|
@ -549,7 +547,7 @@ indent_text_auto_format(indent_data *id, const char *insert)
|
|||
evas_object_textblock_text_markup_prepend(cur_start, markup_buf);
|
||||
|
||||
//Add data about formatted change into the redoundo queue.
|
||||
redoundo_text_push(rd, markup_buf, tb_cur_pos, 0, EINA_TRUE);
|
||||
redoundo_text_push(id->rd, markup_buf, tb_cur_pos, 0, EINA_TRUE);
|
||||
free(markup_buf);
|
||||
|
||||
//Update cursor position to the end of the pasted string.
|
||||
|
@ -566,7 +564,7 @@ end:
|
|||
/*****************************************************************************/
|
||||
|
||||
indent_data *
|
||||
indent_init(Eina_Strbuf *strbuf, Evas_Object *entry)
|
||||
indent_init(Eina_Strbuf *strbuf, edit_data *ed)
|
||||
{
|
||||
indent_data *id = malloc(sizeof(indent_data));
|
||||
if (!id)
|
||||
|
@ -575,7 +573,12 @@ indent_init(Eina_Strbuf *strbuf, Evas_Object *entry)
|
|||
return NULL;
|
||||
}
|
||||
id->strbuf = strbuf;
|
||||
id->entry = entry;
|
||||
id->entry = edit_entry_get(ed);
|
||||
id->rd = edit_redoundo_get(ed);
|
||||
|
||||
if (!id->entry || !id->rd)
|
||||
EINA_LOG_ERR("Should be called after edit entry and redoundo is initialized!");
|
||||
|
||||
return id;
|
||||
}
|
||||
|
||||
|
@ -614,7 +617,6 @@ indent_delete_apply(indent_data *id, const char *del, int cur_line)
|
|||
eina_strbuf_reset(diff);
|
||||
|
||||
int rd_cur_pos = evas_textblock_cursor_pos_get(cur);
|
||||
redoundo_data *rd = evas_object_data_get(id->entry, "redoundo");
|
||||
|
||||
int len = strlen(utf8);
|
||||
if (len <= 0) goto end;
|
||||
|
@ -635,7 +637,7 @@ indent_delete_apply(indent_data *id, const char *del, int cur_line)
|
|||
else break;
|
||||
len--;
|
||||
}
|
||||
redoundo_text_push(rd, eina_strbuf_string_get(diff), rd_cur_pos, 0,
|
||||
redoundo_text_push(id->rd, eina_strbuf_string_get(diff), rd_cur_pos, 0,
|
||||
EINA_FALSE);
|
||||
elm_entry_calc_force(id->entry);
|
||||
|
||||
|
|
Loading…
Reference in New Issue