extra: refactor page creation
This commit is contained in:
parent
b8c6afe5a8
commit
890e1b0558
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue