bu5hm4n pushed a commit to branch master.

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

commit bdb41a0b87b52650b85176c338cafff188acfbf0
Author: Marcel Hollerbach <marcel-hollerb...@t-online.de>
Date:   Fri Jan 20 10:37:19 2017 +0100

    extra: add a background selector
    
    this brings a background selector to extra
---
 src/bin/Makefile.am                 |   1 +
 src/bin/extra_background_selector.c | 174 ++++++++++++++++++++++++++++++++++++
 src/bin/extra_main.c                |  51 ++++++++++-
 src/bin/extra_private.h             |   3 +-
 4 files changed, 224 insertions(+), 5 deletions(-)

diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am
index 8b83804..64edf87 100644
--- a/src/bin/Makefile.am
+++ b/src/bin/Makefile.am
@@ -11,6 +11,7 @@ AM_CPPFLAGS = -DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
 
 extra_SOURCES = extra_main.c \
     extra_theme_selector.c \
+    extra_background_selector.c \
     extra_util.c
 
 extra_LDADD = @EFL_LIBS@ $(top_builddir)/src/lib/libextra.la
diff --git a/src/bin/extra_background_selector.c 
b/src/bin/extra_background_selector.c
new file mode 100644
index 0000000..6eb999f
--- /dev/null
+++ b/src/bin/extra_background_selector.c
@@ -0,0 +1,174 @@
+#include <Elementary.h>
+#include <Elementary_Cursor.h>
+#include "extra_private.h"
+#include "../lib/extra.h"
+
+static Evas_Object *_selector;
+static Evas_Object *_popup;
+
+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),
+};
+
+static void
+_background_installed(void *data EINA_UNUSED)
+{
+    /*TODO FIND A WAY TO REMOTE OPEN ENLIGHTENMENT BACKGROUND SELECTOR*/
+}
+
+static void
+_install_background(void *data, Evas_Object *obj EINA_UNUSED, void *event_info 
EINA_UNUSED)
+{
+   Extra_Background *b = data;
+   Extra_Progress *p;
+
+   p = extra_ui_progress_popup_show("Installing background", 
_background_installed, b);
+   extra_background_download(p, b);
+}
+
+static void
+_uninstall_background(void *data, Evas_Object *obj EINA_UNUSED, void 
*event_info EINA_UNUSED)
+{
+   Extra_Background *b = data;
+
+   extra_background_delete(b);
+}
+
+static void
+_fullscreen_background(void *data, Evas_Object *obj EINA_UNUSED, void 
*event_info EINA_UNUSED)
+{
+   Extra_Background *b = data;
+   char *path;
+
+   path = extra_background_preview_get(b);
+   if (!path) return;
+
+   extra_ui_fullscreen_preview(path);
+}
+
+static void
+_del(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info 
EINA_UNUSED)
+{
+    _popup = NULL;
+    evas_object_del(_popup);
+}
+
+static void
+_show_tooltip(Extra_Background *b)
+{
+    Evas_Object *tooltip, *box, *o, *icon;
+
+    if (_popup)
+      {
+         evas_object_del(_popup);
+         _popup = NULL;
+      }
+
+    tooltip = elm_popup_add(_selector);
+    evas_object_smart_callback_add(tooltip, "block,clicked", _del, tooltip);
+    elm_popup_allow_events_set(tooltip, EINA_TRUE);
+    elm_popup_orient_set(tooltip, ELM_POPUP_ORIENT_TOP);
+    evas_object_show(tooltip);
+
+
+    box = elm_box_add(tooltip);
+    elm_box_horizontal_set(box, EINA_TRUE);
+    elm_object_content_set(tooltip, box);
+
+    icon = elm_icon_add(tooltip);
+    o = elm_button_add(box);
+
+    if (extra_background_installed(b))
+      {
+         elm_object_text_set(o, "Uninstall");
+         elm_icon_standard_set(icon, "edit-delete");
+         evas_object_smart_callback_add(o, "clicked", _uninstall_background, 
b);
+      }
+    else
+      {
+         elm_object_text_set(o, "Install");
+         elm_icon_standard_set(icon, "emblem-downloads");
+         evas_object_smart_callback_add(o, "clicked", _install_background, b);
+      }
+    elm_object_part_content_set(o, "icon", icon);
+    elm_box_pack_end(box, o);
+    evas_object_show(o);
+
+    //view-fullscreen
+    o = elm_button_add(box);
+    elm_object_text_set(o, "Show fullscreen");
+    evas_object_smart_callback_add(o, "clicked", _fullscreen_background , b);
+    elm_box_pack_end(box, o);
+    evas_object_show(o);
+    icon = elm_icon_add(tooltip);
+    elm_icon_standard_set(icon, "view-fullscreen");
+    elm_object_part_content_set(o, "icon", icon);
+
+    _popup = tooltip;
+}
+
+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)
+{
+   if (!strcmp(source, "elm.swallow.end"))
+     return NULL;
+
+   return extra_ui_small_preview_new(acc, obj, data);
+}
+
+static char*
+_text_basic_get(void *data, Evas_Object *obj EINA_UNUSED, const char *source 
EINA_UNUSED)
+{
+   Extra_Background *t = data;
+
+   return strdup(t->name);
+}
+
+static void
+_item_selected(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void 
*event_info)
+{
+
+   Elm_Widget_Item *it = event_info;
+   _show_tooltip(elm_object_item_data_get(it));
+}
+
+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();
+
+   return grid;
+}
\ No newline at end of file
diff --git a/src/bin/extra_main.c b/src/bin/extra_main.c
index 1c9a644..b7452ce 100644
--- a/src/bin/extra_main.c
+++ b/src/bin/extra_main.c
@@ -25,13 +25,56 @@ _extra_win_del(void *data EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, void *event
 }
 
 static void
+_item_changed(void *data EINA_UNUSED, Evas_Object *obj, void *event_info 
EINA_UNUSED)
+{
+   Elm_Segment_Control_Item *it =
+    elm_segment_control_item_selected_get(obj);
+   Evas_Object *new = elm_object_item_data_get(it);
+
+   evas_object_hide(_ui.background_selector);
+   evas_object_hide(_ui.theme_selector);
+
+   evas_object_show(new);
+}
+
+static void
 _extra_win_sync_done_cb(void *data EINA_UNUSED)
 {
-   Evas_Object *new_view;
+   Elm_Table *table, *segcontrol, *ic;
+   Elm_Object_Item *it;
+
+   table = elm_table_add(_ui.win);
+   evas_object_size_hint_weight_set(table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(table, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(table);
+
+   _ui.background_selector = extra_background_selector_create();
+   elm_table_pack(table, _ui.background_selector, 0, 1, 1, 1);
+
+   _ui.theme_selector = extra_theme_selector_create();
+   elm_table_pack(table, _ui.theme_selector, 0, 1, 1, 1);
+
+   segcontrol = elm_segment_control_add(table);
+   evas_object_size_hint_weight_set(segcontrol, EVAS_HINT_EXPAND, 0.0);
+   evas_object_size_hint_align_set(segcontrol, EVAS_HINT_FILL, 0.0);
+   elm_table_pack(table, segcontrol, 0, 0, 1, 1);
+   evas_object_smart_callback_add(segcontrol, "changed", _item_changed, NULL);
+   evas_object_show(segcontrol);
+
+#define IC_ADD(ic_txt, txt, obj) \
+   ic = elm_icon_add(segcontrol); \
+   elm_icon_standard_set(ic, ic_txt); \
+   it = elm_segment_control_item_add(segcontrol, ic, txt); \
+   elm_object_item_data_set(it, obj); \
+
+   IC_ADD("preferences-desktop-theme", "Themes", _ui.theme_selector);
+   IC_ADD("preferences-desktop-wallpaper", "Backgrounds", 
_ui.background_selector);
+
+#undef IC_ADD
+
+   
elm_segment_control_item_selected_set(elm_segment_control_item_get(segcontrol, 
0), EINA_TRUE);
 
-   new_view = extra_theme_selector_create();
-   _ui.current_view = new_view;
-   elm_win_resize_object_add(_ui.win, _ui.current_view);
+   elm_win_resize_object_add(_ui.win, table);
 }
 
 static void
diff --git a/src/bin/extra_private.h b/src/bin/extra_private.h
index 4b3c980..fe58665 100644
--- a/src/bin/extra_private.h
+++ b/src/bin/extra_private.h
@@ -5,7 +5,8 @@
 
 typedef struct {
    Evas_Object *win;
-   Evas_Object *current_view;
+   Evas_Object *background_selector;
+   Evas_Object *theme_selector;
 } Ui;
 
 extern Ui _ui;

-- 


Reply via email to