start bryce config
This commit is contained in:
parent
152ffee59e
commit
31ab01325d
|
@ -3,6 +3,7 @@ AM_CPPFLAGS += \
|
|||
|
||||
module_la_SOURCES += \
|
||||
src/gadgets/bryce.c \
|
||||
src/gadgets/bryce_config.c \
|
||||
src/gadgets/bryce.h \
|
||||
src/gadgets/core.c \
|
||||
src/gadgets/site_config.c \
|
||||
|
|
|
@ -13,16 +13,19 @@ typedef struct Bryce
|
|||
Eina_List *zone_obstacles;
|
||||
|
||||
Evas_Object *parent; //comp_object is not an elm widget
|
||||
char *style;
|
||||
Eina_Stringshare *style;
|
||||
int size;
|
||||
int x, y;
|
||||
int autohide_size;
|
||||
E_Layer layer;
|
||||
unsigned int zone;
|
||||
Z_Gadget_Site_Orient orient;
|
||||
Z_Gadget_Site_Anchor anchor;
|
||||
|
||||
Ecore_Job *calc_job;
|
||||
Ecore_Timer *autohide_timer;
|
||||
unsigned int autohide_blocked;
|
||||
Eina_List *popups;
|
||||
|
||||
/* config: do not bitfield! */
|
||||
Eina_Bool autosize;
|
||||
|
@ -66,7 +69,7 @@ _bryce_autohide_coords(Bryce *b, int *x, int *y)
|
|||
E_Zone *zone;
|
||||
|
||||
zone = e_comp_object_util_zone_get(b->bryce);
|
||||
ox = zone->w, oy = zone->y, ow = zone->w, oh = zone->h;
|
||||
ox = zone->x, oy = zone->y, ow = zone->w, oh = zone->h;
|
||||
}
|
||||
else
|
||||
evas_object_geometry_get(b->parent, &ox, &oy, &ow, &oh);
|
||||
|
@ -79,7 +82,7 @@ _bryce_autohide_coords(Bryce *b, int *x, int *y)
|
|||
if (an & Z_GADGET_SITE_ANCHOR_TOP)
|
||||
*y = oy - b->size + b->autohide_size;
|
||||
if (an & Z_GADGET_SITE_ANCHOR_BOTTOM)
|
||||
*y = oy + oh + b->size - b->autohide_size;
|
||||
*y = oy + oh - b->autohide_size;
|
||||
}
|
||||
else if (z_gadget_site_orient_get(b->site) == Z_GADGET_SITE_ORIENT_VERTICAL)
|
||||
{
|
||||
|
@ -88,7 +91,7 @@ _bryce_autohide_coords(Bryce *b, int *x, int *y)
|
|||
if (an & Z_GADGET_SITE_ANCHOR_LEFT)
|
||||
*x = ox - b->size + b->autohide_size;
|
||||
if (an & Z_GADGET_SITE_ANCHOR_RIGHT)
|
||||
*x = ox + ow + b->size - b->autohide_size;
|
||||
*x = ox + ow - b->autohide_size;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -220,7 +223,10 @@ _bryce_autohide_show(Bryce *b)
|
|||
static void
|
||||
_bryce_autohide_hide(Bryce *b)
|
||||
{
|
||||
if (!b->autohide_blocked)
|
||||
if (b->autohide_blocked) return;
|
||||
if (b->autohide_timer)
|
||||
ecore_timer_reset(b->autohide_timer);
|
||||
else
|
||||
b->autohide_timer = ecore_timer_add(1.0, (Ecore_Task_Cb)_bryce_autohide_timeout, b);
|
||||
}
|
||||
|
||||
|
@ -247,6 +253,7 @@ _bryce_autohide_setup(Bryce *b)
|
|||
{
|
||||
int x, y, w, h;
|
||||
|
||||
if (!b->autohide) return;
|
||||
b->autohide_event = evas_object_rectangle_add(evas_object_evas_get(b->bryce));
|
||||
evas_object_geometry_get(b->bryce, &x, &y, &w, &h);
|
||||
evas_object_geometry_set(b->autohide_event, x, y, w, h);
|
||||
|
@ -267,21 +274,12 @@ static void
|
|||
_bryce_style(Evas_Object *site, Eina_Stringshare *name, Evas_Object *g)
|
||||
{
|
||||
Evas_Object *ly, *prev;
|
||||
static int n;
|
||||
char buf[1024];
|
||||
|
||||
BRYCE_GET(site);
|
||||
|
||||
ly = elm_layout_add(b->site);
|
||||
if (name)
|
||||
snprintf(buf, sizeof(buf), "z/bryce/%s/%s", b->style ?: "default", name);
|
||||
else
|
||||
{
|
||||
if (n++ % 2)
|
||||
snprintf(buf, sizeof(buf), "z/bryce/%s/inset", b->style ?: "default");
|
||||
else
|
||||
snprintf(buf, sizeof(buf), "z/bryce/%s/plain", b->style ?: "default");
|
||||
}
|
||||
snprintf(buf, sizeof(buf), "z/bryce/%s/%s", b->style ?: "default", name ?: "plain");
|
||||
e_theme_edje_object_set(ly, NULL, buf);
|
||||
prev = z_gadget_util_layout_style_init(g, ly);
|
||||
elm_object_part_content_set(ly, "e.swallow.content", g);
|
||||
|
@ -382,15 +380,32 @@ _bryce_moveresize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event
|
|||
}
|
||||
|
||||
static void
|
||||
_bryce_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
||||
_bryce_popup_hide(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
|
||||
{
|
||||
Bryce *b = data;
|
||||
|
||||
b->autohide_blocked--;
|
||||
b->popups = eina_list_remove(b->popups, obj);
|
||||
if (!b->autohide) return;
|
||||
if (!b->mouse_in)
|
||||
_bryce_autohide_hide(b);
|
||||
}
|
||||
|
||||
static void
|
||||
_bryce_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
||||
{
|
||||
Bryce *b = data;
|
||||
Evas_Object *p;
|
||||
|
||||
bryces->bryces = eina_list_remove(bryces->bryces, b);
|
||||
E_FREE_LIST(b->zone_obstacles, e_object_del);
|
||||
evas_object_del(b->autohide_event);
|
||||
E_FREE_FUNC(b->calc_job, ecore_job_del);
|
||||
E_FREE_FUNC(b->autohide_timer, ecore_timer_del);
|
||||
free(b->style);
|
||||
eina_stringshare_del(b->name);
|
||||
EINA_LIST_FREE(b->popups, p)
|
||||
evas_object_event_callback_del(p, EVAS_CALLBACK_HIDE, _bryce_popup_hide);
|
||||
eina_stringshare_del(b->style);
|
||||
free(data);
|
||||
}
|
||||
|
||||
|
@ -444,6 +459,17 @@ _bryce_gadgets_menu(void *data, E_Menu *m EINA_UNUSED, E_Menu_Item *mi EINA_UNUS
|
|||
e_comp_object_util_autoclose(comp_object, _bryce_gadgets_menu_close, _bryce_gadgets_menu_key, b);
|
||||
}
|
||||
|
||||
static void
|
||||
_bryce_remove_menu(void *data, E_Menu *m EINA_UNUSED, E_Menu_Item *mi EINA_UNUSED)
|
||||
{
|
||||
Bryce *b = data;
|
||||
bryces->bryces = eina_list_remove(bryces->bryces, data);
|
||||
z_gadget_site_del(b->site);
|
||||
evas_object_hide(b->bryce);
|
||||
evas_object_del(b->bryce);
|
||||
e_config_save_queue();
|
||||
}
|
||||
|
||||
static void
|
||||
_bryce_owner_menu(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
|
||||
{
|
||||
|
@ -460,17 +486,11 @@ _bryce_owner_menu(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
|
|||
mi = e_menu_item_new(subm);
|
||||
e_menu_item_label_set(mi, "Gadgets");
|
||||
e_menu_item_callback_set(mi, _bryce_gadgets_menu, b);
|
||||
}
|
||||
|
||||
static void
|
||||
_bryce_popup_hide(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
||||
{
|
||||
Bryce *b = data;
|
||||
|
||||
b->autohide_blocked--;
|
||||
if (!b->autohide) return;
|
||||
if (!b->mouse_in)
|
||||
_bryce_autohide_hide(b);
|
||||
mi = e_menu_item_new(subm);
|
||||
e_menu_item_label_set(mi, "Remove");
|
||||
e_util_menu_item_theme_icon_set(mi, "list-remove");
|
||||
e_menu_item_callback_set(mi, _bryce_remove_menu, b);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -480,37 +500,50 @@ _bryce_popup(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
|
|||
|
||||
evas_object_event_callback_add(event_info, EVAS_CALLBACK_HIDE, _bryce_popup_hide, b);
|
||||
b->autohide_blocked++;
|
||||
b->popups = eina_list_append(b->popups, event_info);
|
||||
if (b->autohide)
|
||||
_bryce_autohide_show(b);
|
||||
}
|
||||
|
||||
static void
|
||||
_bryce_orient(Bryce *b)
|
||||
{
|
||||
char buf[1024];
|
||||
|
||||
evas_object_del(b->site);
|
||||
|
||||
snprintf(buf, sizeof(buf), "__bryce%s", b->name);
|
||||
b->site = z_gadget_site_add(b->orient, buf);
|
||||
evas_object_data_set(b->site, "__bryce", b);
|
||||
elm_object_content_set(b->scroller, b->site);
|
||||
z_gadget_site_owner_setup(b->site, b->anchor, _bryce_style);
|
||||
if (b->orient == Z_GADGET_SITE_ORIENT_HORIZONTAL)
|
||||
elm_layout_signal_emit(b->layout, "e,state,orient,horizontal", "e");
|
||||
else
|
||||
elm_layout_signal_emit(b->layout, "e,state,orient,vertical", "e");
|
||||
}
|
||||
|
||||
static void
|
||||
_bryce_create(Bryce *b, Evas_Object *parent)
|
||||
{
|
||||
Evas_Object *ly, *bryce, *scr, *site;
|
||||
Evas_Object *ly, *bryce, *scr;
|
||||
char buf[1024];
|
||||
|
||||
snprintf(buf, sizeof(buf), "z/bryce/%s/base", b->style ?: "default");
|
||||
ly = elm_layout_add(parent);
|
||||
e_theme_edje_object_set(ly, NULL, "z/bryce/default/base");
|
||||
e_theme_edje_object_set(ly, NULL, buf);
|
||||
|
||||
scr = elm_scroller_add(ly);
|
||||
b->scroller = scr = elm_scroller_add(ly);
|
||||
elm_object_style_set(scr, "bryce");
|
||||
snprintf(buf, sizeof(buf), "__bryce%s", b->name);
|
||||
site = z_gadget_site_add(Z_GADGET_SITE_ORIENT_HORIZONTAL, buf);
|
||||
z_gadget_site_owner_setup(site, Z_GADGET_SITE_ANCHOR_TOP, _bryce_style);
|
||||
elm_object_content_set(scr, site);
|
||||
_bryce_orient(b);
|
||||
elm_object_part_content_set(ly, "e.swallow.content", scr);
|
||||
elm_layout_signal_emit(ly, "e,state,orient,top", "e");
|
||||
evas_object_show(ly);
|
||||
bryce = e_comp_object_util_add(ly, E_COMP_OBJECT_TYPE_POPUP);
|
||||
b->bryce = bryce = e_comp_object_util_add(ly, E_COMP_OBJECT_TYPE_POPUP);
|
||||
evas_object_data_set(bryce, "comp_skip", (void*)1);
|
||||
evas_object_layer_set(bryce, E_LAYER_POPUP);
|
||||
evas_object_lower(bryce);
|
||||
|
||||
b->bryce = bryce;
|
||||
b->layout = ly;
|
||||
b->site = site;
|
||||
b->scroller = scr;
|
||||
b->parent = parent;
|
||||
{
|
||||
const char *str;
|
||||
|
@ -520,16 +553,15 @@ _bryce_create(Bryce *b, Evas_Object *parent)
|
|||
b->autohide_size = strtol(str, NULL, 10);
|
||||
}
|
||||
evas_object_data_set(bryce, "__bryce", b);
|
||||
evas_object_data_set(site, "__bryce", b);
|
||||
evas_object_event_callback_add(bryce, EVAS_CALLBACK_DEL, _bryce_del, b);
|
||||
evas_object_event_callback_add(bryce, EVAS_CALLBACK_RESTACK, _bryce_restack, b);
|
||||
evas_object_event_callback_add(bryce, EVAS_CALLBACK_MOVE, _bryce_moveresize, b);
|
||||
evas_object_event_callback_add(bryce, EVAS_CALLBACK_RESIZE, _bryce_moveresize, b);
|
||||
evas_object_event_callback_add(site, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _bryce_site_hints, b);
|
||||
evas_object_event_callback_add(b->site, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _bryce_site_hints, b);
|
||||
|
||||
evas_object_smart_callback_add(site, "gadget_style_menu", _bryce_style_menu, b);
|
||||
evas_object_smart_callback_add(site, "gadget_owner_menu", _bryce_owner_menu, b);
|
||||
evas_object_smart_callback_add(site, "gadget_popup", _bryce_popup, b);
|
||||
evas_object_smart_callback_add(b->site, "gadget_style_menu", _bryce_style_menu, b);
|
||||
evas_object_smart_callback_add(b->site, "gadget_owner_menu", _bryce_owner_menu, b);
|
||||
evas_object_smart_callback_add(b->site, "gadget_popup", _bryce_popup, b);
|
||||
|
||||
evas_object_clip_set(bryce, e_comp_zone_number_get(b->zone)->bg_clip_object);
|
||||
_bryce_autohide_setup(b);
|
||||
|
@ -537,19 +569,30 @@ _bryce_create(Bryce *b, Evas_Object *parent)
|
|||
}
|
||||
|
||||
Z_API Evas_Object *
|
||||
z_bryce_add(Evas_Object *parent, const char *name)
|
||||
z_bryce_add(Evas_Object *parent, const char *name, Z_Gadget_Site_Orient orient, Z_Gadget_Site_Anchor an)
|
||||
{
|
||||
Bryce *b;
|
||||
|
||||
b = E_NEW(Bryce, 1);
|
||||
b->size = 48;
|
||||
b->name = eina_stringshare_add(name);
|
||||
b->anchor = an;
|
||||
b->orient = orient;
|
||||
_bryce_create(b, parent);
|
||||
bryces->bryces = eina_list_append(bryces->bryces, b);
|
||||
e_config_save_queue();
|
||||
return b->bryce;
|
||||
}
|
||||
|
||||
Z_API void
|
||||
z_bryce_orient(Evas_Object *bryce, Z_Gadget_Site_Orient orient, Z_Gadget_Site_Anchor an)
|
||||
{
|
||||
BRYCE_GET(bryce);
|
||||
b->orient = orient;
|
||||
b->anchor = an;
|
||||
_bryce_orient(b);
|
||||
}
|
||||
|
||||
Z_API Evas_Object *
|
||||
z_bryce_site_get(Evas_Object *bryce)
|
||||
{
|
||||
|
@ -595,6 +638,52 @@ z_bryce_autohide_set(Evas_Object *bryce, Eina_Bool set)
|
|||
e_config_save_queue();
|
||||
}
|
||||
|
||||
Z_API Eina_List *
|
||||
z_bryce_list(Evas_Object *parent)
|
||||
{
|
||||
Eina_List *l, *ret = NULL;
|
||||
Bryce *b;
|
||||
|
||||
if (!parent) parent = e_comp->elm;
|
||||
EINA_LIST_FOREACH(bryces->bryces, l, b)
|
||||
{
|
||||
if (!b->bryce) continue;
|
||||
if (parent == b->parent)
|
||||
ret = eina_list_append(ret, b->bryce);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
Z_API Eina_Bool
|
||||
z_bryce_exists(Evas_Object *parent, Z_Gadget_Site_Orient orient, Z_Gadget_Site_Anchor an)
|
||||
{
|
||||
Eina_List *l;
|
||||
Bryce *b;
|
||||
|
||||
if (!parent) parent = e_comp->elm;
|
||||
EINA_LIST_FOREACH(bryces->bryces, l, b)
|
||||
{
|
||||
if (!b->bryce) continue;
|
||||
if (parent != b->parent) continue;
|
||||
if (b->orient != orient) continue;
|
||||
if ((b->anchor & an) == an) return EINA_TRUE;
|
||||
}
|
||||
return EINA_FALSE;
|
||||
}
|
||||
|
||||
Z_API void
|
||||
z_bryce_style_set(Evas_Object *bryce, const char *style)
|
||||
{
|
||||
char buf[1024];
|
||||
|
||||
BRYCE_GET(bryce);
|
||||
|
||||
eina_stringshare_replace(&b->style, style);
|
||||
snprintf(buf, sizeof(buf), "z/bryce/%s/base", b->style ?: "default");
|
||||
e_theme_edje_object_set(b->layout, NULL, buf);
|
||||
evas_object_smart_callback_call(b->site, "gadget_site_style", NULL);
|
||||
}
|
||||
|
||||
/* FIXME */
|
||||
static void
|
||||
bryce_save(void)
|
||||
|
@ -612,6 +701,8 @@ z_bryce_init(void)
|
|||
E_CONFIG_VAL(edd_bryce, Bryce, layer, UINT);
|
||||
E_CONFIG_VAL(edd_bryce, Bryce, autosize, UCHAR);
|
||||
E_CONFIG_VAL(edd_bryce, Bryce, autohide, UCHAR);
|
||||
E_CONFIG_VAL(edd_bryce, Bryce, orient, UINT);
|
||||
E_CONFIG_VAL(edd_bryce, Bryce, anchor, UINT);
|
||||
|
||||
edd_bryces = E_CONFIG_DD_NEW("Bryces", Bryces);
|
||||
E_CONFIG_LIST(edd_bryces, Bryces, bryces, edd_bryce);
|
||||
|
@ -638,13 +729,17 @@ Z_API void
|
|||
z_bryce_shutdown(void)
|
||||
{
|
||||
Bryce *b;
|
||||
|
||||
E_CONFIG_DD_FREE(edd_bryce);
|
||||
E_CONFIG_DD_FREE(edd_bryces);
|
||||
EINA_LIST_FREE(bryces->bryces, b)
|
||||
{
|
||||
evas_object_event_callback_del(b->bryce, EVAS_CALLBACK_DEL, _bryce_del);
|
||||
eina_list_free(b->popups);
|
||||
evas_object_hide(b->bryce);
|
||||
evas_object_del(b->bryce);
|
||||
eina_stringshare_del(b->name);
|
||||
eina_stringshare_del(b->style);
|
||||
ecore_job_del(b->calc_job);
|
||||
ecore_timer_del(b->autohide_timer);
|
||||
free(b);
|
||||
|
|
|
@ -6,9 +6,15 @@
|
|||
Z_API void z_bryce_init(void);
|
||||
Z_API void z_bryce_shutdown(void);
|
||||
|
||||
Z_API Evas_Object *z_bryce_add(Evas_Object *parent, const char *name);
|
||||
Z_API Evas_Object *z_bryce_add(Evas_Object *parent, const char *name, Z_Gadget_Site_Orient orient, Z_Gadget_Site_Anchor an);
|
||||
Z_API void z_bryce_orient(Evas_Object *bryce, Z_Gadget_Site_Orient orient, Z_Gadget_Site_Anchor an);
|
||||
Z_API Evas_Object *z_bryce_site_get(Evas_Object *bryce);
|
||||
Z_API void z_bryce_autosize_set(Evas_Object *bryce, Eina_Bool set);
|
||||
Z_API void z_bryce_autohide_set(Evas_Object *bryce, Eina_Bool set);
|
||||
Z_API Eina_Bool z_bryce_exists(Evas_Object *parent, Z_Gadget_Site_Orient orient, Z_Gadget_Site_Anchor an);
|
||||
Z_API Eina_List *z_bryce_list(Evas_Object *parent);
|
||||
Z_API void z_bryce_style_set(Evas_Object *bryce, const char *style);
|
||||
|
||||
Z_API Evas_Object *z_bryce_editor_add(Evas_Object *parent);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -0,0 +1,207 @@
|
|||
#include "e_mod_main.h"
|
||||
#include "gadget.h"
|
||||
#include "bryce.h"
|
||||
|
||||
typedef struct Bryce_Info
|
||||
{
|
||||
Z_Gadget_Site_Anchor anchor;
|
||||
Z_Gadget_Site_Orient orient;
|
||||
} Bryce_Info;
|
||||
|
||||
|
||||
static void _editor_add_bottom(void *data, Evas_Object *obj, const char *sig, const char *src);
|
||||
static void _editor_add_top(void *data, Evas_Object *obj, const char *sig, const char *src);
|
||||
static void _editor_add_left(void *data, Evas_Object *obj, const char *sig, const char *src);
|
||||
static void _editor_add_right(void *data, Evas_Object *obj, const char *sig, const char *src);
|
||||
|
||||
static void
|
||||
setup_exists(Evas_Object *editor, Evas_Object *parent, Z_Gadget_Site_Anchor an)
|
||||
{
|
||||
if (z_bryce_exists(parent, Z_GADGET_SITE_ORIENT_HORIZONTAL, Z_GADGET_SITE_ANCHOR_BOTTOM | an))
|
||||
elm_object_signal_emit(editor, "e,bryce,exists,bottom", "e");
|
||||
if (z_bryce_exists(parent, Z_GADGET_SITE_ORIENT_HORIZONTAL, Z_GADGET_SITE_ANCHOR_TOP | an))
|
||||
elm_object_signal_emit(editor, "e,bryce,exists,top", "e");
|
||||
if (z_bryce_exists(parent, Z_GADGET_SITE_ORIENT_VERTICAL, Z_GADGET_SITE_ANCHOR_LEFT | an))
|
||||
elm_object_signal_emit(editor, "e,bryce,exists,left", "e");
|
||||
if (z_bryce_exists(parent, Z_GADGET_SITE_ORIENT_VERTICAL, Z_GADGET_SITE_ANCHOR_RIGHT | an))
|
||||
elm_object_signal_emit(editor, "e,bryce,exists,right", "e");
|
||||
}
|
||||
|
||||
static void
|
||||
_editor_bryce_add(Bryce_Info *bi, Evas_Object *obj, const char *style)
|
||||
{
|
||||
Evas_Object *b, *site;
|
||||
char buf[1024];
|
||||
const char *loc;
|
||||
|
||||
if (bi->anchor & Z_GADGET_SITE_ANCHOR_TOP)
|
||||
loc = "top";
|
||||
if (bi->anchor & Z_GADGET_SITE_ANCHOR_BOTTOM)
|
||||
loc = "bottom";
|
||||
if (bi->anchor & Z_GADGET_SITE_ANCHOR_LEFT)
|
||||
loc = "left";
|
||||
if (bi->anchor & Z_GADGET_SITE_ANCHOR_RIGHT)
|
||||
loc = "right";
|
||||
snprintf(buf, sizeof(buf), "demo_%s", loc);
|
||||
b = z_bryce_add(e_comp->elm, buf, bi->orient, bi->anchor);
|
||||
site = z_bryce_site_get(b);
|
||||
|
||||
z_gadget_site_gadget_add(site, "Start", 0);
|
||||
z_gadget_site_gadget_add(site, "Clock", 0);
|
||||
z_gadget_site_gadget_add(site, "IBar", 0);
|
||||
z_bryce_style_set(b, style);
|
||||
evas_object_del(obj);
|
||||
}
|
||||
|
||||
static void
|
||||
_editor_style_click(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
|
||||
{
|
||||
const char *g;
|
||||
char style[1024] = {0};
|
||||
Bryce_Info *bi;
|
||||
Evas_Object *ly;
|
||||
|
||||
ly = elm_object_part_content_get(obj, "e.swallow.content");
|
||||
elm_layout_file_get(ly, NULL, &g);
|
||||
g += (sizeof("z/bryce/") - 1);
|
||||
memcpy(style, g, MIN(sizeof(style) - 1, strchr(g, '/') - g));
|
||||
|
||||
bi = evas_object_data_get(data, "__bryce_info");
|
||||
_editor_bryce_add(bi, data, style);
|
||||
}
|
||||
|
||||
static void
|
||||
_editor_style(Evas_Object *obj)
|
||||
{
|
||||
Eina_List *l;
|
||||
Eina_Stringshare *style;
|
||||
Evas_Object *box;
|
||||
int w;
|
||||
|
||||
evas_object_geometry_get(obj, NULL, NULL, &w, NULL);
|
||||
box = elm_box_add(obj);
|
||||
e_theme_edje_object_set(obj, NULL, "z/bryce/editor/style");
|
||||
elm_box_homogeneous_set(box, 1);
|
||||
elm_box_padding_set(box, 0, 20 * e_scale);
|
||||
l = elm_theme_group_base_list(NULL, "z/bryce/");
|
||||
EINA_LIST_FREE(l, style)
|
||||
{
|
||||
Evas_Object *ly, *bryce;
|
||||
char buf[1024] = {0};
|
||||
size_t len;
|
||||
|
||||
if (!eina_str_has_suffix(style, "/base"))
|
||||
{
|
||||
eina_stringshare_del(style);
|
||||
continue;
|
||||
}
|
||||
ly = elm_layout_add(box);
|
||||
e_theme_edje_object_set(ly, NULL, "z/bryce/editor/style/item");
|
||||
bryce = edje_object_add(evas_object_evas_get(box));
|
||||
elm_object_part_content_set(ly, "e.swallow.content", bryce);
|
||||
len = strlen(style);
|
||||
strncpy(buf, style + sizeof("z/bryce/") - 1,
|
||||
MIN(sizeof(buf) - 1, len - (sizeof("z/bryce/") - 1) - (sizeof("/base") - 1)));
|
||||
buf[0] = toupper(buf[0]);
|
||||
elm_object_part_text_set(ly, "e.text", buf);
|
||||
e_comp_object_util_del_list_append(ly, bryce);
|
||||
e_theme_edje_object_set(bryce, NULL, style);
|
||||
evas_object_size_hint_min_set(bryce, w * 2 / 3, 48 * e_scale);
|
||||
evas_object_show(ly);
|
||||
evas_object_event_callback_add(ly, EVAS_CALLBACK_MOUSE_DOWN, _editor_style_click, obj);
|
||||
elm_box_pack_end(box, ly);
|
||||
}
|
||||
elm_object_part_content_set(obj, "e.swallow.content", box);
|
||||
}
|
||||
|
||||
static void
|
||||
_editor_info_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
||||
{
|
||||
free(data);
|
||||
}
|
||||
|
||||
static void
|
||||
_editor_add(Evas_Object *obj, Z_Gadget_Site_Orient orient, Z_Gadget_Site_Anchor an)
|
||||
{
|
||||
char buf[1024];
|
||||
Bryce_Info *bi;
|
||||
|
||||
bi = evas_object_data_get(obj, "__bryce_info");
|
||||
if (bi)
|
||||
{
|
||||
bi->anchor |= an;
|
||||
_editor_style(obj);
|
||||
}
|
||||
else
|
||||
{
|
||||
bi = E_NEW(Bryce_Info, 1);
|
||||
bi->anchor = an;
|
||||
bi->orient = orient;
|
||||
evas_object_data_set(obj, "__bryce_info", bi);
|
||||
evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, _editor_info_del, bi);
|
||||
snprintf(buf, sizeof(buf), "z/bryce/editor/side/%s",
|
||||
orient == Z_GADGET_SITE_ORIENT_HORIZONTAL ? "horizontal" : "vertical");
|
||||
e_theme_edje_object_set(obj, NULL, buf);
|
||||
if (an & Z_GADGET_SITE_ANCHOR_BOTTOM)
|
||||
elm_object_signal_emit(obj, "e,state,bottom", "e");
|
||||
else if (an & Z_GADGET_SITE_ANCHOR_RIGHT)
|
||||
elm_object_signal_emit(obj, "e,state,right", "e");
|
||||
setup_exists(obj, evas_object_data_get(obj, "__bryce_editor_site"), an);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_editor_add_bottom(void *data EINA_UNUSED, Evas_Object *obj, const char *sig EINA_UNUSED, const char *src EINA_UNUSED)
|
||||
{
|
||||
_editor_add(obj, Z_GADGET_SITE_ORIENT_HORIZONTAL, Z_GADGET_SITE_ANCHOR_BOTTOM);
|
||||
}
|
||||
|
||||
static void
|
||||
_editor_add_top(void *data EINA_UNUSED, Evas_Object *obj, const char *sig EINA_UNUSED, const char *src EINA_UNUSED)
|
||||
{
|
||||
_editor_add(obj, Z_GADGET_SITE_ORIENT_HORIZONTAL, Z_GADGET_SITE_ANCHOR_TOP);
|
||||
}
|
||||
|
||||
static void
|
||||
_editor_add_left(void *data EINA_UNUSED, Evas_Object *obj, const char *sig EINA_UNUSED, const char *src EINA_UNUSED)
|
||||
{
|
||||
_editor_add(obj, Z_GADGET_SITE_ORIENT_VERTICAL, Z_GADGET_SITE_ANCHOR_LEFT);
|
||||
}
|
||||
|
||||
static void
|
||||
_editor_add_center(void *data EINA_UNUSED, Evas_Object *obj, const char *sig EINA_UNUSED, const char *src EINA_UNUSED)
|
||||
{
|
||||
_editor_add(obj, Z_GADGET_SITE_ORIENT_NONE, Z_GADGET_SITE_ANCHOR_NONE);
|
||||
}
|
||||
|
||||
static void
|
||||
_editor_add_right(void *data EINA_UNUSED, Evas_Object *obj, const char *sig EINA_UNUSED, const char *src EINA_UNUSED)
|
||||
{
|
||||
_editor_add(obj, Z_GADGET_SITE_ORIENT_VERTICAL, Z_GADGET_SITE_ANCHOR_RIGHT);
|
||||
}
|
||||
|
||||
static void
|
||||
_editor_dismiss(void *data EINA_UNUSED, Evas_Object *obj, const char *sig EINA_UNUSED, const char *src EINA_UNUSED)
|
||||
{
|
||||
evas_object_del(obj);
|
||||
}
|
||||
|
||||
Z_API Evas_Object *
|
||||
z_bryce_editor_add(Evas_Object *parent)
|
||||
{
|
||||
Evas_Object *editor;
|
||||
|
||||
editor = elm_layout_add(parent);
|
||||
evas_object_data_set(editor, "__bryce_editor_site", parent);
|
||||
e_theme_edje_object_set(editor, NULL, "z/bryce/editor/side");
|
||||
|
||||
setup_exists(editor, parent, 0);
|
||||
|
||||
elm_object_signal_callback_add(editor, "e,action,dismiss", "e", _editor_dismiss, editor);
|
||||
elm_object_signal_callback_add(editor, "e,bryce,add,bottom", "e", _editor_add_bottom, editor);
|
||||
elm_object_signal_callback_add(editor, "e,bryce,add,top", "e", _editor_add_top, editor);
|
||||
elm_object_signal_callback_add(editor, "e,bryce,add,left", "e", _editor_add_left, editor);
|
||||
elm_object_signal_callback_add(editor, "e,bryce,add,right", "e", _editor_add_right, editor);
|
||||
elm_object_signal_callback_add(editor, "e,bryce,add,center", "e", _editor_add_center, editor);
|
||||
return editor;
|
||||
}
|
|
@ -214,7 +214,7 @@ _gadget_object_create(Z_Gadget_Config *zgc)
|
|||
zgc->gadget = zgc->display = g;
|
||||
evas_object_data_set(g, "__z_gadget", zgc);
|
||||
if (zgc->site->style_cb)
|
||||
zgc->site->style_cb(zgc->site->layout, NULL, g);
|
||||
zgc->site->style_cb(zgc->site->layout, zgc->style.name, g);
|
||||
|
||||
evas_object_event_callback_add(g, EVAS_CALLBACK_DEL, _gadget_del, zgc);
|
||||
_gadget_reparent(zgc->site, zgc);
|
||||
|
@ -480,8 +480,8 @@ _gadget_mouse_resize(Z_Gadget_Config *zgc, int t EINA_UNUSED, Ecore_Event_Mouse_
|
|||
evas_object_geometry_get(zgc->display, &ox, &oy, &ow, &oh);
|
||||
gw = zgc->w * w;
|
||||
gh = zgc->h * h;
|
||||
gw -= (ev->x - zgc->down.x);
|
||||
gh -= (ev->y - zgc->down.y);
|
||||
gw += (ev->x - zgc->down.x);
|
||||
gh += (ev->y - zgc->down.y);
|
||||
zgc->w = gw / w;
|
||||
zgc->h = gh / h;
|
||||
zgc->down.x = ev->x;
|
||||
|
@ -872,6 +872,7 @@ _gadget_menu_style(void *data, E_Menu *m EINA_UNUSED, E_Menu_Item *mi)
|
|||
Z_Gadget_Config *zgc = data;
|
||||
Eina_Stringshare *style = e_object_data_get(E_OBJECT(mi));
|
||||
|
||||
eina_stringshare_refplace(&zgc->style.name, style);
|
||||
if (zgc->site->style_cb)
|
||||
zgc->site->style_cb(zgc->site->layout, style, zgc->gadget);
|
||||
}
|
||||
|
@ -1147,18 +1148,22 @@ static void
|
|||
_site_restack(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
|
||||
{
|
||||
Z_Gadget_Site *zgs = data;
|
||||
Eina_List *l;
|
||||
Z_Gadget_Config *zgc;
|
||||
int layer;
|
||||
|
||||
layer = evas_object_layer_get(obj);
|
||||
if (!zgs->orient)
|
||||
if (!evas_object_smart_parent_get(zgs->layout))
|
||||
{
|
||||
EINA_LIST_FOREACH(zgs->gadgets, l, zgc)
|
||||
if (zgc->display)
|
||||
evas_object_layer_set(zgc->display, layer);
|
||||
Eina_List *l;
|
||||
Z_Gadget_Config *zgc;
|
||||
int layer;
|
||||
|
||||
layer = evas_object_layer_get(obj);
|
||||
if (!zgs->orient)
|
||||
{
|
||||
EINA_LIST_FOREACH(zgs->gadgets, l, zgc)
|
||||
if (zgc->display)
|
||||
evas_object_layer_set(zgc->display, layer);
|
||||
}
|
||||
evas_object_layer_set(zgs->events, layer);
|
||||
}
|
||||
evas_object_layer_set(zgs->events, layer);
|
||||
evas_object_raise(zgs->events);
|
||||
}
|
||||
|
||||
|
@ -1166,18 +1171,35 @@ static void
|
|||
_site_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
||||
{
|
||||
Z_Gadget_Site *zgs = data;
|
||||
Z_Gadget_Config *zgc;
|
||||
Eina_List *l;
|
||||
|
||||
E_FREE_FUNC(zgs->events, evas_object_del);
|
||||
zgs->layout = NULL;
|
||||
zgs->cur_size = 0;
|
||||
zgs->action = NULL;
|
||||
zgs->style_cb = NULL;
|
||||
E_FREE_FUNC(zgs->move_handler, ecore_event_handler_del);
|
||||
E_FREE_FUNC(zgs->mouse_up_handler, ecore_event_handler_del);
|
||||
EINA_LIST_FOREACH(zgs->gadgets, l, zgc)
|
||||
evas_object_del(zgc->gadget);
|
||||
if (zgs->name) return;
|
||||
eina_stringshare_del(zgs->name);
|
||||
free(zgs);
|
||||
}
|
||||
|
||||
static void
|
||||
_site_style(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
|
||||
{
|
||||
Z_Gadget_Site *zgs = data;
|
||||
Z_Gadget_Config *zgc;
|
||||
Eina_List *l;
|
||||
|
||||
if (!zgs->style_cb) return;
|
||||
EINA_LIST_FOREACH(zgs->gadgets, l, zgc)
|
||||
zgc->site->style_cb(zgc->site->layout, zgc->style.name, zgc->gadget);
|
||||
}
|
||||
|
||||
static void
|
||||
_site_create(Z_Gadget_Site *zgs)
|
||||
{
|
||||
|
@ -1194,8 +1216,10 @@ _site_create(Z_Gadget_Site *zgs)
|
|||
evas_object_event_callback_add(zgs->layout, EVAS_CALLBACK_RESTACK, _site_restack, zgs);
|
||||
|
||||
zgs->events = evas_object_rectangle_add(e_comp->evas);
|
||||
evas_object_name_set(zgs->events, "zgs->events");
|
||||
evas_object_event_callback_add(zgs->layout, EVAS_CALLBACK_MOVE, _site_move, zgs);
|
||||
evas_object_smart_callback_add(zgs->layout, "gadget_site_dropped", _site_drop, zgs);
|
||||
evas_object_smart_callback_add(zgs->layout, "gadget_site_style", _site_style, zgs);
|
||||
evas_object_pointer_mode_set(zgs->events, EVAS_OBJECT_POINTER_MODE_NOGRAB);
|
||||
evas_object_color_set(zgs->events, 0, 0, 0, 0);
|
||||
evas_object_repeat_events_set(zgs->events, 1);
|
||||
|
@ -1299,6 +1323,17 @@ z_gadget_site_auto_add(Z_Gadget_Site_Orient orient, const char *name)
|
|||
return _site_util_add(orient, name, 1);
|
||||
}
|
||||
|
||||
Z_API void
|
||||
z_gadget_site_del(Evas_Object *obj)
|
||||
{
|
||||
ZGS_GET(obj);
|
||||
|
||||
sites->sites = eina_list_remove(sites->sites, zgs);
|
||||
evas_object_del(zgs->layout);
|
||||
eina_stringshare_del(zgs->name);
|
||||
free(zgs);
|
||||
}
|
||||
|
||||
Z_API Z_Gadget_Site_Anchor
|
||||
z_gadget_site_anchor_get(Evas_Object *obj)
|
||||
{
|
||||
|
@ -1310,11 +1345,17 @@ z_gadget_site_anchor_get(Evas_Object *obj)
|
|||
Z_API void
|
||||
z_gadget_site_owner_setup(Evas_Object *obj, Z_Gadget_Site_Anchor an, Z_Gadget_Style_Cb cb)
|
||||
{
|
||||
Evas_Object *parent;
|
||||
ZGS_GET(obj);
|
||||
|
||||
zgs->anchor = an;
|
||||
zgs->style_cb = cb;
|
||||
evas_object_smart_callback_call(obj, "gadget_anchor", NULL);
|
||||
parent = evas_object_smart_parent_get(obj);
|
||||
if (parent)
|
||||
evas_object_smart_member_add(zgs->events, parent);
|
||||
else
|
||||
evas_object_smart_member_del(zgs->events);
|
||||
}
|
||||
|
||||
Z_API Z_Gadget_Site_Orient
|
||||
|
|
|
@ -97,6 +97,42 @@ _gadget_conf()
|
|||
e_desklock_demo();
|
||||
}
|
||||
|
||||
static void
|
||||
_bryce_edit_end(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
||||
{
|
||||
e_bindings_disabled_set(0);
|
||||
evas_object_hide(data);
|
||||
evas_object_del(data);
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_bryce_editor_key_down()
|
||||
{
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
_bryce_conf()
|
||||
{
|
||||
Evas_Object *editor, *comp_object;
|
||||
E_Zone *zone;
|
||||
int x, y, w, h;
|
||||
|
||||
zone = e_zone_current_get();
|
||||
x = zone->x, y = zone->y, w = zone->w, h = zone->h;
|
||||
e_bindings_disabled_set(1);
|
||||
editor = z_bryce_editor_add(e_comp->elm);
|
||||
|
||||
evas_object_geometry_set(editor, x, y, w, h);
|
||||
comp_object = e_comp_object_util_add(editor, E_COMP_OBJECT_TYPE_NONE);
|
||||
evas_object_event_callback_add(editor, EVAS_CALLBACK_DEL, _bryce_edit_end, comp_object);
|
||||
evas_object_layer_set(comp_object, E_LAYER_POPUP);
|
||||
evas_object_show(comp_object);
|
||||
|
||||
e_comp_object_util_autoclose(comp_object, NULL, _bryce_editor_key_down, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
_gadget_menu(void *d EINA_UNUSED, E_Menu *m)
|
||||
{
|
||||
|
@ -106,6 +142,11 @@ _gadget_menu(void *d EINA_UNUSED, E_Menu *m)
|
|||
e_menu_item_label_set(mi, _("Gadgets 2.0"));
|
||||
e_util_menu_item_theme_icon_set(mi, "preferences-desktop-wallpaper");
|
||||
e_menu_item_callback_set(mi, _gadget_conf, NULL);
|
||||
|
||||
mi = e_menu_item_new(m);
|
||||
e_menu_item_label_set(mi, _("Bryces"));
|
||||
//e_util_menu_item_theme_icon_set(mi, "preferences-desktop-wallpaper");
|
||||
e_menu_item_callback_set(mi, _bryce_conf, NULL);
|
||||
}
|
||||
|
||||
EINTERN void
|
||||
|
|
|
@ -39,6 +39,7 @@ Z_API void z_gadget_shutdown(void);
|
|||
|
||||
Z_API Evas_Object *z_gadget_site_add(Z_Gadget_Site_Orient orient, const char *name);
|
||||
Z_API Evas_Object *z_gadget_site_auto_add(Z_Gadget_Site_Orient orient, const char *name);
|
||||
Z_API void z_gadget_site_del(Evas_Object *obj);
|
||||
Z_API Z_Gadget_Site_Anchor z_gadget_site_anchor_get(Evas_Object *obj);
|
||||
Z_API void z_gadget_site_owner_setup(Evas_Object *obj, Z_Gadget_Site_Anchor an, Z_Gadget_Style_Cb cb);
|
||||
Z_API Z_Gadget_Site_Orient z_gadget_site_orient_get(Evas_Object *obj);
|
||||
|
|
Loading…
Reference in New Issue