e57f78a2707b81bb4c3198508572331040d3a084
[apps/core/preloaded/ug-myfile-efl.git] / src / widget / mf-ug-genlist.c
1 /*
2  * Copyright 2012          Samsung Electronics Co., Ltd
3  *
4  * Licensed under the Flora License, Version 1.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *  http://floralicense.org/license/
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17
18
19 #include <Eina.h>
20 #include "mf-ug-winset.h"
21 #include "mf-ug-util.h"
22 #include "mf-ug-fm-svc-wrapper.h"
23 #include "mf-ug-fs-util.h"
24 #include "mf-ug-resource.h"
25 #include "mf-ug-cb.h"
26
27
28 #define MF_UG_SELECTED_ITEM_BRING_UP_COUNT      7
29 #define MF_UG_SELECTED_ITEM_BRING_UP_COUNT_MAX  8
30 /******************************
31 ** Prototype    : __mf_ug_genlist_is_file_marked
32 ** Description  : Samsung
33 ** Input        : Eina_List *source
34 **                GString *path
35 ** Output       : None
36 ** Return Value :
37 ** Calls        :
38 ** Called By    :
39 **
40 **  History        :
41 **  1.Date         : 2010/12/10
42 **    Author       : Samsung
43 **    Modification : Created function
44 **
45 ******************************/
46 static gboolean __mf_ug_genlist_is_file_marked(Eina_List *source, GString *path)
47 {
48         UG_TRACE_BEGIN;
49         ug_mf_retvm_if(source == NULL, false, "source is NULL");
50         ug_mf_retvm_if(path == NULL, false, "path is NULL");
51
52         bool flag = false;
53         Eina_List *l = NULL;
54         void *data = NULL;
55
56         EINA_LIST_FOREACH(source, l, data) {
57                 char *source_path = strdup(data);
58                 if (source_path != NULL) {
59                         if (strcmp(source_path, path->str) == 0) {
60                                 flag = true;
61                                 free(source_path);
62                                 source_path = NULL;
63                                 break;
64                         } else {
65                                 free(source_path);
66                                 source_path = NULL;
67                         }
68                 }
69         }
70         UG_TRACE_END;
71         return flag;
72 }
73
74
75 /******************************
76 ** Prototype    : __mf_ug_genlist_set_marked_path
77 ** Description  : Samsung
78 ** Input        : Eina_List **source
79 **                GString *path
80 ** Output       : None
81 ** Return Value :
82 ** Calls        :
83 ** Called By    :
84 **
85 **  History        :
86 **  1.Date         : 2010/12/10
87 **    Author       : Samsung
88 **    Modification : Created function
89 **
90 ******************************/
91 static void __mf_ug_genlist_set_marked_path(Eina_List **source, GString *path)
92 {
93         UG_TRACE_BEGIN;
94         bool file_exist_flag = false;
95         char *source_path;
96         Eina_List *l = NULL;
97         void *data = NULL;
98
99         ug_mf_retm_if(source == NULL, "source is NULL");
100         ug_mf_retm_if(path == NULL, "path is NULL");
101
102         if (NULL == *source || eina_list_count(*source) == 0) {
103                 *source = eina_list_append(*source, strdup(path->str));
104         } else {
105
106                 EINA_LIST_FOREACH(*source, l, data) {
107                         source_path = (char *)data;
108                         if (source_path != NULL) {
109                                 if (strcmp(source_path, path->str) == 0) {
110                                         file_exist_flag = true;
111                                         break;
112                                 }
113                         }
114                 }
115                 if (file_exist_flag == true) {
116                         *source = eina_list_remove(*source, source_path);
117                 } else {
118                         *source = eina_list_append(*source, strdup(path->str));
119                 }
120         }
121         UG_TRACE_END;
122 }
123
124
125 /******************************
126 ** Prototype    : __mf_ug_genlist_create_checkbox
127 ** Description  : Samsung
128 ** Input        : Evas_Object *parent
129 ** Output       : None
130 ** Return Value :
131 ** Calls        :
132 ** Called By    :
133 **
134 **  History        :
135 **  1.Date         : 2010/12/10
136 **    Author       : Samsung
137 **    Modification : Created function
138 **
139 ******************************/
140 static Evas_Object *__mf_ug_genlist_create_checkbox(Evas_Object *parent)
141 {
142         UG_TRACE_BEGIN;
143         Evas_Object *ck_box = NULL;
144
145         ck_box = elm_check_add(parent);
146         evas_object_size_hint_weight_set(ck_box, 1.0, 1.0);
147         evas_object_size_hint_align_set(ck_box, -1.0, 0.5);
148         elm_check_state_set(ck_box, 0);
149         evas_object_show(ck_box);
150         evas_object_repeat_events_set(ck_box, 0);
151         UG_TRACE_END;
152         return ck_box;
153 }
154
155 static void __mf_ug_genlist_show_select_info(void *data)
156 {
157         UG_TRACE_BEGIN;
158         ugListItemData *itemData = (ugListItemData *)data;
159         ug_mf_retm_if(itemData == NULL, "itemData is NULL");
160
161         ugData *ugd = itemData->ug_pData;
162         ug_mf_retm_if(ugd == NULL, "ugd is NULL");
163
164         int iDirCount = 0, iFileCount = 0;
165         Elm_Object_Item *it = NULL;
166
167         Evas_Object *pGenlist = ugd->ug_MainWindow.ug_pNaviGenlist;
168
169         it = elm_genlist_first_item_get(pGenlist);
170         while (it) {
171                 itemData = elm_object_item_data_get(it);
172                 if (itemData->ug_bChecked) {
173                         if (ecore_file_is_dir(itemData->ug_pItemName->str)) {
174                                 iDirCount++;
175                         } else {
176                                 iFileCount++;
177                         }
178                 }
179
180                 it = elm_genlist_item_next_get(it);
181         }
182         int count = 0;
183         count = iDirCount + iFileCount;
184         if (count > 0) {
185                 Evas_Object *notify_popup = NULL;
186                 char lable_file[UG_LABEL_STRING_LENGTH] = { '\0', };
187                 char *label = NULL;
188                 /*1 TODO: need to update for multi-language */
189
190                 snprintf(lable_file, sizeof(lable_file), "%d", count);
191                 label = g_strconcat(MF_UG_LABEL_SELECTED, "(", lable_file, ")", NULL);
192                 notify_popup = mf_ug_navibar_create_notify_popup(itemData->ug_pData, ugd->ug_MainWindow.ug_pNaviLayout, label, false, NULL);
193                 ugd->ug_MainWindow.ug_pSelectInfoLayout = notify_popup;
194                 UG_SAFE_FREE_CHAR(label);
195
196         } else {
197                 UG_SAFE_FREE_OBJ(ugd->ug_MainWindow.ug_pSelectInfoLayout);
198         }
199         UG_TRACE_END;
200
201 }
202
203 /******************************
204 ** Prototype    : __mf_ug_genlist_checkbox_cb
205 ** Description  : Samsung
206 ** Input        : void *data
207 **                Evas_Object *obj
208 **                void *event_info
209 ** Output       : None
210 ** Return Value :
211 ** Calls        :
212 ** Called By    :
213 **
214 **  History        :
215 **  1.Date         : 2010/12/10
216 **    Author       : Samsung
217 **    Modification : Created function
218 **
219 ******************************/
220 static void __mf_ug_genlist_checkbox_cb(void *data, Evas_Object *obj, void *event_info)
221 {
222         UG_TRACE_BEGIN;
223         ugListItemData *itemData = (ugListItemData *)data;
224         ug_mf_retm_if(itemData == NULL, "itemData is NULL");
225         ugData *ugd = (ugData *)itemData->ug_pData;
226
227         if (itemData->ug_bChecked == false) {
228                 itemData->ug_bChecked = true;
229         } else {
230                 itemData->ug_bChecked = false;
231         }
232
233         if (itemData->ug_pData->ug_UiGadget.ug_iMarkedMode == MARKED_ON) {
234                 __mf_ug_genlist_set_marked_path(&itemData->ug_pData->ug_UiGadget.ug_pMultiSelectFileList, itemData->ug_pItemName);
235         }
236         if (itemData->ug_bChecked) {
237                 ugd->ug_Status.ug_iCheckedCount++;
238         } else {
239                 ugd->ug_Status.ug_iCheckedCount--;
240         }
241         if (ugd->ug_MainWindow.ug_pSelectAllCheckBox) {
242                 if (ugd->ug_Status.ug_iTotalCount == ugd->ug_Status.ug_iCheckedCount) {
243                         ugd->ug_Status.ug_bSelectAllChecked = EINA_TRUE;
244                 } else {
245                         ugd->ug_Status.ug_bSelectAllChecked = EINA_FALSE;
246                 }
247                 elm_check_state_pointer_set(ugd->ug_MainWindow.ug_pSelectAllCheckBox, &ugd->ug_Status.ug_bSelectAllChecked);
248         }
249
250         __mf_ug_genlist_show_select_info(itemData);
251         mf_ug_ctrl_bar_set_item_disable(itemData->ug_pData);
252
253         UG_TRACE_END;
254 }
255
256
257 /******************************
258 ** Prototype    : __mf_ug_genlist_create_radio_box
259 ** Description  : Samsung
260 ** Input        : Evas_Object *parent
261 **                ugListItemData *params
262 ** Output       : None
263 ** Return Value :
264 ** Calls        :
265 ** Called By    :
266 **
267 **  History        :
268 **  1.Date         : 2010/12/10
269 **    Author       : Samsung
270 **    Modification : Created function
271 **
272 ******************************/
273 static Evas_Object *__mf_ug_genlist_create_radio_box(Evas_Object *parent, ugListItemData *params)
274 {
275         UG_TRACE_BEGIN;
276
277         ugListItemData *itemData = (ugListItemData *)params;
278         ug_mf_retvm_if(itemData == NULL, NULL, "itemData is NULL");
279
280         ugData *ugd = (ugData *)(itemData->ug_pData);
281         ug_mf_retvm_if(ugd == NULL, NULL, "ugd is NULL");
282
283         Evas_Object *radio_box = NULL;
284         radio_box = elm_radio_add(parent);
285         elm_radio_state_value_set(radio_box, itemData->ug_iGroupValue);
286         elm_radio_group_add(radio_box, ugd->ug_MainWindow.ug_pRadioGroup);
287         elm_radio_value_set(ugd->ug_MainWindow.ug_pRadioGroup, ugd->ug_Status.ug_iRadioOn);
288         UG_TRACE_END;
289         return radio_box;
290 }
291
292
293
294 /******************************
295 ** Prototype    : __mf_ug_genlist_radio_box_cb
296 ** Description  : Samsung
297 ** Input        : void *data
298 **                Evas_Object *obj
299 **                void *event_info
300 ** Output       : None
301 ** Return Value :
302 ** Calls        :
303 ** Called By    :
304 **
305 **  History        :
306 **  1.Date         : 2010/12/10
307 **    Author       : Samsung
308 **    Modification : Created function
309 **
310 ******************************/
311 static void __mf_ug_genlist_radio_box_cb(void *data, Evas_Object *obj, void *event_info)
312 {
313
314         UG_TRACE_BEGIN;
315         ugListItemData *itemData = (ugListItemData *)data;
316         ug_mf_retm_if(itemData == NULL, "ugListItemData is NULL");
317
318         itemData->ug_bChecked = true;
319         itemData->ug_pData->ug_Status.ug_iRadioOn = itemData->ug_iGroupValue;
320         elm_radio_value_set(itemData->ug_pData->ug_MainWindow.ug_pRadioGroup, itemData->ug_iGroupValue);
321         mf_ug_ctrl_bar_set_item_disable(itemData->ug_pData);
322         UG_TRACE_END;
323 }
324
325
326 /******************************
327 ** Prototype    : __mf_ug_genlist_get_gl_label
328 ** Description  :
329 ** Input        : const void *data
330 **                Evas_Object *obj
331 **                const char *part
332 ** Output       : None
333 ** Return Value :
334 ** Calls        :
335 ** Called By    :
336 **
337 **  History        :
338 **  1.Date         : 2010/12/10
339 **    Author       : Samsung
340 **    Modification : Created function
341 **
342 ******************************/
343 static char *__mf_ug_genlist_get_gl_label(void *data, Evas_Object *obj, const char *part)
344 {
345         UG_TRACE_BEGIN;
346         ugListItemData *itemData = (ugListItemData *)data;
347         ug_mf_retvm_if(itemData == NULL, NULL, "itemData is NULL");
348
349         if (strcmp(part, "elm.text") == 0) {
350                 UG_TRACE_END;
351                 if (g_strcmp0(itemData->ug_pItemName->str, PHONE_FOLDER) == 0) {
352                         return g_strdup(MF_UG_LABEL_PHONE);
353                 } else if (g_strcmp0(itemData->ug_pItemName->str, MEMORY_FOLDER) == 0) {
354                         return g_strdup(MF_UG_LABEL_MMC);
355                 } else {
356                         return strdup(ecore_file_file_get(itemData->ug_pItemName->str));
357                 }
358         } else if (strcmp(part, "elm.uptitle.text") == 0) {
359                 UG_TRACE_END;
360                 return strdup(("Upper Level"));
361         } else {
362                 UG_TRACE_END;
363                 return strdup("");
364         }
365 }
366
367
368 /******************************
369 ** Prototype    : __mf_ug_genlist_get_thumbnail
370 ** Description  : Samsung
371 ** Input        : void *data
372 ** Output       : None
373 ** Return Value :
374 ** Calls        :
375 ** Called By    :
376 **
377 **  History        :
378 **  1.Date         : 2010/12/10
379 **    Author       : Samsung
380 **    Modification : Created function
381 **
382 ******************************/
383 static void __mf_ug_genlist_get_thumbnail(void *data)
384 {
385         UG_TRACE_BEGIN;
386         ugListItemData *itemData = (ugListItemData *)data;
387         ug_mf_retm_if(itemData == NULL, "itemData is NULL");
388
389         const char *dir_icon_path = UG_ICON_FOLDER;
390         //const char *dir_create_icon_path = UG_ICON_FOLDER_CREATED;
391         char *icon_path = NULL;
392         int error_code = MYFILE_ERR_NONE;
393         int thumbnail_type = 0;
394
395         if (itemData->ug_pThumbPath == NULL) {
396                 if (ecore_file_is_dir(itemData->ug_pItemName->str)) {
397                         itemData->ug_pThumbPath = strdup(dir_icon_path);
398                         itemData->ug_bRealThumbFlag = true;
399                 } else {
400                         thumbnail_type = mf_ug_file_attr_get_file_icon(itemData->ug_pItemName->str, &error_code, &icon_path);
401                         if (icon_path) {
402                                 itemData->ug_pThumbPath = strdup(icon_path);
403                                 itemData->ug_bRealThumbFlag = true;
404                                 free(icon_path);
405                                 icon_path = NULL;
406                         } else {        /*/must be image/video file */
407
408                                 mf_ug_fs_file_type type = UG_FILE_TYPE_NONE;
409                                 type = mf_ug_file_attr_get_file_type_by_mime(itemData->ug_pItemName->str);
410
411                                 if (type == UG_FILE_TYPE_VIDEO) {
412                                         itemData->ug_pThumbPath = strdup(UG_ICON_VIDEO);
413                                 } else if (type == UG_FILE_TYPE_IMAGE) {
414                                         itemData->ug_pThumbPath = strdup(UG_ICON_IMAGE);
415                                 } else {
416                                         itemData->ug_pThumbPath = strdup(UG_DEFAULT_ICON);
417                                 }
418                                 itemData->ug_bRealThumbFlag = false;
419                                 error_code = MYFILE_ERR_GET_THUMBNAIL_FAILED;
420                         }
421                 }
422         } else if (itemData->ug_pThumbPath && ecore_file_exists(itemData->ug_pThumbPath)) {
423                 if (itemData->ug_bRealThumbFlag == false) {
424                         error_code = MYFILE_ERR_GET_THUMBNAIL_FAILED;
425                 }
426         } else if (!ecore_file_exists(itemData->ug_pThumbPath)) {
427
428                 ug_debug("ug_pThumbPath[%s] is not exist", itemData->ug_pThumbPath);
429                 free(itemData->ug_pThumbPath);
430                 itemData->ug_pThumbPath = NULL;
431                 /*/set default icon */
432                 itemData->ug_pThumbPath = strdup(UG_DEFAULT_ICON);
433                 itemData->ug_bRealThumbFlag = false;
434                 error_code = MYFILE_ERR_GET_THUMBNAIL_FAILED;
435         }
436 #ifdef  UG_THUMB_REAL_TIME_UPDATE
437         /*/check if we need to add refresh timer */
438         if (error_code != 0 && itemData->ug_pData->ug_Status.ug_pThumbUpdateTimer == NULL) {
439                 itemData->ug_pData->ug_Status.ug_pThumbUpdateTimer = ecore_timer_add(INTERVAL_THUMB_UPDATE, mf_ug_cb_thumb_timer_cb, itemData);
440         }
441 #endif
442         UG_TRACE_END;
443 }
444
445
446 /******************************
447 ** Prototype    : __mf_ug_genlist_create_thumbnail
448 ** Description  : Samsung
449 ** Input        : void *data
450 **                Evas_Object *parent
451 ** Output       : None
452 ** Return Value :
453 ** Calls        :
454 ** Called By    :
455 **
456 **  History        :
457 **  1.Date         : 2010/12/10
458 **    Author       : Samsung
459 **    Modification : Created function
460 **
461 ******************************/
462 static Evas_Object *__mf_ug_genlist_create_thumbnail(void *data, Evas_Object *parent)
463 {
464
465         UG_TRACE_BEGIN;
466         ugListItemData *itemData = (ugListItemData *)data;
467         ug_mf_retvm_if(itemData == NULL, NULL, "itemData is NULL");
468
469         Evas_Object *thumb = NULL;
470
471 #ifdef USE_IMAGE_OBJECT
472         thumb = evas_object_image_add(evas_object_evas_get(parent));
473 #else
474         thumb = elm_image_add(parent);
475 #endif
476         if (thumb == NULL) {
477                 ug_debug("thumb is NULL");
478         }
479         if (thumb) {
480 #ifdef USE_IMAGE_OBJECT
481                 int load_err = EVAS_LOAD_ERROR_NONE;
482                 evas_object_image_file_set(thumb, itemData->ug_pThumbPath, NULL);
483                 load_err = evas_object_image_load_error_get(thumb);
484
485                 if (load_err != EVAS_LOAD_ERROR_NONE) {
486                         evas_object_del(thumb);
487                         thumb = NULL;
488                 } else {
489                         evas_object_image_filled_set(thumb, EINA_TRUE);
490                 }
491 #else
492                 elm_image_file_set(thumb, itemData->ug_pThumbPath, NULL);
493 #endif
494         }
495         UG_TRACE_END;
496         return thumb;
497 }
498
499
500 /******************************
501 ** Prototype    : __mf_ug_genlist_create_mmc_icon
502 ** Description  : Samsung
503 ** Input        : Evas_Object *parent
504 ** Output       : None
505 ** Return Value :
506 ** Calls        :
507 ** Called By    :
508 **
509 **  History        :
510 **  1.Date         : 2010/12/10
511 **    Author       : Samsung
512 **    Modification : Created function
513 **
514 ******************************/
515 static Evas_Object *__mf_ug_genlist_create_mmc_icon(Evas_Object *parent)
516 {
517         UG_TRACE_BEGIN;
518         Evas_Object *ic_memory = NULL;
519         const char *memory_icon_path = UG_ICON_MEMORY_SUB;
520
521         ic_memory = elm_image_add(parent);
522         elm_image_file_set(ic_memory, memory_icon_path, NULL);
523         evas_object_show(ic_memory);
524
525         UG_TRACE_END;
526         return ic_memory;
527 }
528
529
530 /******************************
531 ** Prototype    : __mf_ug_genlist_add_checkbox
532 ** Description  : Samsung
533 ** Input        : void *data
534 **                Evas_Object *parent
535 ** Output       : None
536 ** Return Value :
537 ** Calls        :
538 ** Called By    :
539 **
540 **  History        :
541 **  1.Date         : 2010/12/10
542 **    Author       : Samsung
543 **    Modification : Created function
544 **
545 ******************************/
546 static Evas_Object *__mf_ug_genlist_add_checkbox(void *data, Evas_Object *parent)
547 {
548         UG_TRACE_BEGIN;
549         ugListItemData *itemData = (ugListItemData *)data;
550         ug_mf_retvm_if(itemData == NULL, NULL, "itemData is NULL");
551
552         Evas_Object *check_box = __mf_ug_genlist_create_checkbox(parent);
553         evas_object_propagate_events_set(check_box, 0);
554
555         elm_check_state_set(check_box, itemData->ug_bChecked);
556
557         itemData->ug_pCheckBox = check_box;
558         evas_object_smart_callback_add(check_box, "changed", __mf_ug_genlist_checkbox_cb, itemData);
559
560         UG_TRACE_END;
561         return check_box;
562 }
563
564
565
566 /******************************
567 ** Prototype    : __mf_ug_genlist_add_radio_box
568 ** Description  : Samsung
569 ** Input        : void *data
570 **                Evas_Object *parent
571 ** Output       : None
572 ** Return Value :
573 ** Calls        :
574 ** Called By    :
575 **
576 **  History        :
577 **  1.Date         : 2010/12/10
578 **    Author       : Samsung
579 **    Modification : Created function
580 **
581 ******************************/
582 static Evas_Object *__mf_ug_genlist_add_radio_box(void *data, Evas_Object *parent)
583 {
584         UG_TRACE_BEGIN;
585         ugListItemData *itemData = (ugListItemData *)data;
586         ug_mf_retvm_if(itemData == NULL, NULL, "itemData is NULL");
587
588         Evas_Object *radio_box = __mf_ug_genlist_create_radio_box(parent, itemData);
589
590         evas_object_propagate_events_set(radio_box, 0);
591         itemData->ug_pRadioBox = radio_box;
592         evas_object_smart_callback_add(radio_box, "changed", __mf_ug_genlist_radio_box_cb, itemData);
593
594         UG_TRACE_END;
595         return radio_box;
596 }
597
598
599 static Evas_Object *__mf_ug_genlist_gl_upper_icon_get(void *data, Evas_Object * obj, const char *part)
600 {
601         UG_TRACE_BEGIN;
602         ugListItemData *listItemData = (ugListItemData *)data;
603
604         ug_mf_retvm_if(listItemData == NULL, NULL, "listItemData is NULL");
605         ug_mf_retvm_if(listItemData->ug_pItemName == NULL, NULL, "m_ItemName is NULL");
606         ug_mf_retvm_if(part == NULL, NULL, "part is NULL");
607         ug_mf_retvm_if(obj == NULL, NULL, "obj is NULL");
608
609         Evas_Object *thumb = NULL;
610         if (!strcmp(part, "elm.icon"))  {
611                 thumb = elm_image_add(obj);
612                 elm_object_focus_set(thumb, EINA_FALSE);
613                 if (thumb) {
614                         elm_image_file_set(thumb, listItemData->ug_pThumbPath, NULL);
615                 }
616         }
617         return thumb;
618 }
619
620
621 static Evas_Object *__mf_ug_genlist_upper_icon_get(void *data, Evas_Object * obj, const char *part)
622 {
623         ug_mf_retvm_if(data == NULL, NULL, "data is NULL");
624         ug_mf_retvm_if(obj == NULL, NULL, "obj is NULL");
625
626         ugData *ugd = (ugData *)data;
627
628         if (!strcmp(part, "elm.icon.1"))        {
629                 Evas_Object *btn = elm_button_add(obj);
630                 elm_object_text_set(btn, MF_UG_LABEL_HOME);
631                 evas_object_smart_callback_add(btn, "clicked", mf_ug_cb_home_button_cb, ugd);
632                 return btn;
633         } else if (!strcmp(part, "elm.icon.2")) {
634                 Evas_Object *btn = elm_button_add(obj);
635                 elm_object_text_set(btn, MF_UG_LABEL_UPPER);
636                 evas_object_smart_callback_add(btn, "clicked", mf_ug_cb_upper_click_cb, ugd);
637                 return btn;
638         }
639         return NULL;
640 }
641
642 /******************************
643 ** Prototype    : __mf_ug_genlist_get_gl_icon
644 ** Description  : Samsung
645 ** Input        : const void *data
646 **                Evas_Object *obj
647 **                const char *part
648 ** Output       : None
649 ** Return Value :
650 ** Calls        :
651 ** Called By    :
652 **
653 **  History        :
654 **  1.Date         : 2010/12/10
655 **    Author       : Samsung
656 **    Modification : Created function
657 **
658 ******************************/
659 static Evas_Object *__mf_ug_genlist_get_gl_icon(void *data, Evas_Object *obj, const char *part)
660 {
661         UG_TRACE_BEGIN;
662         Evas_Object *thumb = NULL, *ic_memory = NULL;
663         Evas_Object *layout = NULL;
664         Evas_Object *selected_box = NULL;
665
666         mf_ug_storage_type is_in_mmc = 0;
667         ugListItemData *listItemData = (ugListItemData *)data;
668         ug_mf_retv_if(listItemData == NULL, NULL);
669         ugData *ugd = listItemData->ug_pData;
670         ug_mf_retv_if(ugd == NULL, NULL);
671
672         if (!strcmp(part, "elm.icon")) {
673                 __mf_ug_genlist_get_thumbnail(listItemData);
674                 thumb = __mf_ug_genlist_create_thumbnail(listItemData, obj);
675                 layout = elm_layout_add(obj);
676                 elm_layout_file_set(layout, UG_EDJ_NAVIGATIONBAR, UG_GRP_LIST);
677                 elm_object_part_content_set(layout, "swallow_thumb", thumb);
678
679                 mf_ug_file_attr_get_store_type_by_full(listItemData->ug_pItemName->str, &is_in_mmc);
680                 if (is_in_mmc == MF_UG_MMC) {
681                         ic_memory = __mf_ug_genlist_create_mmc_icon(obj);
682                         elm_object_part_content_set(layout, "myfile.memory_icon.sub", ic_memory);
683                 }
684                 UG_TRACE_END;
685                 return layout;
686         } else if (!strcmp(part, "elm.icon.1")) {
687                 if (ugd->ug_UiGadget.ug_pMultiSelectFileList) {
688                         if (__mf_ug_genlist_is_file_marked(ugd->ug_UiGadget.ug_pMultiSelectFileList, listItemData->ug_pItemName)) {
689                                 listItemData->ug_bChecked = true;
690                         }
691                 }
692                 if (ecore_file_is_dir(listItemData->ug_pItemName->str)) {
693                         if (ugd->ug_UiGadget.ug_iSelectMode == MULTI_ALL_MODE) {
694                                 selected_box = __mf_ug_genlist_add_checkbox(listItemData, obj);
695                         } else if (ugd->ug_UiGadget.ug_iSelectMode == SINGLE_ALL_MODE) {
696                                 selected_box = __mf_ug_genlist_add_radio_box(listItemData, obj);
697                         }
698                 } else {
699                         if (ugd->ug_UiGadget.ug_iSelectMode == MULTI_FILE_MODE
700                             || ugd->ug_UiGadget.ug_iSelectMode == MULTI_ALL_MODE
701                             || ugd->ug_UiGadget.ug_iSelectMode == IMPORT_MODE) {
702                                 selected_box = __mf_ug_genlist_add_checkbox(listItemData, obj);
703                         } else if (ugd->ug_UiGadget.ug_iSelectMode == SINGLE_FILE_MODE
704                                    || ugd->ug_UiGadget.ug_iSelectMode == SINGLE_ALL_MODE
705                                    || ugd->ug_UiGadget.ug_iSelectMode == IMPORT_SINGLE) {
706
707                                 selected_box = __mf_ug_genlist_add_radio_box(listItemData, obj);
708                         }
709                 }
710                 return selected_box;
711         } else if (!strcmp(part, "elm.icon.2")) {
712                 __mf_ug_genlist_get_thumbnail(listItemData);
713                 thumb = __mf_ug_genlist_create_thumbnail(listItemData, obj);
714                 return thumb;
715         } else if (!strcmp(part, "elm.icon.3")) {
716 #ifdef LIST_PLAY_SUPPORT
717                 if (!ecore_file_is_dir(listItemData->ug_pItemName->str)) {
718                         Evas_Object *music_icon = NULL;
719                         Evas_Object *music_button = NULL;
720                         mf_ug_launch_type launch_type = mf_ug_util_get_file_launch_type(listItemData->ug_pItemName->str);
721                         ug_error("item name is [%s]", listItemData->ug_pItemName->str);
722                         if (launch_type == LAUNCH_TYPE_MUSIC) {
723                                 if (g_strcmp0(ugd->ug_ListPlay.ug_pPlayFilePath, listItemData->ug_pItemName->str) == 0) {
724                                         char *play_icon = NULL;
725                                         char *pause_icon = NULL;
726
727                                         music_button = elm_button_add(obj);
728                                         elm_object_style_set(music_button, "circle/empty");
729
730                                         music_icon = elm_image_add(music_button);
731                                         if (ugd->ug_ListPlay.ug_pPlayFilePath) {
732                                                 if (g_strcmp0(ugd->ug_ListPlay.ug_pPlayFilePath, listItemData->ug_pItemName->str) == 0) {
733                                                         if (ugd->ug_ListPlay.ug_iPlayState == PLAY_STATE_PLAYING) {
734                                                                 pause_icon = strdup(UG_ICON_MUSIC_PAUSE_WHITE);
735                                                                 elm_image_file_set(music_icon, pause_icon, NULL);
736                                                         } else if (ugd->ug_ListPlay.ug_iPlayState == PLAY_STATE_PAUSED) {
737                                                                 play_icon = strdup(UG_ICON_MUSIC_PLAY_WHITE);
738                                                                 elm_image_file_set(music_icon, play_icon, NULL);
739                                                         } else {
740                                                                 play_icon = strdup(UG_ICON_MUSIC_PLAY_WHITE);
741                                                                 elm_image_file_set(music_icon, play_icon, NULL);
742                                                         }
743                                                 } else {
744                                                         play_icon = strdup(UG_ICON_MUSIC_PLAY_WHITE);
745                                                         elm_image_file_set(music_icon, play_icon, NULL);
746                                                 }
747                                         } else {
748                                                 play_icon = strdup(UG_ICON_MUSIC_PLAY_WHITE);
749                                                 elm_image_file_set(music_icon, play_icon, NULL);
750                                         }
751                                         evas_object_size_hint_aspect_set(music_icon, EVAS_ASPECT_CONTROL_BOTH, 1, 1);
752                                         elm_object_part_content_set(music_button, "icon", music_icon);
753                                         evas_object_propagate_events_set(music_button, EINA_FALSE);
754                                         evas_object_smart_callback_add(music_button, "clicked", (Evas_Smart_Cb)mf_ug_cb_list_play_cb, (void*)listItemData);
755                                         evas_object_smart_callback_add(music_button, "pressed", mf_ug_cb_play_button_pressed_cb, ugd);
756                                         evas_object_smart_callback_add(music_button, "unpressed", mf_ug_cb_play_button_unpressed_cb, ugd);
757                                         listItemData->ug_pPlaybtn = music_button;
758                                         UG_TRACE_END;
759                                         return music_button;
760                                 }
761                         }
762                 }
763 #endif
764                 UG_TRACE_END;
765
766                 return NULL;
767
768         } else {
769                 UG_TRACE_END;
770                 return NULL;
771         }
772 }
773
774 static Evas_Object *__mf_ug_genlist_get_gl_editfiled_icon(void *data, Evas_Object *obj, const char *part)
775 {
776         ugListItemData *listItemData = (ugListItemData *)data;
777         ug_mf_retv_if(listItemData == NULL, NULL);
778         ugData *ugd = listItemData->ug_pData;
779         ug_mf_retv_if(ugd == NULL, NULL);
780
781         ug_debug("listItemData is [%p]", listItemData);
782
783         if (!strcmp(part, "elm.icon")) {
784                 Evas_Object *button = NULL;
785                 button = elm_button_add(obj);
786                 evas_object_propagate_events_set(button, EINA_FALSE);
787                 elm_object_text_set(button, MF_UG_LABEL_GO_TO_MYFILES);
788                 evas_object_smart_callback_add(button, "clicked", mf_ug_cb_goto_myfile_button_cb, ugd);
789                 if(listItemData->ug_pItem)
790                         elm_genlist_item_select_mode_set(listItemData->ug_pItem, ELM_OBJECT_SELECT_MODE_NONE);
791                 return button;
792         }
793         return NULL;
794 }
795
796 /******************************
797 ** Prototype    : __mf_ug_genlist_get_gl_state
798 ** Description  :
799 ** Input        : const void *data
800 **                Evas_Object *obj
801 **                const char *part
802 ** Output       : None
803 ** Return Value :
804 ** Calls        :
805 ** Called By    :
806 **
807 **  History        :
808 **  1.Date         : 2010/12/10
809 **    Author       : Samsung
810 **    Modification : Created function
811 **
812 ******************************/
813 static Eina_Bool __mf_ug_genlist_get_gl_state(void *data, Evas_Object *obj, const char *part)
814 {
815         return EINA_FALSE;
816 }
817
818
819 /******************************
820 ** Prototype    : __mf_ug_genlist_del_gl
821 ** Description  :
822 ** Input        : const void *data
823 **                Evas_Object *obj
824 ** Output       : None
825 ** Return Value :
826 ** Calls        :
827 ** Called By    :
828 **
829 **  History        :
830 **  1.Date         : 2010/12/10
831 **    Author       : Samsung
832 **    Modification : Created function
833 **
834 ******************************/
835 static void __mf_ug_genlist_del_gl(void *data, Evas_Object *obj)
836 {
837         UG_TRACE_BEGIN;
838         ugListItemData *itemData = (ugListItemData *)data;
839         ug_mf_retm_if(itemData == NULL, "itemData is NULL");
840         if (itemData->ug_pItemName && itemData->ug_pItemName->str) {
841                 g_string_free(itemData->ug_pItemName, TRUE);
842                 itemData->ug_pItemName = NULL;
843         }
844         if (itemData->ug_pThumbPath) {
845                 free(itemData->ug_pThumbPath);
846                 itemData->ug_pThumbPath = NULL;
847         }
848         free(itemData);
849         itemData = NULL;
850         UG_TRACE_END;
851         return;
852 }
853
854
855
856 /******************************
857 ** Prototype    : mf_ug_genlist_selected_gl
858 ** Description  : Samsung
859 ** Input        : void *data
860 **                Evas_Object *obj
861 **                void *event_info
862 ** Output       : None
863 ** Return Value :
864 ** Calls        :
865 ** Called By    :
866 **
867 **  History        :
868 **  1.Date         : 2010/12/10
869 **    Author       : Samsung
870 **    Modification : Created function
871 **
872 ******************************/
873 void mf_ug_genlist_selected_gl(void *data, Evas_Object *obj, void *event_info)
874 {
875         UG_TRACE_BEGIN;
876         ugData *ugd = (ugData *)data;
877         ug_mf_retm_if(ugd == NULL, "ugd is NULL");
878
879         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
880         int error_code = 0;
881         int mmc_card = 0;
882         error_code = mf_ug_util_get_mmc_state(&mmc_card);
883
884         ugNaviBar *pNavi_s = mf_ug_navi_bar_get_in_use_navi(ugd);
885         if (item != NULL) {
886                 ugListItemData *selected = (ugListItemData *)elm_object_item_data_get(item);
887                 fprintf(stdout, "selected text %s\n", (char *)selected->ug_pItemName->str);
888                 elm_genlist_item_selected_set(item, EINA_FALSE);
889                 if (ugd->ug_Status.ug_b_NaviPushFlag)
890                         return;
891                 if (!ecore_file_is_dir(selected->ug_pItemName->str)) {
892
893                         if (ugd->ug_UiGadget.ug_iSelectMode == EXPORT_MODE || ugd->ug_UiGadget.ug_iSelectMode == SAVE_MODE) {
894                                 return;
895                         }
896
897                         if (ugd->ug_UiGadget.ug_iSelectMode == SINGLE_FILE_MODE || ugd->ug_UiGadget.ug_iSelectMode == SINGLE_ALL_MODE) {
898                                 if (elm_radio_value_get(ugd->ug_MainWindow.ug_pRadioGroup) != selected->ug_iGroupValue) {
899                                         ugd->ug_Status.ug_iRadioOn = selected->ug_iGroupValue;
900                                         selected->ug_bChecked = true;
901                                         elm_radio_value_set(ugd->ug_MainWindow.ug_pRadioGroup, selected->ug_iGroupValue);
902                                 }
903
904                                 mf_ug_launch_type launch_type = mf_ug_util_get_file_launch_type(selected->ug_pItemName->str);
905                                 if (launch_type == LAUNCH_TYPE_MUSIC) {
906                                         if (ugd->ug_ListPlay.ug_iPlayState == PLAY_STATE_PLAYING || ugd->ug_ListPlay.ug_iPlayState == PLAY_STATE_PAUSED) {
907                                                 if (g_strcmp0(ugd->ug_ListPlay.ug_pPlayFilePath, selected->ug_pItemName->str) == 0) {
908                                                         mf_ug_list_play_destory_playing_file(ugd);
909                                                         //mf_ug_list_disable_play_itc(ugd, true);
910                                                         //mf_ug_list_play_update_item_icon(ugd);
911                                                         UG_SAFE_FREE_CHAR(ugd->ug_ListPlay.ug_pPlayFilePath);
912                                                 } else {
913                                                         //mf_ug_list_paly_hide_play_icon(ugd);
914                                                 }
915                                         }
916                                         mf_ug_cb_list_play_cb(selected, NULL, NULL);
917                                 }
918
919                         } else {
920                                 if (selected->ug_bChecked == 0) {
921                                         selected->ug_bChecked = 1;
922                                 } else {
923                                         selected->ug_bChecked = 0;
924                                 }
925                                 elm_check_state_set(selected->ug_pCheckBox, selected->ug_bChecked);
926
927                                 if (selected->ug_bChecked) {
928                                         ugd->ug_Status.ug_iCheckedCount++;
929                                 } else {
930                                         ugd->ug_Status.ug_iCheckedCount--;
931                                 }
932                                 if (ugd->ug_MainWindow.ug_pSelectAllCheckBox) {
933                                         if (ugd->ug_Status.ug_iTotalCount == ugd->ug_Status.ug_iCheckedCount) {
934                                                 ugd->ug_Status.ug_bSelectAllChecked = EINA_TRUE;
935                                         } else {
936                                                 ugd->ug_Status.ug_bSelectAllChecked = EINA_FALSE;
937                                         }
938                                         elm_check_state_pointer_set(ugd->ug_MainWindow.ug_pSelectAllCheckBox, &ugd->ug_Status.ug_bSelectAllChecked);
939                                 }
940                                 __mf_ug_genlist_show_select_info(selected);
941                         }
942                 } else if (ecore_file_is_dir(selected->ug_pItemName->str) && strcmp(selected->ug_pItemName->str, "Upper Level")) {
943                         if (ugd->ug_ListPlay.ug_iPlayState == PLAY_STATE_PLAYING || ugd->ug_ListPlay.ug_iPlayState == PLAY_STATE_PAUSED) {
944                                 mf_ug_list_play_destory_playing_file(ugd);
945                                 UG_SAFE_FREE_CHAR(ugd->ug_ListPlay.ug_pPlayFilePath);
946                         }
947                         if (ugd->ug_Status.ug_pPath) {
948                                 g_string_free(ugd->ug_Status.ug_pPath, TRUE);
949                                 ugd->ug_Status.ug_pPath = NULL;
950                         }
951                         ugd->ug_Status.ug_pPath = g_string_new(selected->ug_pItemName->str);
952                         ugd->ug_Status.ug_b_NaviPushFlag = true;
953
954                         if (ugd->ug_Status.ug_iViewType == mf_ug_view_root) {
955                                 ugd->ug_Status.ug_iViewType = mf_ug_view_normal;
956                                 mf_ug_cb_tab_bar_cb(ugd, selected->ug_pItemName->str);
957                         } else {
958                                 if (pNavi_s->ug_pCurrentPath != NULL) {
959                                         free(pNavi_s->ug_pCurrentPath);
960                                         pNavi_s->ug_pCurrentPath = NULL;
961                                 }
962                                 pNavi_s->ug_pCurrentPath = strdup(selected->ug_pItemName->str);
963                                 mf_ug_navi_bar_create_default_view(ugd);
964                         }
965                 }
966
967                 mf_ug_ctrl_bar_set_item_disable(ugd);
968         }
969         UG_TRACE_END;
970 }
971
972
973 static Evas_Object *__mf_ug_genlist_create_editfield(Evas_Object *parent, Evas_Object **pEntry)
974 {
975         ug_mf_retvm_if(parent == NULL, NULL, "parent is NULL");
976
977         Evas_Object *layout = elm_layout_add(parent);
978         elm_layout_theme_set(layout, "layout", "editfield", "default");
979         Evas_Object *entry = elm_entry_add(parent);
980         elm_object_part_content_set(layout, "elm.swallow.content", entry);
981         *pEntry = entry;
982         return layout;
983 }
984
985 static Evas_Object *__mf_ug_genlist_gl_new_folder_icon_get(void *data, Evas_Object * obj, const char *part)
986 {
987         UG_TRACE_BEGIN;
988         ugData *ugd = (ugData *)data;
989         ug_mf_retvm_if(ugd == NULL, NULL, "ugd is NULL");
990
991         if (!strcmp(part, "elm.icon")) {
992                 int error_code = 0;
993                 char *fileName = NULL;
994                 char *fullpath = (char *)malloc(sizeof(char) * MYFILE_FILE_PATH_LEN_MAX);
995                 if (fullpath == NULL) {
996                         return NULL;
997                 }
998                 GString *dest_fullpath;
999                 static Elm_Entry_Filter_Limit_Size limit_filter;
1000                 Evas_Object *entry = NULL;
1001
1002                 Evas_Object *edit_field = __mf_ug_genlist_create_editfield(obj, &entry);
1003
1004                 elm_entry_single_line_set(entry, EINA_TRUE);
1005                 elm_entry_scrollable_set(entry, EINA_TRUE);
1006
1007                 elm_object_signal_emit(edit_field, "elm,state,eraser,show", "elm");
1008
1009                 evas_object_size_hint_weight_set(edit_field, 1, 1);
1010                 evas_object_size_hint_align_set(edit_field, 1, 0.5);
1011                 //evas_object_show(edit_field);
1012                 ugd->ug_MainWindow.ug_pEditField = edit_field;
1013
1014                 ugd->ug_MainWindow.ug_pEntry = entry;
1015
1016                 limit_filter.max_char_count = MYFILE_FILE_NAME_LEN_MAX;
1017                 limit_filter.max_byte_count = 0;
1018
1019                 memset(fullpath, 0, MYFILE_FILE_PATH_LEN_MAX);
1020                 fileName = elm_entry_markup_to_utf8(MF_UG_LABEL_FOLDER);
1021                 snprintf(fullpath, (MYFILE_FILE_PATH_LEN_MAX), "%s/%s", (char *)ugd->ug_Status.ug_pPath->str, fileName);
1022
1023                 dest_fullpath = g_string_new(fullpath);
1024
1025                 elm_entry_markup_filter_append(entry, elm_entry_filter_limit_size, &limit_filter);
1026                 evas_object_smart_callback_add(entry, "maxlength,reached", mf_ug_cb_reach_max_len_cb, ugd);
1027
1028                 if (mf_ug_fm_svc_wrapper_detect_duplication(dest_fullpath)) {
1029                         ug_debug("dectetion result is TRUE\ndest_fullpath is %s\n", dest_fullpath->str);
1030                         error_code = mf_ug_fm_svc_wrapper_file_auto_rename(ugd, dest_fullpath, FILE_NAME_WITH_BRACKETS, &dest_fullpath);
1031                         ug_debug("rename result is %s\n", dest_fullpath->str);
1032                         memset(fullpath, 0, strlen(fullpath));
1033                         int len = strlen(ugd->ug_Status.ug_pPath->str) + 1;
1034                         strncpy(fullpath, dest_fullpath->str + len, MYFILE_FILE_PATH_LEN_MAX);
1035                         /*memset(fileName,0,strlen(fileName));*/
1036
1037                         UG_SAFE_FREE_CHAR(fileName);
1038                         fileName = elm_entry_markup_to_utf8(fullpath);
1039                 }
1040
1041                 /*elm_entry_entry_set(entry, ecore_file_file_get(params->m_ItemName->str));*/
1042
1043                 elm_object_signal_callback_add(edit_field, "elm,eraser,clicked", "elm", mf_ug_cb_eraser_clicked_cb, entry);
1044
1045                 evas_object_show(entry);
1046                 elm_object_focus_set(entry, EINA_TRUE);
1047
1048                 elm_entry_entry_set(entry, fileName);
1049                 elm_entry_cursor_end_set(entry);
1050                 UG_SAFE_FREE_CHAR(fullpath);
1051                 UG_SAFE_FREE_GSTRING(dest_fullpath);
1052                 UG_SAFE_FREE_CHAR(fileName);
1053                 return edit_field;
1054         }
1055         return NULL;
1056 }
1057
1058 Evas_Object *mf_ug_genlist_create_list_new_folder_style(void *data)
1059 {
1060
1061         UG_TRACE_BEGIN;
1062         ugData *ugd = (ugData *)data;
1063         ug_mf_retvm_if(ugd == NULL, NULL, "ugd is NULL");
1064
1065         Evas_Object *genlist = NULL;
1066         Evas_Object *pNaviBar = NULL;
1067
1068         pNaviBar = ugd->ug_MainWindow.ug_pNaviBar;
1069
1070         genlist = elm_genlist_add(pNaviBar);
1071         elm_object_focus_set(genlist, EINA_FALSE);
1072
1073         ugd->ug_Status.ug_newfolderitec.item_style = "1icon";
1074         ugd->ug_Status.ug_newfolderitec.func.text_get = NULL;
1075         ugd->ug_Status.ug_newfolderitec.func.content_get = __mf_ug_genlist_gl_new_folder_icon_get;
1076         ugd->ug_Status.ug_newfolderitec.func.state_get = NULL;
1077         ugd->ug_Status.ug_newfolderitec.func.del = NULL;
1078
1079         Elm_Object_Item *it = elm_genlist_item_append(genlist, &ugd->ug_Status.ug_newfolderitec, ugd, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
1080         elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_NONE);
1081         return genlist;
1082 }
1083
1084 /******************************
1085 ** Prototype    : __mf_ug_genlist_create_gl
1086 ** Description  : Samsung
1087 ** Input        : void *data
1088 ** Output       : None
1089 ** Return Value :
1090 ** Calls        :
1091 ** Called By    :
1092 **
1093 **  History        :
1094 **  1.Date         : 2010/12/10
1095 **    Author       : Samsung
1096 **    Modification : Created function
1097 **
1098 ******************************/
1099 Evas_Object *__mf_ug_genlist_create_gl(void *data)
1100 {
1101
1102         UG_TRACE_BEGIN;
1103         ugData *ugd = (ugData *)data;
1104         ug_mf_retvm_if(ugd == NULL, NULL, "ugd is NULL");
1105
1106         ugNaviBar *pNaviInUse = mf_ug_navi_bar_get_in_use_navi(ugd);
1107         ug_mf_retvm_if(pNaviInUse == NULL, NULL, "pNaviInUse is NULL");
1108
1109         Evas_Object *genlist;
1110         genlist = elm_genlist_add(ugd->ug_MainWindow.ug_pNaviBar);
1111         evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1112         evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
1113
1114         evas_object_smart_callback_add(genlist, "selected", mf_ug_genlist_selected_gl, ugd);
1115
1116 #ifdef  UG_THUMB_REAL_TIME_UPDATE
1117         if (ugd->ug_Status.ug_pThumbUpdateTimer != NULL) {
1118                 ecore_timer_del(ugd->ug_Status.ug_pThumbUpdateTimer);
1119                 ugd->ug_Status.ug_pThumbUpdateTimer = NULL;
1120         }
1121 #endif
1122
1123         ugd->ug_Status.ug_itc.item_style = "1text.3icon";
1124         ugd->ug_Status.ug_itc.func.text_get = __mf_ug_genlist_get_gl_label;
1125         ugd->ug_Status.ug_itc.func.content_get = __mf_ug_genlist_get_gl_icon;
1126         ugd->ug_Status.ug_itc.func.state_get = __mf_ug_genlist_get_gl_state;
1127         ugd->ug_Status.ug_itc.func.del = __mf_ug_genlist_del_gl;
1128
1129         if (ugd->ug_UiGadget.ug_iSelectMode == MULTI_FILE_MODE ||
1130             ugd->ug_UiGadget.ug_iSelectMode == SINGLE_FILE_MODE ||
1131             ugd->ug_UiGadget.ug_iSelectMode == IMPORT_MODE ||
1132             ugd->ug_UiGadget.ug_iSelectMode == EXPORT_MODE ||
1133             ugd->ug_UiGadget.ug_iSelectMode == SAVE_MODE ||
1134             ugd->ug_UiGadget.ug_iSelectMode == IMPORT_SINGLE) {
1135                 ugd->ug_Status.ug_normalitc.item_style = "1text.1icon.2";
1136                 ugd->ug_Status.ug_normalitc.func.text_get = __mf_ug_genlist_get_gl_label;
1137                 ugd->ug_Status.ug_normalitc.func.content_get = __mf_ug_genlist_get_gl_icon;
1138                 ugd->ug_Status.ug_normalitc.func.state_get = __mf_ug_genlist_get_gl_state;
1139                 ugd->ug_Status.ug_normalitc.func.del = __mf_ug_genlist_del_gl;
1140         }
1141
1142         UG_TRACE_END;
1143
1144         return genlist;
1145 }
1146
1147
1148 /******************************
1149 ** Prototype    : __mf_ug_genlist_init_item_data
1150 ** Description  : Samsung
1151 ** Input        : void *data
1152 **                ugListItemData **itemData
1153 **                char *fullname
1154 ** Output       : None
1155 ** Return Value :
1156 ** Calls        :
1157 ** Called By    :
1158 **
1159 **  History        :
1160 **  1.Date         : 2010/12/10
1161 **    Author       : Samsung
1162 **    Modification : Created function
1163 **
1164 ******************************/
1165 static void __mf_ug_genlist_init_item_data(void *data, ugListItemData **itemData, char *fullname)
1166 {
1167
1168         UG_TRACE_BEGIN;
1169         ugData *ugd = (ugData *)data;
1170         ugListItemData **ug_ItemData = itemData;
1171         ug_mf_retm_if(ugd == NULL, "ugd is NULL");
1172         ug_mf_retm_if(ug_ItemData == NULL, "ug_ItemData is NULL");
1173
1174         *ug_ItemData = (ugListItemData *)malloc(sizeof(ugListItemData));
1175         if (*ug_ItemData == NULL) {
1176                 ug_debug("ug_ItemData malloc failed");
1177         } else {
1178                 memset(*ug_ItemData, 0, sizeof(ugListItemData));
1179                 if (fullname) {
1180                         (*ug_ItemData)->ug_pItemName = g_string_new(fullname);
1181                 } else {
1182                         (*ug_ItemData)->ug_pItemName = NULL;
1183                 }
1184                 (*ug_ItemData)->ug_bChecked = false;
1185                 (*ug_ItemData)->ug_pRadioBox = NULL;
1186                 (*ug_ItemData)->ug_pCheckBox = NULL;
1187                 (*ug_ItemData)->ug_pPlaybtn = NULL;
1188                 (*ug_ItemData)->ug_iGroupValue = 0;
1189                 (*ug_ItemData)->ug_pItem = NULL;
1190                 (*ug_ItemData)->ug_pThumbPath = NULL;
1191                 (*ug_ItemData)->ug_bRealThumbFlag = false;
1192                 (*ug_ItemData)->ug_pData = ugd;
1193         }
1194         UG_TRACE_END;
1195 }
1196
1197 /******************************
1198 ** Prototype    : mf_ug_genlist_create_content_list_view
1199 ** Description  : Samsung
1200 ** Input        : void *data
1201 ** Output       : None
1202 ** Return Value :
1203 ** Calls        :
1204 ** Called By    :
1205 **
1206 **  History        :
1207 **  1.Date         : 2010/12/10
1208 **    Author       : Samsung
1209 **    Modification : Created function
1210 **
1211 ******************************/
1212 void mf_ug_genlist_upper_style_set(void *data)
1213 {
1214         ug_mf_retm_if(data == NULL, "data is NULL");
1215         ugData *ugd = (ugData *)data;
1216         ugd->ug_Status.ug_topitc.item_style = "1text.1icon.2";
1217         ugd->ug_Status.ug_topitc.func.text_get = __mf_ug_genlist_get_gl_label;
1218         ugd->ug_Status.ug_topitc.func.content_get = __mf_ug_genlist_gl_upper_icon_get;
1219         ugd->ug_Status.ug_topitc.func.state_get = __mf_ug_genlist_get_gl_state;
1220         ugd->ug_Status.ug_topitc.func.del = __mf_ug_genlist_del_gl;
1221 }
1222
1223 void mf_ug_genlist_goto_myfile_style_set(void *data)
1224 {
1225         ug_mf_retm_if(data == NULL, "data is NULL");
1226         ugData *ugd = (ugData *)data;
1227         ugd->ug_Status.ug_editfileditc.item_style = "1icon";
1228         ugd->ug_Status.ug_editfileditc.func.text_get = NULL;
1229         ugd->ug_Status.ug_editfileditc.func.content_get = __mf_ug_genlist_get_gl_editfiled_icon;
1230         ugd->ug_Status.ug_editfileditc.func.state_get = NULL;
1231         ugd->ug_Status.ug_editfileditc.func.del = __mf_ug_genlist_del_gl;
1232
1233         ugd->ug_Status.ug_editfiledBottomSeperatoritc.item_style = "dialogue/separator/11/with_line";
1234         ugd->ug_Status.ug_editfiledBottomSeperatoritc.func.text_get = NULL;
1235         ugd->ug_Status.ug_editfiledBottomSeperatoritc.func.content_get = NULL;
1236         ugd->ug_Status.ug_editfiledBottomSeperatoritc.func.state_get = NULL;
1237         ugd->ug_Status.ug_editfiledBottomSeperatoritc.func.del = NULL;
1238
1239         ugd->ug_Status.ug_editfiledUpperSeperatoritc.item_style = "dialogue/separator/10";
1240         ugd->ug_Status.ug_editfiledUpperSeperatoritc.func.text_get = NULL;
1241         ugd->ug_Status.ug_editfiledUpperSeperatoritc.func.content_get = NULL;
1242         ugd->ug_Status.ug_editfiledUpperSeperatoritc.func.state_get = NULL;
1243         ugd->ug_Status.ug_editfiledUpperSeperatoritc.func.del = NULL;
1244
1245 }
1246
1247 Evas_Object *mf_navi_bar_upper_create(Evas_Object *parent)
1248 {
1249         UG_TRACE_BEGIN;
1250         ug_mf_retvm_if(parent == NULL, NULL, "parent is NULL");
1251
1252         Evas_Object *upper_genlist = NULL;
1253         upper_genlist = elm_genlist_add(parent);
1254         ug_mf_retvm_if(upper_genlist == NULL, NULL, "upper_genlist is NULL");
1255         elm_object_focus_set(upper_genlist, EINA_FALSE);
1256         evas_object_size_hint_weight_set(upper_genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1257         evas_object_size_hint_align_set(upper_genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
1258         elm_scroller_bounce_set(upper_genlist, EINA_FALSE, EINA_FALSE);
1259         evas_object_show(upper_genlist);
1260         UG_TRACE_END;
1261         return upper_genlist;
1262
1263 }
1264
1265
1266 void mf_ug_upper_genlist_item_append(Evas_Object *pGenlist, void *data)
1267 {
1268         ug_mf_retm_if(data == NULL, "data is NULL");
1269         ug_mf_retm_if(pGenlist == NULL, "pGenlist is NULL");
1270         ugData *ugd = (ugData *)data;
1271
1272         Elm_Object_Item *item = NULL;
1273
1274         ugd->ug_Status.ug_topitc.item_style = "dialogue/bg/2icon";
1275         ugd->ug_Status.ug_topitc.func.text_get = NULL;
1276         ugd->ug_Status.ug_topitc.func.content_get = __mf_ug_genlist_upper_icon_get;
1277         ugd->ug_Status.ug_topitc.func.state_get = NULL;
1278         ugd->ug_Status.ug_topitc.func.del = NULL;
1279         ugd->ug_Status.ug_separtor_no_bottom_line_itc.item_style = "dialogue/seperator.4";
1280         ugd->ug_Status.ug_separtor_no_bottom_line_itc.func.text_get = NULL;
1281         ugd->ug_Status.ug_separtor_no_bottom_line_itc.func.content_get = NULL;
1282         ugd->ug_Status.ug_separtor_no_bottom_line_itc.func.state_get = NULL;
1283         ugd->ug_Status.ug_separtor_no_bottom_line_itc.func.del = NULL;
1284
1285         ugd->ug_Status.ug_separtor_with_bottom_line_itc.item_style = "dialogue/seperator.2";
1286         ugd->ug_Status.ug_separtor_with_bottom_line_itc.func.text_get = NULL;
1287         ugd->ug_Status.ug_separtor_with_bottom_line_itc.func.content_get = NULL;
1288         ugd->ug_Status.ug_separtor_with_bottom_line_itc.func.state_get = NULL;
1289         ugd->ug_Status.ug_separtor_with_bottom_line_itc.func.del = NULL;
1290
1291         // separator with no bottom line
1292         item = elm_genlist_item_append(pGenlist, &ugd->ug_Status.ug_separtor_no_bottom_line_itc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
1293
1294         elm_genlist_item_select_mode_set(item,  ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1295
1296         // button for dialogue item (dialogue bg)
1297         elm_genlist_item_append(pGenlist, &ugd->ug_Status.ug_topitc, (void *) ugd, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
1298
1299         // separator with bottom line
1300         item = elm_genlist_item_append(pGenlist, &ugd->ug_Status.ug_separtor_with_bottom_line_itc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
1301         elm_genlist_item_select_mode_set(item,  ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1302 }
1303
1304 void mf_ug_genlist_goto_myfile_item_append(Evas_Object *pGenlist, void *data)
1305 {
1306         ug_mf_retm_if(pGenlist == NULL, "pGenlist is NULL");
1307         ug_mf_retm_if(data == NULL, "data is NULL");
1308         ugData *ugd = (ugData *)data;
1309
1310         ugListItemData *ug_ItemData;
1311         Elm_Object_Item *it = NULL;
1312
1313         __mf_ug_genlist_init_item_data(ugd, &ug_ItemData, NULL);
1314         ug_debug("ug_ItemData is [%p]", &ug_ItemData);
1315
1316         //it = elm_genlist_item_append(pGenlist, &ugd->ug_Status.ug_editfiledUpperSeperatoritc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL,
1317         //                           NULL);
1318         //elm_genlist_item_select_mode_set(it,  ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1319
1320         it = elm_genlist_item_append(pGenlist, &ugd->ug_Status.ug_editfileditc, ug_ItemData, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
1321         ug_ItemData->ug_pItem = it;
1322         //elm_genlist_item_select_mode_set(it,  ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1323
1324         //it = elm_genlist_item_append(pGenlist, &ugd->ug_Status.ug_editfiledBottomSeperatoritc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL,
1325         //                           NULL);
1326         //elm_genlist_item_select_mode_set(it,  ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1327 }
1328
1329 Elm_Object_Item *mf_ug_genlist_item_append(Evas_Object *parent,
1330                                       ugFsNodeInfo *pNode,
1331                                       void *data,
1332                                       int groudValue,
1333                                       Elm_Genlist_Item_Class *itc)
1334 {
1335         ug_mf_retvm_if(parent == NULL, NULL, "pGenlist is NULL");
1336         ug_mf_retvm_if(pNode == NULL, NULL, "pNode is NULL");
1337         ug_mf_retvm_if(data == NULL, NULL, "data is NULL");
1338         ug_mf_retvm_if(itc == NULL, NULL, "itc is NULL");
1339
1340         ugData *ugd = (ugData *)data;
1341         ugListItemData *ug_ItemData = NULL;
1342         Elm_Object_Item *it = NULL;
1343         char *real_name = NULL;
1344
1345         real_name = g_strconcat(pNode->path, "/", pNode->name, NULL);
1346         __mf_ug_genlist_init_item_data(ugd, &ug_ItemData, real_name);
1347         if (ug_ItemData == NULL) {
1348                 ug_debug("alloc memory error\n");
1349                 if (real_name) {
1350                         free(real_name);
1351                         real_name = NULL;
1352                 }
1353                 return NULL;
1354         }
1355
1356         if (ugd->ug_Status.ug_iViewType == mf_ug_view_root) {
1357                 if(g_strcmp0(real_name, PHONE_FOLDER) == 0) {
1358                         ug_ItemData->ug_pThumbPath = strdup(UG_ICON_ITEM_PHONE);
1359                         ug_ItemData->ug_bRealThumbFlag = true;
1360
1361                 } else if(g_strcmp0(real_name, MEMORY_FOLDER) == 0) {
1362                         ug_ItemData->ug_pThumbPath = strdup(UG_ICON_ITEM_MMC);
1363                         ug_ItemData->ug_bRealThumbFlag = true;
1364                 }
1365         }
1366
1367         ug_ItemData->ug_iGroupValue = groudValue;
1368         if (ugd->ug_UiGadget.ug_iSelectMode == SINGLE_ALL_MODE || ugd->ug_UiGadget.ug_iSelectMode == SINGLE_FILE_MODE) {
1369                 if (__mf_ug_genlist_is_file_marked(ugd->ug_UiGadget.ug_pMultiSelectFileList, ug_ItemData->ug_pItemName)) {
1370                         ug_ItemData->ug_bChecked = true;
1371                         ugd->ug_Status.ug_iRadioOn = ug_ItemData->ug_iGroupValue;
1372                 }
1373         }
1374         it = elm_genlist_item_append(parent, itc, ug_ItemData, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
1375         ug_ItemData->ug_pItem = it;
1376
1377         if (real_name) {
1378                 free(real_name);
1379                 real_name = NULL;
1380         }
1381
1382         return  it;
1383 }
1384
1385 Evas_Object *mf_ug_genlist_create_content_list_view(void *data)
1386 {
1387         UG_TRACE_BEGIN;
1388         ugData *ugd = (ugData *)data;
1389         ug_mf_retvm_if(ugd == NULL, NULL, "ugd is NULL");
1390         ugNaviBar *pNaviInUse = mf_ug_navi_bar_get_in_use_navi(ugd);
1391         ug_mf_retvm_if(pNaviInUse == NULL, NULL, "pNaviInUse is NULL");
1392
1393         Evas_Object *genlist;
1394         int error_code = 0;
1395         Eina_List *dir_list = NULL;
1396         Eina_List *file_list = NULL;
1397         Elm_Object_Item *it = NULL;
1398         int groupValue = 1;
1399         int count = 0;
1400
1401         ugListItemData *ug_ItemData;
1402
1403         ugd->ug_Status.ug_iRadioOn = 0;
1404         ugd->ug_Status.ug_bNoContentFlag = false;
1405
1406         genlist = __mf_ug_genlist_create_gl(ugd);
1407
1408         ugd->ug_MainWindow.ug_pNaviGenlist = genlist;
1409
1410         GString *fullpath = g_string_new(ugd->ug_Status.ug_pPath->str);
1411
1412
1413
1414         if (ugd->ug_Status.ug_iViewType == mf_ug_view_root && ugd->ug_Status.ug_iMore != UG_MORE_SEARCH) {
1415                 mf_ug_util_generate_root_view_file_list(&dir_list, ugd->ug_Status.ug_iMmcFlag);
1416                 ugd->ug_UiGadget.ug_pDirList = dir_list;
1417                 ugd->ug_UiGadget.ug_pFilterList = NULL;
1418                 mf_ug_util_sort_the_file_list(ugd);
1419
1420         } else {
1421                 error_code = mf_ug_fm_svc_wapper_get_file_list_by_filter(ugd, fullpath, &dir_list, &file_list);
1422                 if (error_code == 0) {
1423
1424                         if (ugd->ug_UiGadget.ug_pDirList) {
1425                                 mf_ug_util_free_eina_list_data(&ugd->ug_UiGadget.ug_pDirList, NODE_TYPE_PNODE);
1426                                 ugd->ug_UiGadget.ug_pDirList = NULL;
1427                         }
1428                         if (ugd->ug_UiGadget.ug_pFilterList) {
1429                                 mf_ug_util_free_eina_list_data(&ugd->ug_UiGadget.ug_pFilterList, NODE_TYPE_PNODE);
1430                                 ugd->ug_UiGadget.ug_pFilterList = NULL;
1431                         }
1432
1433                         ugd->ug_UiGadget.ug_pFilterList = file_list;
1434                         ugd->ug_UiGadget.ug_pDirList = dir_list;
1435                         mf_ug_util_sort_the_file_list(ugd);
1436
1437                 }
1438
1439         }
1440
1441         /*      list option set */
1442         unsigned int dir_list_len = eina_list_count(dir_list);
1443         unsigned int filter_file_list_len = eina_list_count(ugd->ug_UiGadget.ug_pFilterList);
1444         ug_debug("error_code is [%d]dir_list_len is [%d]file_list_len is [%d]\n", error_code, dir_list_len, filter_file_list_len);
1445
1446
1447         if ((dir_list_len == 0 && filter_file_list_len == 0)) {
1448                 ug_debug("===========================================  create the no content view");
1449                 Evas_Object *layout;
1450                 Evas_Object *nocontent = NULL;
1451
1452                 nocontent = elm_layout_add(ugd->ug_MainWindow.ug_pMainLayout);
1453                 elm_layout_theme_set(nocontent, "layout", "nocontents", "text");
1454                 elm_object_part_text_set(nocontent, "elm.text", MF_UG_LABEL_NO_FILES);
1455
1456                 ugd->ug_Status.ug_bNoContentFlag = true;
1457
1458                 elm_scroller_bounce_set(genlist, EINA_FALSE, EINA_FALSE);
1459
1460                 layout = elm_layout_add(ugd->ug_MainWindow.ug_pMainLayout);
1461
1462                 elm_layout_file_set(layout, UG_EDJ_NAVIGATIONBAR, UG_GRP_NO_CONTENT);
1463                 elm_object_part_content_set(layout, "myfile.noContent.upper", genlist);
1464                 elm_object_part_content_set(layout, "myfile.noContent.content", nocontent);
1465                 mf_ug_util_add_dir_watch(fullpath->str, ugd);
1466                 g_string_free(fullpath, true);
1467                 fullpath = NULL;
1468                 return layout;
1469         }
1470         ugFsNodeInfo *pNode = NULL;
1471         Eina_List *l = NULL;
1472
1473         EINA_LIST_FOREACH(ugd->ug_UiGadget.ug_pDirList, l, pNode) {
1474                 count++;
1475
1476
1477 if (ugd->ug_UiGadget.ug_iSelectMode == MULTI_FILE_MODE ||
1478                     ugd->ug_UiGadget.ug_iSelectMode == SINGLE_FILE_MODE ||
1479                     ugd->ug_UiGadget.ug_iSelectMode == IMPORT_MODE ||
1480                     ugd->ug_UiGadget.ug_iSelectMode == EXPORT_MODE ||
1481                     ugd->ug_UiGadget.ug_iSelectMode == SAVE_MODE ||
1482                     ugd->ug_UiGadget.ug_iSelectMode == IMPORT_SINGLE) {
1483
1484                         mf_ug_genlist_item_append(genlist, pNode, ugd, 0, &ugd->ug_Status.ug_normalitc);
1485                 } else {
1486                         mf_ug_genlist_item_append(genlist, pNode, ugd, groupValue, &ugd->ug_Status.ug_itc);
1487                         groupValue++;
1488                 }
1489         }
1490
1491         EINA_LIST_FOREACH(ugd->ug_UiGadget.ug_pFilterList, l, pNode) {
1492                 count++;
1493                 if (ugd->ug_UiGadget.ug_iSelectMode == SINGLE_ALL_MODE || ugd->ug_UiGadget.ug_iSelectMode == SINGLE_FILE_MODE) {
1494                         mf_ug_genlist_item_append(genlist, pNode, ugd, groupValue, &ugd->ug_Status.ug_itc);
1495                         groupValue++;
1496                 } else if (ugd->ug_UiGadget.ug_iSelectMode == EXPORT_MODE || ugd->ug_UiGadget.ug_iSelectMode == SAVE_MODE) {
1497                         mf_ug_genlist_item_append(genlist, pNode, ugd, 0, &ugd->ug_Status.ug_normalitc);
1498                 } else {
1499                         mf_ug_genlist_item_append(genlist, pNode, ugd, 0, &ugd->ug_Status.ug_itc);
1500                 }
1501 #if 0
1502                 if ((ugd->ug_UiGadget.ug_iSelectMode == SINGLE_ALL_MODE || ugd->ug_UiGadget.ug_iSelectMode == SINGLE_FILE_MODE) && ug_ItemData->ug_bChecked) {
1503
1504                         if (ugd->ug_Status.ug_bUpperFlag ) {
1505                                 if (count > MF_UG_SELECTED_ITEM_BRING_UP_COUNT)
1506                                         elm_genlist_item_top_show(it);
1507                         } else {
1508                                 if (count > MF_UG_SELECTED_ITEM_BRING_UP_COUNT_MAX)
1509                                         elm_genlist_item_top_show(it);
1510                         }
1511                 }
1512 #endif
1513         }
1514
1515         if (fullpath != NULL) {
1516                 if ( ugd->ug_Status.ug_iViewType != mf_ug_view_root) {
1517                         mf_ug_util_add_dir_watch(fullpath->str, ugd);
1518                 }
1519                 g_string_free(fullpath, TRUE);
1520         }
1521         UG_TRACE_END;
1522         return genlist;
1523 }
1524
1525 static char *__get_title_gl_text(void *data, Evas_Object *obj, const char *part)
1526 {
1527         if (data)
1528                 return g_strdup((char *)data);
1529         else
1530                 return NULL;
1531 }
1532 static void __del_title_gl(void *data, Evas_Object * obj)
1533 {
1534         UG_SAFE_FREE_CHAR(data);
1535 }
1536
1537 Evas_Object *mf_ug_genlist_create_path_info(Evas_Object *parent, Elm_Genlist_Item_Class *itc, char *info)
1538 {
1539         ug_mf_retvm_if(parent == NULL, NULL, "parent is NULL");
1540
1541         Evas_Object *genlist = NULL;
1542         Elm_Object_Item *git=NULL;
1543
1544         genlist = elm_genlist_add(parent);
1545         elm_genlist_homogeneous_set(genlist, EINA_TRUE);
1546
1547         itc->item_style = "grouptitle";
1548         itc->func.text_get = __get_title_gl_text;
1549         itc->func.del = __del_title_gl;
1550
1551         git = elm_genlist_item_append(genlist, itc, info, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
1552         elm_genlist_item_select_mode_set(git, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1553
1554         return genlist;
1555 }
1556
1557 void mf_ug_genlist_item_remove(Evas_Object *parent, const char *path)
1558 {
1559         ug_debug("path is [%s]", path);
1560         ug_mf_retm_if(parent == NULL, "parent is NULL");
1561         ug_mf_retm_if(path == NULL, "path is NULL");
1562
1563         ugListItemData *itemData = NULL;
1564         Elm_Object_Item *it = NULL;
1565
1566         it = elm_genlist_first_item_get(parent);
1567         while (it) {
1568                 itemData = elm_object_item_data_get(it);
1569                 if (itemData->ug_pItemName == NULL || itemData->ug_pItemName->str == NULL) {
1570                         continue;
1571                 }
1572                 ug_debug("itemData->m_ItemName->str is [%s]", itemData->ug_pItemName->str);
1573                 if (g_strcmp0(path, itemData->ug_pItemName->str) == 0) {
1574                         elm_object_item_del(it);
1575                         break;
1576                 }
1577
1578                 it = elm_genlist_item_next_get(it);
1579         }
1580
1581 }
1582