summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLarry Jr <larry.olj@gmail.com>2017-08-03 18:27:10 -0300
committerLarry Jr <larry.olj@gmail.com>2017-08-03 18:27:10 -0300
commit4097caf271c06058b75c2cade4b15c3d6e6f0e60 (patch)
tree2ab63d7aefd57ac28023211cf336a3ed548156c6
parente9a3dfc0dcc379bee52f9bf1c18d9229f7d55c97 (diff)
downloadefl-4097caf271c06058b75c2cade4b15c3d6e6f0e60.tar.gz
Elementary: Efl_Ui_List and efl_ui_list_example1 use Efl_Ui_Layout_Factory
-rw-r--r--src/examples/elementary/efl_ui_list_example_1.c14
-rw-r--r--src/lib/elementary/efl_ui_image_factory.c1
-rw-r--r--src/lib/elementary/efl_ui_layout_factory.c18
-rw-r--r--src/lib/elementary/efl_ui_list.c33
-rw-r--r--src/lib/elementary/efl_ui_list.eo7
-rw-r--r--src/lib/elementary/efl_ui_list_private.h1
6 files changed, 54 insertions, 20 deletions
diff --git a/src/examples/elementary/efl_ui_list_example_1.c b/src/examples/elementary/efl_ui_list_example_1.c
index 48cd8c239e..6e4463e07d 100644
--- a/src/examples/elementary/efl_ui_list_example_1.c
+++ b/src/examples/elementary/efl_ui_list_example_1.c
@@ -25,14 +25,14 @@ static void
_realized_cb(void *data, const Efl_Event *event)
{
Efl_Ui_List_Item_Event *ie = event->info;
- elm_layout_theme_set(ie->layout, "list", "item", "default");
+ //elm_layout_theme_set(ie->layout, "list", "item", "default");
evas_object_size_hint_weight_set(ie->layout, EVAS_HINT_EXPAND, 0);
evas_object_size_hint_align_set(ie->layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_widget_can_focus_set(ie->layout, EINA_TRUE);
- efl_ui_model_connect(ie->layout, "elm.text", "name");
- efl_ui_model_connect(ie->layout, "signal/elm,state,%v", "odd_style");
+ //efl_ui_model_connect(ie->layout, "elm.text", "name");
+ //efl_ui_model_connect(ie->layout, "signal/elm,state,%v", "odd_style");
}
/*
@@ -76,6 +76,7 @@ _make_model()
EAPI_MAIN int
elm_main(int argc, char **argv)
{
+ Efl_Ui_Layout_Factory *factory;
Evas_Object *win, *li;
Eo *model;
@@ -86,6 +87,13 @@ elm_main(int argc, char **argv)
model = _make_model();
li = efl_add(EFL_UI_LIST_CLASS, win, efl_ui_view_model_set(efl_added, model));
+
+ factory = efl_add(EFL_UI_LAYOUT_FACTORY_CLASS, li);
+ efl_ui_model_connect(factory, "elm.text", "name");
+ efl_ui_model_connect(factory, "signal/elm,state,%v", "odd_style");
+ efl_ui_list_theme_config(factory, "list", "item", "default");
+ efl_ui_list_layout_factory_set(li, factory);
+
efl_event_callback_add(li, EFL_UI_LIST_EVENT_ITEM_REALIZED, _realized_cb, NULL);
// efl_event_callback_add(li, EFL_UI_LIST_EVENT_ITEM_UNREALIZED, _unrealized_cb, NULL);
diff --git a/src/lib/elementary/efl_ui_image_factory.c b/src/lib/elementary/efl_ui_image_factory.c
index c2a87c4546..480be5d536 100644
--- a/src/lib/elementary/efl_ui_image_factory.c
+++ b/src/lib/elementary/efl_ui_image_factory.c
@@ -39,6 +39,7 @@ _efl_ui_image_factory_efl_ui_factory_create(Eo *obj EINA_UNUSED, Efl_Ui_Image_Fa
EINA_SAFETY_ON_NULL_RETURN_VAL(pd->property, NULL);
EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL);
+
ui_view = efl_add(EFL_UI_IMAGE_CLASS, parent);
efl_ui_view_model_set(ui_view, model);
efl_ui_model_connect(ui_view, "filename", pd->property);
diff --git a/src/lib/elementary/efl_ui_layout_factory.c b/src/lib/elementary/efl_ui_layout_factory.c
index e7f6600527..e0a256cc22 100644
--- a/src/lib/elementary/efl_ui_layout_factory.c
+++ b/src/lib/elementary/efl_ui_layout_factory.c
@@ -18,7 +18,7 @@ typedef struct _Efl_Ui_Layout_Factory_Data
} Efl_Ui_Layout_Factory_Data;
Eina_Bool
-_model_connect(const Eina_Hash *hash, const void *key, void *data, void *fdata)
+_model_connect(const Eina_Hash *hash EINA_UNUSED, const void *key, void *data, void *fdata)
{
Eo *layout = fdata;
Eina_Stringshare *name = key;
@@ -48,28 +48,26 @@ _efl_ui_layout_factory_efl_object_destructor(Eo *obj, Efl_Ui_Layout_Factory_Data
{
Eina_Array_Iterator iterator;
Eo *layout;
- int i;
-
- EINA_ARRAY_ITER_NEXT(pd->layouts, i, layout, iterator)
- efl_parent_set(layout, NULL);
-
- eina_array_free(pd->layouts);
+ unsigned int i;
eina_stringshare_del(pd->klass);
eina_stringshare_del(pd->group);
eina_stringshare_del(pd->style);
+ EINA_ARRAY_ITER_NEXT(pd->layouts, i, layout, iterator)
+ efl_parent_set(layout, NULL);
+
+ eina_array_free(pd->layouts);
eina_hash_free(pd->connects);
efl_destructor(efl_super(obj, MY_CLASS));
}
EOLIAN static Efl_Gfx *
-_efl_ui_layout_factory_efl_ui_factory_create(Eo *obj, Efl_Ui_Layout_Factory_Data *pd
+_efl_ui_layout_factory_efl_ui_factory_create(Eo *obj EINA_UNUSED, Efl_Ui_Layout_Factory_Data *pd
, Efl_Model *model, Efl_Gfx *parent)
{
Efl_Gfx *layout;
-
EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL);
if (eina_array_count(pd->layouts))
@@ -85,7 +83,6 @@ _efl_ui_layout_factory_efl_ui_factory_create(Eo *obj, Efl_Ui_Layout_Factory_Data
}
efl_ui_view_model_set(layout, model);
-
return layout;
}
@@ -101,7 +98,6 @@ _efl_ui_layout_factory_efl_ui_model_connect_connect(Eo *obj EINA_UNUSED, Efl_Ui_
, const char *name, const char *property)
{
Eina_Stringshare *ss_name, *ss_prop;
-
ss_name = eina_stringshare_add(name);
if (property == NULL)
diff --git a/src/lib/elementary/efl_ui_list.c b/src/lib/elementary/efl_ui_list.c
index 653996dda0..37aae08fc4 100644
--- a/src/lib/elementary/efl_ui_list.c
+++ b/src/lib/elementary/efl_ui_list.c
@@ -201,6 +201,7 @@ _focused_element(void *data EINA_UNUSED, const Efl_Event *event)
Efl_Ui_List_Data *pd = data;
Eo *focused = event->info;
EINA_SAFETY_ON_NULL_RETURN(pd);
+ printf("item focused\n");
if (!_elm_config->item_select_on_focus_disable)
_efl_ui_list_item_select_set(pd, focused, EINA_TRUE);
@@ -531,10 +532,11 @@ _child_setup(Efl_Ui_List_Data *pd, Efl_Ui_List_Item* item, Efl_Model *model
item->obj = pd->obj;
item->model = efl_ref(model);
- if(eina_inarray_count(recycle_layouts))
- item->layout = *(void**)eina_inarray_pop(recycle_layouts);
- else
- item->layout = efl_add(ELM_LAYOUT_CLASS, pd->obj);
+// if(eina_inarray_count(recycle_layouts))
+// item->layout = *(void**)eina_inarray_pop(recycle_layouts);
+// else
+// item->layout = efl_add(ELM_LAYOUT_CLASS, pd->obj);
+ item->layout = efl_ui_factory_create(pd->factory, item->model, pd->obj);
item->future = NULL;
item->index = idx + pd->realized.start;
item->minw = item->minh = 0;
@@ -563,8 +565,9 @@ _child_release(Efl_Ui_List_Data* pd, Efl_Ui_List_Item* item, Eina_Inarray* recyc
efl_future_cancel(item->future);
efl_unref(item->model);
// discard elm_layout to thrash to be able to reuse it
- assert(item->layout != NULL);
- eina_inarray_push(recycle_layouts, &item->layout);
+// assert(item->layout != NULL);
+// eina_inarray_push(recycle_layouts, &item->layout);
+ efl_ui_factory_release(pd->factory, item->layout);
item->layout = NULL;
if(_horiz(pd->orient))
pd->realized.w -= item->w;
@@ -907,7 +910,10 @@ _efl_ui_list_elm_widget_on_focus(Eo *obj, Efl_Ui_List_Data *pd EINA_UNUSED, Elm_
//TODO: with no focused focus first visible element
if (!efl_ui_focus_manager_focused(pd->manager))
+ {
+ printf(">>>> no item focused\n");
efl_ui_focus_manager_focus(pd->manager, obj);
+ }
return elm_obj_widget_on_focus(efl_super(obj, MY_CLASS), item);
}
@@ -1136,6 +1142,7 @@ _efl_ui_list_efl_object_constructor(Eo *obj, Efl_Ui_List_Data *pd)
pd->style = eina_stringshare_add(elm_widget_style_get(obj));
+ pd->factory = NULL;
pd->orient = EFL_ORIENT_DOWN;
pd->align.h = 0;
pd->align.v = 0;
@@ -1154,6 +1161,16 @@ _efl_ui_list_efl_object_destructor(Eo *obj, Efl_Ui_List_Data *pd)
}
EOLIAN static void
+_efl_ui_list_layout_factory_set(Eo *obj EINA_UNUSED, Efl_Ui_List_Data *pd, Efl_Ui_Factory *factory)
+{
+ //TODO: clean all current layouts??
+ if (pd->factory)
+ efl_unref(pd->factory);
+
+ pd->factory = efl_ref(factory);
+}
+
+EOLIAN static void
_efl_ui_list_efl_ui_view_model_set(Eo *obj, Efl_Ui_List_Data *pd, Efl_Model *model)
{
if (pd->model == model)
@@ -1171,6 +1188,10 @@ _efl_ui_list_efl_ui_view_model_set(Eo *obj, Efl_Ui_List_Data *pd, Efl_Model *mod
_efl_ui_list_children_free(obj, pd);
+
+ if (!pd->factory)
+ pd->factory = efl_add(EFL_UI_LAYOUT_FACTORY_CLASS, obj);
+
if (model)
{
pd->model = model;
diff --git a/src/lib/elementary/efl_ui_list.eo b/src/lib/elementary/efl_ui_list.eo
index 9f16a256e3..14b8c49564 100644
--- a/src/lib/elementary/efl_ui_list.eo
+++ b/src/lib/elementary/efl_ui_list.eo
@@ -35,6 +35,13 @@ class Efl.Ui.List (Elm.Layout, Efl.Ui.View, Elm.Interface_Scrollable,
style: stringshare;
}
}
+ @property layout_factory {
+ [[Listview layout factory set.]]
+ set {}
+ values {
+ factory: Efl.Ui.Factory; [[The factory.]]
+ }
+ }
}
events {
item,realized : Efl.Ui.List.Item_Event;
diff --git a/src/lib/elementary/efl_ui_list_private.h b/src/lib/elementary/efl_ui_list_private.h
index 4a29eff134..f14c451442 100644
--- a/src/lib/elementary/efl_ui_list_private.h
+++ b/src/lib/elementary/efl_ui_list_private.h
@@ -64,6 +64,7 @@ struct _Efl_Ui_List_Data
Evas_Object *obj;
} pan;
+ Efl_Ui_Layout_Factory *factory;
Eina_List *selected;
struct {
Eina_Inarray array;