extra: refactor page creation

This commit is contained in:
Marcel Hollerbach 2017-04-07 19:01:41 +02:00
parent b8c6afe5a8
commit 890e1b0558
4 changed files with 96 additions and 93 deletions

View File

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

View File

@ -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

View File

@ -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

View File

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