efl
1390 строк · 44.6 Кб
1#ifdef HAVE_CONFIG_H2# include "elementary_config.h"3#endif4#include <Elementary.h>5
6#define FILESEP "file://"7#define FILESEP_LEN sizeof(FILESEP) - 18
9static const char *img[9] =10{
11"panel_01.jpg",12"plant_01.jpg",13"rock_01.jpg",14"rock_02.jpg",15"sky_01.jpg",16"sky_02.jpg",17"sky_03.jpg",18"sky_04.jpg",19"wood_01.jpg",20};21
22struct _anim_icon_st23{
24int start_x;25int start_y;26Evas_Object *o;27};28typedef struct _anim_icon_st anim_icon_st;29
30struct _drag_anim_st31{
32Evas_Object *icwin;33Evas *e;34Evas_Coord mdx; /* Mouse-down x */35Evas_Coord mdy; /* Mouse-down y */36Eina_List *icons; /* List of icons to animate (anim_icon_st) */37Ecore_Timer *tm;38Ecore_Animator *ea;39Evas_Object *gl;40};41typedef struct _drag_anim_st drag_anim_st;42
43#define DRAG_TIMEOUT 0.344#define ANIM_TIME 0.545
46static Eina_Bool _5s_cancel = EINA_FALSE;47static Ecore_Timer *_5s_timeout = NULL;48
49static int50_item_ptr_cmp(const void *d1, const void *d2)51{
52return ((const char *) d1 - (const char *) d2);53}
54
55static Elm_Genlist_Item_Class *itc1;56static Elm_Gengrid_Item_Class *gic;57
58static const char *59_drag_data_build(Eina_List **items)60{
61const char *drag_data = NULL;62if (*items)63{64Eina_Strbuf *str;65Eina_List *l;66Elm_Object_Item *it;67const char *t;68int i = 0;69
70str = eina_strbuf_new();71if (!str) return NULL;72
73/* drag data in form: file://URI1\nfile://URI2 */74EINA_LIST_FOREACH(*items, l, it)75{76t = (char *)elm_object_item_data_get(it);77if (t)78{79if (i > 0)80eina_strbuf_append(str, "\n");81eina_strbuf_append(str, FILESEP);82eina_strbuf_append(str, t);83i++;84}85}86drag_data = eina_strbuf_string_steal(str);87eina_strbuf_free(str);88}89return drag_data;90}
91
92static char *93_drag_data_extract(char **drag_data)94{
95char *uri = NULL;96if (!drag_data)97return uri;98
99char *p = *drag_data;100if (!p)101return uri;102char *s = strstr(p, FILESEP);103if (s)104p += FILESEP_LEN;105s = strchr(p, '\n');106uri = p;107if (s)108{109if (s - p > 0)110{111char *s1 = s - 1;112if (s1[0] == '\r')113s1[0] = '\0';114else115{116char *s2 = s + 1;117if (s2[0] == '\r')118{119s[0] = '\0';120s++;121}122else123s[0] = '\0';124}125}126else127s[0] = '\0';128s++;129}130else131p = NULL;132*drag_data = s;133
134return uri;135}
136
137static char *138gl_text_get(void *data, Evas_Object *obj EINA_UNUSED, const char *part EINA_UNUSED)139{
140return strdup(data);141}
142
143static Evas_Object *144gl_content_get(void *data, Evas_Object *obj, const char *part)145{
146if (!strcmp(part, "elm.swallow.icon"))147{148Evas_Object *icon = elm_icon_add(obj);149elm_image_file_set(icon, data, NULL);150evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);151evas_object_show(icon);152return icon;153}154return NULL;155}
156
157static void158gl_del_cb(void *data, Evas_Object *obj EINA_UNUSED)159{
160eina_stringshare_del(data);161}
162
163static void164_win_del(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)165{
166printf("<%s> <%d> will del <%p>\n", __func__, __LINE__, data);167elm_drop_item_container_del(data);168elm_drag_item_container_del(data);169
170if (gic) elm_gengrid_item_class_free(gic);171gic = NULL;172if (itc1) elm_genlist_item_class_free(itc1);173itc1 = NULL;174}
175
176static Elm_Object_Item *177_gl_item_getcb(Evas_Object *obj, Evas_Coord x, Evas_Coord y, int *xposret EINA_UNUSED, int *yposret)178{ /* This function returns pointer to item under (x,y) coords */179printf("<%s> <%d> obj=<%p>\n", __func__, __LINE__, obj);180Elm_Object_Item *gli;181gli = elm_genlist_at_xy_item_get(obj, x, y, yposret);182if (gli)183printf("over <%s>, gli=<%p> yposret %i\n",184(char *)elm_object_item_data_get(gli), gli, *yposret);185else186printf("over none, yposret %i\n", *yposret);187return gli;188}
189
190static Elm_Object_Item *191_grid_item_getcb(Evas_Object *obj, Evas_Coord x, Evas_Coord y, int *xposret, int *yposret)192{ /* This function returns pointer to item under (x,y) coords */193printf("<%s> <%d> obj=<%p>\n", __func__, __LINE__, obj);194Elm_Object_Item *item;195item = elm_gengrid_at_xy_item_get(obj, x, y, xposret, yposret);196if (item)197printf("over <%s>, item=<%p> xposret %i yposret %i\n",198(char *)elm_object_item_data_get(item), item, *xposret, *yposret);199else200printf("over none, xposret %i yposret %i\n", *xposret, *yposret);201return item;202}
203
204static void205_gl_poscb(void *data EINA_UNUSED, Evas_Object *obj, Elm_Object_Item *it, Evas_Coord x, Evas_Coord y, int xposret, int yposret, Elm_Xdnd_Action action EINA_UNUSED)206{
207printf("<%s> <%d> obj: %p, item: %p <%s>, x y: %d %d, posret: %d %d\n",208__func__, __LINE__, obj, it, elm_object_item_text_get(it),209x, y, xposret, yposret);210}
211
212static Eina_Bool213_gl_dropcb(void *data EINA_UNUSED, Evas_Object *obj, Elm_Object_Item *it, Elm_Selection_Data *ev, int xposret EINA_UNUSED, int yposret)214{ /* This function is called when data is dropped on the genlist */215printf("<%s> <%d> str=<%s>\n", __func__, __LINE__, (char *) ev->data);216if (!ev->data)217return EINA_FALSE;218if (ev->len <= 0)219return EINA_FALSE;220
221char *dd = eina_strndup(ev->data, ev->len);222if (!dd) return EINA_FALSE;223char *p = dd;224
225char *s = _drag_data_extract(&p);226while (s)227{228switch(yposret)229{230case -1: /* Dropped on top-part of the it item */231{232elm_genlist_item_insert_before(obj,233itc1, strdup(s), NULL, it,234ELM_GENLIST_ITEM_NONE,235NULL, NULL);236break;237}238case 0: /* Dropped on center of the it item */239case 1: /* Dropped on botton-part of the it item */240{241if (!it) it = elm_genlist_last_item_get(obj);242if (it) it = elm_genlist_item_insert_after(obj,243itc1, strdup(s), NULL, it,244ELM_GENLIST_ITEM_NONE,245NULL, NULL);246else247it = elm_genlist_item_append(obj,248itc1, strdup(s), NULL,249ELM_GENLIST_ITEM_NONE,250NULL, NULL);251break;252}253default:254{255free(dd);256return EINA_FALSE;257}258}259
260s = _drag_data_extract(&p);261}262free(dd);263
264return EINA_TRUE;265}
266
267static Eina_Bool268_grid_dropcb(void *data EINA_UNUSED, Evas_Object *obj, Elm_Object_Item *it, Elm_Selection_Data *ev, int xposret EINA_UNUSED, int yposret EINA_UNUSED)269{ /* This function is called when data is dropped on the genlist */270printf("<%s> <%d> str=<%s>\n", __func__, __LINE__, (char *) ev->data);271if (!ev->data)272return EINA_FALSE;273if (ev->len <= 0)274return EINA_FALSE;275
276char *dd = eina_strndup(ev->data, ev->len);277if (!dd) return EINA_FALSE;278char *p = dd;279char *s = _drag_data_extract(&p);280while(s)281{282if (it)283it = elm_gengrid_item_insert_after(obj, gic, eina_stringshare_add(s), it, NULL, NULL);284else285it = elm_gengrid_item_append(obj, gic, eina_stringshare_add(s), NULL, NULL);286s = _drag_data_extract(&p);287}288free(dd);289
290return EINA_TRUE;291}
292
293static void _gl_obj_mouse_move( void *data, Evas *e, Evas_Object *obj, void *event_info);294static void _gl_obj_mouse_up( void *data, Evas *e, Evas_Object *obj, void *event_info);295
296static void297anim_st_free(drag_anim_st *anim_st)298{ /* Stops and free mem of ongoing animation */299printf("<%s> <%d>\n", __func__, __LINE__);300if (anim_st)301{302evas_object_event_callback_del_full303(anim_st->gl, EVAS_CALLBACK_MOUSE_MOVE, _gl_obj_mouse_move, anim_st);304evas_object_event_callback_del_full305(anim_st->gl, EVAS_CALLBACK_MOUSE_UP, _gl_obj_mouse_up, anim_st);306if (anim_st->tm)307{308ecore_timer_del(anim_st->tm);309anim_st->tm = NULL;310}311
312if (anim_st->ea)313{314ecore_animator_del(anim_st->ea);315anim_st->ea = NULL;316}317
318anim_icon_st *st;319
320EINA_LIST_FREE(anim_st->icons, st)321{322evas_object_hide(st->o);323evas_object_del(st->o);324free(st);325}326
327free(anim_st);328}329}
330
331static Eina_Bool332_drag_anim_play(void *data, double pos)333{ /* Impl of the animation of icons, called on frame time */334drag_anim_st *anim_st = data;335printf("<%s> <%d>\n", __func__, __LINE__);336Eina_List *l;337anim_icon_st *st;338
339if (anim_st)340{341if (pos > 0.99)342{343anim_st->ea = NULL; /* Avoid deleting on mouse up */344
345EINA_LIST_FOREACH(anim_st->icons, l, st)346evas_object_hide(st->o); /* Hide animated icons */347anim_st_free(anim_st);348return ECORE_CALLBACK_CANCEL;349}350
351EINA_LIST_FOREACH(anim_st->icons, l, st)352{353int x, y, w, h;354Evas_Coord xm, ym;355evas_object_geometry_get(st->o, NULL, NULL, &w, &h);356evas_pointer_canvas_xy_get(anim_st->e, &xm, &ym);357x = st->start_x + (pos * (xm - (st->start_x + (w/2))));358y = st->start_y + (pos * (ym - (st->start_y + (h/2))));359evas_object_move(st->o, x, y);360}361
362return ECORE_CALLBACK_RENEW;363}364
365return ECORE_CALLBACK_CANCEL;366}
367
368static Eina_Bool369_gl_anim_start(void *data)370{ /* Start icons animation before actually drag-starts */371drag_anim_st *anim_st = data;372printf("<%s> <%d>\n", __func__, __LINE__);373int yposret = 0;374
375Eina_List *l;376Eina_List *items = eina_list_clone(elm_genlist_selected_items_get(anim_st->gl));377Elm_Object_Item *gli = elm_genlist_at_xy_item_get(anim_st->gl,378anim_st->mdx, anim_st->mdy, &yposret);379if (gli)380{ /* Add the item mouse is over to the list if NOT seleced */381void *p = eina_list_search_unsorted(items, _item_ptr_cmp, gli);382if (!p)383items = eina_list_append(items, gli);384}385
386EINA_LIST_FOREACH(items, l, gli)387{ /* Now add icons to animation window */388Evas_Object *o = elm_object_item_part_content_get(gli,389"elm.swallow.icon");390
391if (o)392{393int w, h;394const char *f;395const char *g;396anim_icon_st *st = calloc(1, sizeof(*st));397elm_image_file_get(o, &f, &g);398Evas_Object *ic = elm_icon_add(anim_st->gl);399elm_image_file_set(ic, f, g);400evas_object_geometry_get(o, &st->start_x, &st->start_y, &w, &h);401evas_object_size_hint_align_set(ic,402EVAS_HINT_FILL, EVAS_HINT_FILL);403evas_object_size_hint_weight_set(ic,404EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);405
406evas_object_move(ic, st->start_x, st->start_y);407evas_object_resize(ic, w, h);408evas_object_show(ic);409
410st->o = ic;411anim_st->icons = eina_list_append(anim_st->icons, st);412}413}414
415eina_list_free(items);416
417anim_st->tm = NULL;418anim_st->ea = ecore_animator_timeline_add(DRAG_TIMEOUT,419_drag_anim_play, anim_st);420
421return ECORE_CALLBACK_CANCEL;422}
423
424static void425_gl_obj_mouse_up(426void *data,427Evas *e EINA_UNUSED,428Evas_Object *obj EINA_UNUSED,429void *event_info EINA_UNUSED)430{ /* Cancel any drag waiting to start on timeout */431drag_anim_st *anim_st = data;432anim_st_free(anim_st);433}
434
435static void436_gl_obj_mouse_move(437void *data,438Evas *e EINA_UNUSED,439Evas_Object *obj EINA_UNUSED,440void *event_info)441{ /* Cancel any drag waiting to start on timeout */442
443if (((Evas_Event_Mouse_Move *)event_info)->event_flags & EVAS_EVENT_FLAG_ON_HOLD)444{445drag_anim_st *anim_st = data;446anim_st_free(anim_st);447}448}
449
450static void451_gl_obj_mouse_down(452void *data,453Evas *e EINA_UNUSED,454Evas_Object *obj EINA_UNUSED,455void *event_info)456{ /* Launch a timer to start drag animation */457Evas_Event_Mouse_Down *ev = event_info;458drag_anim_st *anim_st = calloc(1, sizeof(*anim_st));459anim_st->e = e;460anim_st->mdx = ev->canvas.x;461anim_st->mdy = ev->canvas.y;462anim_st->gl = data;463anim_st->tm = ecore_timer_add(DRAG_TIMEOUT, _gl_anim_start, anim_st);464evas_object_event_callback_add(data, EVAS_CALLBACK_MOUSE_UP,465_gl_obj_mouse_up, anim_st);466evas_object_event_callback_add(data, EVAS_CALLBACK_MOUSE_MOVE,467_gl_obj_mouse_move, anim_st);468}
469/* END - Handling drag start animation */
470
471static void472_gl_dragdone(void *data, Evas_Object *obj EINA_UNUSED, Eina_Bool doaccept)473{
474printf("<%s> <%d> data=<%p> doaccept=<%d>\n",475__func__, __LINE__, data, doaccept);476
477Elm_Object_Item *it;478Eina_List *l;479
480if (_5s_cancel)481{482ecore_timer_del(_5s_timeout);483_5s_timeout = NULL;484}485
486if (doaccept)487{ /* Remove items dragged out (accepted by target) */488EINA_LIST_FOREACH(data, l, it)489elm_object_item_del(it);490}491
492eina_list_free(data);493return;494}
495
496static Eina_Bool497_5s_timeout_gone(void *data)498{
499printf("Cancel DnD\n");500elm_drag_cancel(data);501_5s_timeout = NULL;502return ECORE_CALLBACK_CANCEL;503}
504
505static Evas_Object *506_gl_createicon(void *data, Evas_Object *win, Evas_Coord *xoff, Evas_Coord *yoff)507{
508printf("<%s> <%d>\n", __func__, __LINE__);509Evas_Object *icon = NULL;510Evas_Object *o = elm_object_item_part_content_get(data, "elm.swallow.icon");511
512if (o)513{514int xm, ym, w = 30, h = 30;515const char *f;516const char *g;517elm_image_file_get(o, &f, &g);518evas_pointer_canvas_xy_get(evas_object_evas_get(o), &xm, &ym);519if (xoff) *xoff = xm - (w/2);520if (yoff) *yoff = ym - (h/2);521icon = elm_icon_add(win);522elm_image_file_set(icon, f, g);523evas_object_size_hint_align_set(icon,524EVAS_HINT_FILL, EVAS_HINT_FILL);525evas_object_size_hint_weight_set(icon,526EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);527if (xoff && yoff) evas_object_move(icon, *xoff, *yoff);528evas_object_resize(icon, w, h);529}530
531return icon;532}
533
534static Eina_List *535_gl_icons_get(void *data)536{ /* Start icons animation before actually drag-starts */537printf("<%s> <%d>\n", __func__, __LINE__);538int yposret = 0;539
540Eina_List *l;541
542Eina_List *icons = NULL;543
544Evas_Coord xm, ym;545evas_pointer_canvas_xy_get(evas_object_evas_get(data), &xm, &ym);546Eina_List *items = eina_list_clone(elm_genlist_selected_items_get(data));547Elm_Object_Item *gli = elm_genlist_at_xy_item_get(data,548xm, ym, &yposret);549if (gli)550{ /* Add the item mouse is over to the list if NOT seleced */551void *p = eina_list_search_unsorted(items, _item_ptr_cmp, gli);552if (!p)553items = eina_list_append(items, gli);554}555
556EINA_LIST_FOREACH(items, l, gli)557{ /* Now add icons to animation window */558Evas_Object *o = elm_object_item_part_content_get(gli,559"elm.swallow.icon");560
561if (o)562{563int x, y, w, h;564const char *f, *g;565elm_image_file_get(o, &f, &g);566Evas_Object *ic = elm_icon_add(data);567elm_image_file_set(ic, f, g);568evas_object_geometry_get(o, &x, &y, &w, &h);569evas_object_size_hint_align_set(ic,570EVAS_HINT_FILL, EVAS_HINT_FILL);571evas_object_size_hint_weight_set(ic,572EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);573
574evas_object_move(ic, x, y);575evas_object_resize(ic, w, h);576evas_object_show(ic);577
578icons = eina_list_append(icons, ic);579}580}581
582eina_list_free(items);583return icons;584}
585
586static const char *587_gl_get_drag_data(Evas_Object *obj, Elm_Object_Item *it, Eina_List **items)588{ /* Construct a string of dragged info, user frees returned string */589const char *drag_data = NULL;590printf("<%s> <%d>\n", __func__, __LINE__);591
592*items = eina_list_clone(elm_genlist_selected_items_get(obj));593if (it)594{ /* Add the item mouse is over to the list if NOT seleced */595void *p = eina_list_search_unsorted(*items, _item_ptr_cmp, it);596if (!p)597*items = eina_list_append(*items, it);598}599drag_data = _drag_data_build(items);600printf("<%s> <%d> Sending <%s>\n", __func__, __LINE__, drag_data);601
602return drag_data;603}
604
605static const char *606_grid_get_drag_data(Evas_Object *obj, Elm_Object_Item *it, Eina_List **items)607{ /* Construct a string of dragged info, user frees returned string */608const char *drag_data = NULL;609printf("<%s> <%d>\n", __func__, __LINE__);610
611*items = eina_list_clone(elm_gengrid_selected_items_get(obj));612if (it)613{ /* Add the item mouse is over to the list if NOT seleced */614void *p = eina_list_search_unsorted(*items, _item_ptr_cmp, it);615if (!p)616*items = eina_list_append(*items, it);617}618drag_data = _drag_data_build(items);619printf("<%s> <%d> Sending <%s>\n", __func__, __LINE__, drag_data);620
621return drag_data;622}
623
624static Eina_Bool625_gl_dnd_default_anim_data_getcb(Evas_Object *obj, /* The genlist object */626Elm_Object_Item *it,627Elm_Drag_User_Info *info)628{ /* This called before starting to drag, mouse-down was on it */629info->format = ELM_SEL_FORMAT_TARGETS;630info->createicon = _gl_createicon;631info->createdata = it;632info->icons = _gl_icons_get(obj);633info->dragdone = _gl_dragdone;634
635/* Now, collect data to send for drop from ALL selected items */636/* Save list pointer to remove items after drop and free list on done */637info->data = _gl_get_drag_data(obj, it, (Eina_List **) &info->donecbdata);638printf("%s - data = %s\n", __func__, info->data);639info->acceptdata = info->donecbdata;640
641if (info->data)642return EINA_TRUE;643else644return EINA_FALSE;645}
646
647static Eina_Bool648_gl_data_getcb(Evas_Object *obj, /* The genlist object */649Elm_Object_Item *it,650Elm_Drag_User_Info *info)651{ /* This called before starting to drag, mouse-down was on it */652info->format = ELM_SEL_FORMAT_TARGETS;653info->createicon = _gl_createicon;654info->createdata = it;655info->dragdone = _gl_dragdone;656
657/* Now, collect data to send for drop from ALL selected items */658/* Save list pointer to remove items after drop and free list on done */659info->data = _gl_get_drag_data(obj, it, (Eina_List **) &info->donecbdata);660info->acceptdata = info->donecbdata;661
662if (info->data)663return EINA_TRUE;664else665return EINA_FALSE;666}
667
668static Eina_List *669_grid_icons_get(void *data)670{ /* Start icons animation before actually drag-starts */671printf("<%s> <%d>\n", __func__, __LINE__);672
673Eina_List *l;674
675Eina_List *icons = NULL;676
677Evas_Coord xm, ym;678evas_pointer_canvas_xy_get(evas_object_evas_get(data), &xm, &ym);679Eina_List *items = eina_list_clone(elm_gengrid_selected_items_get(data));680Elm_Object_Item *gli = elm_gengrid_at_xy_item_get(data,681xm, ym, NULL, NULL);682if (gli)683{ /* Add the item mouse is over to the list if NOT seleced */684void *p = eina_list_search_unsorted(items, _item_ptr_cmp, gli);685if (!p)686items = eina_list_append(items, gli);687}688
689EINA_LIST_FOREACH(items, l, gli)690{ /* Now add icons to animation window */691Evas_Object *o = elm_object_item_part_content_get(gli,692"elm.swallow.icon");693
694if (o)695{696int x, y, w, h;697const char *f, *g;698elm_image_file_get(o, &f, &g);699Evas_Object *ic = elm_icon_add(data);700elm_image_file_set(ic, f, g);701evas_object_geometry_get(o, &x, &y, &w, &h);702evas_object_size_hint_align_set(ic,703EVAS_HINT_FILL, EVAS_HINT_FILL);704evas_object_size_hint_weight_set(ic,705EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);706
707evas_object_move(ic, x, y);708evas_object_resize(ic, w, h);709evas_object_show(ic);710
711icons = eina_list_append(icons, ic);712}713}714
715eina_list_free(items);716return icons;717}
718
719static void720_gl_dragstart(void *data EINA_UNUSED, Evas_Object *obj)721{
722printf("<%s> <%d>\n", __func__, __LINE__);723if (_5s_cancel)724_5s_timeout = ecore_timer_add(5.0, _5s_timeout_gone, obj);725}
726
727static Eina_Bool728_grid_data_getcb(Evas_Object *obj, /* The genlist object */729Elm_Object_Item *it,730Elm_Drag_User_Info *info)731{
732/* This called before starting to drag, mouse-down was on it */733info->format = ELM_SEL_FORMAT_TARGETS;734info->createicon = _gl_createicon;735info->createdata = it;736info->dragstart = _gl_dragstart;737info->icons = _grid_icons_get(obj);738info->dragdone = _gl_dragdone;739
740/* Now, collect data to send for drop from ALL selected items */741/* Save list pointer to remove items after drop and free list on done */742info->data = _grid_get_drag_data(obj, it, (Eina_List **) &info->donecbdata);743printf("%s %d- data = %s\n", __func__, __LINE__, info->data);744info->acceptdata = info->donecbdata;745
746if (info->data)747return EINA_TRUE;748else749return EINA_FALSE;750}
751
752void
753test_dnd_genlist_default_anim(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)754{
755char buf[PATH_MAX];756Evas_Object *win, *gl, *bxx, *bx2, *lb;757int i, j;758
759win = elm_win_util_standard_add("dnd-genlist-default-anim", "DnD-Genlist-Default-Anim");760elm_win_autodel_set(win, EINA_TRUE);761
762bxx = elm_box_add(win);763elm_box_horizontal_set(bxx, EINA_FALSE);764evas_object_size_hint_weight_set(bxx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);765elm_win_resize_object_add(win, bxx);766evas_object_show(bxx);767
768lb = elm_label_add(win);769elm_object_text_set(lb, "Drag and drop between genlists with default anim.");770evas_object_size_hint_min_set(lb, 0, 50);771evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, 0.5);772evas_object_show(lb);773elm_box_pack_end(bxx, lb);774
775bx2 = elm_box_add(win);776elm_box_horizontal_set(bx2, EINA_TRUE);777evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);778evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);779evas_object_show(bx2);780elm_box_pack_end(bxx, bx2);781
782itc1 = elm_genlist_item_class_new();783itc1->item_style = "default";784itc1->func.text_get = gl_text_get;785itc1->func.content_get = gl_content_get;786itc1->func.del = NULL;787
788for (j = 0; j < 2; j++)789{790gl = elm_genlist_add(win);791
792/* START Drag and Drop handling */793evas_object_smart_callback_add(win, "delete,request", _win_del, gl);794elm_genlist_multi_select_set(gl, EINA_TRUE); /* We allow multi drag */795elm_drop_item_container_add(gl,796ELM_SEL_FORMAT_TARGETS,797_gl_item_getcb,798NULL, NULL,799NULL, NULL,800_gl_poscb, NULL,801_gl_dropcb, NULL);802
803elm_drag_item_container_add(gl, ANIM_TIME, DRAG_TIMEOUT,804_gl_item_getcb, _gl_dnd_default_anim_data_getcb);805
806// FIXME: This causes genlist to resize the horiz axis very slowly :(807// Reenable this and resize the window horizontally, then try to resize it back808//elm_genlist_mode_set(gl, ELM_LIST_LIMIT);809evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);810evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);811elm_box_pack_end(bx2, gl);812evas_object_show(gl);813
814for (i = 0; i < 20; i++)815{816snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[(i % 9)]);817const char *path = eina_stringshare_add(buf);818elm_genlist_item_append(gl, itc1, path, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);819}820}821
822evas_object_resize(win, 680 * elm_config_scale_get(),823800 * elm_config_scale_get());824evas_object_show(win);825}
826
827void
828test_dnd_genlist_user_anim(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)829{
830char buf[PATH_MAX];831Evas_Object *win, *gl, *bxx;832int i, j;833
834win = elm_win_util_standard_add("dnd-genlist-user-anim", "DnD-Genlist-User-Anim");835elm_win_autodel_set(win, EINA_TRUE);836
837bxx = elm_box_add(win);838elm_box_horizontal_set(bxx, EINA_TRUE);839evas_object_size_hint_weight_set(bxx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);840elm_win_resize_object_add(win, bxx);841evas_object_show(bxx);842
843itc1 = elm_genlist_item_class_new();844itc1->item_style = "default";845itc1->func.text_get = gl_text_get;846itc1->func.content_get = gl_content_get;847itc1->func.del = NULL;848
849for (j = 0; j < 2; j++)850{851gl = elm_genlist_add(win);852
853/* START Drag and Drop handling */854evas_object_smart_callback_add(win, "delete,request", _win_del, gl);855elm_genlist_multi_select_set(gl, EINA_TRUE); /* We allow multi drag */856elm_drop_item_container_add(gl,857ELM_SEL_FORMAT_TARGETS,858_gl_item_getcb,859NULL, NULL,860NULL, NULL,861NULL, NULL,862_gl_dropcb, NULL);863
864elm_drag_item_container_add(gl, ANIM_TIME, DRAG_TIMEOUT,865_gl_item_getcb, _gl_data_getcb);866
867/* We add mouse-down, up callbacks to start/stop drag animation */868evas_object_event_callback_add(gl, EVAS_CALLBACK_MOUSE_DOWN,869_gl_obj_mouse_down, gl);870/* END Drag and Drop handling */871
872// FIXME: This causes genlist to resize the horiz axis very slowly :(873// Reenable this and resize the window horizontally, then try to resize it back874//elm_genlist_mode_set(gl, ELM_LIST_LIMIT);875evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);876evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);877elm_box_pack_end(bxx, gl);878evas_object_show(gl);879
880for (i = 0; i < 20; i++)881{882snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[(i % 9)]);883const char *path = eina_stringshare_add(buf);884elm_genlist_item_append(gl, itc1, path, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);885}886}887
888evas_object_resize(win, 680 * elm_config_scale_get(),889800 * elm_config_scale_get());890evas_object_show(win);891}
892
893void
894test_dnd_genlist_gengrid(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)895{
896char buf[PATH_MAX];897Evas_Object *win, *bxx;898int i;899
900win = elm_win_util_standard_add("dnd-genlist-gengrid", "DnD-Genlist-Gengrid");901elm_win_autodel_set(win, EINA_TRUE);902
903bxx = elm_box_add(win);904elm_box_horizontal_set(bxx, EINA_TRUE);905evas_object_size_hint_weight_set(bxx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);906elm_win_resize_object_add(win, bxx);907evas_object_show(bxx);908
909{910itc1 = elm_genlist_item_class_new();911itc1->item_style = "default";912itc1->func.text_get = gl_text_get;913itc1->func.content_get = gl_content_get;914itc1->func.del = NULL;915
916Evas_Object *gl = elm_genlist_add(win);917evas_object_smart_callback_add(win, "delete,request", _win_del, gl);918
919/* START Drag and Drop handling */920elm_genlist_multi_select_set(gl, EINA_TRUE); /* We allow multi drag */921elm_drop_item_container_add(gl, ELM_SEL_FORMAT_TARGETS, _gl_item_getcb, NULL, NULL,922NULL, NULL, NULL, NULL, _gl_dropcb, NULL);923
924elm_drag_item_container_add(gl, ANIM_TIME, DRAG_TIMEOUT,925_gl_item_getcb, _gl_dnd_default_anim_data_getcb);926/* END Drag and Drop handling */927
928// FIXME: This causes genlist to resize the horiz axis very slowly :(929// Reenable this and resize the window horizontally, then try to resize it back930//elm_genlist_mode_set(gl, ELM_LIST_LIMIT);931evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);932evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);933elm_box_pack_end(bxx, gl);934evas_object_show(gl);935
936for (i = 0; i < 20; i++)937{938snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[(i % 9)]);939const char *path = eina_stringshare_add(buf);940elm_genlist_item_append(gl, itc1, path, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);941}942}943
944{945Evas_Object *grid = elm_gengrid_add(win);946evas_object_smart_callback_add(win, "delete,request", _win_del, grid);947elm_gengrid_item_size_set(grid,948ELM_SCALE_SIZE(150), ELM_SCALE_SIZE(150));949elm_gengrid_horizontal_set(grid, EINA_FALSE);950elm_gengrid_reorder_mode_set(grid, EINA_FALSE);951elm_gengrid_multi_select_set(grid, EINA_TRUE); /* We allow multi drag */952evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);953evas_object_size_hint_align_set(grid, EVAS_HINT_FILL, EVAS_HINT_FILL);954
955gic = elm_gengrid_item_class_new();956gic->item_style = "default";957gic->func.text_get = gl_text_get;958gic->func.content_get = gl_content_get;959gic->func.del = gl_del_cb;960
961elm_drop_item_container_add(grid, ELM_SEL_FORMAT_TARGETS, _grid_item_getcb, NULL, NULL,962NULL, NULL, NULL, NULL, _grid_dropcb, NULL);963
964elm_drag_item_container_add(grid, ANIM_TIME, DRAG_TIMEOUT,965_grid_item_getcb, _grid_data_getcb);966for (i = 0; i < 20; i++)967{968snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[(i % 9)]);969const char *path = eina_stringshare_add(buf);970elm_gengrid_item_append(grid, gic, path, NULL, NULL);971}972elm_box_pack_end(bxx, grid);973evas_object_show(grid);974}975
976evas_object_resize(win, 680 * elm_config_scale_get(),977800 * elm_config_scale_get());978evas_object_show(win);979}
980
981static Eina_Bool _drop_box_button_new_cb(void *data, Evas_Object *obj, Elm_Selection_Data *ev)982{
983Evas_Object *win = data;984if (ev->len <= 0)985return EINA_FALSE;986
987char *dd = eina_strndup(ev->data, ev->len);988if (!dd) return EINA_FALSE;989char *p = dd;990char *s = _drag_data_extract(&p);991while (s)992{993Evas_Object *ic = elm_icon_add(win);994elm_image_file_set(ic, s, NULL);995evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);996Evas_Object *bt = elm_button_add(win);997elm_object_text_set(bt, "Dropped button");998elm_object_part_content_set(bt, "icon", ic);999elm_box_pack_end(obj, bt);1000evas_object_show(bt);1001evas_object_show(ic);1002s = _drag_data_extract(&p);1003}1004free(dd);1005
1006return EINA_TRUE;1007}
1008
1009void _enter_but_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED)1010{
1011printf("Entered %s - drop it here and I will never print this line anymore.\n", __func__);1012}
1013
1014static Eina_Bool _drop_but_icon_change_cb(void *data, Evas_Object *obj, Elm_Selection_Data *ev)1015{
1016Evas_Object *win = data;1017Evas_Object *ic;1018if (ev->len <= 0)1019return EINA_FALSE;1020
1021char *dd = eina_strndup(ev->data, ev->len);1022if (!dd) return EINA_FALSE;1023char *p = dd;1024char *s = _drag_data_extract(&p);1025ic = elm_icon_add(win);1026elm_image_file_set(ic, s, NULL);1027evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);1028evas_object_del(elm_object_part_content_get(obj, "icon"));1029elm_object_part_content_set(obj, "icon", ic);1030evas_object_show(ic);1031free(dd);1032
1033return EINA_TRUE;1034}
1035
1036/* Callback used to test multi-callbacks feature */
1037static Eina_Bool _drop_but_cb_remove_cb(void *data EINA_UNUSED, Evas_Object *obj, Elm_Selection_Data *ev EINA_UNUSED)1038{
1039printf("Second callback called - removing it\n");1040elm_drop_target_del(obj, ELM_SEL_FORMAT_TARGETS, _enter_but_cb, NULL, NULL, NULL, NULL, NULL, _drop_but_cb_remove_cb, NULL);1041return EINA_TRUE;1042}
1043
1044static Eina_Bool _drop_bg_change_cb(void *data EINA_UNUSED, Evas_Object *obj, Elm_Selection_Data *ev)1045{
1046if (ev->len <= 0)1047return EINA_FALSE;1048
1049char *dd = eina_strndup(ev->data, ev->len);1050if (!dd) return EINA_FALSE;1051char *p = dd;1052char *s = _drag_data_extract(&p);1053elm_bg_file_set(obj, s, NULL);1054free(dd);1055
1056return EINA_TRUE;1057}
1058
1059static void1060_5s_cancel_ck_changed(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)1061{
1062_5s_cancel = elm_check_state_get(obj);1063}
1064
1065void
1066test_dnd_multi_features(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)1067{
1068char buf[PATH_MAX];1069Evas_Object *win, *bxx, *bg;1070int i;1071
1072win = elm_win_util_standard_add("dnd-multi-features", "DnD-Multi Features");1073elm_win_autodel_set(win, EINA_TRUE);1074
1075bg = elm_bg_add(win);1076evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);1077elm_drop_target_add(bg, ELM_SEL_FORMAT_TARGETS, NULL, NULL, NULL, NULL, NULL, NULL, _drop_bg_change_cb, NULL);1078elm_win_resize_object_add(win, bg);1079
1080/* And show the background. */1081evas_object_show(bg);1082bxx = elm_box_add(win);1083elm_box_horizontal_set(bxx, EINA_TRUE);1084evas_object_size_hint_weight_set(bxx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);1085elm_win_resize_object_add(win, bxx);1086evas_object_show(bxx);1087
1088{1089Evas_Object *grid = elm_gengrid_add(bxx);1090evas_object_smart_callback_add(win, "delete,request", _win_del, grid);1091elm_gengrid_item_size_set(grid,1092ELM_SCALE_SIZE(100), ELM_SCALE_SIZE(100));1093elm_gengrid_horizontal_set(grid, EINA_FALSE);1094elm_gengrid_reorder_mode_set(grid, EINA_FALSE);1095elm_gengrid_multi_select_set(grid, EINA_TRUE); /* We allow multi drag */1096evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);1097evas_object_size_hint_align_set(grid, EVAS_HINT_FILL, EVAS_HINT_FILL);1098
1099gic = elm_gengrid_item_class_new();1100gic->item_style = "default";1101gic->func.text_get = gl_text_get;1102gic->func.content_get = gl_content_get;1103
1104elm_drag_item_container_add(grid, ANIM_TIME, DRAG_TIMEOUT,1105_grid_item_getcb, _grid_data_getcb);1106for (i = 0; i < 10; i++)1107{1108snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[(i % 9)]);1109const char *path = eina_stringshare_add(buf);1110elm_gengrid_item_append(grid, gic, path, NULL, NULL);1111}1112elm_box_pack_end(bxx, grid);1113evas_object_show(grid);1114}1115
1116{1117Evas_Object *ic, *bt;1118Evas_Object *vert_box = elm_box_add(bxx);1119evas_object_size_hint_weight_set(vert_box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);1120elm_box_pack_end(bxx, vert_box);1121evas_object_show(vert_box);1122elm_drop_target_add(vert_box, ELM_SEL_FORMAT_TARGETS, NULL, NULL, NULL, NULL, NULL, NULL, _drop_box_button_new_cb, win);1123
1124_5s_cancel = EINA_FALSE;1125Evas_Object *ck = elm_check_add(vert_box);1126elm_object_style_set(ck, "toggle");1127elm_object_text_set(ck, "Cancel after 5s:");1128elm_check_state_set(ck, _5s_cancel);1129evas_object_smart_callback_add(ck, "changed", _5s_cancel_ck_changed, NULL);1130elm_box_pack_end(vert_box, ck);1131evas_object_show(ck);1132
1133ic = elm_icon_add(win);1134snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());1135elm_image_file_set(ic, buf, NULL);1136evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);1137bt = elm_button_add(win);1138elm_object_text_set(bt, "Multi-callbacks check");1139elm_drop_target_add(bt, ELM_SEL_FORMAT_TARGETS, NULL, NULL, NULL, NULL, NULL, NULL, _drop_but_icon_change_cb, win);1140elm_drop_target_add(bt, ELM_SEL_FORMAT_TARGETS, _enter_but_cb, NULL, NULL, NULL, NULL, NULL, _drop_but_cb_remove_cb, NULL);1141elm_object_part_content_set(bt, "icon", ic);1142elm_box_pack_end(vert_box, bt);1143evas_object_show(bt);1144evas_object_show(ic);1145
1146ic = elm_icon_add(win);1147snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());1148elm_image_file_set(ic, buf, NULL);1149evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);1150bt = elm_button_add(win);1151elm_object_text_set(bt, "Drop into me to change my icon");1152elm_drop_target_add(bt, ELM_SEL_FORMAT_TARGETS, NULL, NULL, NULL, NULL, NULL, NULL, _drop_but_icon_change_cb, win);1153elm_object_part_content_set(bt, "icon", ic);1154elm_box_pack_end(vert_box, bt);1155evas_object_show(bt);1156evas_object_show(ic);1157
1158ic = elm_icon_add(win);1159snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());1160elm_image_file_set(ic, buf, NULL);1161evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);1162bt = elm_button_add(win);1163elm_object_text_set(bt, "No action on drop");1164elm_object_part_content_set(bt, "icon", ic);1165elm_box_pack_end(vert_box, bt);1166evas_object_show(bt);1167evas_object_show(ic);1168}1169evas_object_resize(win, 680 * elm_config_scale_get(),1170800 * elm_config_scale_get());1171evas_object_show(win);1172}
1173
1174static void1175_enter_cb(void *data EINA_UNUSED, Evas_Object *obj)1176{
1177printf("%s: obj: %s %p enter\n", __func__,1178evas_object_type_get(obj), obj);1179}
1180
1181static void1182_leave_cb(void *data EINA_UNUSED, Evas_Object *obj)1183{
1184printf("%s: obj: %s %p leave\n", __func__,1185evas_object_type_get(obj), obj);1186}
1187
1188static void1189_pos_cb(void *data EINA_UNUSED, Evas_Object *obj, Evas_Coord x, Evas_Coord y, Elm_Xdnd_Action action)1190{
1191printf("%s: obj: %s %p pos: %d %d, action: %d\n", __func__,1192evas_object_type_get(obj), obj, x, y, action);1193}
1194
1195static Eina_Bool1196_label_drop_cb(void *data EINA_UNUSED, Evas_Object *obj, Elm_Selection_Data *ev)1197{
1198const char *text = ev->data;1199printf("%s: obj: %s %p drop data: %s\n", __func__,1200evas_object_type_get(obj), obj, text);1201elm_object_text_set(obj, text);1202return EINA_TRUE;1203}
1204
1205static Eina_Bool1206_image_drop_cb(void *data EINA_UNUSED, Evas_Object *obj, Elm_Selection_Data *ev)1207{
1208char *f = (char*)eina_memdup(ev->data, ev->len, 1);1209
1210printf("%s: obj: %s %p drop data: %s\n", __func__,1211evas_object_type_get(obj), obj, f);1212elm_image_file_set(obj, f, NULL);1213free(f);1214return EINA_TRUE;1215}
1216
1217static Evas_Object *1218_label_create_icon(void *data, Evas_Object *parent, Evas_Coord *xoff, Evas_Coord *yoff)1219{
1220Evas_Object *lb = data;1221Evas_Object *icon;1222const char *text;1223Evas_Coord x, y, w, h;1224int xm, ym;1225
1226icon = elm_label_add(parent);1227text = elm_object_text_get(lb);1228elm_object_text_set(icon, text);1229
1230evas_object_geometry_get(lb, &x, &y, &w, &h);1231evas_object_move(icon, x, y);1232evas_object_resize(icon, w, h);1233evas_object_show(icon);1234
1235evas_pointer_canvas_xy_get(evas_object_evas_get(lb), &xm, &ym);1236if (xoff) *xoff = xm - (w / 2);1237if (yoff) *yoff = ym - (h / 2);1238
1239return icon;1240}
1241
1242static void1243_label_drag_done_cb(void *data, Evas_Object *obj EINA_UNUSED)1244{
1245free(data);1246}
1247
1248static void1249_label_mouse_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)1250{
1251Evas_Object *lb = data;1252const char *mkup = elm_object_text_get(lb);1253char *text = evas_textblock_text_markup_to_utf8(NULL, mkup);1254
1255if (!text)1256{1257printf("Cannot convert text\n");1258}1259elm_drag_start(lb, ELM_SEL_FORMAT_TEXT, text, ELM_XDND_ACTION_COPY,1260_label_create_icon, lb,1261NULL, NULL, NULL, NULL,1262_label_drag_done_cb, text);1263}
1264
1265static Evas_Object *1266_image_create_icon(void *data, Evas_Object *parent, Evas_Coord *xoff, Evas_Coord *yoff)1267{
1268Evas_Object *ic;1269Evas_Object *io = data;1270const char *f, *g;1271Evas_Coord x, y, w, h, xm, ym;1272
1273elm_image_file_get(io, &f, &g);1274ic = elm_image_add(parent);1275elm_image_file_set(ic, f, g);1276evas_object_geometry_get(io, &x, &y, &w, &h);1277evas_object_move(ic, x, y);1278evas_object_resize(ic, 60, 60);1279evas_object_show(ic);1280
1281evas_pointer_canvas_xy_get(evas_object_evas_get(io), &xm, &ym);1282if (xoff) *xoff = xm - 30;1283if (yoff) *yoff = ym - 30;1284
1285return ic;1286}
1287
1288static void1289_image_mouse_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)1290{
1291Evas_Object *io = data;1292const char *f;1293char dd[PATH_MAX];1294
1295elm_image_file_get(io, &f, NULL);1296snprintf(dd, sizeof(dd), "file://%s", f);1297
1298elm_drag_start(io, ELM_SEL_FORMAT_IMAGE, dd, ELM_XDND_ACTION_COPY,1299_image_create_icon, io,1300NULL, NULL, NULL, NULL, NULL, NULL);1301}
1302
1303void
1304test_dnd_types(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)1305{
1306Evas_Object *win, *bx, *bx1, *lb, *io, *en;1307int i;1308
1309win = elm_win_util_standard_add("dnd-types", "DnD types");1310elm_win_autodel_set(win, EINA_TRUE);1311
1312bx = elm_box_add(win);1313elm_box_horizontal_set(bx, EINA_TRUE);1314evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);1315elm_win_resize_object_add(win, bx);1316evas_object_show(bx);1317
1318for(i = 0; i < 2; i++)1319{1320char buf[PATH_MAX];1321bx1 = elm_box_add(win);1322evas_object_size_hint_weight_set(bx1, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);1323evas_object_size_hint_align_set(bx1, EVAS_HINT_FILL, EVAS_HINT_FILL);1324elm_box_pack_end(bx, bx1);1325evas_object_show(bx1);1326
1327lb = elm_label_add(win);1328if (i == 0)1329elm_object_text_set(lb, "This is an label.<br/>You can drag or drop text here.<br/>"1330"This is a larger label with newlines<br/>"1331"to make it bigger, bit it won't expand or wrap<br/>"1332"just be a block of text that can't change its<br/>"1333"formatting as it's fixed based on text<br/>");1334else1335elm_object_text_set(lb, "Another label for drag and drop test.<br/>"1336"A small label. You can drag or drop text.<br/><br/><br/>");1337elm_drop_target_add(lb, ELM_SEL_FORMAT_TEXT,1338_enter_cb, NULL,1339_leave_cb, NULL,1340_pos_cb, NULL,1341_label_drop_cb, NULL);1342evas_object_event_callback_add(lb, EVAS_CALLBACK_MOUSE_DOWN, _label_mouse_down_cb, lb);1343elm_box_pack_end(bx1, lb);1344evas_object_show(lb);1345
1346en = elm_entry_add(win);1347if (i == 0)1348{1349elm_object_text_set(en,1350"Entry:<br/>You can only drop <b>text</> here.<br/>"1351"This is an entry widget in this window that<br/>"1352"uses markup <b>like this</> for styling.");1353elm_entry_cnp_mode_set(en, ELM_CNP_MODE_PLAINTEXT);1354}1355else1356{1357elm_object_text_set(en,1358"Entry:<br/>You can drop <b>text or image</> here.<br/>"1359"This is an entry widget in this window that<br/>"1360"uses markup <b>like this</> for styling.");1361
1362}1363evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);1364evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL);1365elm_box_pack_end(bx1, en);1366evas_object_show(en);1367
1368if (i == 0)1369snprintf(buf, sizeof(buf), "%s/images/logo.png", elm_app_data_dir_get());1370else1371snprintf(buf, sizeof(buf), "%s/images/rock_02.jpg", elm_app_data_dir_get());1372io = elm_image_add(win);1373elm_image_file_set(io, buf, NULL);1374evas_object_size_hint_weight_set(io, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);1375evas_object_size_hint_align_set(io, EVAS_HINT_FILL, EVAS_HINT_FILL);1376evas_object_size_hint_min_set(io, 100, 100);1377elm_drop_target_add(io, ELM_SEL_FORMAT_IMAGE,1378_enter_cb, NULL,1379_leave_cb, NULL,1380_pos_cb, NULL,1381_image_drop_cb, NULL);1382evas_object_event_callback_add(io, EVAS_CALLBACK_MOUSE_DOWN, _image_mouse_down_cb, io);1383elm_box_pack_end(bx1, io);1384evas_object_show(io);1385}1386
1387evas_object_show(win);1388evas_object_resize(win, 400 * elm_config_scale_get(),1389400 * elm_config_scale_get());1390}
1391