#define MIN_GRP_SIZE 2 //for symmetry it is 2, otherwise it can be 1 and zero have no meaning.
#define MIN_PIXEL_VALUE 1 //Min pixel value is highly dependent on touch sensitivity support.
#define MIN_OBJ_HEIGHT 24 //should be taken from .edc file.
+
+/*
+ * use for find view toplevel
+ */
+#define SET_VIEW_LEVEL(wd, view_level)\
+ view_level = wd->level;\
+ while ((!wd->tot_items_count[view_level]) && view_level)\
+ {\
+ view_level--; \
+ }
+
typedef struct _Widget_Data Widget_Data;
typedef struct _PlacementPart PlacementPart;
it->size = wd->min_1st_level_obj_height;
if(letter)
{
- it->letter = eina_stringshare_add(letter);
- it->vis_letter = eina_stringshare_add(letter);
+ it->letter = eina_stringshare_add(letter);
+ it->vis_letter = eina_stringshare_add(letter);
}
else
return NULL;
const char *stacking;
if (it->level != level) continue;
- if(i > wd->max_supp_items_count) break;
+ if(i > wd->max_supp_items_count) break;
o = edje_object_add(evas_object_evas_get(obj));
it->base = o;
evas_object_show(o);
i++;
if(level == 1)
- wd->tot_items_count[1] = i;
+ wd->tot_items_count[1] = i;
evas_object_smart_calculate(box); // force a calc so we know the size
evas_object_size_hint_min_get(box, &mw, &mh);
if (mh > h)
{
Widget_Data *wd = elm_widget_data_get(data);
void *d;
+ int view_level;
if (!wd) return ECORE_CALLBACK_CANCEL;
wd->delay = NULL;
- d = (void *)elm_index_item_selected_get(data, wd->level);
+ SET_VIEW_LEVEL(wd, view_level);
+ d = (void *)elm_index_item_selected_get(data, view_level);
if (d) evas_object_smart_callback_call(data, "delay,changed", d);
return ECORE_CALLBACK_CANCEL;
}
Eina_Bool change = EINA_FALSE;
char *label = NULL, *last = NULL;
int i;
+ int view_level;
if (!wd) return;
- for (i = 0; i <= wd->level; i++)
+
+ SET_VIEW_LEVEL(wd, view_level);
+ for (i = 0; i <= view_level; i++)
{
it_last = NULL;
it_closest = NULL;
dist = x;
}
}
- if ((i == 0) && (wd->level == 0))
+ if ((i == 0) && (view_level == 0))
{
if(cdv > dmax || cdv < dmin)
{
if(cdv > dmax)
{
- cdvv = dmax;
+ cdvv = dmax;
}
else
{
- cdvv = dmin;
+ cdvv = dmin;
}
edje_object_part_drag_value_set(wd->base, "elm.dragable.index.1", cdv, cdvv);
}
const char *stacking, *selectraise;
it = it_last;
- if(wd->level == it->level)
+ if(view_level == it->level)
edje_object_signal_emit(it->base, "elm,state,inactive", "elm");
stacking = edje_object_data_get(it->base, "stacking");
selectraise = edje_object_data_get(it->base, "selectraise");
const char *selectraise;
it = it_closest;
- if(wd->level == it->level)
+ if(view_level == it->level)
edje_object_signal_emit(it->base, "elm,state,active", "elm");
selectraise = edje_object_data_get(it->base, "selectraise");
if ((selectraise) && (!strcmp(selectraise, "on")))
if (!last) last = strdup("");
if(!wd->hide_button)
{
- if(wd->level == 0)
+ if(view_level == 0)
{
if(last)
{
edje_object_part_text_set(wd->base, "elm.text.body", last);
- edje_object_signal_emit(wd->base, "hide_2nd_level", "");
- }
- }
- if( wd->level == 1 && wd->level_active[1])
+ edje_object_signal_emit(wd->base, "hide_2nd_level", "");
+ }
+ }
+ if(view_level == 1 && wd->level_active[1])
{
edje_object_part_text_set(wd->base, "elm.text", last);
- edje_object_signal_emit(wd->base, "hide_first_level", "");
- }
+ edje_object_signal_emit(wd->base, "hide_first_level", "");
+ }
}
if(label)
- free(label);
+ free(label);
if(last)
- free(last);
+ free(last);
}
static void
void *d;
Elm_Index_Item *it;
Eina_List *l;
+ int view_level;
+
if (!wd) return;
if (ev->button != 1) return;
if (wd->level == 1 && wd->delay) ecore_timer_del(wd->delay);
wd->delay = NULL;
wd->down = 0;
- d = (void *)elm_index_item_selected_get(data, wd->level);
+ SET_VIEW_LEVEL(wd, view_level);
+ d = (void *)elm_index_item_selected_get(data, view_level);
EINA_LIST_FOREACH(wd->items, l, it)
{
- edje_object_signal_emit(it->base, "elm,state,inactive", "elm");
+ edje_object_signal_emit(it->base, "elm,state,inactive", "elm");
}
if (d) evas_object_smart_callback_call(data, "selected", d);
elm_index_active_set(data, 0);
if(pw != wd->pwidth && ph != wd->pheight)
{
- if(wd->down == 1)
- {
- wd->active = 0;
- elm_index_active_set(data, 1);
- }
- _index_box_clear((Evas_Object *)data, wd->bx[0], 0);
- evas_object_smart_calculate( wd->bx[0]);
- elm_index_item_go((Evas_Object *)data, wd->level);
- wd->pwidth = pw;
- wd->pheight = ph;
+ if(wd->down == 1)
+ {
+ wd->active = 0;
+ elm_index_active_set(data, 1);
+ }
+ _index_box_clear((Evas_Object *)data, wd->bx[0], 0);
+ evas_object_smart_calculate( wd->bx[0]);
+ elm_index_item_go((Evas_Object *)data, wd->level);
+ wd->pwidth = pw;
+ wd->pheight = ph;
}
}
if (edje_object_part_exists(wd->base, "elm.swallow.index.1"))
{
- wd->bx[1] = evas_object_box_add(e);
- evas_object_box_layout_set(wd->bx[1], _layout, wd, NULL);
- elm_widget_sub_object_add(obj, wd->bx[1]);
- edje_object_part_swallow(wd->base, "elm.swallow.index.1", wd->bx[1]);
- evas_object_show(wd->bx[1]);
+ wd->bx[1] = evas_object_box_add(e);
+ evas_object_box_layout_set(wd->bx[1], _layout, wd, NULL);
+ elm_widget_sub_object_add(obj, wd->bx[1]);
+ edje_object_part_swallow(wd->base, "elm.swallow.index.1", wd->bx[1]);
+ evas_object_show(wd->bx[1]);
}
wd->scale_factor = elm_scale_get();
- if ( wd->scale_factor == 0.0 ) {
- wd->scale_factor = 1.0;
- }
+ if ( wd->scale_factor == 0.0 )
+ {
+ wd->scale_factor = 1.0;
+ }
string = edje_object_data_get(wd->base, "min_1st_level_obj_height");
if(string)
wd->min_1st_level_obj_height = (int) (atoi(string))*wd->scale_factor;
int group_count = MIN_GRP_SIZE;
while(group_count <= wd->max_grp_size)
{
- if(extraIndex <= wd->max_grp_size*adj_pos)
- {
- if(group_count*adj_pos>=extraIndex) return group_count;
- }
- else
- return wd->max_grp_size;
-
- group_count += MIN_GRP_SIZE;
+ if(extraIndex <= wd->max_grp_size*adj_pos)
+ {
+ if(group_count*adj_pos>=extraIndex) return group_count;
+ }
+ else
+ return wd->max_grp_size;
+
+ group_count += MIN_GRP_SIZE;
}
return group_count;
}
if (wd->active)
{
_index_box_clear(obj, wd->bx[1], 1);
- _index_process(obj);
+ _index_process(obj);
_index_box_auto_fill(obj, wd->bx[0], 0);
edje_object_signal_emit(wd->base, "elm,state,active", "elm");
}
wd->items = eina_list_prepend_relative_list(wd->items, it, lnear);
else
{
- /* If cmp_data_func is not provided, append a duplicated item */
- if (!cmp_data_func)
- wd->items = eina_list_append_relative_list(wd->items, it, lnear);
- else
- {
- Elm_Index_Item *p_it = eina_list_data_get(lnear);
- if (cmp_data_func(p_it->data, it->data) >= 0)
- p_it->data = it->data;
- _item_free(it);
- }
+ /* If cmp_data_func is not provided, append a duplicated item */
+ if (!cmp_data_func)
+ wd->items = eina_list_append_relative_list(wd->items, it, lnear);
+ else
+ {
+ Elm_Index_Item *p_it = eina_list_data_get(lnear);
+ if (cmp_data_func(p_it->data, it->data) >= 0)
+ p_it->data = it->data;
+ _item_free(it);
+ }
}
_index_box_clear(obj, wd->bx[wd->level], wd->level);
if (it->level != wd->level) continue;
clear = eina_list_append(clear, it);
}
- EINA_LIST_FREE(clear, it) {
- _item_free(it);
- wd->tot_items_count[wd->level]--;
- }
+ EINA_LIST_FREE(clear, it)
+ {
+ _item_free(it);
+ wd->tot_items_count[wd->level]--;
+ }
}
/**
ELM_CHECK_WIDTYPE(obj, widtype);
Widget_Data *wd = elm_widget_data_get(obj);
wd->hide_button = invisible;
-
+
edje_object_signal_emit(wd->base, "elm,state,button,image,hide", "elm");
return;
}