24d6d40a40fc75fa4fcc31e58e2eb45904ae43bc
[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 (mf_file_attr_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 (mf_file_attr_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 || ap->mf_Status.more == MORE_SHARE_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 (mf_file_attr_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                 __mf_gengrid_get_thumbnail(params);
405
406                 Evas_Object *icon = elm_image_add(obj);
407                 elm_image_file_set(icon, params->thumb_path, NULL);
408                 elm_image_aspect_fixed_set(icon, EINA_FALSE);
409                 evas_object_show(icon);
410                 return icon;
411         } else if (!strcmp(part, "elm.swallow.block") && params->ap->mf_Status.more == MORE_EDIT) {
412                 Evas_Object *layout = elm_layout_add(obj);
413                 elm_layout_theme_set(layout, "gengrid", "item", "block/default");
414                 evas_object_propagate_events_set(layout, 0);
415                 evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_DOWN, (Evas_Object_Event_Cb)mf_callback_rename_create_cb, params);
416                 return layout;
417         } else if (!strcmp(part, "elm.swallow.end") && params->ap->mf_Status.more == MORE_EDIT)
418         {
419                 Evas_Object *ck = elm_check_add(obj);
420                 mf_retvm_if(ck == NULL, NULL, "ck is NULL");
421                 elm_object_focus_set(ck, EINA_FALSE);
422                 params->pCheckBox = ck;
423                 elm_object_style_set(ck, "grid");
424                 evas_object_propagate_events_set(ck, 1);
425                 mf_debug("params is [%p]params->m_checked is [%d]",params, params->m_checked);
426                 elm_check_state_set(ck, params->m_checked);
427                 elm_gengrid_item_selected_set(params->item, params->m_checked);
428                 evas_object_smart_callback_add(ck, "changed", __mf_gengrid_item_check_changed, params);
429                 evas_object_show(ck);
430                 return ck;
431         }
432         return NULL;
433 }
434
435 static char *__mf_gengrid_item_label_get(void *data, Evas_Object * obj, const char *part)
436 {
437         MF_TRACE_BEGIN;
438         mfItemData_s *params = (mfItemData_s *) data;
439         mf_retv_if(params == NULL, NULL);
440
441         if (strcmp(part, "elm.text") == 0) {
442                 /* supporting multi-lang for default folders */
443
444                 if (g_strcmp0(params->m_ItemName->str, PHONE_FOLDER) == 0) {
445                         return g_strdup(GET_SYS_STR(MF_LABEL_PHONE));
446                 } else if (g_strcmp0(params->m_ItemName->str, MEMORY_FOLDER) == 0) {
447                         return g_strdup(GET_SYS_STR(MF_LABEL_MMC));
448                 } else if (g_strcmp0(params->m_ItemName->str, OTG_FOLDER) == 0) {
449                         return g_strdup(GET_STR(MF_LABEL_OTG));
450                 }else {
451                         if (params->ap->mf_Status.more == MORE_SEARCH &&params->ap->mf_Status.search_filter) {
452                                 char *markup_name = NULL;
453                                 bool res = false;
454                                 markup_name = (char *)mf_util_search_markup_keyword(ecore_file_file_get(params->m_ItemName->str), params->ap->mf_Status.search_filter, &res);
455                                 if(res) {
456                                         MF_TRACE_END;
457                                         return g_strdup(markup_name);
458                                 }
459                         }
460
461                         if (params->ap->mf_Status.iExtensionState == MF_EXTENSION_HIDE && !mf_file_attr_is_dir(params->m_ItemName->str)) {
462                                 return mf_fm_svc_get_file_name(params->m_ItemName);
463
464                         } else {
465                                 return g_strdup(ecore_file_file_get(params->m_ItemName->str));
466                         }
467                 }
468         }  else {
469                 return strdup(_(""));
470         }
471         MF_TRACE_END;
472 }
473
474 static void __mf_gengrid_item_del(void *data, Evas_Object * obj)
475 {
476         mfItemData_s *params = (mfItemData_s *) data;
477         assert(params);
478         if (params->m_ItemName) {
479                 g_string_free(params->m_ItemName, TRUE);
480                 params->m_ItemName = NULL;
481         }
482         if (params->thumb_path) {
483                 free(params->thumb_path);
484                 params->thumb_path = NULL;
485         }
486         if (params->create_date) {
487                 free(params->create_date);
488                 params->create_date = NULL;
489         }
490         if (params->size) {
491                 free(params->size);
492                 params->size = NULL;
493         }
494         if (params->media) {
495                 media_info_cancel_thumbnail(params->media);
496                 media_info_destroy(params->media);
497                 params->media = NULL;
498         }
499         free(params);
500         return;
501 }
502
503
504
505 void mf_gengrid_gen_style_set()
506 {
507         gic.item_style = "default_gridtext";
508         gic.func.text_get = __mf_gengrid_item_label_get;
509         gic.func.content_get = __mf_gengrid_item_icon_get;
510         gic.func.state_get = NULL;
511         gic.func.del = __mf_gengrid_item_del;
512 }
513
514 Evas_Object *mf_gengrid_create(Evas_Object *parent)
515 {
516         MF_TRACE_BEGIN;
517         mf_retvm_if(parent == NULL, NULL, "parent is NULL");
518
519         Evas_Object *grid = NULL;
520         grid = mf_gengrid_create_grid(parent);
521         mf_gengrid_gen_style_set();
522         return grid;
523 }
524
525 Evas_Object *mf_gengrid_create_grid (Evas_Object *parent)
526 {
527         MF_TRACE_BEGIN;
528         mf_retvm_if(parent == NULL, NULL, "parent is NULL");
529         Evas_Object *grid = NULL;
530         grid = elm_gengrid_add(parent);
531         evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
532         evas_object_size_hint_align_set(grid, EVAS_HINT_FILL, EVAS_HINT_FILL);
533         elm_object_focus_set(grid, EINA_FALSE);
534
535         elm_gengrid_align_set(grid, 0.0, 0.0);
536         elm_gengrid_horizontal_set(grid, EINA_FALSE);
537         elm_scroller_bounce_set(grid, EINA_FALSE, EINA_TRUE);
538         elm_gengrid_multi_select_set(grid, EINA_TRUE);
539         evas_object_show(grid);
540         return grid;
541 }
542
543 void mf_gengrid_create_list_default_style(Evas_Object *pGengrid, void *data, Eina_List *dir_list,
544                                 Eina_List *file_list)
545 {
546
547         MF_TRACE_BEGIN;
548         mf_retm_if(data == NULL, "data is NULL");
549         mf_retm_if(pGengrid == NULL, "pGengrid is NULL");
550         /*0.    variable definition and parameter check*/
551         struct appdata *ap = (struct appdata *)data;
552
553         fsNodeInfo *pNode = NULL;
554         Eina_List *l = NULL;
555
556         EINA_LIST_FOREACH(dir_list, l, pNode) {
557                 mf_widget_item_append(pGengrid, pNode, ap);
558         }
559         /*      add file items into the genlist */
560
561         EINA_LIST_FOREACH(file_list, l, pNode) {
562                 mf_widget_item_append(pGengrid, pNode, ap);
563         }
564 }
565
566 static void __mf_gengrid_thumbs_longpressed(void *data, Evas_Object *obj,
567                                     void *event_info)
568 {
569         mf_retm_if(event_info == NULL, "event_info is NULL");
570
571         mfItemData_s *it_data = elm_object_item_data_get(event_info);
572         mf_retm_if(it_data == NULL, "it_data is NULL");
573
574         mf_context_popup_create_gengrid(it_data);
575 }
576 Evas_Object *mf_gengrid_create_list(void *data, Evas_Object *parent)
577 {
578
579         MF_TRACE_BEGIN;
580         mf_retvm_if(data == NULL, NULL, "data is NULL");
581         mf_retvm_if(parent == NULL, NULL, "parent is NULL");
582
583         struct appdata *ap = (struct appdata *)data;
584         Evas_Object *gengrid = NULL;
585         Eina_List *file_list = NULL;
586         Eina_List *dir_list = NULL;
587
588
589         if (ap->mf_Status.view_type == mf_view_root_category) {
590                 file_list = ap->mf_FileOperation.category_list;
591         } else {
592                 file_list = ap->mf_FileOperation.file_list;
593                 dir_list = ap->mf_FileOperation.folder_list;
594         }
595
596         gengrid = mf_gengrid_create(parent);
597
598         evas_object_smart_callback_add(gengrid, "longpressed",
599                                        __mf_gengrid_thumbs_longpressed, ap);
600         elm_gengrid_item_size_set(gengrid, MF_HD_GENGRID_ITEM_WIDTH, MF_HD_GENGRID_ITEM_HEIGTH);
601
602         if (gengrid == NULL) {
603                 return NULL;
604         }
605         evas_object_smart_callback_add(gengrid, "selected", __mf_gengrid_icon_clicked, ap);
606         mf_gengrid_create_list_default_style(gengrid, ap, dir_list, file_list);
607         MF_TRACE_END;
608         return gengrid;
609 }
610