efl

Форк
0
/
test_list.c 
1964 строки · 69.8 Кб
1
#include "test.h"
2
#include <Elementary_Cursor.h>
3
#ifdef HAVE_CONFIG_H
4
# include "elementary_config.h"
5
#endif
6
#include <Elementary.h>
7

8
Evas_Object * _focus_autoscroll_mode_frame_create(Evas_Object *parent);
9

10
struct _api_data
11
{
12
   unsigned int state;  /* What state we are testing       */
13
   void *list;
14
};
15
typedef struct _api_data api_data;
16

17
enum _api_state
18
{
19
   ITEM_PREPEND,        /* 0 */
20
   ITEM_INSERT_BEFORE,  /* 1 */
21
   ITEM_INSERT_AFTER,   /* 2 */
22
   ITEM_SEPARATOR_SET,  /* 3 */
23
   LIST_ITEM_DEL,       /* 4 */
24
   SCROLLER_POLICY_SET_ON,
25
   SCROLLER_POLICY_SET_OFF, /* Back to AUTO next */
26
   TOOLTIP_TEXT_SET,    /* 7 */
27
   TOOLTIP_UNSET,       /* 8 */
28
   ITEM_CURSOR_SET,     /* 9 */
29
   ITEM_CURSOR_STYLE_SET,
30
   DISABLED_SET,        /* 11 */
31
   MODE_SET_COMPRESS,   /* 12 */
32
   MODE_SET_LIMIT,      /* 13 */
33
   MODE_SET_EXPAND,     /* 14 */
34
   HORIZONTAL_SET,      /* 15 */
35
   BOUNCE_SET,          /* 16 */
36
   LIST_CLEAR,          /* 17 */
37
   API_STATE_LAST
38
};
39
typedef enum _api_state api_state;
40

41
static void
42
set_api_state(api_data *api)
43
{
44
/** HOW TO TEST ************************
45
0 ITEM PREPEND
46
Scroll to end
47
1 INSERT BEFORE
48
Scroll to end
49
2 INSERT AFTER
50
3 INSERT SEPARATOR
51
Scroll to end
52
4 ITEM DEL
53
5 POLICY ON, BOUNCE_SET(TRUE, TRUE)
54
6 POLICY OFF
55
Scroll to end
56
7 TOOLTIP last-item
57
8 Cancel tootip
58
9 Curosr set on last item
59
10 Cursor style set last item
60
11 DISABLE last item
61
12 MODE COMPRESS
62
13 MODE LIMIT
63
14 MODE EXPAND
64
15 HORIZ SET
65
16 VERT MODE, BOUNCE(TRUE, FALSE) try to bounce on Y-axis
66
17 List clear
67
*** HOW TO TEST ***********************/
68
   Evas_Object *li = api->list;
69

70
   switch(api->state)
71
     { /* Put all api-changes under switch */
72
      case ITEM_PREPEND: /* 0 */
73
           {
74
              const Eina_List *items = elm_list_items_get(li);
75
              elm_list_item_prepend(li, "PREPEND", NULL, NULL, NULL, NULL);
76
              elm_list_go(li);
77
              elm_list_item_bring_in(eina_list_nth(items, 0));
78
           }
79
         break;
80

81
      case ITEM_INSERT_BEFORE: /* 1 */
82
           {
83
              const Eina_List *items = elm_list_items_get(li);
84
              if (eina_list_count(items))
85
                {
86
                  elm_list_item_insert_before(li,
87
                        eina_list_nth(items, eina_list_count(items)-1),
88
                        "1-before-last", NULL, NULL, NULL, NULL);
89
                  elm_list_go(li);
90
                  elm_list_item_bring_in(eina_list_data_get(eina_list_last(items)));
91
                }
92
           }
93
         break;
94

95
      case ITEM_INSERT_AFTER: /* 2 */
96
           {
97
              const Eina_List *items = elm_list_items_get(li);
98
              if (eina_list_count(items))
99
                {
100
                  elm_list_item_insert_after(li,
101
                        eina_list_nth(items, eina_list_count(items)-2),
102
                        "insert-after", NULL, NULL, NULL, NULL);
103
                  elm_list_go(li);
104
                  elm_list_item_bring_in(eina_list_data_get(eina_list_last(items)));
105
                }
106
           }
107
         break;
108

109
      case ITEM_SEPARATOR_SET: /* 3 */
110
           {
111
              const Eina_List *items = elm_list_items_get(li);
112
              if (eina_list_count(items))
113
                {
114
                  elm_list_item_separator_set(eina_list_nth(items, eina_list_count(items)-3), EINA_TRUE);
115
                  elm_list_item_bring_in(eina_list_nth(items, eina_list_count(items)-3));
116
                  elm_list_go(li);
117
                }
118
           }
119
         break;
120

121
      case LIST_ITEM_DEL: /* 4 */
122
           {
123
              const Eina_List *items = elm_list_items_get(li);
124
              if (eina_list_count(items))
125
                {
126
                  elm_object_item_del(eina_list_data_get(eina_list_last(items)));
127
                }
128
           }
129
         break;
130

131
      case SCROLLER_POLICY_SET_ON: /* 5 */
132
         elm_scroller_bounce_set(li, EINA_TRUE, EINA_TRUE);
133
         elm_scroller_policy_set(li, ELM_SCROLLER_POLICY_ON, ELM_SCROLLER_POLICY_ON);
134
         break;
135

136
      case SCROLLER_POLICY_SET_OFF: /* Back to AUTO next (6) */
137
         elm_scroller_policy_set(li, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
138
         break;
139

140
      case TOOLTIP_TEXT_SET: /* 7 */
141
           {
142
              const Eina_List *items = elm_list_items_get(li);
143
              if (eina_list_count(items))
144
                {
145
                  elm_object_item_tooltip_text_set(eina_list_data_get(eina_list_last(items)), "Tooltip set from API");
146
                }
147
              elm_scroller_policy_set(li, ELM_SCROLLER_POLICY_AUTO, ELM_SCROLLER_POLICY_AUTO);
148
           }
149
         break;
150

151
      case TOOLTIP_UNSET: /* 8 */
152
           {
153
              const Eina_List *items = elm_list_items_get(li);
154
              if (eina_list_count(items))
155
                {
156
                  elm_object_item_tooltip_unset(eina_list_data_get(eina_list_last(items)));
157
                }
158
           }
159
         break;
160

161
      case ITEM_CURSOR_SET: /* 9 */
162
           {
163
              const Eina_List *items = elm_list_items_get(li);
164
              if (eina_list_count(items))
165
                {
166
                  elm_object_item_cursor_set(eina_list_data_get(eina_list_last(items)), ELM_CURSOR_HAND2);
167
                }
168
           }
169
         break;
170

171
      case ITEM_CURSOR_STYLE_SET: /* 10 */
172
           {
173
              const Eina_List *items = elm_list_items_get(li);
174
              if (eina_list_count(items))
175
                {
176
                  elm_object_item_cursor_style_set(eina_list_data_get(eina_list_last(items)), "transparent");
177
                }
178
           }
179
         break;
180

181
      case DISABLED_SET: /* 11 */
182
           {
183
              const Eina_List *items = elm_list_items_get(li);
184
              if (eina_list_count(items))
185
                {
186
                  elm_object_item_disabled_set(eina_list_data_get(eina_list_last(items)), EINA_TRUE);
187
                }
188
           }
189
         break;
190

191
      case MODE_SET_COMPRESS: /* 12 */
192
         elm_list_mode_set(li, ELM_LIST_COMPRESS);
193
         break;
194

195
      case MODE_SET_LIMIT: /* 13 */
196
         elm_list_mode_set(li, ELM_LIST_LIMIT);
197
         break;
198

199
      case MODE_SET_EXPAND: /* 14 */
200
         elm_list_mode_set(li, ELM_LIST_EXPAND);
201
         break;
202

203
      case HORIZONTAL_SET: /* 15 */
204
         elm_list_mode_set(li, ELM_LIST_SCROLL); /* return to default mode */
205
         elm_list_horizontal_set(li, EINA_TRUE);
206
         break;
207

208
      case BOUNCE_SET: /* 16 */
209
         elm_list_horizontal_set(li, EINA_FALSE);
210
         elm_scroller_bounce_set(li, EINA_TRUE, EINA_FALSE);
211
         break;
212

213
      case LIST_CLEAR: /* 17 */
214
         elm_list_clear(li);
215
         break;
216

217
      case API_STATE_LAST:
218
         break;
219

220
      default:
221
         return;
222
     }
223
}
224

225
static void
226
_api_bt_clicked(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
227
{  /* Will add here a SWITCH command containing code to modify test-object */
228
   /* in accordance a->state value. */
229
   api_data *a = data;
230
   char str[128];
231

232
   printf("clicked event on API Button: api_state=<%d>\n", a->state);
233
   set_api_state(a);
234
   a->state++;
235
   sprintf(str, "Next API function (%u)", a->state);
236
   elm_object_text_set(obj, str);
237
   elm_object_disabled_set(obj, a->state == API_STATE_LAST);
238
}
239

240
static void
241
my_show_it(void        *data,
242
           Evas_Object *obj EINA_UNUSED,
243
           void        *event_info EINA_UNUSED)
244
{
245
   elm_list_item_show(data);
246
}
247

248
static void
249
scroll_top(void        *data EINA_UNUSED,
250
           Evas_Object *obj EINA_UNUSED,
251
           void        *event_info EINA_UNUSED)
252
{
253
   printf("Top edge!\n");
254
}
255

256
static void
257
scroll_bottom(void        *data EINA_UNUSED,
258
              Evas_Object *obj EINA_UNUSED,
259
              void        *event_info EINA_UNUSED)
260
{
261
   printf("Bottom edge!\n");
262
}
263

264
static void
265
clicked_right(void        *data EINA_UNUSED,
266
              Evas_Object *obj EINA_UNUSED,
267
              void        *event_info EINA_UNUSED)
268
{
269
   printf("Clicked right!\n");
270
}
271

272
static void
273
scroll_left(void        *data EINA_UNUSED,
274
            Evas_Object *obj EINA_UNUSED,
275
            void        *event_info EINA_UNUSED)
276
{
277
   printf("Left edge!\n");
278
}
279

280
static void
281
scroll_right(void        *data EINA_UNUSED,
282
             Evas_Object *obj EINA_UNUSED,
283
             void        *event_info EINA_UNUSED)
284
{
285
   printf("Right edge!\n");
286
}
287

288
static void
289
_cleanup_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
290
            void *event_info EINA_UNUSED)
291
{
292
   free(data);
293
}
294

295
void
296
test_list(void        *data EINA_UNUSED,
297
          Evas_Object *obj EINA_UNUSED,
298
          void        *event_info EINA_UNUSED)
299
{
300
   Evas_Object *win, *li, *ic, *ic2, *bx, *tb2, *bt, *bxx;
301
   char buf[PATH_MAX];
302
   Elm_Object_Item *list_it1, *list_it2, *list_it3, *list_it4, *list_it5;
303
   api_data *api = calloc(1, sizeof(api_data));
304

305
   win = elm_win_util_standard_add("list", "List");
306
   elm_win_autodel_set(win, EINA_TRUE);
307
   evas_object_event_callback_add(win, EVAS_CALLBACK_FREE, _cleanup_cb, api);
308

309
   bxx = elm_box_add(win);
310
   evas_object_size_hint_weight_set(bxx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
311
   elm_win_resize_object_add(win, bxx);
312
   evas_object_show(bxx);
313

314
   li = elm_list_add(win);
315
   elm_list_mode_set(li, ELM_LIST_LIMIT);
316
   evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
317
   evas_object_size_hint_align_set(li, EVAS_HINT_FILL, EVAS_HINT_FILL);
318
   api->list = li;
319

320
   bt = elm_button_add(win);
321
   elm_object_text_set(bt, "Next API function");
322
   evas_object_smart_callback_add(bt, "clicked", _api_bt_clicked, (void *) api);
323
   elm_box_pack_end(bxx, bt);
324
   elm_object_disabled_set(bt, api->state == API_STATE_LAST);
325
   evas_object_show(bt);
326

327
   elm_box_pack_end(bxx, li);
328

329
   ic = elm_icon_add(win);
330
   snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
331
   elm_image_file_set(ic, buf, NULL);
332
   list_it1 = elm_list_item_append(li, "Hello", ic, NULL, NULL, NULL);
333
   ic = elm_icon_add(win);
334
   snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
335
   elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
336
   elm_image_file_set(ic, buf, NULL);
337
   elm_list_item_append(li, "world", ic, NULL, NULL, NULL);
338
   ic = elm_icon_add(win);
339
   elm_icon_standard_set(ic, "edit");
340
   elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
341
   elm_list_item_append(li, ".", ic, NULL, NULL, NULL);
342

343
   ic = elm_icon_add(win);
344
   elm_icon_standard_set(ic, "delete");
345
   elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
346
   ic2 = elm_icon_add(win);
347
   elm_icon_standard_set(ic2, "clock");
348
   elm_image_resizable_set(ic2, EINA_FALSE, EINA_FALSE);
349
   list_it2 = elm_list_item_append(li, "How", ic, ic2, NULL, NULL);
350

351
   bx = elm_box_add(win);
352
   elm_box_horizontal_set(bx, EINA_TRUE);
353

354
   ic = elm_icon_add(win);
355
   snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
356
   elm_image_file_set(ic, buf, NULL);
357
   elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
358
   evas_object_size_hint_align_set(ic, 0.5, 0.5);
359
   elm_box_pack_end(bx, ic);
360
   evas_object_show(ic);
361

362
   ic = elm_icon_add(win);
363
   snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
364
   elm_image_file_set(ic, buf, NULL);
365
   elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
366
   evas_object_size_hint_align_set(ic, 0.5, 0.0);
367
   elm_box_pack_end(bx, ic);
368
   evas_object_show(ic);
369

370
   ic = elm_icon_add(win);
371
   snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
372
   elm_image_file_set(ic, buf, NULL);
373
   elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
374
   evas_object_size_hint_align_set(ic, 0.0, 1.0);
375
   elm_box_pack_end(bx, ic);
376
   evas_object_show(ic);
377
   elm_list_item_append(li, "are", bx, NULL, NULL, NULL);
378

379
   elm_list_item_append(li, "you", NULL, NULL, NULL, NULL);
380
   list_it3 = elm_list_item_append(li, "doing", NULL, NULL, NULL, NULL);
381
   elm_list_item_append(li, "out", NULL, NULL, NULL, NULL);
382
   elm_list_item_append(li, "there", NULL, NULL, NULL, NULL);
383
   elm_list_item_append(li, "today", NULL, NULL, NULL, NULL);
384
   elm_list_item_append(li, "?", NULL, NULL, NULL, NULL);
385
   list_it4 = elm_list_item_append(li, "Here", NULL, NULL, NULL, NULL);
386
   elm_list_item_append(li, "are", NULL, NULL, NULL, NULL);
387
   elm_list_item_append(li, "some", NULL, NULL, NULL, NULL);
388
   elm_list_item_append(li, "more", NULL, NULL, NULL, NULL);
389
   elm_list_item_append(li, "items", NULL, NULL, NULL, NULL);
390
   elm_list_item_append(li, "Is this label long enough?", NULL, NULL, NULL, NULL);
391
   list_it5 = elm_list_item_append(li, "Maybe this one is even longer so we can test long long items.", NULL, NULL, NULL, NULL);
392

393
   elm_list_go(li);
394

395
   evas_object_show(li);
396

397
   tb2 = elm_table_add(win);
398
   evas_object_size_hint_weight_set(tb2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
399
   elm_win_resize_object_add(win, tb2);
400

401
   bt = elm_button_add(win);
402
   elm_object_text_set(bt, "Hello");
403
   evas_object_smart_callback_add(bt, "clicked", my_show_it, list_it1);
404
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
405
   evas_object_size_hint_align_set(bt, 0.9, 0.5);
406
   elm_table_pack(tb2, bt, 0, 0, 1, 1);
407
   evas_object_show(bt);
408

409
   bt = elm_button_add(win);
410
   elm_object_text_set(bt, "How");
411
   evas_object_smart_callback_add(bt, "clicked", my_show_it, list_it2);
412
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
413
   evas_object_size_hint_align_set(bt, 0.9, 0.5);
414
   elm_table_pack(tb2, bt, 0, 1, 1, 1);
415
   evas_object_show(bt);
416

417
   bt = elm_button_add(win);
418
   elm_object_text_set(bt, "doing");
419
   evas_object_smart_callback_add(bt, "clicked", my_show_it, list_it3);
420
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
421
   evas_object_size_hint_align_set(bt, 0.9, 0.5);
422
   elm_table_pack(tb2, bt, 0, 2, 1, 1);
423
   evas_object_show(bt);
424

425
   bt = elm_button_add(win);
426
   elm_object_text_set(bt, "Here");
427
   evas_object_smart_callback_add(bt, "clicked", my_show_it, list_it4);
428
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
429
   evas_object_size_hint_align_set(bt, 0.9, 0.5);
430
   elm_table_pack(tb2, bt, 0, 3, 1, 1);
431
   evas_object_show(bt);
432

433
   bt = elm_button_add(win);
434
   elm_object_text_set(bt, "Maybe this...");
435
   evas_object_smart_callback_add(bt, "clicked", my_show_it, list_it5);
436
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
437
   evas_object_size_hint_align_set(bt, 0.9, 0.5);
438
   elm_table_pack(tb2, bt, 0, 4, 1, 1);
439
   evas_object_show(bt);
440

441
   evas_object_show(tb2);
442

443
   evas_object_resize(win, 320 * elm_config_scale_get(),
444
                           300 * elm_config_scale_get());
445
   evas_object_show(win);
446

447
   evas_object_smart_callback_add(li, "edge,top", scroll_top, NULL);
448
   evas_object_smart_callback_add(li, "edge,bottom", scroll_bottom, NULL);
449
   evas_object_smart_callback_add(li, "clicked,right", clicked_right, NULL);
450
}
451

452
void
453
test_list_horizontal(void        *data EINA_UNUSED,
454
                     Evas_Object *obj EINA_UNUSED,
455
                     void        *event_info EINA_UNUSED)
456
{
457
   Evas_Object *win, *li, *ic, *ic2, *bx, *tb2, *bt;
458
   char buf[PATH_MAX];
459
   Elm_Object_Item *list_it1, *list_it2, *list_it3, *list_it4;
460

461
   win = elm_win_util_standard_add("list-horizontal", "List Horizontal");
462
   elm_win_autodel_set(win, EINA_TRUE);
463

464
   li = elm_list_add(win);
465
   elm_list_horizontal_set(li, EINA_TRUE);
466
   elm_list_mode_set(li, ELM_LIST_LIMIT);
467
   evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
468
   elm_win_resize_object_add(win, li);
469

470
   evas_object_smart_callback_add(li, "edge,left", scroll_left, NULL);
471
   evas_object_smart_callback_add(li, "edge,right", scroll_right, NULL);
472

473
   ic = elm_icon_add(win);
474
   snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
475
   elm_image_file_set(ic, buf, NULL);
476
   list_it1 = elm_list_item_append(li, "Hello", ic, NULL, NULL, NULL);
477
   ic = elm_icon_add(win);
478
   snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
479
   elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
480
   elm_image_file_set(ic, buf, NULL);
481
   elm_list_item_append(li, "world", ic, NULL, NULL, NULL);
482
   ic = elm_icon_add(win);
483
   elm_icon_standard_set(ic, "edit");
484
   elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
485
   elm_list_item_append(li, ".", ic, NULL, NULL, NULL);
486

487
   ic = elm_icon_add(win);
488
   elm_icon_standard_set(ic, "delete");
489
   elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
490
   ic2 = elm_icon_add(win);
491
   elm_icon_standard_set(ic2, "clock");
492
   elm_image_resizable_set(ic2, EINA_FALSE, EINA_FALSE);
493
   list_it2 = elm_list_item_append(li, "How", ic, ic2, NULL, NULL);
494

495
   bx = elm_box_add(win);
496

497
   ic = elm_icon_add(win);
498
   snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
499
   elm_image_file_set(ic, buf, NULL);
500
   elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
501
   evas_object_size_hint_align_set(ic, 0.5, 0.5);
502
   elm_box_pack_end(bx, ic);
503
   evas_object_show(ic);
504

505
   ic = elm_icon_add(win);
506
   snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
507
   elm_image_file_set(ic, buf, NULL);
508
   elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
509
   evas_object_size_hint_align_set(ic, 0.5, 0.0);
510
   elm_box_pack_end(bx, ic);
511
   evas_object_show(ic);
512

513
   elm_list_item_append(li, "are", bx, NULL, NULL, NULL);
514

515
   elm_list_item_append(li, "you", NULL, NULL, NULL, NULL);
516
   list_it3 = elm_list_item_append(li, "doing", NULL, NULL, NULL, NULL);
517
   elm_list_item_append(li, "out", NULL, NULL, NULL, NULL);
518
   elm_list_item_append(li, "there", NULL, NULL, NULL, NULL);
519
   elm_list_item_append(li, "today", NULL, NULL, NULL, NULL);
520
   elm_list_item_append(li, "?", NULL, NULL, NULL, NULL);
521

522
   list_it4 = elm_list_item_append(li, "And", NULL, NULL, NULL, NULL);
523
   elm_list_item_append(li, "here", NULL, NULL, NULL, NULL);
524
   elm_list_item_append(li, "we", NULL, NULL, NULL, NULL);
525
   elm_list_item_append(li, "are", NULL, NULL, NULL, NULL);
526
   elm_list_item_append(li, "done", NULL, NULL, NULL, NULL);
527
   elm_object_item_disabled_set(elm_list_item_append(li, "with", NULL, NULL, NULL, NULL), EINA_TRUE);
528
   elm_object_item_disabled_set(elm_list_item_append(li, "items.", NULL, NULL, NULL, NULL), EINA_TRUE);
529

530
   elm_list_go(li);
531

532
   evas_object_show(li);
533

534
   tb2 = elm_table_add(win);
535
   evas_object_size_hint_weight_set(tb2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
536
   elm_win_resize_object_add(win, tb2);
537

538
   bt = elm_button_add(win);
539
   elm_object_text_set(bt, "Hello");
540
   evas_object_smart_callback_add(bt, "clicked", my_show_it, list_it1);
541
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
542
   evas_object_size_hint_align_set(bt, 0.5, 0.9);
543
   elm_table_pack(tb2, bt, 0, 0, 1, 1);
544
   evas_object_show(bt);
545

546
   bt = elm_button_add(win);
547
   elm_object_text_set(bt, "How");
548
   evas_object_smart_callback_add(bt, "clicked", my_show_it, list_it2);
549
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
550
   evas_object_size_hint_align_set(bt, 0.5, 0.9);
551
   elm_table_pack(tb2, bt, 1, 0, 1, 1);
552
   evas_object_show(bt);
553

554
   bt = elm_button_add(win);
555
   elm_object_text_set(bt, "doing");
556
   evas_object_smart_callback_add(bt, "clicked", my_show_it, list_it3);
557
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
558
   evas_object_size_hint_align_set(bt, 0.5, 0.9);
559
   elm_table_pack(tb2, bt, 2, 0, 1, 1);
560
   evas_object_show(bt);
561

562
   bt = elm_button_add(win);
563
   elm_object_text_set(bt, "And");
564
   evas_object_smart_callback_add(bt, "clicked", my_show_it, list_it4);
565
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
566
   evas_object_size_hint_align_set(bt, 0.5, 0.9);
567
   elm_table_pack(tb2, bt, 3, 0, 1, 1);
568
   evas_object_show(bt);
569

570
   evas_object_show(tb2);
571

572
   evas_object_resize(win, 320 * elm_config_scale_get(),
573
                           300 * elm_config_scale_get());
574
   evas_object_show(win);
575
}
576

577
/***********/
578

579
static void
580
my_li2_clear(void        *data,
581
             Evas_Object *obj EINA_UNUSED,
582
             void        *event_info EINA_UNUSED)
583
{
584
   elm_list_clear(data);
585
}
586

587
static void
588
my_li2_sel(void        *data EINA_UNUSED,
589
           Evas_Object *obj,
590
           void        *event_info EINA_UNUSED)
591
{
592
   Elm_Object_Item *list_it = elm_list_selected_item_get(obj);
593
   elm_list_item_selected_set(list_it, EINA_FALSE);
594
   printf("item selected\n");
595
}
596

597
void
598
test_list2(void        *data EINA_UNUSED,
599
           Evas_Object *obj EINA_UNUSED,
600
           void        *event_info EINA_UNUSED)
601
{
602
   Evas_Object *win, *bg, *li, *ic, *ic2, *bx, *bx2, *bt;
603
   char buf[PATH_MAX];
604
   Elm_Object_Item *list_it;
605

606
   win = elm_win_add(NULL, "list2", ELM_WIN_BASIC);
607
   elm_win_title_set(win, "List 2");
608
   elm_win_autodel_set(win, EINA_TRUE);
609

610
   bg = elm_bg_add(win);
611
   snprintf(buf, sizeof(buf), "%s/images/plant_01.jpg", elm_app_data_dir_get());
612
   elm_bg_file_set(bg, buf, NULL);
613
   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
614
   elm_win_resize_object_add(win, bg);
615
   evas_object_show(bg);
616

617
   bx = elm_box_add(win);
618
   evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
619
   elm_win_resize_object_add(win, bx);
620
   evas_object_show(bx);
621

622
   li = elm_list_add(bx);
623
   evas_object_size_hint_align_set(li, EVAS_HINT_FILL, EVAS_HINT_FILL);
624
   evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
625
   elm_list_mode_set(li, ELM_LIST_LIMIT);
626

627
   ic = elm_icon_add(win);
628
   snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
629
   elm_image_file_set(ic, buf, NULL);
630
   elm_list_item_append(li, "Unselect on selected", ic, NULL, my_li2_sel, NULL);
631

632
   ic = elm_icon_add(win);
633
   snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
634
   elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
635
   elm_image_file_set(ic, buf, NULL);
636
   list_it = elm_list_item_append(li, "world", ic, NULL, NULL, NULL);
637
   elm_list_item_selected_set(list_it, EINA_TRUE);
638

639
   ic = elm_icon_add(win);
640
   elm_icon_standard_set(ic, "edit");
641
   elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
642
   elm_list_item_append(li, ".", ic, NULL, NULL, NULL);
643

644
   ic = elm_icon_add(win);
645
   elm_icon_standard_set(ic, "delete");
646
   elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
647
   ic2 = elm_icon_add(win);
648
   elm_icon_standard_set(ic2, "clock");
649
   elm_image_resizable_set(ic2, EINA_FALSE, EINA_FALSE);
650
   elm_list_item_append(li, "How", ic, ic2, NULL, NULL);
651

652
   bx2 = elm_box_add(win);
653
   elm_box_horizontal_set(bx2, EINA_TRUE);
654

655
   ic = elm_icon_add(win);
656
   snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
657
   elm_image_file_set(ic, buf, NULL);
658
   elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
659
   evas_object_size_hint_align_set(ic, 0.5, 0.5);
660
   elm_box_pack_end(bx2, ic);
661
   evas_object_show(ic);
662

663
   ic = elm_icon_add(win);
664
   snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
665
   elm_image_file_set(ic, buf, NULL);
666
   elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
667
   evas_object_size_hint_align_set(ic, 0.5, 0.0);
668
   elm_box_pack_end(bx2, ic);
669
   evas_object_show(ic);
670
   elm_list_item_append(li, "are", bx2, NULL, NULL, NULL);
671

672
   elm_list_item_append(li, "you", NULL, NULL, NULL, NULL);
673
   elm_list_item_append(li, "doing", NULL, NULL, NULL, NULL);
674
   elm_list_item_append(li, "out", NULL, NULL, NULL, NULL);
675
   elm_list_item_append(li, "there", NULL, NULL, NULL, NULL);
676
   elm_list_item_append(li, "today", NULL, NULL, NULL, NULL);
677
   elm_list_item_append(li, "?", NULL, NULL, NULL, NULL);
678
   elm_list_item_append(li, "Here", NULL, NULL, NULL, NULL);
679
   elm_list_item_append(li, "are", NULL, NULL, NULL, NULL);
680
   elm_list_item_append(li, "some", NULL, NULL, NULL, NULL);
681
   elm_list_item_append(li, "more", NULL, NULL, NULL, NULL);
682
   elm_list_item_append(li, "items", NULL, NULL, NULL, NULL);
683
   elm_list_item_append(li, "Longer label.", NULL, NULL, NULL, NULL);
684

685
   elm_list_go(li);
686

687
   elm_box_pack_end(bx, li);
688
   evas_object_show(li);
689

690
   bt = elm_button_add(bx);
691
   elm_object_text_set(bt, "Clear");
692
   evas_object_smart_callback_add(bt, "clicked", my_li2_clear, li);
693
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
694
   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
695
   elm_box_pack_end(bx, bt);
696
   evas_object_show(bt);
697

698
   evas_object_resize(win, 320 * elm_config_scale_get(),
699
                           500 * elm_config_scale_get());
700
   evas_object_show(win);
701
}
702

703
/***********/
704

705
static void
706
_bt_clicked(void        *data EINA_UNUSED,
707
            Evas_Object *obj EINA_UNUSED,
708
            void        *event_info EINA_UNUSED)
709
{
710
   printf("button was clicked\n");
711
}
712

713
static void
714
_it_clicked(void *data, Evas_Object *obj EINA_UNUSED,
715
                 void *event_info EINA_UNUSED)
716
{
717
   printf("item was clicked\n");
718
   if (!data) return;
719
   Evas_Object *li = data;
720
   Evas_Object *lb;
721
   char str[128];
722

723
   Elm_Object_Item *lit = elm_list_selected_item_get(li);
724
   if (!lit) return;
725
   sprintf(str, "%s is selected", elm_object_item_text_get(lit));
726

727
   lb = evas_object_data_get(li, "label");
728
   elm_object_text_set(lb, str);
729
}
730

731
void
732
test_list3(void        *data EINA_UNUSED,
733
           Evas_Object *obj EINA_UNUSED,
734
           void        *event_info EINA_UNUSED)
735
{
736
   Evas_Object *win, *li, *ic, *ic2, *bx;
737
   char buf[PATH_MAX];
738

739
   win = elm_win_util_standard_add("list3", "List 3");
740
   elm_win_autodel_set(win, EINA_TRUE);
741

742
   li = elm_list_add(win);
743
   evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
744
   elm_win_resize_object_add(win, li);
745
   elm_list_mode_set(li, ELM_LIST_COMPRESS);
746

747
   ic = elm_icon_add(win);
748
   snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
749
   elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
750
   elm_image_file_set(ic, buf, NULL);
751
   ic2 = elm_button_add(win);
752
   elm_object_text_set(ic2, "Click me");
753
   evas_object_smart_callback_add(ic2, "clicked", _bt_clicked, NULL);
754
   evas_object_propagate_events_set(ic2, EINA_FALSE);
755
   elm_list_item_append(li, "Hello", ic, ic2, _it_clicked, NULL);
756

757
   ic = elm_icon_add(win);
758
   snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
759
   elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
760
   elm_image_file_set(ic, buf, NULL);
761
   ic2 = elm_button_add(win);
762
   elm_object_text_set(ic2, "Click me");
763
   evas_object_smart_callback_add(ic2, "clicked", _bt_clicked, NULL);
764
   elm_list_item_append(li, "world", ic, ic2, _it_clicked, NULL);
765

766
   ic = elm_icon_add(win);
767
   elm_icon_standard_set(ic, "edit");
768
   elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
769
   elm_list_item_append(li, ".", ic, NULL, NULL, NULL);
770

771
   ic = elm_icon_add(win);
772
   elm_icon_standard_set(ic, "delete");
773
   elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
774
   ic2 = elm_icon_add(win);
775
   elm_icon_standard_set(ic2, "clock");
776
   elm_image_resizable_set(ic2, EINA_FALSE, EINA_FALSE);
777
   elm_list_item_append(li, "How", ic, ic2, NULL, NULL);
778

779
   bx = elm_box_add(win);
780
   elm_box_horizontal_set(bx, EINA_TRUE);
781

782
   ic = elm_icon_add(win);
783
   snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
784
   elm_image_file_set(ic, buf, NULL);
785
   elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
786
   evas_object_size_hint_align_set(ic, 0.5, 0.5);
787
   elm_box_pack_end(bx, ic);
788
   evas_object_show(ic);
789

790
   ic = elm_icon_add(win);
791
   snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
792
   elm_image_file_set(ic, buf, NULL);
793
   elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
794
   evas_object_size_hint_align_set(ic, 0.5, 0.0);
795
   elm_box_pack_end(bx, ic);
796
   evas_object_show(ic);
797

798
   ic = elm_icon_add(win);
799
   snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
800
   elm_image_file_set(ic, buf, NULL);
801
   elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
802
   evas_object_size_hint_align_set(ic, 0.0, EVAS_HINT_EXPAND);
803
   elm_box_pack_end(bx, ic);
804
   evas_object_show(ic);
805

806
   elm_list_item_append(li, "are", bx, NULL, NULL, NULL);
807
   elm_list_item_append(li, "you", NULL, NULL, NULL, NULL);
808
   elm_list_item_append(li, "doing", NULL, NULL, NULL, NULL);
809
   elm_list_item_append(li, "out", NULL, NULL, NULL, NULL);
810
   elm_list_item_append(li, "there", NULL, NULL, NULL, NULL);
811
   elm_list_item_append(li, "today", NULL, NULL, NULL, NULL);
812
   elm_list_item_append(li, "?", NULL, NULL, NULL, NULL);
813
   elm_list_item_append(li, "Here", NULL, NULL, NULL, NULL);
814
   elm_list_item_append(li, "are", NULL, NULL, NULL, NULL);
815
   elm_list_item_append(li, "some", NULL, NULL, NULL, NULL);
816
   elm_list_item_append(li, "more", NULL, NULL, NULL, NULL);
817
   elm_list_item_append(li, "items", NULL, NULL, NULL, NULL);
818
   elm_list_item_append(li, "Is this label long enough?", NULL, NULL, NULL, NULL);
819
   elm_list_item_append(li, "Maybe this one is even longer so we can test long long items.", NULL, NULL, NULL, NULL);
820

821
   elm_list_go(li);
822

823
   evas_object_show(li);
824

825
   evas_object_resize(win, 320 * elm_config_scale_get(),
826
                           300 * elm_config_scale_get());
827
   evas_object_show(win);
828
}
829

830
///////////////////////////////////////////////////////////////////////////////////////
831

832
struct Pginfo
833
{
834
   Evas_Object *naviframe, *win;
835
};
836

837
static void
838
test_list4_back_cb(void        *data,
839
                   Evas_Object *obj EINA_UNUSED,
840
                   void        *event_info EINA_UNUSED)
841
{
842
   struct Pginfo *info = data;
843
   if (!info) return;
844

845
   elm_naviframe_item_pop(info->naviframe);
846
}
847

848
static void
849
test_list4_swipe(void        *data,
850
                 Evas_Object *obj EINA_UNUSED,
851
                 void        *event_info)
852
{
853
   Evas_Object *box, *entry, *button;
854
   struct Pginfo *info = data;
855
   char *item_data;
856
   if ((!event_info) || (!data)) return;
857

858
   item_data = elm_object_item_data_get(event_info);
859

860
   box = elm_box_add(info->win);
861
   elm_box_horizontal_set(box, EINA_FALSE);
862
   elm_box_homogeneous_set(box, EINA_FALSE);
863
   evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
864
   evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
865
   evas_object_show(box);
866

867
   entry = elm_entry_add(info->win);
868
   elm_entry_scrollable_set(entry, EINA_TRUE);
869
   elm_entry_editable_set(entry, EINA_FALSE);
870
   elm_object_text_set(entry, item_data);
871
   evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
872
   evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
873
   evas_object_show(entry);
874

875
   button = elm_button_add(info->win);
876
   elm_object_text_set(button, "back");
877
   evas_object_size_hint_weight_set(button, EVAS_HINT_EXPAND, 0);
878
   evas_object_size_hint_align_set(button, EVAS_HINT_FILL, 0);
879
   evas_object_smart_callback_add(button, "clicked", test_list4_back_cb, info);
880
   evas_object_show(button);
881

882
   elm_box_pack_start(box, entry);
883
   elm_box_pack_end(box, button);
884

885
   elm_naviframe_item_simple_push(info->naviframe, box);
886
}
887

888
void
889
test_list4(void        *data EINA_UNUSED,
890
           Evas_Object *obj EINA_UNUSED,
891
           void        *event_info EINA_UNUSED)
892
{
893
   Evas_Object *win, *li, *ic, *ic2, *naviframe;
894
   static struct Pginfo info = {NULL, NULL};
895
   char buf[PATH_MAX];
896

897
   win = elm_win_util_standard_add("list4", "List 4");
898
   elm_win_autodel_set(win, EINA_TRUE);
899
   info.win = win;
900

901
   naviframe = elm_naviframe_add(win);
902
   evas_object_size_hint_weight_set(naviframe, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
903
   elm_win_resize_object_add(win, naviframe);
904
   evas_object_show(naviframe);
905
   info.naviframe = naviframe;
906

907
   li = elm_list_add(win);
908
   evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
909
   elm_list_mode_set(li, ELM_LIST_COMPRESS);
910
   evas_object_smart_callback_add(li, "swipe", test_list4_swipe, &info);
911
   elm_naviframe_item_simple_push(naviframe, li);
912

913
   static char pf_data[] = "Pink Floyd were formed in 1965, and originally consisted of university"                       \
914
                           "students Roger Waters, Nick Mason, Richard Wright, and Syd Barrett. The group were a popular" \
915
                           "fixture on London's underground music scene, and under Barrett's leadership released two "    \
916
                           "charting singles, \"Arnold Layne\" and \"See Emily Play\", and a successful debut album, "    \
917
                           "ThePiper at the Gates of Dawn. In 1968, guitarist and singer David Gilmour joined the "       \
918
                           "line-up. Barrett was soon removed, due to his increasingly erratic behaviour. Following "     \
919
                           "Barrett's departure, bass player and singer Roger Waters became the band's lyricist and "     \
920
                           "conceptual leader, with Gilmour assuming lead guitar and much of the vocals. With this "      \
921
                           "line-up, Floyd went on to achieve worldwide critical and commercial success with the "        \
922
                           "conceptalbums The Dark Side of the Moon, Wish You Were Here, Animals, and The Wall.";
923
   ic = elm_icon_add(win);
924
   snprintf(buf, sizeof(buf), "%s/images/mystrale.jpg", elm_app_data_dir_get());
925
   elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
926
   elm_image_file_set(ic, buf, NULL);
927
   elm_list_item_append(li, "Pink Floyd", ic, NULL, NULL, &pf_data);
928

929
   static char ds_data[] = "Dire Straits were a British rock band, formed by Mark Knopfler "                          \
930
                           "(lead vocals and lead guitar), his younger brother David Knopfler (rhythm guitar and "    \
931
                           "backing vocals), John Illsley (bass guitar and backing vocals), and Pick Withers (drums " \
932
                           "and percussion), and managed by Ed Bicknell, active between 1977 and 1995. Although the " \
933
                           "band was formed in an era when punk rock was at the forefront, Dire Straits played a more "
934
                           "bluesy style, albeit with a stripped-down sound that appealed to audiences weary of the "   \
935
                           "overproduced stadium rock of the 1970s.[citation needed] In their early days, Mark and "    \
936
                           "David requested that pub owners turn down their sound so that patrons could converse "      \
937
                           "while the band played, an indication of their unassuming demeanor. Despite this oddly "     \
938
                           "self-effacing approach to rock and roll, Dire Straits soon became hugely successful, with " \
939
                           "their first album going multi-platinum globally.";
940
   ic = elm_icon_add(win);
941
   snprintf(buf, sizeof(buf), "%s/images/mystrale_2.jpg", elm_app_data_dir_get());
942
   elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
943
   elm_image_file_set(ic, buf, NULL);
944
   elm_list_item_append(li, "Dire Straits", ic, NULL, NULL, &ds_data);
945

946
   static char uh_data[] = "Uriah Heep are an English hard rock band. The band released several "                       \
947
                           "commercially successful albums in the 1970s such as Uriah Heep Live (1973), but their "     \
948
                           "audience declined by the 1980s, to the point where they became essentially a cult band in " \
949
                           "the United States and United Kingdom. Uriah Heep maintain a significant following in "      \
950
                           "Germany, the Netherlands, Scandinavia, the Balkans, Japan and Russia, where they still "    \
951
                           "perform at stadium-sized venues.";
952
   ic = elm_icon_add(win);
953
   snprintf(buf, sizeof(buf), "%s/images/icon_17.png", elm_app_data_dir_get());
954
   elm_image_file_set(ic, buf, NULL);
955
   elm_list_item_append(li, "Uriah Heep", ic, NULL, NULL, &uh_data);
956

957
   static char r_data[] = "Rush is a Canadian rock band formed in August 1968, in the Willowdale "                       \
958
                          "neighbourhood of Toronto, Ontario. The band is composed of bassist, keyboardist, and lead "   \
959
                          "vocalist Geddy Lee, guitarist Alex Lifeson, and drummer and lyricist Neil Peart. The band "   \
960
                          "and its membership went through a number of re-configurations between 1968 and 1974, "        \
961
                          "achieving their current form when Peart replaced original drummer John Rutsey in July 1974, " \
962
                          "two weeks before the group's first United States tour.";
963
   ic = elm_icon_add(win);
964
   snprintf(buf, sizeof(buf), "%s/images/icon_21.png", elm_app_data_dir_get());
965
   elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
966
   elm_image_file_set(ic, buf, NULL);
967
   ic2 = elm_icon_add(win);
968
   elm_icon_standard_set(ic2, "clock");
969
   elm_image_resizable_set(ic2, EINA_FALSE, EINA_FALSE);
970
   elm_list_item_append(li, "Rush", ic, ic2, NULL, &r_data);
971

972
   elm_list_go(li);
973

974
   evas_object_show(li);
975
   evas_object_resize(win, 320 * elm_config_scale_get(),
976
                           300 * elm_config_scale_get());
977
   evas_object_show(win);
978
}
979

980
/////////////////////////////////////////////////////////////////////////////////////////
981
struct list5_data_cb
982
{
983
   Evas_Object *win, *list;
984
};
985

986
static void
987
test_list5_item_del(void        *data,
988
                    Evas_Object *obj EINA_UNUSED,
989
                    void        *event_info EINA_UNUSED)
990
{
991
   elm_object_item_del(data);
992
}
993

994
static void
995
test_list5_swipe(void        *data EINA_UNUSED,
996
                 Evas_Object *obj EINA_UNUSED,
997
                 void        *event_info)
998
{
999
   Evas_Object *button;
1000
   struct list5_data_cb *info = elm_object_item_data_get(event_info);
1001

1002
   if (elm_object_item_part_content_get(event_info, "end")) return;
1003

1004
   button = elm_button_add(info->win);
1005
   elm_object_text_set(button, "delete");
1006
   evas_object_propagate_events_set(button, EINA_FALSE);
1007
   evas_object_smart_callback_add(button, "clicked", test_list5_item_del,
1008
                                  event_info);
1009
   elm_object_item_part_content_set(event_info, "end", button);
1010
   elm_object_item_part_text_set(event_info, "default", "Enlightenment");
1011
}
1012

1013
void
1014
test_list5(void        *data EINA_UNUSED,
1015
           Evas_Object *obj EINA_UNUSED,
1016
           void        *event_info EINA_UNUSED)
1017
{
1018
   Evas_Object *win, *li;
1019
   static struct list5_data_cb info;
1020

1021
   win = elm_win_util_standard_add("list5", "List 5");
1022
   elm_win_autodel_set(win, EINA_TRUE);
1023
   info.win = win;
1024

1025
   li = elm_list_add(win);
1026
   evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1027
   elm_list_mode_set(li, ELM_LIST_COMPRESS);
1028
   evas_object_smart_callback_add(li, "swipe", test_list5_swipe, NULL);
1029
   elm_win_resize_object_add(win, li);
1030
   evas_object_show(li);
1031
   info.list = li;
1032

1033
   elm_list_item_append(li, "Network", NULL, NULL, NULL, &info);
1034
   elm_list_item_append(li, "Audio", NULL, NULL, NULL, &info);
1035

1036
   elm_list_go(li);
1037
   evas_object_resize(win, 320 * elm_config_scale_get(),
1038
                           300 * elm_config_scale_get());
1039
   evas_object_show(win);
1040
}
1041

1042
static void
1043
_first_bt_clicked(void *data, Evas_Object *obj EINA_UNUSED,
1044
                  void *event_info EINA_UNUSED)
1045
{
1046
   char str[128];
1047
   Evas_Object *li = data, *lb;
1048
   Elm_Object_Item *lit = elm_list_first_item_get(li);
1049
   if (!lit) return;
1050

1051
   sprintf(str, "%s is selected", elm_object_item_text_get(lit));
1052
   elm_list_item_bring_in(lit);
1053
   elm_list_item_selected_set(lit, EINA_TRUE);
1054

1055
   lb = evas_object_data_get(li, "label");
1056
   elm_object_text_set(lb, str);
1057
}
1058

1059
static void
1060
_prev_bt_clicked(void *data, Evas_Object *obj EINA_UNUSED,
1061
                 void *event_info EINA_UNUSED)
1062
{
1063
   char str[128];
1064
   Evas_Object *li = data, *lb;
1065

1066
   Elm_Object_Item *lit = elm_list_selected_item_get(li);
1067
   if (!lit) return;
1068
   lit = elm_list_item_prev(lit);
1069
   if (!lit) return;
1070

1071
   sprintf(str, "%s is selected", elm_object_item_text_get(lit));
1072
   elm_list_item_bring_in(lit);
1073
   elm_list_item_selected_set(lit, EINA_TRUE);
1074

1075
   lb = evas_object_data_get(li, "label");
1076
   elm_object_text_set(lb, str);
1077
}
1078

1079
static void
1080
_next_bt_clicked(void *data, Evas_Object *obj EINA_UNUSED,
1081
                 void *event_info EINA_UNUSED)
1082
{
1083
   char str[128];
1084
   Evas_Object *li = data, *lb;
1085

1086
   Elm_Object_Item *lit = elm_list_selected_item_get(li);
1087
   if (!lit) return;
1088
   lit = elm_list_item_next(lit);
1089
   if (!lit) return;
1090

1091
   sprintf(str, "%s is selected", elm_object_item_text_get(lit));
1092
   elm_list_item_bring_in(lit);
1093
   elm_list_item_selected_set(lit, EINA_TRUE);
1094

1095
   lb = evas_object_data_get(li, "label");
1096
   elm_object_text_set(lb, str);
1097
}
1098

1099
static void
1100
_last_bt_clicked(void *data, Evas_Object *obj EINA_UNUSED,
1101
                 void *event_info EINA_UNUSED)
1102
{
1103
   char str[128];
1104
   Evas_Object *li = data, *lb;
1105
   Elm_Object_Item *lit = elm_list_last_item_get(li);
1106
   if (!lit) return;
1107

1108
   sprintf(str, "%s is selected", elm_object_item_text_get(lit));
1109
   elm_list_item_bring_in(lit);
1110
   elm_list_item_selected_set(lit, EINA_TRUE);
1111

1112
   lb = evas_object_data_get(li, "label");
1113
   elm_object_text_set(lb, str);
1114
}
1115

1116
void
1117
test_list6(void        *data EINA_UNUSED,
1118
           Evas_Object *obj EINA_UNUSED,
1119
           void        *event_info EINA_UNUSED)
1120
{
1121
   Evas_Object *win, *gd, *bt, *li, *lb;
1122

1123
   win = elm_win_util_standard_add("list6", "List 6");
1124
   elm_win_autodel_set(win, EINA_TRUE);
1125

1126
   gd = elm_grid_add(win);
1127
   elm_grid_size_set(gd, 100, 100);
1128
   evas_object_size_hint_weight_set(gd, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1129
   elm_win_resize_object_add(win, gd);
1130

1131
   li = elm_list_add(win);
1132
   evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1133
   elm_list_mode_set(li, ELM_LIST_COMPRESS);
1134
   elm_grid_pack(gd, li, 4, 4, 92, 72);
1135
   evas_object_show(li);
1136

1137
   elm_list_item_append(li, "Eina", NULL, NULL, _it_clicked, li);
1138
   elm_list_item_append(li, "Eet", NULL, NULL, _it_clicked, li);
1139
   elm_list_item_append(li, "Evas", NULL, NULL, _it_clicked, li);
1140
   elm_list_item_append(li, "Ecore", NULL, NULL, _it_clicked, li);
1141
   elm_list_item_append(li, "Embryo", NULL, NULL, _it_clicked, li);
1142
   elm_list_item_append(li, "Edje", NULL, NULL, _it_clicked, li);
1143
   elm_list_item_append(li, "Efreet", NULL, NULL, _it_clicked, li);
1144
   elm_list_item_append(li, "E_dbus", NULL, NULL, _it_clicked, li);
1145
   elm_list_item_append(li, "Eeze", NULL, NULL, _it_clicked, li);
1146
   elm_list_item_append(li, "Expedite", NULL, NULL, _it_clicked, li);
1147
   elm_list_item_append(li, "Emotion", NULL, NULL, _it_clicked, li);
1148
   elm_list_item_append(li, "Ethumb", NULL, NULL, _it_clicked, li);
1149
   elm_list_item_append(li, "Elementary", NULL, NULL, _it_clicked, li);
1150
   elm_list_go(li);
1151

1152
   bt = elm_button_add(win);
1153
   elm_object_text_set(bt, "First");
1154
   evas_object_smart_callback_add(bt, "clicked", _first_bt_clicked, li);
1155
   elm_grid_pack(gd, bt, 4, 80, 20, 10);
1156
   evas_object_show(bt);
1157

1158
   bt = elm_button_add(win);
1159
   elm_object_text_set(bt, "Prev");
1160
   evas_object_smart_callback_add(bt, "clicked", _prev_bt_clicked, li);
1161
   elm_grid_pack(gd, bt, 28, 80, 20, 10);
1162
   evas_object_show(bt);
1163

1164
   bt = elm_button_add(win);
1165
   elm_object_text_set(bt, "Next");
1166
   evas_object_smart_callback_add(bt, "clicked", _next_bt_clicked, li);
1167
   elm_grid_pack(gd, bt, 52, 80, 20, 10);
1168
   evas_object_show(bt);
1169

1170
   bt = elm_button_add(win);
1171
   elm_object_text_set(bt, "Last");
1172
   evas_object_smart_callback_add(bt, "clicked", _last_bt_clicked, li);
1173
   elm_grid_pack(gd, bt, 76, 80, 20, 10);
1174
   evas_object_show(bt);
1175

1176
   lb = elm_label_add(win);
1177
   elm_object_text_set(lb, "Nothing is selected");
1178
   elm_grid_pack(gd, lb, 4, 90, 92, 10);
1179
   evas_object_show(lb);
1180

1181
   evas_object_data_set(li, "label", lb);
1182

1183
   evas_object_show(gd);
1184
   evas_object_resize(win, 480 * elm_config_scale_get(),
1185
                           480 * elm_config_scale_get());
1186
   evas_object_show(win);
1187
}
1188

1189
static void
1190
_it_clicked_cb(void *data EINA_UNUSED, Evas_Object *li,
1191
                 void *event_info EINA_UNUSED)
1192
{
1193
   Elm_Object_Item *lit = elm_list_selected_item_get(li);
1194
   printf("Item clicked. %s is selected\n", elm_object_item_text_get(lit));
1195
}
1196

1197
void
1198
test_list7(void        *data EINA_UNUSED,
1199
           Evas_Object *obj EINA_UNUSED,
1200
           void        *event_info EINA_UNUSED)
1201
{
1202
   Evas_Object *win, *bg, *li;
1203
   char buf[PATH_MAX];
1204

1205
   win = elm_win_add(NULL, "list7", ELM_WIN_BASIC);
1206
   elm_win_title_set(win, "List Always Select Mode");
1207
   elm_win_autodel_set(win, EINA_TRUE);
1208

1209
   bg = elm_bg_add(win);
1210
   snprintf(buf, sizeof(buf), "%s/images/plant_01.jpg", elm_app_data_dir_get());
1211
   elm_bg_file_set(bg, buf, NULL);
1212
   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1213
   elm_win_resize_object_add(win, bg);
1214
   evas_object_show(bg);
1215

1216
   li = elm_list_add(win);
1217
   evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1218
   elm_win_resize_object_add(win, li);
1219
   elm_list_select_mode_set(li, ELM_OBJECT_SELECT_MODE_ALWAYS);
1220

1221
   elm_list_item_append(li, "Items", NULL, NULL, _it_clicked_cb, NULL);
1222
   elm_list_item_append(li, "callbacks", NULL, NULL, _it_clicked_cb, NULL);
1223
   elm_list_item_append(li, "should be called", NULL, NULL, _it_clicked_cb,
1224
                        NULL);
1225
   elm_list_item_append(li, "only once, each time", NULL, NULL, _it_clicked_cb,
1226
                        NULL);
1227
   elm_list_item_append(li, "an item is clicked.", NULL, NULL, _it_clicked_cb,
1228
                        NULL);
1229
   elm_list_item_append(li, "Including already", NULL, NULL, _it_clicked_cb,
1230
                        NULL);
1231
   elm_list_item_append(li, "selected ones.", NULL, NULL, _it_clicked_cb, NULL);
1232

1233
   elm_list_go(li);
1234
   evas_object_show(li);
1235

1236
   evas_object_resize(win, 320 * elm_config_scale_get(),
1237
                           300 * elm_config_scale_get());
1238
   evas_object_show(win);
1239
}
1240

1241
static const char *_list_focus_names[] = {"None", "Square", "Button", "Check", "Box"};
1242
static const int _list_focus_combo[] = { 1, 0, 2, 33, 43, 44, 10, 30, 22, 11, 10, -1 };
1243

1244
static Evas_Object *
1245
test_list_focus_content_get(Evas_Object *obj, unsigned type, Eina_Bool horiz)
1246
{
1247
   Evas_Object *cnt = NULL;
1248

1249
   switch(type)
1250
     {
1251
      case 1:
1252
         cnt = elm_bg_add(obj);
1253
         evas_object_color_set(cnt, 128, 18, 128, 255);
1254
         evas_object_size_hint_min_set(cnt, 50, 50);
1255
         break;
1256
      case 2:
1257
         cnt = elm_button_add(obj);
1258
         break;
1259
      case 3:
1260
         cnt = elm_check_add(obj);
1261
         break;
1262
      case 4:
1263
         cnt = elm_box_add(obj);
1264
         elm_box_horizontal_set(cnt, !horiz);
1265
         evas_object_size_hint_align_set(cnt, EVAS_HINT_FILL, EVAS_HINT_FILL);
1266
         elm_box_pack_end(cnt, test_list_focus_content_get(obj, 2, horiz));
1267
         elm_box_pack_end(cnt, test_list_focus_content_get(obj, 3, horiz));
1268
         elm_box_pack_end(cnt, test_list_focus_content_get(obj, 2, horiz));
1269
         break;
1270
      default:
1271
         break;
1272

1273
     }
1274

1275
   if (cnt)
1276
   {
1277
       evas_object_size_hint_weight_set(cnt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1278
       evas_object_show(cnt);
1279
   }
1280

1281
   return cnt;
1282
}
1283

1284
static void
1285
test_list_focus_focus_on_selection_set(Evas_Object *gl,
1286
                                       Evas_Object *chk, Eina_Bool focus)
1287
{
1288
    elm_list_focus_on_selection_set(gl, focus);
1289
    elm_check_state_set(chk, focus);
1290
    printf("list_focus_on_selection = %s\n", (focus) ? "true" : "false");
1291
}
1292

1293
static void
1294
test_list_focus_focus_check_changed(void *data, Evas_Object *obj,
1295
                                    void *event_info  EINA_UNUSED)
1296
{
1297
   Eina_Bool nextstate = !elm_list_focus_on_selection_get(data);
1298
   test_list_focus_focus_on_selection_set(data, obj, nextstate);
1299
}
1300

1301
static void
1302
test_list_focus_win_auto_focus_enable_check_changed(void *data EINA_UNUSED,
1303
                                                    Evas_Object *obj,
1304
                                                    void *event_info EINA_UNUSED)
1305
{
1306
   elm_config_window_auto_focus_enable_set(elm_check_state_get(obj));
1307
}
1308

1309
static void
1310
test_list_focus_win_auto_focus_animate_check_changed(void *data EINA_UNUSED,
1311
                                                     Evas_Object *obj,
1312
                                                     void *event_info EINA_UNUSED)
1313
{
1314
   elm_config_window_auto_focus_animate_set(elm_check_state_get(obj));
1315
}
1316

1317
static void
1318
test_list_focus_focus_highlight_check_changed(void *data, Evas_Object *obj,
1319
                                              void *event_info EINA_UNUSED)
1320
{
1321
   elm_win_focus_highlight_enabled_set((Evas_Object *)data,
1322
                                       elm_check_state_get(obj));
1323
}
1324

1325
static void
1326
test_list_focus_focus_animate_check_changed(void *data, Evas_Object *obj,
1327
                                            void *event_info EINA_UNUSED)
1328
{
1329
   elm_win_focus_highlight_animate_set((Evas_Object *)data,
1330
                                       elm_check_state_get(obj));
1331
}
1332

1333
static void
1334
test_list_focus_focus_move_policy_changed(void *data EINA_UNUSED,
1335
                                          Evas_Object *obj,
1336
                                          void *event_info EINA_UNUSED)
1337
{
1338
   int val = elm_radio_value_get(obj);
1339

1340
   if (val == 0)
1341
     elm_config_focus_move_policy_set(ELM_FOCUS_MOVE_POLICY_CLICK);
1342
   else if (val == 1)
1343
     elm_config_focus_move_policy_set(ELM_FOCUS_MOVE_POLICY_IN);
1344
}
1345

1346
static void
1347
test_list_focus_item_loop_enable_check_changed(void *data, Evas_Object *obj,
1348
                                               void *event_info  EINA_UNUSED)
1349
{
1350
   Evas_Object *li = data;
1351
   elm_object_scroll_item_loop_enabled_set(li, elm_check_state_get(obj));
1352
}
1353

1354
static void
1355
test_list_focus_item_select_on_focus_disable_changed(void *data EINA_UNUSED, Evas_Object *obj,
1356
                                                     void *event_info  EINA_UNUSED)
1357
{
1358
   elm_config_item_select_on_focus_disabled_set(elm_check_state_get(obj));
1359
}
1360

1361
static void
1362
test_list_first_item_focus_on_first_focus_in_cb(void *data EINA_UNUSED, Evas_Object *obj,
1363
                                                void *event_info  EINA_UNUSED)
1364
{
1365
   elm_config_first_item_focus_on_first_focusin_set(elm_check_state_get(obj));
1366
}
1367

1368
static void
1369
_item_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
1370
{
1371
   printf("%s: %p\n", (char *)data, event_info);
1372
}
1373

1374
static void
1375
_list_key_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED,
1376
                  Evas_Object *obj EINA_UNUSED, void *event_info)
1377
{
1378
   Evas_Event_Key_Down *ev = event_info;
1379
   printf("\n=== Key Down : %s ===\n", ev->keyname);
1380
}
1381

1382
static Ecore_Timer *timer = NULL;
1383
static void
1384
_test_list_focus_win_del_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED,
1385
                            Evas_Object *obj EINA_UNUSED,
1386
                            void *event_info EINA_UNUSED)
1387
{
1388
   ecore_timer_del(timer);
1389
   timer = NULL;
1390
}
1391

1392
static Eina_Bool
1393
_focus_timer_cb(void *data)
1394
{
1395
   elm_object_item_focus_set(data, EINA_TRUE);
1396
   timer = NULL;
1397

1398
   return ECORE_CALLBACK_CANCEL;
1399
}
1400

1401
static Eina_Bool
1402
_select_timer_cb(void *data)
1403
{
1404
   elm_list_item_selected_set(data, EINA_TRUE);
1405
   timer = NULL;
1406

1407
   return ECORE_CALLBACK_CANCEL;
1408
}
1409

1410
static void
1411
_focus_btn_cb(void *data, Evas_Object *obj EINA_UNUSED,
1412
              void *event_info EINA_UNUSED)
1413
{
1414
   ecore_timer_del(timer);
1415
   timer = ecore_timer_add(1.5, _focus_timer_cb, data);
1416
}
1417

1418
static void
1419
_sel_btn_cb(void *data, Evas_Object *obj EINA_UNUSED,
1420
            void *event_info EINA_UNUSED)
1421
{
1422
   ecore_timer_del(timer);
1423
   timer = ecore_timer_add(1.5, _select_timer_cb, data);
1424
}
1425

1426
static void
1427
_dis_btn_cb(void *data, Evas_Object *obj EINA_UNUSED,
1428
            void *event_info EINA_UNUSED)
1429
{
1430
   elm_object_item_disabled_set(data, EINA_TRUE);
1431
}
1432

1433
static void
1434
_focus_button_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED,
1435
                         void *event_info EINA_UNUSED)
1436
{
1437
   printf("Button clicked: %s\n", (char *)data);
1438
}
1439

1440
static void
1441
_test_list_focus(const char *name, const char *title, Eina_Bool horiz)
1442
{
1443
   Evas_Object *win, *li, *btn, *bx, *bx2, *fr, *bx_opt, *chk, *bx_btn;
1444
   Evas_Object *btn_focus, *btn_sel, *btn_dis, *bx_mv, *rd, *rdg;
1445
   unsigned int lhand, rhand, idx;
1446
   char buf[256];
1447
   Elm_Object_Item *it = NULL, *it_0 = NULL, *it_3 = NULL;
1448

1449
   win = elm_win_util_standard_add(name, title);
1450
   elm_win_autodel_set(win, EINA_TRUE);
1451
   evas_object_event_callback_add(win, EVAS_CALLBACK_DEL,
1452
                                  _test_list_focus_win_del_cb, NULL);
1453

1454
   elm_config_window_auto_focus_enable_set(EINA_TRUE);
1455
   elm_config_window_auto_focus_animate_set(EINA_TRUE);
1456
   elm_win_focus_highlight_enabled_set(win, EINA_FALSE);
1457
   elm_win_focus_highlight_animate_set(win, EINA_FALSE);
1458

1459
   bx = elm_box_add(win);
1460
   evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1461
   elm_win_resize_object_add(win, bx);
1462
   evas_object_show(bx);
1463

1464
   btn = elm_button_add(bx);
1465
   elm_object_text_set(btn, "Up");
1466
   elm_box_pack_end(bx, btn);
1467
   evas_object_smart_callback_add(btn, "clicked",
1468
                                  _focus_button_clicked_cb, "Up");
1469
   evas_object_show(btn);
1470

1471
   bx2 = elm_box_add(bx);
1472
   elm_box_horizontal_set(bx2, EINA_TRUE);
1473
   evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1474
   evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
1475
   elm_box_pack_end(bx, bx2);
1476
   evas_object_show(bx2);
1477

1478
   btn = elm_button_add(bx2);
1479
   elm_object_text_set(btn, "Left");
1480
   elm_box_pack_end(bx2, btn);
1481
   evas_object_smart_callback_add(btn, "clicked",
1482
                                  _focus_button_clicked_cb, "Left");
1483
   evas_object_show(btn);
1484

1485
   li = elm_list_add(win);
1486
   evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1487
   evas_object_size_hint_align_set(li, EVAS_HINT_FILL, EVAS_HINT_FILL);
1488
   elm_list_horizontal_set(li, horiz);
1489
   elm_list_select_mode_set(li, ELM_OBJECT_SELECT_MODE_ALWAYS);
1490
   elm_box_pack_end(bx2, li);
1491
   evas_object_show(li);
1492
   evas_object_smart_callback_add(li, "item,focused", _item_cb, "item,focused");
1493
   evas_object_smart_callback_add(li, "item,unfocused", _item_cb, "item,unfocused");
1494
   evas_object_smart_callback_add(li, "selected", _item_cb, "selected");
1495
   evas_object_smart_callback_add(li, "unselected", _item_cb, "unselected");
1496
   evas_object_smart_callback_add(li, "activated", _item_cb, "activated");
1497
   evas_object_smart_callback_add(li, "highlighted", _item_cb, "highlighted");
1498
   evas_object_smart_callback_add(li, "unhighlighted", _item_cb, "unhighlighted");
1499
   evas_object_event_callback_add(li, EVAS_CALLBACK_KEY_DOWN, _list_key_down_cb, NULL);
1500

1501
   btn = elm_button_add(bx2);
1502
   elm_object_text_set(btn, "Right");
1503
   elm_box_pack_end(bx2, btn);
1504
   evas_object_smart_callback_add(btn, "clicked",
1505
                                  _focus_button_clicked_cb, "Right");
1506
   evas_object_show(btn);
1507

1508
   btn = elm_button_add(bx);
1509
   elm_object_text_set(btn, "Down");
1510
   elm_box_pack_end(bx, btn);
1511
   evas_object_smart_callback_add(btn, "clicked",
1512
                                  _focus_button_clicked_cb, "Down");
1513
   evas_object_show(btn);
1514

1515
   // Options
1516
   fr = elm_frame_add(bx);
1517
   elm_object_text_set(fr, "Options");
1518
   evas_object_size_hint_weight_set(fr, EVAS_HINT_EXPAND, 0.0);
1519
   evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL);
1520
   elm_box_pack_end(bx, fr);
1521
   evas_object_show(fr);
1522

1523
   bx_opt = elm_box_add(fr);
1524
   elm_box_horizontal_set(bx_opt, EINA_TRUE);
1525
   elm_object_content_set(fr, bx_opt);
1526
   evas_object_show(bx_opt);
1527

1528
   chk = elm_check_add(bx_opt);
1529
   elm_object_text_set(chk, "Window Auto Focus Enable");
1530
   elm_check_state_set(chk, EINA_TRUE);
1531
   evas_object_size_hint_weight_set(chk, EVAS_HINT_EXPAND, 0.0);
1532
   evas_object_smart_callback_add(chk, "changed",
1533
                                  test_list_focus_win_auto_focus_enable_check_changed,
1534
                                  NULL);
1535
   elm_box_pack_end(bx_opt, chk);
1536
   evas_object_show(chk);
1537

1538
   chk = elm_check_add(bx_opt);
1539
   elm_object_text_set(chk, "Window Auto Focus Animate");
1540
   elm_check_state_set(chk, EINA_TRUE);
1541
   evas_object_size_hint_weight_set(chk, EVAS_HINT_EXPAND, 0.0);
1542
   evas_object_smart_callback_add(chk, "changed",
1543
                                  test_list_focus_win_auto_focus_animate_check_changed,
1544
                                  NULL);
1545
   elm_box_pack_end(bx_opt, chk);
1546
   evas_object_show(chk);
1547

1548
   chk = elm_check_add(bx_opt);
1549
   elm_object_text_set(chk, "Focus Highlight");
1550
   elm_check_state_set(chk, EINA_FALSE);
1551
   evas_object_size_hint_weight_set(chk, EVAS_HINT_EXPAND, 0.0);
1552
   evas_object_smart_callback_add(chk, "changed",
1553
                                  test_list_focus_focus_highlight_check_changed,
1554
                                  win);
1555
   elm_box_pack_end(bx_opt, chk);
1556
   evas_object_show(chk);
1557

1558
   chk = elm_check_add(bx_opt);
1559
   elm_object_text_set(chk, "Focus Animation");
1560
   elm_check_state_set(chk, EINA_FALSE);
1561
   evas_object_size_hint_weight_set(chk, EVAS_HINT_EXPAND, 0.0);
1562
   evas_object_smart_callback_add(chk, "changed",
1563
                                  test_list_focus_focus_animate_check_changed,
1564
                                  win);
1565
   elm_box_pack_end(bx_opt, chk);
1566
   evas_object_show(chk);
1567

1568
   chk = elm_check_add(bx_opt);
1569
   elm_object_text_set(chk, "Focus on selection");
1570
   evas_object_size_hint_weight_set(chk, EVAS_HINT_EXPAND, 0.0);
1571
   evas_object_smart_callback_add(chk, "changed",
1572
                                  test_list_focus_focus_check_changed, li);
1573
   elm_box_pack_end(bx_opt, chk);
1574
   evas_object_show(chk);
1575

1576
   test_list_focus_focus_on_selection_set(li, chk, EINA_FALSE);
1577

1578
   chk = elm_check_add(bx_opt);
1579
   elm_object_text_set(chk, "Item Looping Enable");
1580
   elm_check_state_set(chk, elm_object_scroll_item_loop_enabled_get(li));
1581
   evas_object_size_hint_weight_set(chk, EVAS_HINT_EXPAND, 0.0);
1582
   evas_object_smart_callback_add(chk, "changed",
1583
                                  test_list_focus_item_loop_enable_check_changed,
1584
                                  li);
1585
   elm_box_pack_end(bx_opt, chk);
1586
   evas_object_show(chk);
1587

1588
   chk = elm_check_add(bx_opt);
1589
   elm_object_text_set(chk, "Item Select on Focus disable");
1590
   elm_check_state_set(chk, elm_config_item_select_on_focus_disabled_get());
1591
   evas_object_size_hint_weight_set(chk, EVAS_HINT_EXPAND, 0.0);
1592
   evas_object_smart_callback_add(chk, "changed",
1593
                                  test_list_focus_item_select_on_focus_disable_changed,
1594
                                  NULL);
1595
   elm_box_pack_end(bx_opt, chk);
1596
   evas_object_show(chk);
1597

1598
   chk = elm_check_add(bx_opt);
1599
   elm_object_text_set(chk, "First item focus on first focus in");
1600
   elm_check_state_set(chk, elm_config_first_item_focus_on_first_focusin_get());
1601
   evas_object_size_hint_weight_set(chk, EVAS_HINT_EXPAND, 0.0);
1602
   evas_object_smart_callback_add(chk, "changed",
1603
                                  test_list_first_item_focus_on_first_focus_in_cb,
1604
                                  NULL);
1605
   elm_box_pack_end(bx_opt, chk);
1606
   evas_object_show(chk);
1607

1608
   // Focus Autoscroll Mode
1609
   fr = _focus_autoscroll_mode_frame_create(bx);
1610
   elm_box_pack_end(bx, fr);
1611

1612
   // Focus Movement Policy
1613
   fr = elm_frame_add(bx);
1614
   elm_object_text_set(fr, "Focus Movement Policy");
1615
   evas_object_size_hint_weight_set(fr, EVAS_HINT_EXPAND, 0.0);
1616
   evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL);
1617
   elm_box_pack_end(bx, fr);
1618
   evas_object_show(fr);
1619

1620
   bx_mv = elm_box_add(fr);
1621
   elm_box_horizontal_set(bx_mv, EINA_TRUE);
1622
   elm_object_content_set(fr, bx_mv);
1623
   evas_object_show(bx_mv);
1624

1625
   rdg = rd = elm_radio_add(bx_mv);
1626
   elm_object_text_set(rd, "Focus Move by Click");
1627
   elm_radio_state_value_set(rd, 0);
1628
   evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, 0.0);
1629
   evas_object_smart_callback_add(rd, "changed",
1630
                                  test_list_focus_focus_move_policy_changed,
1631
                                  NULL);
1632
   elm_box_pack_end(bx_mv, rd);
1633
   evas_object_show(rd);
1634

1635
   rd = elm_radio_add(bx_mv);
1636
   elm_object_text_set(rd, "Focus Move by Mouse-In");
1637
   elm_radio_group_add(rd, rdg);
1638
   elm_radio_state_value_set(rd, 1);
1639
   evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, 0.0);
1640
   evas_object_smart_callback_add(rd, "changed",
1641
                                  test_list_focus_focus_move_policy_changed,
1642
                                  NULL);
1643
   elm_box_pack_end(bx_mv, rd);
1644
   evas_object_show(rd);
1645

1646
   // Focus/Selection
1647
   fr = elm_frame_add(bx);
1648
   elm_object_text_set(fr, "Focus/Selection");
1649
   evas_object_size_hint_weight_set(fr, EVAS_HINT_EXPAND, 0.0);
1650
   evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL);
1651
   elm_box_pack_end(bx, fr);
1652
   evas_object_show(fr);
1653

1654
   bx_btn = elm_box_add(fr);
1655
   elm_object_content_set(fr, bx_btn);
1656
   evas_object_show(bx_btn);
1657

1658
   btn_focus = elm_button_add(bx_btn);
1659
   elm_object_text_set(btn_focus, "Focus 3rd Item after 1.5 seconds.");
1660
   evas_object_size_hint_weight_set(btn_focus, 0.0, EVAS_HINT_EXPAND);
1661
   evas_object_size_hint_align_set(btn_focus, EVAS_HINT_FILL, EVAS_HINT_FILL);
1662
   elm_box_pack_end(bx_btn, btn_focus);
1663
   evas_object_show(btn_focus);
1664

1665
   btn_sel = elm_button_add(bx_btn);
1666
   elm_object_text_set(btn_sel, "Select 3rd Item after 1.5 seconds.");
1667
   evas_object_size_hint_weight_set(btn_sel, 0.0, EVAS_HINT_EXPAND);
1668
   evas_object_size_hint_align_set(btn_sel, EVAS_HINT_FILL, EVAS_HINT_FILL);
1669
   elm_box_pack_end(bx_btn, btn_sel);
1670
   evas_object_show(btn_sel);
1671

1672
   btn_dis = elm_button_add(bx_btn);
1673
   elm_object_text_set(btn_dis, "Disable 1st Item.");
1674
   evas_object_size_hint_weight_set(btn_dis, 0.0, EVAS_HINT_EXPAND);
1675
   evas_object_size_hint_align_set(btn_dis, EVAS_HINT_FILL, EVAS_HINT_FILL);
1676
   elm_box_pack_end(bx_btn, btn_dis);
1677
   evas_object_show(btn_dis);
1678

1679
   for (idx = 0; _list_focus_combo[idx] >= 0; idx++)
1680
     {
1681
        lhand = _list_focus_combo[idx] / 10;
1682
        rhand = _list_focus_combo[idx] % 10;
1683

1684
        if (lhand > 4) lhand = 4;
1685
        if (rhand > 4) rhand = 4;
1686
        snprintf(buf, sizeof(buf), " %s / %s ",
1687
				_list_focus_names[lhand],
1688
				_list_focus_names[rhand]);
1689

1690
        it = elm_list_item_append(li, buf,
1691
                                  test_list_focus_content_get(li, lhand, horiz),
1692
                                  test_list_focus_content_get(li, rhand, horiz),
1693
                                  NULL, NULL);
1694
        if (idx == 0)
1695
          it_0 = it;
1696
        if (idx == 4)
1697
          elm_object_item_disabled_set(it, EINA_TRUE);
1698
        if (idx == 2)
1699
          it_3 = it;
1700
     }
1701

1702
   evas_object_smart_callback_add(btn_focus, "clicked", _focus_btn_cb, it_3);
1703
   evas_object_smart_callback_add(btn_sel, "clicked", _sel_btn_cb, it_3);
1704
   evas_object_smart_callback_add(btn_dis, "clicked", _dis_btn_cb, it_0);
1705

1706
   elm_list_go(li);
1707
   evas_object_show(li);
1708

1709
   evas_object_resize(win, 420 * elm_config_scale_get(),
1710
                           600 * elm_config_scale_get());
1711
   evas_object_show(win);
1712
}
1713

1714
void
1715
test_list_focus(void        *data EINA_UNUSED,
1716
                Evas_Object *obj EINA_UNUSED,
1717
                void        *event_info EINA_UNUSED)
1718
{
1719
   _test_list_focus("list-focus", "List Focus", EINA_FALSE);
1720
}
1721

1722
void
1723
test_list_horiz_focus(void        *data EINA_UNUSED,
1724
                      Evas_Object *obj EINA_UNUSED,
1725
                      void        *event_info EINA_UNUSED)
1726
{
1727
   _test_list_focus("list-focus-horizontal", "List Focus Horizontal", EINA_TRUE);
1728
}
1729

1730
void
1731
test_list_separator(void        *data EINA_UNUSED,
1732
                    Evas_Object *obj EINA_UNUSED,
1733
                    void        *event_info EINA_UNUSED)
1734
{
1735
   Evas_Object *win, *li, *ic, *ic2, *bx, *bxx;
1736
   char buf[PATH_MAX];
1737
   Elm_Object_Item *list_it_sep;
1738

1739
   win = elm_win_util_standard_add("list", "List Separator");
1740
   elm_win_autodel_set(win, EINA_TRUE);
1741

1742
   bxx = elm_box_add(win);
1743
   evas_object_size_hint_weight_set(bxx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1744
   elm_win_resize_object_add(win, bxx);
1745
   evas_object_show(bxx);
1746

1747
   li = elm_list_add(win);
1748
   evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1749
   evas_object_size_hint_align_set(li, EVAS_HINT_FILL, EVAS_HINT_FILL);
1750
   elm_box_pack_end(bxx, li);
1751

1752
   ic = elm_icon_add(win);
1753
   snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
1754
   elm_image_file_set(ic, buf, NULL);
1755
   elm_list_item_append(li, "Hello", ic, NULL, NULL, NULL);
1756

1757
   list_it_sep = elm_list_item_append(li, NULL, NULL, NULL, NULL, NULL);
1758
   elm_list_item_separator_set(list_it_sep, EINA_TRUE);
1759

1760
   ic = elm_icon_add(win);
1761
   snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
1762
   elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
1763
   elm_image_file_set(ic, buf, NULL);
1764
   elm_list_item_append(li, "world", ic, NULL, NULL, NULL);
1765

1766
   list_it_sep = elm_list_item_append(li, NULL, NULL, NULL, NULL, NULL);
1767
   elm_list_item_separator_set(list_it_sep, EINA_TRUE);
1768

1769
   ic = elm_icon_add(win);
1770
   elm_icon_standard_set(ic, "edit");
1771
   elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
1772
   elm_list_item_append(li, ".", ic, NULL, NULL, NULL);
1773

1774
   list_it_sep = elm_list_item_append(li, NULL, NULL, NULL, NULL, NULL);
1775
   elm_list_item_separator_set(list_it_sep, EINA_TRUE);
1776

1777
   ic = elm_icon_add(win);
1778
   elm_icon_standard_set(ic, "delete");
1779
   elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
1780
   ic2 = elm_icon_add(win);
1781
   elm_icon_standard_set(ic2, "clock");
1782
   elm_image_resizable_set(ic2, EINA_FALSE, EINA_FALSE);
1783
   elm_list_item_append(li, "How", ic, ic2, NULL, NULL);
1784

1785
   list_it_sep = elm_list_item_append(li, NULL, NULL, NULL, NULL, NULL);
1786
   elm_list_item_separator_set(list_it_sep, EINA_TRUE);
1787

1788
   bx = elm_box_add(win);
1789
   elm_box_horizontal_set(bx, EINA_TRUE);
1790

1791
   ic = elm_icon_add(win);
1792
   snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
1793
   elm_image_file_set(ic, buf, NULL);
1794
   elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
1795
   evas_object_size_hint_align_set(ic, 0.5, 0.5);
1796
   elm_box_pack_end(bx, ic);
1797
   evas_object_show(ic);
1798

1799
   ic = elm_icon_add(win);
1800
   snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
1801
   elm_image_file_set(ic, buf, NULL);
1802
   elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
1803
   evas_object_size_hint_align_set(ic, 0.5, 0.0);
1804
   elm_box_pack_end(bx, ic);
1805
   evas_object_show(ic);
1806

1807
   ic = elm_icon_add(win);
1808
   snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
1809
   elm_image_file_set(ic, buf, NULL);
1810
   elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
1811
   evas_object_size_hint_align_set(ic, 0.0, EVAS_HINT_EXPAND);
1812
   elm_box_pack_end(bx, ic);
1813
   evas_object_show(ic);
1814
   elm_list_item_append(li, "are", bx, NULL, NULL, NULL);
1815

1816
   list_it_sep = elm_list_item_append(li, NULL, NULL, NULL, NULL, NULL);
1817
   elm_list_item_separator_set(list_it_sep, EINA_TRUE);
1818

1819
   elm_list_item_append(li, "you", NULL, NULL, NULL, NULL);
1820

1821
   list_it_sep = elm_list_item_append(li, NULL, NULL, NULL, NULL, NULL);
1822
   elm_list_item_separator_set(list_it_sep, EINA_TRUE);
1823

1824
   elm_list_item_append(li, "doing", NULL, NULL, NULL, NULL);
1825

1826
   list_it_sep = elm_list_item_append(li, NULL, NULL, NULL, NULL, NULL);
1827
   elm_list_item_separator_set(list_it_sep, EINA_TRUE);
1828

1829
   elm_list_item_append(li, "?", NULL, NULL, NULL, NULL);
1830

1831
   elm_list_go(li);
1832

1833
   evas_object_show(li);
1834

1835
   evas_object_resize(win, 320 * elm_config_scale_get(),
1836
                           300 * elm_config_scale_get());
1837
   evas_object_show(win);
1838
}
1839

1840
/***********/
1841

1842
typedef struct _List_Multi_Data List_Multi_Data;
1843
struct _List_Multi_Data
1844
{
1845
   Evas_Object *list;
1846
   Evas_Object *rd1;
1847
   Evas_Object *rd2;
1848
};
1849

1850
static void
1851
_multi_select_changed_cb(void *data, Evas_Object *obj,
1852
                         void *event_info EINA_UNUSED)
1853
{
1854
   Eina_Bool multi = elm_check_state_get(obj);
1855
   List_Multi_Data *ld = data;
1856
   if (!ld) return;
1857

1858
   elm_list_multi_select_set(ld->list, multi);
1859
   elm_object_disabled_set(ld->rd1, !multi);
1860
   elm_object_disabled_set(ld->rd2, !multi);
1861
}
1862

1863
static void
1864
_multi_select_mode_changed_cb(void *data, Evas_Object *obj,
1865
                              void *event_info EINA_UNUSED)
1866
{
1867
   elm_list_multi_select_mode_set(data, elm_radio_value_get(obj));
1868
}
1869

1870
static void
1871
_multi_select_frame_create(Evas_Object *bx, List_Multi_Data *ld)
1872
{
1873
   Evas_Object *fr, *bx2, *bx3, *tg, *rd, *rdg;
1874
   if (!ld) return;
1875

1876
   fr = elm_frame_add(bx);
1877
   evas_object_size_hint_weight_set(fr, EVAS_HINT_EXPAND, 0.0);
1878
   evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, 0.5);
1879
   elm_object_text_set(fr, "Multi Select Option");
1880
   elm_box_pack_end(bx, fr);
1881
   evas_object_show(fr);
1882

1883
   bx2 = elm_box_add(fr);
1884
   elm_object_content_set(fr, bx2);
1885
   evas_object_show(bx2);
1886

1887
   tg = elm_check_add(bx2);
1888
   elm_object_style_set(tg, "toggle");
1889
   elm_object_text_set(tg, "Multi Select Mode");
1890
   elm_box_pack_end(bx2, tg);
1891
   evas_object_show(tg);
1892

1893
   bx3 = elm_box_add(bx2);
1894
   elm_box_horizontal_set(bx3, EINA_TRUE);
1895
   elm_box_pack_end(bx2, bx3);
1896
   evas_object_show(bx3);
1897

1898
   ld->rd1 = rdg = rd = elm_radio_add(bx3);
1899
   elm_radio_state_value_set(rd, ELM_OBJECT_MULTI_SELECT_MODE_DEFAULT);
1900
   elm_object_text_set(rd, "Default Mode");
1901
   elm_box_pack_end(bx3, rd);
1902
   evas_object_show(rd);
1903
   elm_object_disabled_set(rd, EINA_TRUE);
1904
   evas_object_smart_callback_add(rd, "changed",
1905
                                  _multi_select_mode_changed_cb, ld->list);
1906

1907
   ld->rd2 = rd = elm_radio_add(bx3);
1908
   elm_radio_state_value_set(rd, ELM_OBJECT_MULTI_SELECT_MODE_WITH_CONTROL);
1909
   elm_radio_group_add(rd, rdg);
1910
   elm_object_text_set(rd, "With Control Mode");
1911
   elm_box_pack_end(bx3, rd);
1912
   evas_object_show(rd);
1913
   elm_object_disabled_set(rd, EINA_TRUE);
1914
   evas_object_smart_callback_add(rd, "changed",
1915
                                  _multi_select_mode_changed_cb, ld->list);
1916

1917
   evas_object_smart_callback_add(tg, "changed",
1918
                                  _multi_select_changed_cb, ld);
1919
}
1920

1921
void
1922
test_list_multi_select(void *data EINA_UNUSED,
1923
                       Evas_Object *obj EINA_UNUSED,
1924
                       void *event_info EINA_UNUSED)
1925
{
1926
   Evas_Object *win, *li, *bx;
1927
   List_Multi_Data *ld = calloc(1, sizeof(List_Multi_Data));
1928

1929
   win = elm_win_util_standard_add("list-multi-select", "List Multi Select");
1930
   elm_win_autodel_set(win, EINA_TRUE);
1931
   evas_object_event_callback_add(win, EVAS_CALLBACK_FREE, _cleanup_cb, ld);
1932

1933
   bx = elm_box_add(win);
1934
   evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1935
   elm_win_resize_object_add(win, bx);
1936
   evas_object_show(bx);
1937

1938
   ld->list = li = elm_list_add(bx);
1939
   _multi_select_frame_create(bx, ld);
1940

1941
   evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1942
   evas_object_size_hint_align_set(li, EVAS_HINT_FILL, EVAS_HINT_FILL);
1943
   elm_box_pack_end(bx, li);
1944
   evas_object_show(li);
1945

1946
   elm_list_item_append(li, "you", NULL, NULL, NULL, NULL);
1947
   elm_list_item_append(li, "doing", NULL, NULL, NULL, NULL);
1948
   elm_list_item_append(li, "out", NULL, NULL, NULL, NULL);
1949
   elm_list_item_append(li, "there", NULL, NULL, NULL, NULL);
1950
   elm_list_item_append(li, "today", NULL, NULL, NULL, NULL);
1951
   elm_list_item_append(li, "?", NULL, NULL, NULL, NULL);
1952
   elm_list_item_append(li, "Here", NULL, NULL, NULL, NULL);
1953
   elm_list_item_append(li, "are", NULL, NULL, NULL, NULL);
1954
   elm_list_item_append(li, "some", NULL, NULL, NULL, NULL);
1955
   elm_list_item_append(li, "more", NULL, NULL, NULL, NULL);
1956
   elm_list_item_append(li, "items", NULL, NULL, NULL, NULL);
1957
   elm_list_item_append(li, "Longer label.", NULL, NULL, NULL, NULL);
1958

1959
   elm_list_go(li);
1960

1961
   evas_object_resize(win, 320 * elm_config_scale_get(),
1962
                           500 * elm_config_scale_get());
1963
   evas_object_show(win);
1964
}
1965

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.