diff options
author | Larry Lira <larry@expertisesolutions.com.br> | 2018-07-20 19:41:08 -0300 |
---|---|---|
committer | Larry Lira <larry@expertisesolutions.com.br> | 2018-07-20 19:52:21 -0300 |
commit | e8ce6e02e223933b5255f4ad5c291bc1129ca0be (patch) | |
tree | 3257eac0bf282b2d92107e6079bdd8b71a2d79ff | |
parent | 44bce025fa478cc52bc23b8f3fed799f8e1b8806 (diff) | |
download | efl-devs/larrylira/factory.tar.gz |
Efl.Ui.Layout.Factory: added factory_model_connectdevs/larrylira/factory
Summary:
when create a new layout connect a factory to it
change example to use the factory_model_connect
-rw-r--r-- | src/examples/elementary/efl_ui_view_list_example_2.c | 22 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_layout_factory.c | 31 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_layout_factory.eo | 1 |
3 files changed, 37 insertions, 17 deletions
diff --git a/src/examples/elementary/efl_ui_view_list_example_2.c b/src/examples/elementary/efl_ui_view_list_example_2.c index de4d259962..310aa26976 100644 --- a/src/examples/elementary/efl_ui_view_list_example_2.c +++ b/src/examples/elementary/efl_ui_view_list_example_2.c @@ -14,25 +14,13 @@ #define EFL_MODEL_TEST_FILENAME_PATH "/tmp" -static void -_realized_cb(void *data, const Efl_Event *event) -{ - Efl_Ui_View_List_Item_Event *ie = event->info; - Eo *imf = data; - printf("realize %d\n", ie->index); - - 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); - - efl_ui_factory_model_connect(ie->layout, "efl.icon", imf); -} - EAPI_MAIN int elm_main(int argc, char **argv) { Efl_Ui_Layout_Factory *factory; + Efl_Ui_Image_Factory *imgf; Evas_Object *win; - Eo *imf, *model, *li; + Eo *model, *li; char *dirname; win = elm_win_util_standard_add("viewlist", "Viewlist"); @@ -56,9 +44,9 @@ elm_main(int argc, char **argv) evas_object_size_hint_align_set(li, EVAS_HINT_FILL, EVAS_HINT_FILL); - imf = efl_add(EFL_UI_IMAGE_FACTORY_CLASS, win); - efl_ui_model_connect(imf, "", "path"); //connect to "path" property - efl_event_callback_add(li, EFL_UI_VIEW_LIST_EVENT_ITEM_REALIZED, _realized_cb, imf); + imgf = efl_add(EFL_UI_IMAGE_FACTORY_CLASS, win); + efl_ui_model_connect(imgf, "", "path"); //connect to "path" property + efl_ui_factory_model_connect(factory, "efl.icon", imgf); elm_win_resize_object_add(win, li); diff --git a/src/lib/elementary/efl_ui_layout_factory.c b/src/lib/elementary/efl_ui_layout_factory.c index 16621c53a0..73d18091f4 100644 --- a/src/lib/elementary/efl_ui_layout_factory.c +++ b/src/lib/elementary/efl_ui_layout_factory.c @@ -12,6 +12,7 @@ typedef struct _Efl_Ui_Layout_Factory_Data { Eina_Array *layouts; Eina_Hash *connects; + Eina_Hash *factory_connects; Eina_Stringshare *klass; Eina_Stringshare *group; Eina_Stringshare *style; @@ -29,6 +30,17 @@ _model_connect(const Eina_Hash *hash EINA_UNUSED, const void *key, void *data, v return EINA_TRUE; } +Eina_Bool +_factory_model_connect(const Eina_Hash *hash EINA_UNUSED, const void *key, void *data, void *fdata) +{ + Eo *layout = fdata; + Eina_Stringshare *name = key; + Efl_Ui_Factory *factory = data; + + efl_ui_factory_model_connect(layout, name, factory); + return EINA_TRUE; +} + EOLIAN static Eo * _efl_ui_layout_factory_efl_object_constructor(Eo *obj, Efl_Ui_Layout_Factory_Data *pd) { @@ -39,6 +51,7 @@ _efl_ui_layout_factory_efl_object_constructor(Eo *obj, Efl_Ui_Layout_Factory_Dat pd->style = NULL; pd->layouts = eina_array_new(8); pd->connects = eina_hash_stringshared_new(EINA_FREE_CB(eina_stringshare_del)); + pd->factory_connects = eina_hash_stringshared_new(EINA_FREE_CB(efl_del)); return obj; } @@ -59,6 +72,7 @@ _efl_ui_layout_factory_efl_object_destructor(Eo *obj, Efl_Ui_Layout_Factory_Data eina_array_free(pd->layouts); eina_hash_free(pd->connects); + eina_hash_free(pd->factory_connects); efl_destructor(efl_super(obj, MY_CLASS)); } @@ -83,6 +97,7 @@ _efl_ui_layout_factory_efl_ui_factory_create(Eo *obj EINA_UNUSED, Efl_Ui_Layout_ efl_ui_layout_object_theme_set(efl_added, pd->klass, pd->group, pd->style)); eina_hash_foreach(pd->connects, _model_connect, layout); + eina_hash_foreach(pd->factory_connects, _factory_model_connect, layout); evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, 0); evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL); @@ -99,6 +114,22 @@ _efl_ui_layout_factory_efl_ui_factory_release(Eo *obj EINA_UNUSED, Efl_Ui_Layout } EOLIAN static void +_efl_ui_layout_factory_efl_ui_factory_model_connect(Eo *obj EINA_UNUSED, Efl_Ui_Layout_Factory_Data *pd + , const char *name, Efl_Ui_Factory *factory) +{ + Eina_Stringshare *ss_name; + ss_name = eina_stringshare_add(name); + + if (factory == NULL) + { + eina_hash_del(pd->factory_connects, ss_name, NULL); + return; + } + + eina_stringshare_del(eina_hash_set(pd->factory_connects, ss_name, factory)); +} + +EOLIAN static void _efl_ui_layout_factory_efl_ui_model_connect_connect(Eo *obj EINA_UNUSED, Efl_Ui_Layout_Factory_Data *pd , const char *name, const char *property) { diff --git a/src/lib/elementary/efl_ui_layout_factory.eo b/src/lib/elementary/efl_ui_layout_factory.eo index e712900d1c..334a4c4478 100644 --- a/src/lib/elementary/efl_ui_layout_factory.eo +++ b/src/lib/elementary/efl_ui_layout_factory.eo @@ -17,6 +17,7 @@ class Efl.Ui.Layout_Factory (Efl.Object, Efl.Ui.Factory) Efl.Object.destructor; Efl.Ui.Factory.create; Efl.Ui.Factory.release; + Efl.Ui.Factory.model_connect; Efl.Ui.Model.Connect.connect; } } |