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);
+}

-- 


Reply via email to