Tizen 2.0 Release
[apps/core/preloaded/myfiles.git] / src / widget / mf-gengrid.c
1 /*
2  * Copyright 2013         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 "mf-widget.h"
20 #include "mf-util.h"
21 #include "mf-callback.h"
22 #include "mf-launch.h"
23 #include "mf-fm-svc-wrapper.h"
24 #include "mf-otg.h"
25 #include "mf-language-mgr.h"
26
27 Elm_Gengrid_Item_Class gic;
28 #define GENGRID_ITEM_WIDTH      72
29
30 static inline void __mf_gengrid_get_thumbnail(mfItemData_s *params)
31 {
32         int error_code = 0;
33         if (params->thumb_path == NULL) {
34                 if (ecore_file_is_dir(params->m_ItemName->str)) {
35                         if (params->ap->mf_Status.view_type == mf_view_root) {
36                                 params->thumb_path = strdup(MF_ICON_THUMBNAIL_FOLDER);
37                         } else if (mf_fm_svc_wrapper_is_root_path(params->ap->mf_Status.path->str) == MYFILE_OTG) {
38                                 params->thumb_path = strdup(MF_ICON_EXTERNAL_DEVICE);
39                         } else {
40                                 params->thumb_path = strdup(MF_ICON_THUMBNAIL_FOLDER);
41                         }
42                         params->real_thumb_flag = TRUE;
43                 } else {
44                         const char *icon_path = NULL;
45                         mf_file_attr_get_file_icon(params->m_ItemName->str, &error_code, MF_ROTATE_LANDSCAPE, &icon_path, &params->media);
46                         if (icon_path && ecore_file_exists(icon_path)) {
47                                 if (!g_strcmp0(icon_path, DEFAULT_ICON)) {
48                                         params->thumb_path = strdup(MF_ICON_THUMBNAIL_UNKOWN);
49                                 } else {
50                                         params->thumb_path = strdup(icon_path);
51                                 }
52                                 params->real_thumb_flag = TRUE;
53                         } else {        /*must be image/video file*/
54                                 fsFileType type = FILE_TYPE_NONE;
55                                 type = mf_file_attr_get_file_type_by_mime(params->m_ItemName->str);
56
57                                 if (type == FILE_TYPE_VIDEO) {
58                                         params->thumb_path = strdup(MF_ICON_THUMBNAIL_VIDEO);
59                                 } else if (type == FILE_TYPE_IMAGE) {
60                                         params->thumb_path = strdup(MF_ICON_IMAGE);
61                                 } else {
62                                         params->thumb_path = strdup(MF_ICON_THUMBNAIL_UNKOWN);
63                                 }
64                                 params->real_thumb_flag = FALSE;
65                                 error_code = MYFILE_ERR_GET_THUMBNAIL_FAILED;
66                         }
67                 }
68         }  else if (params->thumb_path && ecore_file_exists(params->thumb_path)) {
69                 if (params->real_thumb_flag == FALSE) {
70                         error_code = MYFILE_ERR_GET_THUMBNAIL_FAILED;
71                 }
72         } else if (!ecore_file_exists(params->thumb_path)) {
73                 mf_error("thumb_path[%s] is not exist", params->thumb_path);
74                 free(params->thumb_path);
75                 params->thumb_path = NULL;
76                 /*set default icon*/
77                 fsFileType type = FILE_TYPE_NONE;
78                 type = mf_file_attr_get_file_type_by_mime(params->m_ItemName->str);
79                 if (ecore_file_is_dir(params->m_ItemName->str)) {
80                         if (mf_fm_svc_wrapper_is_root_path(params->ap->mf_Status.path->str) == MYFILE_OTG) {
81                                 params->thumb_path = strdup(MF_ICON_EXTERNAL_DEVICE);
82                         } else {
83                                 params->thumb_path = strdup(MF_ICON_FOLDER);
84                         }
85
86                 } else {
87                         if (type == FILE_TYPE_VIDEO) {
88                                 params->thumb_path = strdup(MF_ICON_THUMBNAIL_VIDEO);
89                         } else if (type == FILE_TYPE_IMAGE) {
90                                 params->thumb_path = strdup(MF_ICON_IMAGE);
91                         } else {
92                                 params->thumb_path = strdup(DEFAULT_ICON);
93                         }
94                 }
95                 params->real_thumb_flag = FALSE;
96                 error_code = MYFILE_ERR_GET_THUMBNAIL_FAILED;
97         }
98         if (error_code != 0) {
99                 mf_callback_create_thumbnail(params, mf_callback_thumb_created_cb);
100         }
101 }
102
103 static void __mf_gengrid_icon_clicked(void *data, Evas_Object *obj, void *event_info)
104 {
105         MF_TRACE_BEGIN;
106         mf_retm_if(data == NULL, "data is NULL");
107         mf_retm_if(event_info == NULL, "event_info is NULL");
108         struct appdata *ap = (struct appdata *)data;
109         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
110         int ret = 0;
111
112         if (ap->mf_Status.more == MORE_EDIT)
113                 return;
114         if (item != NULL) {
115                 elm_gengrid_item_selected_set(item, EINA_FALSE);
116                 mfItemData_s *selected = (mfItemData_s *) elm_object_item_data_get(item);
117                 mf_retm_if(selected == NULL, "selected is NULL");
118                 mf_retm_if(selected->m_ItemName == NULL, "selected->m_ItemName is NULL");
119                 mf_retm_if(selected->m_ItemName->str == NULL, "selected->m_ItemName->str is NULL");
120                 if (mf_fm_svc_wrapper_is_dir(selected->m_ItemName)) {
121
122                         myfileNaviBar *pNavi_s = mf_navi_bar_get_in_use(ap);
123                         mf_retm_if(pNavi_s == NULL, "get navi structure failed");
124                         GString *new_path = NULL;
125                         int error_code = 0;
126                         bool result = FALSE;
127
128                         if (ap->mf_Status.more == MORE_SEARCH)
129                                 ap->mf_Status.more = MORE_DEFAULT;
130
131
132                         new_path = g_string_new(selected->m_ItemName->str);
133
134 #ifdef MYFILE_USB_OTG
135                         /* if click items under otg root path, it means some disk take into use*/
136                         error_code = mf_file_attr_is_disk_link(new_path->str, &result);
137                         if (error_code == 0 && result == TRUE) {        /* a usb disk take into use */
138                                 /*
139                                 **we don't need to set the previous device flag to be false
140                                 **because click cannot jump from one device to another
141                                 */
142                                 mf_otg_set_node_using_flag(ap, new_path->str,TRUE);
143                         }
144 #endif
145                         /*set new path */
146                         if (ap->mf_Status.path != NULL) {
147                                 g_string_free(ap->mf_Status.path, TRUE);
148                                 ap->mf_Status.path = NULL;
149                         }
150                         ap->mf_Status.path = new_path;
151
152                         if (pNavi_s->pCurrentPath != NULL) {
153                                 free(pNavi_s->pCurrentPath);
154                                 pNavi_s->pCurrentPath = NULL;
155                         }
156                         pNavi_s->pCurrentPath = g_strdup(new_path->str);
157
158                         if (ap->mf_Status.view_type == mf_view_root) {
159                                 ap->mf_Status.view_type = mf_view_normal;
160 #ifdef MYFILE_SPLIT_VIEW
161                                 if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
162                                         if (ap->mf_Status.view_type != mf_view_root_category && ap->mf_Status.view_type != mf_view_root) {
163                                                 mf_navi_bar_reset_panes_main(ap);
164                                         }
165                                 }
166 #endif
167                         }
168                         mf_widget_refresh_view(ap);
169                 } else {
170                         ret = mf_launch_service(ap, selected->m_ItemName->str);
171                 }
172         }
173         MF_TRACE_END;
174 }
175 static void __mf_gengrid_item_check_changed(void *data, Evas_Object *obj, void *event_info)
176 {
177         MF_TRACE_BEGIN;
178
179         mfItemData_s *itemData = (mfItemData_s *)data;
180         struct appdata *ap = (struct appdata *)itemData->ap;
181
182         itemData->m_checked = elm_check_state_get(obj);
183         if (itemData->m_checked) {
184                 ap->mf_MainWindow.pEditView.iCheckedCount++;
185         } else {
186                 ap->mf_MainWindow.pEditView.iCheckedCount--;
187         }
188
189         //if (ap->mf_MainWindow.pEditView.pSelectAllCheckBox) {
190
191                 if (ap->mf_MainWindow.pEditView.iTotalCount == ap->mf_MainWindow.pEditView.iCheckedCount) {
192                         ap->mf_MainWindow.pEditView.bSelectAllChecked = EINA_TRUE;
193                 } else {
194                         ap->mf_MainWindow.pEditView.bSelectAllChecked = EINA_FALSE;
195                 }
196                 //elm_check_state_pointer_set(ap->mf_MainWindow.pEditView.pSelectAllCheckBox, &ap->mf_MainWindow.pEditView.bSelectAllChecked);
197         //}
198
199         elm_gengrid_item_selected_set(itemData->item, itemData->m_checked);
200         mf_genlist_gl_edit_item_selected(ap);
201         MF_TRACE_END;
202 }
203
204 void mf_gengrid_select_all(void *data)
205 {
206         MF_TRACE_BEGIN;
207         struct appdata *ap = (struct appdata *)data;
208         mf_retm_if(ap == NULL, "input parameter data error");
209
210         Evas_Object *gengrid = ap->mf_MainWindow.pEditView.pGengrid;
211         mfItemData_s *it_data = NULL;
212         Elm_Object_Item *it = NULL;
213
214         it = elm_gengrid_first_item_get(gengrid);
215         while (it) {
216                 it_data = elm_object_item_data_get(it);
217                 if (it_data) {
218                         it_data->m_checked = ap->mf_MainWindow.pEditView.bSelectAllChecked;
219                         elm_check_state_set(it_data->pCheckBox, it_data->m_checked);
220                         elm_gengrid_item_selected_set(it_data->item, it_data->m_checked);
221                 }
222                 it = elm_gengrid_item_next_get(it);
223         }
224
225 }
226
227 void mf_gengrid_edit_select(void *data, int *count)
228 {
229         MF_TRACE_BEGIN;
230         struct appdata *ap = (struct appdata *)data;
231         mf_retm_if(ap == NULL, "input parameter data error");
232
233         Evas_Object *gengrid = ap->mf_MainWindow.pEditView.pGengrid;
234         mfItemData_s *itemData = NULL;
235         Elm_Object_Item *it = NULL;
236
237         it = elm_gengrid_first_item_get(gengrid);
238         while (it) {
239                 itemData = elm_object_item_data_get(it);
240                 if (itemData->m_checked) {
241                         ap->mf_Status.flagFileSelect = TRUE;
242                         (*count)++;
243                 }
244
245                 it = elm_gengrid_item_next_get(it);
246         }
247         MF_TRACE_END;
248 }
249
250 void mf_gengrid_create_grid_items(void *data, Evas_Object *grid, Eina_List *file_list)
251 {
252         MF_TRACE_BEGIN;
253         mf_retm_if(grid == NULL, "grid is NULL");
254         mf_retm_if(file_list == NULL, "file_list is NULL");
255         mf_retm_if(data == NULL, "data is NULL");
256         struct appdata *ap = (struct appdata*)data;
257
258         Eina_List *l = NULL;
259         void  *pData = NULL;
260         mfItemData_s *m_TempItem = NULL;
261
262         elm_gengrid_clear(grid);
263
264         mf_debug("****************** count is [%d]", eina_list_count(file_list));
265         EINA_LIST_FOREACH(file_list, l, pData) {
266                 char *real_name = NULL;
267
268                 fsNodeInfo *pNode = (fsNodeInfo *)pData;
269                 if (pNode == NULL)
270                         continue;
271                 real_name = g_strconcat(pNode->path, "/", pNode->name, NULL);
272
273                 if (real_name == NULL) {
274                         continue;
275                 }
276                 mf_debug("************** gengrid item is [%s]", real_name);
277                 m_TempItem = (mfItemData_s *) malloc(sizeof(mfItemData_s));
278                 if (m_TempItem == NULL) {
279                         free(real_name);
280                         real_name = NULL;
281                         continue;
282                 }
283                 Elm_Object_Item *it = NULL;
284
285                 m_TempItem->m_ItemName = g_string_new(real_name);
286                 m_TempItem->size = NULL;
287                 m_TempItem->create_date = NULL;
288                 m_TempItem->m_checked = FALSE;
289                 m_TempItem->pCheckBox = NULL;
290                 m_TempItem->thumb_path = NULL;
291                 m_TempItem->real_thumb_flag = FALSE;
292                 m_TempItem->unregister_lang_mgr = TRUE;
293                 m_TempItem->media = NULL;
294                 m_TempItem->ap = ap;
295
296                 if (ap->mf_Status.more == MORE_INTERNAL_COPY_MOVE || ap->mf_Status.more == MORE_INTERNAL_COPY
297                     || ap->mf_Status.more == MORE_INTERNAL_MOVE || ap->mf_Status.more == MORE_DATA_COPYING || ap->mf_Status.more == MORE_DATA_MOVING){
298                         mf_debug();
299                         it = elm_gengrid_item_append(grid, &gic, m_TempItem, NULL, NULL);
300                         mf_language_mgr_register_gengrid_item(it);
301                 } else {
302                         mf_debug();
303                         it = elm_gengrid_item_append(grid, &gic, m_TempItem, __mf_gengrid_icon_clicked, ap);
304                         mf_language_mgr_register_gengrid_item(it);
305                 }
306                 m_TempItem->item = it;
307                 free(real_name);
308                 mf_debug();
309         }
310 }
311
312 void mf_gengrid_refresh(void *data)
313 {
314         MF_TRACE_BEGIN;
315         mf_retm_if(data == NULL, "data is NULL");
316         struct appdata *ap = (struct appdata *)data;
317
318         mf_gengrid_create_grid_items(ap, ap->mf_MainWindow.pNaviGengrid, ap->mf_FileOperation.file_list);
319 }
320
321
322 void mf_gengrid_item_select(void *data, Evas_Object *pGengrid, int *file_count, int *dir_count)
323 {
324         mf_retm_if(data == NULL, "data is NULL");
325         mf_retm_if(pGengrid == NULL, "pGengrid is NULL");
326         struct appdata *ap = (struct appdata *)data;
327         Elm_Object_Item *it = NULL;
328         mfItemData_s *itemData = NULL;
329         //int error_code = 0;
330
331         it = elm_gengrid_first_item_get(pGengrid);
332         while (it) {
333                 itemData = elm_object_item_data_get(it);
334                 if (itemData->m_checked) {
335                         if (ecore_file_is_dir(itemData->m_ItemName->str)) {
336                                 //bool systemfolder = FALSE;
337                                 ap->mf_Status.flagFolderSelect = TRUE;
338                                 (*dir_count)++;
339                         } else {
340                                 ap->mf_Status.flagFileSelect = TRUE;
341                                 (*file_count)++;
342                         }
343                 }
344
345                 it = elm_gengrid_item_next_get(it);
346
347         }
348 }
349
350 void mf_gengrid_get_grid_selected_files(Evas_Object *gengrid, Eina_List **list)
351 {
352         MF_TRACE_BEGIN;
353         mf_retm_if(gengrid == NULL, "gengrid is NULL");
354
355         mfItemData_s *itemData = NULL;
356         Elm_Object_Item *it = NULL;
357         GString *pTemp = NULL;
358
359         it = elm_gengrid_first_item_get(gengrid);
360         while (it) {
361                 itemData = elm_object_item_data_get(it);
362                 if (itemData->m_checked) {
363                         pTemp = g_string_new(itemData->m_ItemName->str);
364                         *list = eina_list_append(*list, pTemp);
365                 }
366                 it = elm_gengrid_item_next_get(it);
367         }
368         MF_TRACE_END;
369
370 }
371
372 void mf_gengrid_get_grid_selected_items(Evas_Object *gengrid, Eina_List **list)
373 {
374         MF_TRACE_BEGIN;
375         mf_retm_if(gengrid == NULL, "gengrid is NULL");
376
377         mfItemData_s *itemData = NULL;
378         Elm_Object_Item *it = NULL;
379
380         it = elm_gengrid_first_item_get(gengrid);
381         while (it) {
382                 itemData = elm_object_item_data_get(it);
383                 if (itemData->m_checked) {
384                         *list = eina_list_append(*list, itemData);
385                 }
386                 it = elm_gengrid_item_next_get(it);
387         }
388         MF_TRACE_END;
389
390 }
391
392 static Evas_Object *__mf_gengrid_item_icon_get(void *data, Evas_Object *obj, const char *part)
393 {
394         MF_TRACE_BEGIN;
395         mfItemData_s *params = (mfItemData_s *) data;
396         struct appdata *ap = (struct appdata *)params->ap;
397         mf_retvm_if(params == NULL, NULL, "param is NULL");
398         mf_retvm_if(params->m_ItemName == NULL, NULL, "m_ItemName is NULL");
399         mf_retvm_if(part == NULL, NULL, "part is NULL");
400         mf_retvm_if(obj == NULL, NULL, "obj is NULL");
401         mf_retvm_if(ap == NULL, NULL, "ap is NULL");
402
403         if (!strcmp(part, "elm.swallow.icon")) {
404                 Evas_Object *bg = elm_bg_add(obj);
405                 __mf_gengrid_get_thumbnail(params);
406                 elm_bg_load_size_set(bg, MF_ICON_SIZE, MF_ICON_SIZE);
407
408                 if (bg) {
409                         elm_bg_file_set(bg, params->thumb_path, NULL);
410                         evas_object_size_hint_max_set(bg, MF_ICON_SIZE, MF_ICON_SIZE);
411                         evas_object_size_hint_aspect_set(bg, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
412                         evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
413                         evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL);
414                         evas_object_show(bg);
415
416                 }
417                 fsFileType type = FILE_TYPE_NONE;
418                 type = mf_file_attr_get_file_type_by_mime(params->m_ItemName->str);
419                 if (type == FILE_TYPE_VIDEO) {
420                         Evas_Object *layout = NULL;;
421                         layout = elm_layout_add(obj);
422                         elm_object_focus_set(layout, EINA_FALSE);
423                         elm_layout_file_set(layout, EDJ_NAME, GRP_THUMBNAIL_ONLY);
424                         elm_object_part_content_set(layout, "thumbnail", bg);
425
426                         const char *play_icon_path = MF_ICON_THUMBNAIL_VIDEO_PLAY;
427                         Evas_Object *play_icon = NULL;
428                         play_icon = elm_image_add(obj);
429                         elm_object_focus_set(play_icon, EINA_FALSE);
430                         elm_image_file_set(play_icon, play_icon_path, NULL);
431                         evas_object_show(play_icon);
432                         elm_object_part_content_set(layout, "video_play", play_icon);
433                         return layout;
434
435                 }
436                 return bg;
437         } else if (!strcmp(part, "elm.swallow.block") && params->ap->mf_Status.more == MORE_EDIT) {
438                 Evas_Object *layout = elm_layout_add(obj);
439                 elm_layout_theme_set(layout, "gengrid", "item", "block/default");
440                 evas_object_propagate_events_set(layout, 0);
441                 evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_DOWN, (Evas_Object_Event_Cb)mf_callback_rename_create_cb, params);
442                 return layout;
443         } else if (!strcmp(part, "elm.swallow.end") && params->ap->mf_Status.more == MORE_EDIT)
444         {
445                 Evas_Object *ck = elm_check_add(obj);
446                 mf_retvm_if(ck == NULL, NULL, "ck is NULL");
447                 elm_object_focus_set(ck, EINA_FALSE);
448                 params->pCheckBox = ck;
449                 elm_object_style_set(ck, "grid");
450                 evas_object_propagate_events_set(ck, 1);
451                 mf_debug("params is [%p]params->m_checked is [%d]",params, params->m_checked);
452                 elm_check_state_set(ck, params->m_checked);
453                 elm_gengrid_item_selected_set(params->item, params->m_checked);
454                 evas_object_smart_callback_add(ck, "changed", __mf_gengrid_item_check_changed, params);
455                 evas_object_show(ck);
456                 return ck;
457         }
458         return NULL;
459 }
460
461 static char *__mf_gengrid_item_label_get(void *data, Evas_Object * obj, const char *part)
462 {
463         MF_TRACE_BEGIN;
464         mfItemData_s *params = (mfItemData_s *) data;
465         mf_retv_if(params == NULL, NULL);
466
467         if (strcmp(part, "elm.text") == 0) {
468                 /* supporting multi-lang for default folders */
469
470                 if (g_strcmp0(params->m_ItemName->str, PHONE_FOLDER) == 0) {
471                         return g_strdup(GET_SYS_STR(MF_LABEL_PHONE));
472                 } else if (g_strcmp0(params->m_ItemName->str, MEMORY_FOLDER) == 0) {
473                         return g_strdup(GET_SYS_STR(MF_LABEL_MMC));
474                 } else if (g_strcmp0(params->m_ItemName->str, OTG_FOLDER) == 0) {
475                         return g_strdup(GET_STR(MF_LABEL_OTG));
476                 }else {
477                         if (params->ap->mf_Status.more == MORE_SEARCH &&params->ap->mf_Status.search_filter) {
478                                 char *markup_name = NULL;
479                                 bool res = false;
480                                 markup_name = (char *)mf_util_search_markup_keyword(ecore_file_file_get(params->m_ItemName->str), params->ap->mf_Status.search_filter, &res);
481                                 if(res) {
482                                         MF_TRACE_END;
483                                         return g_strdup(markup_name);
484                                 }
485                         }
486
487                         if (params->ap->mf_Status.iExtensionState == MF_EXTENSION_HIDE && !mf_file_attr_is_dir(params->m_ItemName->str)) {
488                                 return mf_fm_svc_get_file_name(params->m_ItemName);
489
490                         } else {
491                                 return g_strdup(ecore_file_file_get(params->m_ItemName->str));
492                         }
493                 }
494         }  else {
495                 return strdup(_(""));
496         }
497         MF_TRACE_END;
498 }
499
500 static void __mf_gengrid_item_del(void *data, Evas_Object * obj)
501 {
502         mfItemData_s *params = (mfItemData_s *) data;
503         assert(params);
504         if (params->m_ItemName) {
505                 g_string_free(params->m_ItemName, TRUE);
506                 params->m_ItemName = NULL;
507         }
508         if (params->thumb_path) {
509                 free(params->thumb_path);
510                 params->thumb_path = NULL;
511         }
512         if (params->create_date) {
513                 free(params->create_date);
514                 params->create_date = NULL;
515         }
516         if (params->size) {
517                 free(params->size);
518                 params->size = NULL;
519         }
520         if (params->media) {
521                 media_info_cancel_thumbnail(params->media);
522                 media_info_destroy(params->media);
523                 params->media = NULL;
524         }
525         free(params);
526         return;
527 }
528
529
530
531 Evas_Object *mf_gengrid_create_grid (Evas_Object *parent)
532 {
533         MF_TRACE_BEGIN;
534         mf_retvm_if(parent == NULL, NULL, "parent is NULL");
535         Evas_Object *grid = NULL;
536
537         grid = elm_gengrid_add(parent);
538         evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
539         evas_object_size_hint_align_set(grid, EVAS_HINT_FILL, EVAS_HINT_FILL);
540         elm_object_focus_set(grid, EINA_FALSE);
541
542         elm_gengrid_align_set(grid, 0.0, 0.0);
543         elm_gengrid_horizontal_set(grid, EINA_FALSE);
544         elm_scroller_bounce_set(grid, EINA_FALSE, EINA_TRUE);
545         elm_gengrid_multi_select_set(grid, EINA_TRUE);
546
547         gic.item_style = "default_gridtext";
548         gic.func.text_get = __mf_gengrid_item_label_get;
549         gic.func.content_get = __mf_gengrid_item_icon_get;
550         gic.func.state_get = NULL;
551         gic.func.del = __mf_gengrid_item_del;
552
553         evas_object_show(grid);
554         return grid;
555 }
556
557 void mf_gengrid_create_list_default_style(Evas_Object *pGengrid, void *data, Eina_List *dir_list,
558                                 Eina_List *file_list)
559 {
560
561         MF_TRACE_BEGIN;
562         mf_retm_if(data == NULL, "data is NULL");
563         mf_retm_if(pGengrid == NULL, "pGengrid is NULL");
564         /*0.    variable definition and parameter check*/
565         struct appdata *ap = (struct appdata *)data;
566
567         fsNodeInfo *pNode = NULL;
568         Eina_List *l = NULL;
569
570         EINA_LIST_FOREACH(dir_list, l, pNode) {
571                 mf_widget_item_append(pGengrid, pNode, ap);
572         }
573         /*      add file items into the genlist */
574
575         EINA_LIST_FOREACH(file_list, l, pNode) {
576                 mf_widget_item_append(pGengrid, pNode, ap);
577         }
578 }
579
580 static void __mf_gengrid_thumbs_longpressed(void *data, Evas_Object *obj,
581                                     void *event_info)
582 {
583         mf_retm_if(event_info == NULL, "event_info is NULL");
584
585         mfItemData_s *it_data = elm_object_item_data_get(event_info);
586         mf_retm_if(it_data == NULL, "it_data is NULL");
587
588         mf_context_popup_create_gengrid(it_data);
589 }
590 Evas_Object *mf_gengrid_create_list(void *data, Evas_Object *parent)
591 {
592
593         MF_TRACE_BEGIN;
594         mf_retvm_if(data == NULL, NULL, "data is NULL");
595         mf_retvm_if(parent == NULL, NULL, "parent is NULL");
596
597         struct appdata *ap = (struct appdata *)data;
598         Evas_Object *gengrid = NULL;
599         Eina_List *file_list = NULL;
600         Eina_List *dir_list = NULL;
601
602
603         if (ap->mf_Status.view_type == mf_view_root_category) {
604                 file_list = ap->mf_FileOperation.category_list;
605         } else {
606                 file_list = ap->mf_FileOperation.file_list;
607                 dir_list = ap->mf_FileOperation.folder_list;
608         }
609
610         gengrid = mf_gengrid_create_grid(parent);
611
612         evas_object_smart_callback_add(gengrid, "longpressed",
613                                        __mf_gengrid_thumbs_longpressed, ap);
614         if (MF_SCALE_FACTORY == 1) {
615                 elm_gengrid_item_size_set(gengrid, MF_HD_GENGRID_ITEM_WIDTH, MF_HD_GENGRID_ITEM_HEIGTH);
616         } else {
617                 elm_gengrid_item_size_set(gengrid, MF_WVGA_GENGRID_ITEM_WIDTH, MF_WVGA_GENGRID_ITEM_HEIGTH);
618         }
619
620         if (gengrid == NULL) {
621                 return NULL;
622         }
623         evas_object_smart_callback_add(gengrid, "selected", __mf_gengrid_icon_clicked, ap);
624         mf_gengrid_create_list_default_style(gengrid, ap, dir_list, file_list);
625         MF_TRACE_END;
626         return gengrid;
627 }
628