bu5hm4n pushed a commit to branch master. http://git.enlightenment.org/apps/extra.git/commit/?id=890e1b055807565f1f768215944a831f02f73a48
commit 890e1b055807565f1f768215944a831f02f73a48 Author: Marcel Hollerbach <[email protected]> Date: Fri Apr 7 19:01:41 2017 +0200 extra: refactor page creation --- src/bin/extra_background_selector.c | 61 +++++++---------------------------- src/bin/extra_private.h | 10 ++++++ src/bin/extra_theme_selector.c | 55 +++++++------------------------- src/bin/extra_util.c | 63 +++++++++++++++++++++++++++++++++++++ 4 files changed, 96 insertions(+), 93 deletions(-) diff --git a/src/bin/extra_background_selector.c b/src/bin/extra_background_selector.c index f6eb242..3f1d52c 100644 --- a/src/bin/extra_background_selector.c +++ b/src/bin/extra_background_selector.c @@ -3,10 +3,6 @@ #include "extra_private.h" #include "../lib/extra.h" -static Evas_Object *_selector; - -static Elm_Gengrid_Item_Class *_item_class_basic; - static Extra_Ui_Small_Preview_Accessor acc = { ((Extra_ui_preview_get*) extra_background_preview_get), ((Extra_ui_preview_download*) extra_background_preview_download), @@ -17,7 +13,7 @@ static void _background_installed(void *data EINA_UNUSED) { /*TODO FIND A WAY TO REMOTE OPEN ENLIGHTENMENT BACKGROUND SELECTOR*/ - gengrid_reapply_state(_selector); + gengrid_reapply_state(_ui.background_selector); } static void @@ -36,7 +32,7 @@ _uninstall_background(void *data, Evas_Object *obj EINA_UNUSED, void *event_info Extra_Background *b = data; extra_background_delete(b); - gengrid_reapply_state(_selector); + gengrid_reapply_state(_ui.background_selector); } static void @@ -111,20 +107,6 @@ _show_tooltip(Extra_Background *b) extra_ui_show_popup_toolbar(box); } -static void -_fill_backgrounds(void) -{ - Eina_List *backgrounds, *n; - Extra_Background *b; - - backgrounds = extra_backgrounds_list(); - - EINA_LIST_FOREACH(backgrounds, n, b) - { - elm_gengrid_item_append(_selector, _item_class_basic, b, NULL, NULL); - } -} - static Evas_Object* _content_basic_get(void *data, Evas_Object *obj, const char *source) { @@ -150,38 +132,17 @@ _item_selected(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event _show_tooltip(elm_object_item_data_get(it)); } -static void -_selector_hide(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - if (_ui.popup_toolbar) - { - evas_object_del(_ui.popup_toolbar); - _ui.popup_toolbar = NULL; - } -} + +static Extra_Ui_Site_Template temp = { + extra_backgrounds_list, + "thumb", + _content_basic_get, + _text_basic_get, + _item_selected, +}; Evas_Object* extra_background_selector_create(void) { - Evas_Object *grid; - - _item_class_basic = elm_gengrid_item_class_new(); - _item_class_basic->item_style = "thumb"; - _item_class_basic->func.content_get = _content_basic_get; - _item_class_basic->func.text_get = _text_basic_get; - - _selector = grid = elm_gengrid_add(_ui.win); - elm_gengrid_select_mode_set(grid, ELM_OBJECT_SELECT_MODE_ALWAYS); - elm_gengrid_multi_select_set(grid, EINA_FALSE); - evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(grid, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_gengrid_item_size_set(grid, 300, 300); - evas_object_smart_callback_add(grid, "selected", _item_selected, _ui.win); - evas_object_show(grid); - - _fill_backgrounds(); - - evas_object_event_callback_add(grid, EVAS_CALLBACK_HIDE, _selector_hide, NULL); - - return grid; + return extra_ui_site_add(&temp); } diff --git a/src/bin/extra_private.h b/src/bin/extra_private.h index 113ef4e..dc11432 100644 --- a/src/bin/extra_private.h +++ b/src/bin/extra_private.h @@ -33,4 +33,14 @@ void extra_ui_fullscreen_preview(char *path); void extra_ui_show_popup_toolbar(Evas_Object *content); void gengrid_reapply_state(Evas_Object *grid); +typedef struct { + Eina_List* (*list)(void); + const char *item_style; + Elm_Gen_Item_Content_Get_Cb content; + Elm_Gen_Item_Text_Get_Cb text; + Evas_Smart_Cb selected; +} Extra_Ui_Site_Template; + +Evas_Object* extra_ui_site_add(Extra_Ui_Site_Template *site_temp); +void extra_ui_site_refill(Evas_Object *site); #endif diff --git a/src/bin/extra_theme_selector.c b/src/bin/extra_theme_selector.c index f1b6bf8..ef1db0e 100644 --- a/src/bin/extra_theme_selector.c +++ b/src/bin/extra_theme_selector.c @@ -3,15 +3,8 @@ #include "extra_private.h" #include "../lib/extra.h" -static Evas_Object *_selector; - - -static void _fill_gengrid(void); - static Evas_Object* extra_theme_small_new(Evas_Object *par, Extra_Theme *theme); -static Elm_Gengrid_Item_Class *_item_class_basic; - static Extra_Ui_Small_Preview_Accessor acc = { ((Extra_ui_preview_get*) extra_theme_preview_get), ((Extra_ui_preview_download*) extra_theme_preview_download), @@ -25,8 +18,8 @@ _install_done(void *data) if (extra_theme_installed(theme)) extra_ui_theme_ask_for_default(theme); - elm_gengrid_clear(_selector); - _fill_gengrid(); + elm_gengrid_clear(_ui.theme_selector); + extra_ui_site_refill(_ui.theme_selector); extra_ui_show_popup_toolbar(NULL); } @@ -51,14 +44,14 @@ _set_as_default(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_ Extra_Theme *candidate = data; extra_theme_use(candidate); - gengrid_reapply_state(_selector); + gengrid_reapply_state(_ui.theme_selector); } static void _back_to_default(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { extra_theme_reset(); - gengrid_reapply_state(_selector); + gengrid_reapply_state(_ui.theme_selector); } static Evas_Object* @@ -196,42 +189,18 @@ _item_selected(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event extra_ui_show_popup_toolbar(box); } -static void -_fill_gengrid(void) -{ - Eina_List *themes, *n; - Extra_Theme *theme; - - themes = extra_themes_list(); - EINA_LIST_FOREACH(themes, n, theme) - { - elm_gengrid_item_append(_selector, _item_class_basic, theme, NULL, NULL); - } - elm_gengrid_item_bring_in(elm_gengrid_first_item_get(_selector), ELM_GENGRID_ITEM_SCROLLTO_TOP); -} +static Extra_Ui_Site_Template temp = { + extra_themes_list, + "thumb", + _content_basic_get, + _text_basic_get, + _item_selected, +}; Evas_Object* extra_theme_selector_create(void) { - Evas_Object *grid; - - _item_class_basic = elm_gengrid_item_class_new(); - _item_class_basic->item_style = "thumb"; - _item_class_basic->func.content_get = _content_basic_get; - _item_class_basic->func.text_get = _text_basic_get; - - _selector = grid = elm_gengrid_add(_ui.win); - elm_gengrid_select_mode_set(grid, ELM_OBJECT_SELECT_MODE_ALWAYS); - elm_gengrid_multi_select_set(grid, EINA_FALSE); - evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(grid, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_gengrid_item_size_set(grid, 300, 300); - evas_object_smart_callback_add(grid, "selected", _item_selected, _ui.win); - evas_object_show(grid); - - _fill_gengrid(); - - return grid; + return extra_ui_site_add(&temp); } //==== Small preview diff --git a/src/bin/extra_util.c b/src/bin/extra_util.c index 103dcc6..51cd6fd 100644 --- a/src/bin/extra_util.c +++ b/src/bin/extra_util.c @@ -472,3 +472,66 @@ extra_ui_base_object_detail(void *real_obj, Extra_Base_Object *obj, Extra_Ui_Sma return table; } + +typedef struct { + Extra_Ui_Site_Template temp; + Elm_Gengrid_Item_Class *class; + Evas_Object *grid; +} Extra_Ui_Site; + +static void +_selector_hide(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + if (_ui.popup_toolbar) + { + evas_object_del(_ui.popup_toolbar); + _ui.popup_toolbar = NULL; + } +} + +Evas_Object* +extra_ui_site_add(Extra_Ui_Site_Template *site_temp) +{ + Extra_Ui_Site *site = calloc(1, sizeof(Extra_Ui_Site)); + Evas_Object *o; + + memcpy(&site->temp, site_temp, sizeof(Extra_Ui_Site_Template)); + + site->class = elm_gengrid_item_class_new(); + site->class->item_style = site_temp->item_style; + site->class->func.content_get = site->temp.content; + site->class->func.text_get = site->temp.text; + + site->grid = o = elm_gengrid_add(_ui.win); + elm_gengrid_select_mode_set(o, ELM_OBJECT_SELECT_MODE_ALWAYS); + elm_gengrid_multi_select_set(o, EINA_FALSE); + evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_gengrid_item_size_set(o, 300, 300); + evas_object_smart_callback_add(o, "selected", site->temp.selected, _ui.win); + evas_object_show(o); + evas_object_data_set(o, "__site_data", site); + evas_object_event_callback_add(o, EVAS_CALLBACK_HIDE, _selector_hide, NULL); + + extra_ui_site_refill(o); + + return o; +} + +void +extra_ui_site_refill(Evas_Object *site) +{ + Extra_Ui_Site *pd = evas_object_data_get(site, "__site_data"); + Eina_List *n, *lst; + void *data; + + EINA_SAFETY_ON_NULL_RETURN(pd); + + lst = pd->temp.list(); + + EINA_LIST_FOREACH(lst, n, data) + { + elm_gengrid_item_append(pd->grid, pd->class, data, NULL, NULL); + } + elm_gengrid_item_bring_in(elm_gengrid_first_item_get(pd->grid), ELM_GENGRID_ITEM_SCROLLTO_TOP); +} --
