redo the gadget editor (again)
the list implementation had some issues with sizing and was also inflexible and prevented a good display for desktop gadget sites
This commit is contained in:
parent
0180cef47d
commit
ebfb925a11
|
@ -90,6 +90,7 @@ typedef struct E_Gadget_Type
|
|||
|
||||
typedef struct Gadget_Item
|
||||
{
|
||||
Evas_Object *box;
|
||||
Evas_Object *editor;
|
||||
Evas_Object *gadget;
|
||||
Evas_Object *site;
|
||||
|
@ -1950,10 +1951,25 @@ e_gadget_shutdown(void)
|
|||
//////////////////////////////////////////////////////
|
||||
|
||||
static void
|
||||
_editor_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
||||
_editor_resize(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
|
||||
{
|
||||
Eina_List *list = data;
|
||||
E_FREE_LIST(list, free);
|
||||
int w, h, size;
|
||||
evas_object_geometry_get(obj, NULL, NULL, &w, &h);
|
||||
size = MAX(w, h);
|
||||
size = MAX(size / 4, 100);
|
||||
elm_gengrid_item_size_set(obj, size, size);
|
||||
}
|
||||
|
||||
static void
|
||||
_editor_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
|
||||
{
|
||||
evas_object_event_callback_del_full(data, EVAS_CALLBACK_RESIZE, _editor_resize, obj);
|
||||
}
|
||||
|
||||
static void
|
||||
_editor_item_del(void *data, Evas_Object *obj EINA_UNUSED)
|
||||
{
|
||||
free(data);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -2101,7 +2117,7 @@ _editor_pointer_site_init(E_Gadget_Site_Orient orient, Evas_Object *site, Evas_O
|
|||
}
|
||||
|
||||
static void
|
||||
_editor_gadget_new(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
|
||||
_editor_gadget_new(void *data, Evas_Object *obj, void *event_info)
|
||||
{
|
||||
Gadget_Item *gi = data;
|
||||
E_Gadget_Site_Orient orient;
|
||||
|
@ -2112,7 +2128,62 @@ _editor_gadget_new(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
|
|||
|
||||
e_gadget_site_gadget_add(pointer_site, e_gadget_type_get(gi->gadget), 1);
|
||||
elm_object_disabled_set(gi->editor, 1);
|
||||
elm_list_item_selected_set(event_info, 0);
|
||||
if (eina_streq(evas_object_type_get(obj), "elm_genlist"))
|
||||
elm_genlist_item_selected_set(event_info, 0);
|
||||
else
|
||||
elm_gengrid_item_selected_set(event_info, 0);
|
||||
}
|
||||
|
||||
static Evas_Object *
|
||||
_editor_content_get(void *data, Evas_Object *obj, const char *part, Evas_Object *old)
|
||||
{
|
||||
Gadget_Item *gi = data;
|
||||
Eina_Bool gl = eina_streq(evas_object_type_get(obj), "elm_genlist");
|
||||
|
||||
if (eina_streq(part, "elm.swallow.icon"))
|
||||
{
|
||||
if (gl) return NULL;
|
||||
}
|
||||
else if (!gl) return NULL;
|
||||
if (old)
|
||||
{
|
||||
if (gi->box == old) return old;
|
||||
elm_box_unpack_all(old);
|
||||
elm_box_unpack(gi->box, gi->gadget);
|
||||
elm_box_pack_end(old, gi->gadget);
|
||||
gi->box = old;
|
||||
return old;
|
||||
}
|
||||
gi->box = elm_box_add(obj);
|
||||
elm_box_horizontal_set(gi->box, 1);
|
||||
elm_box_pack_end(gi->box, gi->gadget);
|
||||
return gi->box;
|
||||
}
|
||||
|
||||
static char *
|
||||
_editor_text_get(void *data, Evas_Object *obj EINA_UNUSED, const char *part EINA_UNUSED)
|
||||
{
|
||||
char buf[1024];
|
||||
Gadget_Item *gi = data;
|
||||
|
||||
strncpy(buf, e_gadget_type_get(gi->gadget), sizeof(buf) - 1);
|
||||
buf[0] = toupper(buf[0]);
|
||||
return strdup(buf);
|
||||
}
|
||||
|
||||
static Evas_Object *
|
||||
_editor_tooltip_content(void *data, Evas_Object *obj EINA_UNUSED, Evas_Object *tooltip, void *item EINA_UNUSED)
|
||||
{
|
||||
Gadget_Item *gi = data;
|
||||
int w, h;
|
||||
Evas_Object *img;
|
||||
|
||||
evas_object_geometry_get(gi->gadget, NULL, NULL, &w, &h);
|
||||
img = evas_object_image_filled_add(evas_object_evas_get(tooltip));
|
||||
evas_object_image_alpha_set(img, 1);
|
||||
evas_object_image_source_set(img, gi->gadget);
|
||||
evas_object_size_hint_min_set(img, w, h);
|
||||
return img;
|
||||
}
|
||||
|
||||
E_API Evas_Object *
|
||||
|
@ -2120,12 +2191,34 @@ e_gadget_editor_add(Evas_Object *parent, Evas_Object *site)
|
|||
{
|
||||
Evas_Object *list, *tempsite, *g;
|
||||
Eina_Iterator *it;
|
||||
Eina_List *gadgets, *items = NULL;
|
||||
Eina_List *gadgets;
|
||||
const char *type;
|
||||
E_Gadget_Site_Orient orient = e_gadget_site_orient_get(site);
|
||||
static Elm_Genlist_Item_Class gli =
|
||||
{
|
||||
.version = ELM_GENLIST_ITEM_CLASS_VERSION,
|
||||
.func =
|
||||
{
|
||||
.text_get = _editor_text_get,
|
||||
.reusable_content_get = _editor_content_get,
|
||||
.del = _editor_item_del,
|
||||
},
|
||||
};
|
||||
|
||||
list = elm_list_add(parent);
|
||||
elm_scroller_content_min_limit(list, 1, 1);
|
||||
tempsite = e_gadget_site_add(E_GADGET_SITE_ORIENT_HORIZONTAL, NULL);
|
||||
if (orient)
|
||||
{
|
||||
list = elm_genlist_add(parent);
|
||||
elm_genlist_homogeneous_set(list, 1);
|
||||
elm_genlist_mode_set(list, ELM_LIST_COMPRESS);
|
||||
}
|
||||
else
|
||||
{
|
||||
list = elm_gengrid_add(parent);
|
||||
evas_object_event_callback_add(list, EVAS_CALLBACK_RESIZE, _editor_resize, NULL);
|
||||
}
|
||||
elm_scroller_bounce_set(list, 0, 0);
|
||||
elm_scroller_policy_set(list, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
|
||||
tempsite = e_gadget_site_add(orient, NULL);
|
||||
e_gadget_site_gravity_set(tempsite, E_GADGET_SITE_GRAVITY_NONE);
|
||||
|
||||
it = e_gadget_type_iterator_get();
|
||||
|
@ -2143,29 +2236,24 @@ e_gadget_editor_add(Evas_Object *parent, Evas_Object *site)
|
|||
gadgets = e_gadget_site_gadgets_list(tempsite);
|
||||
EINA_LIST_FREE(gadgets, g)
|
||||
{
|
||||
Evas_Object *box, *button = NULL;
|
||||
char buf[1024];
|
||||
Gadget_Item *gi;
|
||||
Elm_Object_Item *item = NULL;
|
||||
|
||||
gi = E_NEW(Gadget_Item, 1);
|
||||
gi->editor = list;
|
||||
gi->gadget = g;
|
||||
gi->site = site;
|
||||
items = eina_list_append(items, gi);
|
||||
box = elm_box_add(list);
|
||||
elm_box_horizontal_set(box, 1);
|
||||
E_EXPAND(g);
|
||||
E_FILL(g);
|
||||
elm_box_pack_end(box, g);
|
||||
evas_object_pass_events_set(g, 1);
|
||||
strncpy(buf, e_gadget_type_get(g), sizeof(buf) - 1);
|
||||
buf[0] = toupper(buf[0]);
|
||||
elm_list_item_append(list, buf, box, button, _editor_gadget_new, gi);
|
||||
elm_box_recalculate(box);
|
||||
if (orient)
|
||||
elm_genlist_item_append(list, &gli, gi, NULL, 0, _editor_gadget_new, gi);
|
||||
else
|
||||
item = elm_gengrid_item_append(list, &gli, gi, _editor_gadget_new, gi);
|
||||
if (item)
|
||||
elm_object_item_tooltip_content_cb_set(item, _editor_tooltip_content, gi, NULL);
|
||||
}
|
||||
evas_object_data_set(list, "__gadget_items", items);
|
||||
evas_object_event_callback_add(list, EVAS_CALLBACK_DEL, _editor_del, items);
|
||||
elm_list_go(list);
|
||||
evas_object_event_callback_add(list, EVAS_CALLBACK_DEL, _editor_del, parent);
|
||||
added = 0;
|
||||
return list;
|
||||
}
|
||||
|
@ -2173,7 +2261,7 @@ e_gadget_editor_add(Evas_Object *parent, Evas_Object *site)
|
|||
E_API Evas_Object *
|
||||
e_gadget_site_edit(Evas_Object *site)
|
||||
{
|
||||
Evas_Object *comp_object, *popup, *editor;
|
||||
Evas_Object *comp_object, *popup, *editor, *tb, *r;
|
||||
E_Zone *zone, *czone;
|
||||
|
||||
zone = e_comp_object_util_zone_get(site);
|
||||
|
@ -2188,13 +2276,25 @@ e_gadget_site_edit(Evas_Object *site)
|
|||
}
|
||||
|
||||
popup = elm_popup_add(e_comp->elm);
|
||||
elm_popup_scrollable_set(popup, EINA_TRUE);
|
||||
elm_popup_scrollable_set(popup, EINA_FALSE);
|
||||
elm_popup_allow_events_set(popup, 1);
|
||||
|
||||
tb = elm_table_add(popup);
|
||||
elm_object_content_set(popup, tb);
|
||||
r = evas_object_rectangle_add(e_comp->evas);
|
||||
evas_object_size_hint_min_set(r, zone->w / 2, 1);
|
||||
e_comp_object_util_del_list_append(tb, r);
|
||||
elm_table_pack(tb, r, 0, 0, 2, 1);
|
||||
r = evas_object_rectangle_add(e_comp->evas);
|
||||
evas_object_size_hint_min_set(r, 1, zone->h / 2);
|
||||
e_comp_object_util_del_list_append(tb, r);
|
||||
elm_table_pack(tb, r, 0, 1, 1, 1);
|
||||
|
||||
editor = e_gadget_editor_add(e_comp->elm, site);
|
||||
elm_table_pack(tb, editor, 0, 1, 2, 2);
|
||||
evas_object_show(editor);
|
||||
E_EXPAND(editor);
|
||||
E_FILL(editor);
|
||||
elm_object_content_set(popup, editor);
|
||||
comp_object = e_comp_object_util_add(popup, E_COMP_OBJECT_TYPE_NONE);
|
||||
evas_object_layer_set(comp_object, E_LAYER_POPUP);
|
||||
evas_object_show(comp_object);
|
||||
|
|
Loading…
Reference in New Issue