genlist: Added internal functions _view_create and _view_style_update

for the commonly used codes.
This commit is contained in:
Daniel Juyung Seo 2014-07-26 21:44:51 -07:00
parent 9c81e0e02a
commit 122dda0b48
1 changed files with 83 additions and 76 deletions

View File

@ -265,6 +265,87 @@ _elm_genlist_pan_evas_object_smart_resize(Eo *obj, Elm_Genlist_Pan_Data *psd, Ev
sd->calc_job = NULL;
}
/**
* Apply the right style for the created item view.
*/
static void
_view_style_update(Elm_Gen_Item *it, Evas_Object *view, const char *style)
{
char buf[1024];
const char *stacking_even;
const char *stacking;
ELM_GENLIST_DATA_GET_FROM_ITEM(it, sd);
// FIXME: There exists
// item, item_compress, item_odd, item_compress_odd,
// tree, tree_compress, tree_odd, tree_odd_compress
// But those used case by case. :-(
// Anyway, belows codes are for backward..
if (it->decorate_it_set)
{
// item, item_compress, item_odd, item_compress_odd
strncpy(buf, "item", sizeof(buf));
if (sd->mode == ELM_LIST_COMPRESS)
strncat(buf, "_compress", sizeof(buf) - strlen(buf) - 1);
if (it->item->order_num_in & 0x1)
strncat(buf, "_odd", sizeof(buf) - strlen(buf) - 1);
strncat(buf, "/", sizeof(buf) - strlen(buf) - 1);
strncat(buf, style, sizeof(buf) - strlen(buf) - 1);
}
else
{
// item, item_compress, tree, tree_compress
if (it->item->type & ELM_GENLIST_ITEM_TREE)
snprintf(buf, sizeof(buf), "tree%s/%s",
sd->mode == ELM_LIST_COMPRESS ? "_compress" :
"", style ? : "default");
else
snprintf(buf, sizeof(buf), "item%s/%s",
sd->mode == ELM_LIST_COMPRESS ? "_compress" :
"",style ? : "default");
}
if (!elm_widget_theme_object_set(WIDGET(it), view,
"genlist", buf,
elm_widget_style_get(WIDGET(it))))
{
ERR("%s is not a valid genlist item style. "
"Automatically falls back into default style.",
style);
elm_widget_theme_object_set
(WIDGET(it), VIEW(it), "genlist", "item/default", "default");
}
edje_object_mirrored_set(view, elm_widget_mirrored_get(WIDGET(it)));
edje_object_scale_set(view, elm_widget_scale_get(WIDGET(it))
* elm_config_scale_get());
stacking_even = edje_object_data_get(VIEW(it), "stacking_even");
if (!stacking_even) stacking_even = "above";
it->item->stacking_even = !!strcmp("above", stacking_even);
stacking = edje_object_data_get(VIEW(it), "stacking");
if (!stacking) stacking = "yes";
it->item->nostacking = !!strcmp("yes", stacking);
}
/**
* Create a VIEW(it) during _item_realize()
*/
static Evas_Object *
_view_create(Elm_Gen_Item *it, const char *style)
{
Evas_Object *view = edje_object_add(evas_object_evas_get(WIDGET(it)));
evas_object_smart_member_add(view, GL_IT(it)->wsd->pan_obj);
elm_widget_sub_object_add(WIDGET(it), view);
edje_object_scale_set(view, elm_widget_scale_get(WIDGET(it)) *
elm_config_scale_get());
_view_style_update(it, view, style);
return view;
}
static void
_item_scroll(Elm_Genlist_Data *sd)
{
@ -1514,7 +1595,6 @@ _item_realize(Elm_Gen_Item *it,
{
Item_Cache *itc = NULL;
const char *treesize;
char buf[1024];
int tsize = 20;
ELM_GENLIST_DATA_GET_FROM_ITEM(it, sd);
@ -1543,49 +1623,7 @@ _item_realize(Elm_Gen_Item *it,
itc->spacer = NULL;
}
else
{
const char *stacking_even;
const char *stacking;
VIEW(it) = edje_object_add(evas_object_evas_get(WIDGET(it)));
edje_object_scale_set(VIEW(it),
elm_widget_scale_get(WIDGET(it)) *
elm_config_scale_get());
evas_object_smart_member_add(VIEW(it), sd->pan_obj);
elm_widget_sub_object_add(WIDGET(it), VIEW(it));
if (it->item->type & ELM_GENLIST_ITEM_TREE)
snprintf(buf, sizeof(buf), "tree%s/%s",
sd->mode == ELM_LIST_COMPRESS ? "_compress" :
"", it->itc->item_style ? : "default");
else
snprintf(buf, sizeof(buf), "item%s/%s",
sd->mode == ELM_LIST_COMPRESS ? "_compress" :
"", it->itc->item_style ? : "default");
if (!elm_widget_theme_object_set(WIDGET(it), VIEW(it),
"genlist", buf,
elm_widget_style_get(WIDGET(it))))
{
ERR("%s is not a valid genlist item style. "
"Automatically falls back into default style.",
it->itc->item_style);
elm_widget_theme_object_set
(WIDGET(it), VIEW(it), "genlist", "item/default", "default");
}
stacking_even = edje_object_data_get(VIEW(it), "stacking_even");
if (!stacking_even) stacking_even = "above";
it->item->stacking_even = !!strcmp("above", stacking_even);
stacking = edje_object_data_get(VIEW(it), "stacking");
if (!stacking) stacking = "yes";
it->item->nostacking = !!strcmp("yes", stacking);
edje_object_mirrored_set
(VIEW(it), elm_widget_mirrored_get(WIDGET(it)));
}
VIEW(it) = _view_create(it, it->itc->item_style);
/* access */
if (_elm_config->access_mode) _access_widget_item_register(it);
@ -5081,7 +5119,6 @@ _hbar_unpress_cb(Evas_Object *obj,
static void
_decorate_item_realize(Elm_Gen_Item *it)
{
char buf[1024];
ELM_GENLIST_DATA_GET_FROM_ITEM(it, sd);
Evas_Object *obj = sd->obj;
@ -5089,37 +5126,7 @@ _decorate_item_realize(Elm_Gen_Item *it)
sd->generation)) return;
evas_event_freeze(evas_object_evas_get(obj));
it->item->deco_it_view = edje_object_add(evas_object_evas_get(WIDGET(it)));
edje_object_scale_set
(it->item->deco_it_view, elm_widget_scale_get(WIDGET(it)) *
elm_config_scale_get());
evas_object_smart_member_add
(it->item->deco_it_view, sd->pan_obj);
elm_widget_sub_object_add(WIDGET(it), it->item->deco_it_view);
strncpy(buf, "item", sizeof(buf));
if (sd->mode == ELM_LIST_COMPRESS)
strncat(buf, "_compress", sizeof(buf) - strlen(buf) - 1);
if (it->item->order_num_in & 0x1)
strncat(buf, "_odd", sizeof(buf) - strlen(buf) - 1);
strncat(buf, "/", sizeof(buf) - strlen(buf) - 1);
strncat(buf, it->itc->decorate_item_style, sizeof(buf) - strlen(buf) - 1);
if (!elm_widget_theme_object_set
(WIDGET(it), it->item->deco_it_view, "genlist", buf,
elm_widget_style_get(WIDGET(it))))
{
ERR("%s is not a valid genlist item style. "
"Automatically falls back into default style.",
it->itc->decorate_item_style);
elm_widget_theme_object_set
(WIDGET(it), it->item->deco_it_view,
"genlist", "item/default", "default");
}
edje_object_mirrored_set
(it->item->deco_it_view, elm_widget_mirrored_get(WIDGET(it)));
it->item->deco_it_view = _view_create(it, it->itc->decorate_item_style);
/* signal callback add */
evas_object_event_callback_add