extra: add a background selector
this brings a background selector to extra
This commit is contained in:
parent
6b5bb23524
commit
bdb41a0b87
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -24,14 +24,57 @@ _extra_win_del(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event
|
|||
elm_exit();
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
new_view = extra_theme_selector_create();
|
||||
_ui.current_view = new_view;
|
||||
elm_win_resize_object_add(_ui.win, _ui.current_view);
|
||||
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);
|
||||
|
||||
elm_win_resize_object_add(_ui.win, table);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue