search - +find backward

This commit is contained in:
ChunEon Park 2014-03-08 02:49:06 +09:00
parent 455d7c0265
commit d93a8b2709
1 changed files with 49 additions and 2 deletions

View File

@ -133,7 +133,53 @@ find_forward_proc(search_data *sd)
static void
find_backward_proc(search_data *sd)
{
//TODO:
const char *find = elm_entry_entry_get(sd->en_find);
if (!find) return;
char buf[256];
Eina_Bool need_iterate = EINA_TRUE;
int len;
const char *text = elm_entry_entry_get(sd->entry);
char *utf8 = elm_entry_markup_to_utf8(text);
//get the character position begun with searching.
if (sd->pos == -1)
{
sd->pos = elm_entry_cursor_pos_get(sd->entry);
}
else
{
len = strlen(utf8);
if (sd->pos == len) need_iterate = EINA_FALSE;
}
char *prev = NULL;
char *s = utf8;
while (s = strstr(s, find))
{
if ((s - utf8) >= sd->pos) break;
prev = s;
s++;
}
//No found. Need to iterate finding?
if ((!prev) && need_iterate)
{
sd->pos = len;
find_backward_proc(sd);
free(utf8);
return;
}
//Got you!
sd->pos = prev - utf8;
elm_entry_select_none(sd->entry);
elm_entry_select_region_set(sd->entry, sd->pos, sd->pos + strlen(find));
sd->found = EINA_TRUE;
free(utf8);
}
static Eina_Bool
@ -158,6 +204,7 @@ backward_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED,
{
search_data *sd = data;
find_backward_proc(sd);
sd->forward = EINA_FALSE;
}
static void
@ -186,6 +233,7 @@ forward_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED,
{
search_data *sd = data;
find_forward_proc(sd);
sd->forward = EINA_TRUE;
}
static void
@ -278,7 +326,6 @@ search_open()
//Button (backward)
Evas_Object *btn_backward = elm_button_add(layout);
elm_object_text_set(btn_backward, "Backward");
elm_object_disabled_set(btn_backward, EINA_TRUE);
evas_object_smart_callback_add(btn_backward, "clicked",
backward_clicked_cb, sd);
elm_object_part_content_set(layout, "elm.swallow.backward",