diff --git a/src/bin/extra_background_selector.c b/src/bin/extra_background_selector.c index 3f1d52c..aca8a98 100644 --- a/src/bin/extra_background_selector.c +++ b/src/bin/extra_background_selector.c @@ -132,17 +132,10 @@ _item_selected(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event _show_tooltip(elm_object_item_data_get(it)); } - -static Extra_Ui_Site_Template temp = { +Extra_Ui_Site_Template background_site = { extra_backgrounds_list, "thumb", _content_basic_get, _text_basic_get, _item_selected, }; - -Evas_Object* -extra_background_selector_create(void) -{ - return extra_ui_site_add(&temp); -} diff --git a/src/bin/extra_main.c b/src/bin/extra_main.c index fe79e5f..2f576e3 100644 --- a/src/bin/extra_main.c +++ b/src/bin/extra_main.c @@ -48,10 +48,10 @@ _extra_win_sync_done_cb(void *data EINA_UNUSED) evas_object_size_hint_align_set(table, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_show(table); - _ui.background_selector = extra_background_selector_create(); + _ui.background_selector = extra_ui_site_add(&background_site); elm_table_pack(table, _ui.background_selector, 0, 1, 1, 1); - _ui.theme_selector = extra_theme_selector_create(); + _ui.theme_selector = extra_ui_site_add(&theme_site); elm_table_pack(table, _ui.theme_selector, 0, 1, 1, 1); segcontrol = elm_segment_control_add(table); diff --git a/src/bin/extra_private.h b/src/bin/extra_private.h index dc11432..d2fe035 100644 --- a/src/bin/extra_private.h +++ b/src/bin/extra_private.h @@ -2,6 +2,7 @@ # define EXTRA_PRIVATE_H_ #include "../lib/extra.h" +#include "extra_util.h" typedef struct { Evas_Object *win; @@ -11,36 +12,7 @@ typedef struct { } Ui; extern Ui _ui; +extern Extra_Ui_Site_Template theme_site; +extern Extra_Ui_Site_Template background_site; -Evas_Object* extra_theme_selector_create(void); -Evas_Object* extra_background_selector_create(void); - -void extra_ui_theme_ask_for_default(Extra_Theme *theme); -Extra_Progress* extra_ui_progress_popup_show(const char *title, Extra_Done_Cb done, void *data); - -typedef char *(Extra_ui_preview_get)(void *obj); -typedef Extra_Request *(Extra_ui_preview_download)(Extra_Progress *progress, void *obj); - -typedef struct { - Extra_ui_preview_get *preview_get; - Extra_ui_preview_download *preview_download; -} Extra_Ui_Small_Preview_Accessor; - -Evas_Object* extra_ui_small_preview_new(Extra_Ui_Small_Preview_Accessor acc, Evas_Object *par, void *data); -Evas_Object* extra_ui_base_object_detail(void *real_obj, Extra_Base_Object *obj, Extra_Ui_Small_Preview_Accessor acc, Evas_Object *par); -void extra_ui_details_window_show(Evas_Object *content); -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 ef1db0e..f249502 100644 --- a/src/bin/extra_theme_selector.c +++ b/src/bin/extra_theme_selector.c @@ -189,20 +189,6 @@ _item_selected(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event extra_ui_show_popup_toolbar(box); } -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) -{ - return extra_ui_site_add(&temp); -} - //==== Small preview static Evas_Object* @@ -254,3 +240,13 @@ extra_theme_small_new(Evas_Object *par, Extra_Theme *theme) } return table; } + +//external accessable + +Extra_Ui_Site_Template theme_site = { + extra_themes_list, + "thumb", + _content_basic_get, + _text_basic_get, + _item_selected, +}; diff --git a/src/bin/extra_util.h b/src/bin/extra_util.h new file mode 100644 index 0000000..ba8b7a8 --- /dev/null +++ b/src/bin/extra_util.h @@ -0,0 +1,133 @@ +#ifndef EXTRA_UTIL_H +#define EXTRA_UTIL_H + +#include "../lib/extra.h" + +/* Typedefs for later use */ +typedef struct _Extra_Ui_Small_Preview_Accessor Extra_Ui_Small_Preview_Accessor; +typedef struct _Extra_Ui_Site_Template Extra_Ui_Site_Template; + +/* + * General purpose helper functions that displays dialogs / windows / and visual representation + */ + +/** + * Ask if the given theme should be displayed as default + * + * @param theme the extra theme to ask for + */ +void extra_ui_theme_ask_for_default(Extra_Theme *theme); + +/** + * Create a popup that shows a popup with a progressbar and a label + * + * @param title the title to display in the popup + * @param down_cb once the progress hit 100% this function is called + * @param data the data to pass to down_cb + * + * @return a extra_progress you can pass this value to other api functions, the + progress of this function will then be directly displayed in this object + */ +Extra_Progress* extra_ui_progress_popup_show(const char *title, Extra_Done_Cb done, void *data); + +/** + * Fill a Evas_Object with the data passed in by obj + * + * @param real_obj the object that gets passed to the accessor functions + * @param obj the object that specifies the base data + * @param acc the accessor to get preview and download path from a real_obj + * @param parent the parent to use when creating the objects + * + * @return A Elm_Table that contains contents from + * + */ +Evas_Object* extra_ui_base_object_detail(void *real_obj, Extra_Base_Object *obj, Extra_Ui_Small_Preview_Accessor acc, Evas_Object *par); + +/** + * Display a inwin in the extra window with the given content + * + * @param content the content to display in the inwin + * + */ +void extra_ui_details_window_show(Evas_Object *content); + +/** + * Preview a path as fullscreen window on the desktop + * + * @param path the path to load the image from + */ +void extra_ui_fullscreen_preview(char *path); + +/** + * Popups a toolbar at the top center of the window with the specified content + * + * @param content the content to display + * + */ +void extra_ui_show_popup_toolbar(Evas_Object *content); + +/* + * Util function to get the state of the current selected item reapplied + * + * @param grid a Elm_Gengrid + */ +void gengrid_reapply_state(Evas_Object *grid); + + +/* + * Helperfunctions to create a visually representation of a preview or a progressbar + * that displays the progress on downloading the preview + */ + +/* + * If the function returns NULL download is called + */ +typedef char *(Extra_ui_preview_get)(void *obj); +typedef Extra_Request *(Extra_ui_preview_download)(Extra_Progress *progress, void *obj); +struct _Extra_Ui_Small_Preview_Accessor{ + Extra_ui_preview_get *preview_get; + Extra_ui_preview_download *preview_download; +} ; + +/** + * Create a object that previews the visualy component of a object + * If a object is not ready to be displayed the data is downloaded, or the progressbar is displayed + * + * @param acc a struct that defines how to get the preview and download function out of data + * @param obj the parent to use + * @param data the data to pass to the functions of the acc functions + * + * @return a evas image that displayes the previews from the data ptr + */ +Evas_Object* extra_ui_small_preview_new(Extra_Ui_Small_Preview_Accessor acc, Evas_Object *par, void *data); + +/** + * Helper functions to define a site + * + * A site is just a gengrid that gets filled with the items returned by the list function pointer + */ +struct _Extra_Ui_Site_Template{ + 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; +}; + +/** + * Create a Evas Object out of a site template + * + * @param site_temp the content is later copied into the internal struct and + does not need to be present after this call + */ +Evas_Object* extra_ui_site_add(Extra_Ui_Site_Template *site_temp); + +/* + * Call again the list function to renew all items in the previously created site. + * + * @param site the evas object, returned by extra_ui_site_add + * + */ +void extra_ui_site_refill(Evas_Object *site); + +#endif