forked from enlightenment/enventor
search - +find backward
This commit is contained in:
parent
455d7c0265
commit
d93a8b2709
|
@ -133,7 +133,53 @@ find_forward_proc(search_data *sd)
|
||||||
static void
|
static void
|
||||||
find_backward_proc(search_data *sd)
|
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
|
static Eina_Bool
|
||||||
|
@ -158,6 +204,7 @@ backward_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED,
|
||||||
{
|
{
|
||||||
search_data *sd = data;
|
search_data *sd = data;
|
||||||
find_backward_proc(sd);
|
find_backward_proc(sd);
|
||||||
|
sd->forward = EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -186,6 +233,7 @@ forward_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED,
|
||||||
{
|
{
|
||||||
search_data *sd = data;
|
search_data *sd = data;
|
||||||
find_forward_proc(sd);
|
find_forward_proc(sd);
|
||||||
|
sd->forward = EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -278,7 +326,6 @@ search_open()
|
||||||
//Button (backward)
|
//Button (backward)
|
||||||
Evas_Object *btn_backward = elm_button_add(layout);
|
Evas_Object *btn_backward = elm_button_add(layout);
|
||||||
elm_object_text_set(btn_backward, "Backward");
|
elm_object_text_set(btn_backward, "Backward");
|
||||||
elm_object_disabled_set(btn_backward, EINA_TRUE);
|
|
||||||
evas_object_smart_callback_add(btn_backward, "clicked",
|
evas_object_smart_callback_add(btn_backward, "clicked",
|
||||||
backward_clicked_cb, sd);
|
backward_clicked_cb, sd);
|
||||||
elm_object_part_content_set(layout, "elm.swallow.backward",
|
elm_object_part_content_set(layout, "elm.swallow.backward",
|
||||||
|
|
Loading…
Reference in New Issue