bu5hm4n pushed a commit to branch master.

http://git.enlightenment.org/apps/extra.git/commit/?id=4cdeff45069302ffa36f33ef9ba65a84107ba401

commit 4cdeff45069302ffa36f33ef9ba65a84107ba401
Author: Marcel Hollerbach <[email protected]>
Date:   Fri Apr 7 19:08:19 2017 +0200

    extra: refactor site creation
    
    extra_private has grown quite big so extra_util.h is now a seperated
    header.
---
 src/bin/extra_background_selector.c |   9 +--
 src/bin/extra_main.c                |   4 +-
 src/bin/extra_private.h             |  34 +--------
 src/bin/extra_theme_selector.c      |  24 +++----
 src/bin/extra_util.h                | 133 ++++++++++++++++++++++++++++++++++++
 5 files changed, 149 insertions(+), 55 deletions(-)

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

-- 


Reply via email to