2 * Copyright 2012 Samsung Electronics Co., Ltd
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
8 * http://www.tizenopensource.org/license
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.
18 #include "ge-albums.h"
19 #include "ge-gridview.h"
20 #include "ge-ui-util.h"
22 #include "ge-db-handler.h"
23 #include "ge-strings.h"
25 static Elm_Gengrid_Item_Class album_gic;
26 static int gl_albums_item_cnt;
27 static ge_item* gl_album_items[GE_ALBUM_COVER_THUMB_NUM];
28 static int gl_album_count;
36 /* Size of table padding */
37 #define GE_COVER_PAD 3
38 #define GE_COVER_PAD_2 2
40 #define GE_ALBUM_TEXT_COLOR_ALPHA 255
41 #define GE_BG_COLOR_CNT 6
42 static struct ge_color ge_bg_color[] =
54 static void _ge_albums_drag_up(void *data, Evas_Object *obj, void *event_info)
59 static void _ge_albums_drag_right(void *data, Evas_Object *obj, void *event_info)
64 static void _ge_albums_drag_down(void *data, Evas_Object *obj, void *event_info)
69 static void _ge_albums_drag_left(void *data, Evas_Object *obj, void *event_info)
74 static void _ge_albums_drag_stop(void *data, Evas_Object *obj, void *event_info)
79 static void _ge_albums_realized(void *data, Evas_Object *obj, void *event_info)
84 static void _ge_albums_selected(void *data, Evas_Object *obj, void *event_info)
89 static void _ge_albums_unselected(void *data, Evas_Object *obj, void *event_info)
94 static void _ge_albums_clicked(void *data, Evas_Object *obj, void *event_info)
99 static void _ge_albums_longpress(void *data, Evas_Object *obj, void *event_info)
104 static Eina_Bool _ge_albums_append_grid_idler(void *data)
106 GE_CHECK_CANCEL(data);
107 ge_ugdata* ugd = (ge_ugdata*)data;
109 /* Try to get other medias from DB and append them to gridview*/
110 int ret = ge_grid_idler_append_thumbs(data);
113 ge_dbg("Failed to append grid items!");
114 if(ret == MB_SVC_ERROR_DB_NO_RECORD)
116 /* Maybe all medias were already showed */
117 ge_dbg("No any more records!");
122 ge_dbg("Successful to append grid items!");
125 /* Remove idler after all items appended */
126 GE_DEL_IDLER(ugd->grid_append_idler)
128 return ECORE_CALLBACK_CANCEL;
131 static void __ge_albums_sel_cb(void *data, Evas_Object *obj, void *event_info)
134 GE_CHECK(event_info);
135 Evas_Event_Mouse_Up *ev = event_info;
137 if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
141 ge_cluster *album_item = (ge_cluster*)data;
142 GE_CHECK(album_item->cluster);
143 GE_CHECK(album_item->ugd);
144 ge_ugdata *ugd = album_item->ugd;
145 if(ugd->ug == NULL) {
146 ge_dbg("UG already destroyed, return!");
150 if (album_item->cluster->count == 0) {
151 ge_dbgW("Empty album, return;");
155 ge_albums_sel_album(album_item);
158 char * _ge_albums_get_text(void *data, Evas_Object *obj, const char *part)
162 ge_cluster *album_item = (ge_cluster *)data;
163 GE_CHECK_NULL(album_item->cluster);
164 GE_CHECK_NULL(album_item->cluster->uuid);
165 GE_CHECK_NULL(album_item->ugd);
166 ge_ugdata *ugd = album_item->ugd;
167 char buf[GE_FILE_PATH_LEN_MAX] = {0,};
169 if (!strcmp(part, "elm.text.name"))
171 GE_CHECK_NULL(album_item->cluster->display_name);
172 if(strlen(album_item->cluster->display_name)) {
173 snprintf(buf, sizeof(buf), "%s", (char*)(album_item->cluster->display_name));
174 buf[strlen(buf)] = '\0';
175 } else if(ge_db_is_root_path(ugd, album_item->cluster->uuid, NULL)) {
176 snprintf(buf, sizeof(buf), GE_ALBUM_ROOT_NAME);
177 buf[strlen(buf)] = '\0';
179 /* Show blue folder name */
180 if (!g_strcmp0(album_item->cluster->uuid, GE_ALBUM_ALL_ID) ||
181 ge_db_is_default_album(ugd, album_item->cluster)) {
182 Elm_Object_Item *grid_it = album_item->griditem;
183 const Evas_Object *con_it_obj = NULL;
184 con_it_obj = elm_object_item_widget_get(grid_it);
185 GE_CHECK_NULL(con_it_obj);
186 Evas_Object *it_obj = (Evas_Object *)con_it_obj;
187 edje_object_signal_emit(it_obj, "elm,name,show,blue",
189 edje_object_message_signal_process(it_obj);
192 else if (!strcmp(part, "elm.text.date"))
196 char date1[GE_ALBUM_DATE_LEN_MAX] = {0,};
197 char date2[GE_ALBUM_DATE_LEN_MAX] = {0,};
198 char date3[GE_ALBUM_DATE_LEN_MAX] = {0,};
200 ge_albums_free_cover_thumbs(ugd);
202 int item_count = GE_ALBUM_COVER_THUMB_NUM;
203 ge_item** items1 = gl_album_items;
205 ge_db_get_first_several_items(ugd, album_item, items1, &item_count, MINFO_MEDIA_SORT_BY_DATE_DESC);
212 gl_album_count = item_count;
213 if(items1[0] == NULL || items1[0]->item == NULL)
218 memcpy(&album_item->item_mtime, &(items1[0]->item->mtime), sizeof(time_t));
222 memset(items2, 0x00, item_count * sizeof(int));
223 ge_db_get_first_several_items(ugd, album_item, items2, &item_count, MINFO_MEDIA_SORT_BY_DATE_ASC);
231 memset(&t1, 0x00, sizeof(struct tm));
232 localtime_r((time_t *) &(album_item->item_mtime), &t1);
233 strftime(date1, sizeof(date1), "%Y.%m.%d", &t1);
234 strftime(date3, sizeof(date3), "%Y.%m", &t1);
236 if(items2[0] == NULL || items2[0]->item == NULL)
241 memset(&t2, 0x00, sizeof(struct tm));
242 localtime_r((time_t *) &(items2[0]->item->mtime), &t2);
243 strftime(date2, sizeof(date2), "%Y.%m.%d", &t2);
245 if(!strcmp(date1, date2))
247 g_strlcpy(buf, date1, sizeof(buf));
251 strftime(date2, sizeof(date2), "%Y.%m", &t2);
252 snprintf(buf, sizeof(buf), "%s - %s", date2, date3);
253 buf[strlen(buf)] = '\0';
258 for(i = 0; i < item_count; i++)
260 ge_db_destroy_item(items2[i]);
264 else if (!strcmp(part, "elm.text.count"))
266 ge_db_update_items_cnt(ugd, album_item);
267 snprintf(buf, sizeof(buf), "%d", (int)(album_item->cluster->count));
268 buf[strlen(buf)] = '\0';
274 Evas_Object * _ge_albums_get_content(void *data, Evas_Object *obj, const char *part)
279 if(strlen(part) <= 0)
281 ge_dbgE("part length <= 0");
285 ge_cluster* album_item = (ge_cluster*)data;
286 GE_CHECK_NULL(album_item->cluster);
287 GE_CHECK_NULL(album_item->cluster->uuid);
288 GE_CHECK_NULL(album_item->ugd);
289 ge_ugdata *ugd = album_item->ugd;
290 double scale_factor = ugd->win_scale;
295 if((!strcmp(part, "elm.swallow.firsticon")) ||
296 (!strcmp(part, "elm.swallow.icon")) ||
297 (!strcmp(part, "elm.swallow.onlyicon")))
299 if(_ge_get_view_mode() != GE_AlbumsView_Mode)
301 ge_dbgE("View mode is wrong!");
305 ge_item **items = gl_album_items;
306 int item_count = gl_album_count;
307 int length = item_count;
308 Evas_Object* bg = NULL;
310 if(!strcmp(part, "elm.swallow.onlyicon"))
312 /* Part for album contains only one media */
319 bg = elm_bg_add(obj);
321 elm_bg_load_size_set(bg,
322 (int)(GE_COVER_ICON_S * scale_factor),
323 (int)(GE_COVER_ICON_S * scale_factor));
325 if(items[0] && (items[0])->item)
327 elm_bg_file_set(bg, _GETICON((items[0])->item->thumb_url), NULL);
330 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
331 evas_object_size_hint_align_set(bg, 0.5, 0.5);
332 evas_object_show(bg);
337 if(!strcmp(part, "elm.swallow.firsticon"))
346 bg = elm_bg_add(obj);
348 elm_bg_load_size_set(bg,
349 (int)(GE_COVER_GRID_S * scale_factor),
350 (int)(GE_COVER_GRID_S * scale_factor));
351 if(items[0] && (items[0])->item)
353 elm_bg_file_set(bg, _GETICON((items[0])->item->thumb_url), NULL);
357 evas_object_size_hint_max_set(bg,
358 (int)(GE_COVER_GRID_S * scale_factor),
359 (int)(GE_COVER_GRID_S * scale_factor));
360 evas_object_size_hint_aspect_set(bg, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
361 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
362 evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL);
363 evas_object_show(bg);
367 if(!strcmp(part, "elm.swallow.icon"))
370 Evas_Object * tb = NULL;
374 bg = elm_bg_add(obj);
376 elm_bg_load_size_set(bg,
377 (int)(GE_COVER_ICON_S * scale_factor),
378 (int)(GE_COVER_ICON_S * scale_factor));
379 elm_bg_file_set(bg, GE_DEFAULT_THUMB_ICON, NULL);
380 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
381 evas_object_size_hint_align_set(bg, 0.5, 0.5);
382 evas_object_show(bg);
391 bg = elm_bg_add(obj);
393 elm_bg_load_size_set(bg,
394 (int)(GE_COVER_ICON_S * scale_factor),
395 (int)(GE_COVER_2X_GRID_S * scale_factor));
397 if(items[1] && (items[1])->item)
399 elm_bg_file_set(bg, _GETICON((items[1])->item->thumb_url), NULL);
402 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
403 evas_object_size_hint_align_set(bg, 0.5, 0.5);
404 evas_object_show(bg);
409 tb = elm_table_add(obj);
411 elm_table_padding_set(tb,
412 GE_COVER_PAD * scale_factor,
413 GE_COVER_PAD * scale_factor);
415 for(i = 1; i < length; i++)
417 bg = elm_bg_add(obj);
421 elm_bg_load_size_set(bg,
422 (int)(GE_COVER_2X_GRID_S * scale_factor),
423 (int)(GE_COVER_2X_GRID_S * scale_factor));
424 evas_object_size_hint_min_set(bg,
425 (int)(GE_COVER_2X_GRID_S * scale_factor),
426 (int)(GE_COVER_2X_GRID_S * scale_factor));
430 elm_bg_load_size_set(bg,
431 (int)(GE_COVER_GRID_S * scale_factor),
432 (int)(GE_COVER_2X_GRID_S * scale_factor));
433 evas_object_size_hint_min_set(bg,
434 (int)(GE_COVER_GRID_S * scale_factor),
435 (int)(GE_COVER_2X_GRID_S * scale_factor));
438 elm_table_padding_set(tb,
439 GE_COVER_PAD_2 * scale_factor,
440 GE_COVER_PAD_2 * scale_factor);
442 if(items[i] && (items[i])->item)
444 elm_bg_file_set(bg, _GETICON((items[i])->item->thumb_url), NULL);
449 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
450 evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL);
451 elm_table_pack(tb, bg, 0, 0, 2, 2);
455 evas_object_size_hint_aspect_set(bg, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
456 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
457 evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL);
458 elm_table_pack(tb, bg, 2, 0, 1, 2);
460 evas_object_show(bg);
463 else if(length < GE_ALBUM_COVER_THUMB_NUM)
465 length = GE_ALBUM_COVER_THUMB_NUM_SEC;
466 tb = elm_table_add(obj);
468 elm_table_padding_set(tb,
469 GE_COVER_PAD * scale_factor,
470 GE_COVER_PAD * scale_factor);
471 elm_table_padding_set(tb,
472 GE_COVER_PAD_2 * scale_factor,
473 GE_COVER_PAD_2 * scale_factor);
475 for(i = 1; i < length; i++)
477 bg = elm_bg_add(obj);
481 elm_bg_load_size_set(bg,
482 (int)(GE_COVER_2X_GRID_S * scale_factor),
483 (int)(GE_COVER_2X_GRID_S * scale_factor));
484 evas_object_size_hint_min_set(bg,
485 (int)(GE_COVER_2X_GRID_S * scale_factor),
486 (int)(GE_COVER_2X_GRID_S * scale_factor));
490 elm_bg_load_size_set(bg,
491 (int)(GE_COVER_GRID_S * scale_factor),
492 (int)(GE_COVER_GRID_S * scale_factor));
493 evas_object_size_hint_min_set(bg,
494 (int)(GE_COVER_GRID_S * scale_factor),
495 (int)(GE_COVER_GRID_S * scale_factor));
498 if(items[i] && (items[i])->item)
500 elm_bg_file_set(bg, _GETICON((items[i])->item->thumb_url), NULL);
503 evas_object_size_hint_aspect_set(bg, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
504 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
505 evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL);
508 elm_table_pack(tb, bg, 0, 0, 2, 2);
510 elm_table_pack(tb, bg, 2, 0, 1, 1);
512 elm_table_pack(tb, bg, 2, 1, 1, 1);
513 evas_object_show(bg);
518 tb = elm_table_add(obj);
520 elm_table_padding_set(tb,
521 GE_COVER_PAD * scale_factor,
522 GE_COVER_PAD * scale_factor);
524 if((!strcmp(album_item->cluster->display_name, GE_ALBUM_ALL_NAME)) ||
525 (!strcmp(album_item->cluster->display_name, GE_ALBUM_MY_NAME)))
527 for(i = 1; i < GE_ALBUM_COVER_THUMB_NUM; i++)
531 bg = elm_bg_add(obj);
533 elm_bg_load_size_set(bg,
534 (int)(GE_COVER_GRID_S * scale_factor),
535 (int)(GE_COVER_GRID_S * scale_factor));
537 if(items[i] && (items[i])->item)
539 elm_bg_file_set(bg, _GETICON((items[i])->item->thumb_url), NULL);
544 bg = evas_object_rectangle_add(evas_object_evas_get(obj));
546 if (!g_strcmp0(album_item->cluster->uuid, GE_ALBUM_ALL_ID) ||
547 ge_db_is_default_album(ugd, album_item->cluster))
550 j = (album_item->index) % GE_BG_COLOR_CNT;
551 evas_object_color_set(bg, ge_bg_color[j].r,
552 ge_bg_color[j].g, ge_bg_color[j].b,
553 GE_ALBUM_TEXT_COLOR_ALPHA);
556 evas_object_size_hint_aspect_set(bg, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
557 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
558 evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL);
560 elm_table_pack(tb, bg, (int)((i-1)%3), (int)((i-1)/3), 1, 1);
562 evas_object_show(bg);
567 elm_table_padding_set(tb,
568 GE_COVER_PAD_2 * scale_factor,
569 GE_COVER_PAD_2 * scale_factor);
571 for(i = 1; i < GE_ALBUM_COVER_THUMB_NUM_SEC; i++)
573 bg = elm_bg_add(obj);
577 elm_bg_load_size_set(bg,
578 (int)(GE_COVER_2X_GRID_S * scale_factor),
579 (int)(GE_COVER_2X_GRID_S * scale_factor));
580 evas_object_size_hint_min_set(bg,
581 (int)(GE_COVER_2X_GRID_S * scale_factor),
582 (int)(GE_COVER_2X_GRID_S * scale_factor));
586 elm_bg_load_size_set(bg,
587 (int)(GE_COVER_GRID_S * scale_factor),
588 (int)(GE_COVER_GRID_S * scale_factor));
589 evas_object_size_hint_min_set(bg,
590 (int)(GE_COVER_GRID_S * scale_factor),
591 (int)(GE_COVER_GRID_S * scale_factor));
594 if(items[i] && (items[i])->item)
596 elm_bg_file_set(bg, _GETICON((items[i])->item->thumb_url), NULL);
599 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
600 evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL);
603 elm_table_pack(tb, bg, 0, 0, 2, 2);
605 elm_table_pack(tb, bg, 2, 0, 1, 1);
607 elm_table_pack(tb, bg, 2, 1, 1, 1);
608 evas_object_show(bg);
612 evas_object_show(tb);
616 else if (!strcmp(part, "label_bg"))
618 Evas_Object *bg = evas_object_rectangle_add(evas_object_evas_get(obj));
621 * for "All" their colors should be
622 * 25:25:25 by new gui
624 if (!g_strcmp0(album_item->cluster->uuid, GE_ALBUM_ALL_ID) ||
625 ge_db_is_default_album(ugd, album_item->cluster))
628 j = (album_item->index) % GE_BG_COLOR_CNT;
629 evas_object_color_set(bg, ge_bg_color[j].r,
630 ge_bg_color[j].g, ge_bg_color[j].b,
631 GE_ALBUM_TEXT_COLOR_ALPHA);
633 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
634 evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL);
635 evas_object_show(bg);
643 static int _ge_albums_create_album(ge_ugdata* ugd, Evas_Object* parent)
646 GE_CHECK_VAL(parent, -1);
647 GE_CHECK_VAL(ugd, -1);
648 GE_CHECK_VAL(ugd->cluster_list, -1);
651 ge_cluster *album_item = NULL;
653 album_gic.item_style = "albums_view";
654 album_gic.func.text_get = _ge_albums_get_text;
655 album_gic.func.content_get = _ge_albums_get_content;
657 int length = eina_list_count(ugd->cluster_list->clist);
658 ge_dbg("Albums list length: %d.", length);
660 elm_gengrid_clear(parent);
664 elm_object_theme_set(parent, ugd->th);
666 elm_object_style_set(parent, "gallery_efl/default");
668 for(i = 0; i < length; i++)
670 album_item = eina_list_nth(ugd->cluster_list->clist, i);
671 GE_CHECK_VAL(album_item, -1);
672 GE_CHECK_VAL(album_item->cluster, -1);
673 GE_CHECK_VAL(album_item->cluster->display_name, -1);
675 album_item->griditem = elm_gengrid_item_append(parent,
680 album_item->index = grid_cnt;
683 ge_dbg("Append [%s], id=%s.", album_item->cluster->display_name,
684 album_item->cluster->uuid);
687 gl_albums_item_cnt = grid_cnt;
695 ge_dbgW("None albums appended to view!");
700 int ge_albums_free_cover_thumbs(ge_ugdata *ugd)
702 GE_CHECK_VAL(ugd, -1);
705 for(i = 0; i < GE_ALBUM_COVER_THUMB_NUM; i++)
707 if(gl_album_items[i])
709 ge_db_destroy_item(gl_album_items[i]);
710 gl_album_items[i] = NULL;
717 int ge_albums_back_to_view(ge_ugdata *ugd)
720 GE_CHECK_VAL(ugd, -1);
722 if(ugd->file_select_mode == GE_File_Select_Multiple)
724 ge_ui_destroy_selinfo(ugd);
725 ge_db_selected_list_finalize();
728 GE_DEL_IDLER(ugd->grid_append_idler)
730 ge_albums_update_view(ugd);
731 ge_grid_clear_view(ugd);
733 _ge_set_view_mode(GE_AlbumsView_Mode);
737 int ge_albums_sel_album(ge_cluster* album_item)
740 GE_CHECK_VAL(album_item, -1);
741 GE_CHECK_VAL(album_item->cluster, -1);
742 GE_CHECK_VAL(album_item->cluster->uuid, -1);
743 GE_CHECK_VAL(album_item->ugd, -1);
745 if(_ge_get_view_mode() != GE_AlbumsView_Mode)
747 ge_dbgE("error mode.. now return!");
755 ge_ugdata *ugd = album_item->ugd;
756 GE_CHECK_VAL(ugd->cluster_list, -1);
757 GE_CHECK_VAL(ugd->navi_bar, -1);
758 ge_dbg("Album: %s, id: %s, cluster_index: %d.",
759 album_item->cluster->display_name, album_item->cluster->uuid,
762 if(ugd->album_select_mode == GE_Album_Select_One)
764 ge_dbg("One album selected, return album id and destroy the ug!");
766 char folder_path[GE_DIR_PATH_LEN_MAX] = { 0, };
767 ge_db_get_folder_fullpath(ugd, album_item->cluster->uuid,
769 bundle_del(ugd->bundle, GE_ALBUM_SELECT_RETURN_PATH);
770 bundle_add(ugd->bundle, GE_ALBUM_SELECT_RETURN_PATH, folder_path);
771 ge_dbg("return folder-path: %s", folder_path);
772 ug_send_result(ugd->ug, ugd->bundle);
773 ug_destroy_me(ugd->ug);
778 /* Set current album */
779 _ge_set_current_album(album_item);
781 GE_DEL_IDLER(ugd->grid_append_idler)
782 /* Get album contents from DB */
783 ge_db_get_items_list(ugd, album_item, GE_FIRST_VIEW_START_POS, GE_FIRST_VIEW_END_POS);
785 if(ugd->file_select_mode == GE_File_Select_Setas)
787 ge_dbg("setas mode->thumbnail is view mode");
788 _ge_set_view_mode(GE_ThumbnailView_Mode);
792 ge_dbg("select mode->thumbnail is edit mode");
793 _ge_set_view_mode(GE_ThumbnailEdit_Mode);
796 ugd->cluster_list->cur_pos = album_item->index; //save the index of current selected album
797 ge_dbg("\n\nIndex is %d\n",album_item->index);
799 ugd->thumbs_view_ly = ge_grid_create_ly(ugd->navi_bar);
800 GE_CHECK_VAL(ugd->thumbs_view_ly, -1);
801 Evas_Object* gv = NULL;
803 gv = ge_grid_create_view(ugd, ugd->thumbs_view_ly);
804 GE_CHECK_VAL(gv, -1);
806 elm_object_part_content_set(ugd->thumbs_view_ly, "contents", gv);
807 ugd->thumbs_view = gv;
808 if(gv == ugd->nocontents)
810 ugd->thumbs_nocontents = gv;
814 elm_gengrid_clear(ugd->albums_view);
816 if(_ge_get_view_mode() == GE_ThumbnailView_Mode)
818 /* Check root case */
819 if(ge_db_is_root_path(ugd, album_item->cluster->uuid, NULL))
821 ge_ui_create_title_and_push(ugd, ugd->navi_bar,
822 ugd->thumbs_view_ly, ThumbnailView_Title, GE_ALBUM_ROOT_NAME);
826 ge_ui_create_title_and_push(ugd, ugd->navi_bar,
827 ugd->thumbs_view_ly, ThumbnailView_Title, album_item->cluster->display_name);
832 ge_ui_create_title_and_push(ugd, ugd->navi_bar,
833 ugd->thumbs_view_ly, ThumbnailView_Title, ugd->albums_view_title);
836 if(ge_db_get_count_all() == (GE_FIRST_VIEW_END_POS+1))
838 ge_dbg("\n\n>>>>>>>>Use idler to append other medias--Start>>>>>>>>\n");
839 ugd->grid_append_idler = ecore_idler_add(_ge_albums_append_grid_idler, ugd);
842 ge_dbg("Done ge_albums_sel_album");
846 Evas_Object* ge_albums_create_ly(Evas_Object* parent)
849 GE_CHECK_NULL(parent);
850 Evas_Object* layout = ge_ui_load_edj(parent, GE_EDJ_FILE, GE_GRP_ALBUMVIEW);
851 GE_CHECK_NULL(layout);
852 evas_object_show (layout);
857 int ge_albums_del_callbacks(ge_ugdata* ugd)
859 GE_CHECK_VAL(ugd, -1);
862 ge_dbg("Delete albums callbacks!");
863 evas_object_smart_callback_del(ugd->albums_view, "selected", _ge_albums_selected);
864 evas_object_smart_callback_del(ugd->albums_view, "unselected", _ge_albums_unselected);
865 evas_object_smart_callback_del(ugd->albums_view, "clicked", _ge_albums_clicked);
866 evas_object_smart_callback_del(ugd->albums_view, "longpressed", _ge_albums_longpress);
867 evas_object_smart_callback_del(ugd->albums_view, "drag,start,up", _ge_albums_drag_up);
868 evas_object_smart_callback_del(ugd->albums_view, "drag,start,right", _ge_albums_drag_right);
869 evas_object_smart_callback_del(ugd->albums_view, "drag,start,down", _ge_albums_drag_down);
870 evas_object_smart_callback_del(ugd->albums_view, "drag,start,left", _ge_albums_drag_left);
871 evas_object_smart_callback_del(ugd->albums_view, "drag,stop", _ge_albums_drag_stop);
872 evas_object_smart_callback_del(ugd->albums_view, "realized", _ge_albums_realized);
877 Evas_Object* ge_albums_create_view(ge_ugdata* ugd, Evas_Object* parent)
880 GE_CHECK_NULL(parent);
882 GE_CHECK_NULL(ugd->cluster_list);
884 memset(gl_album_items, 0x00, GE_ALBUM_COVER_THUMB_NUM * sizeof(int));
887 ge_get_ums_state(ugd);
888 if(ugd->ug_exit_mode || !ugd->cluster_list->clist ||
889 (eina_list_count(ugd->cluster_list->clist) == 0)) {
890 ge_dbgW("It's UMS mode or clusters list is empty!");
894 double scale_factor = ugd->win_scale;
895 ge_dbg("Own scale facotr: %f, elm_config_scale_get =%f.", scale_factor, elm_config_scale_get());
897 Evas_Object *grid = elm_gengrid_add(parent);
899 elm_gengrid_item_size_set(grid,
900 (int)(GE_ALBUM_ITEM_WIDTH * scale_factor),
901 (int)(GE_ALBUM_ITEM_HEIGHT * scale_factor));
902 elm_gengrid_align_set(grid, 0.5, 0.0);
903 elm_gengrid_horizontal_set(grid, EINA_FALSE);
904 elm_gengrid_bounce_set(grid, EINA_FALSE, EINA_TRUE);
905 elm_gengrid_multi_select_set(grid, EINA_TRUE);
906 evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
908 if(_ge_albums_create_album(ugd, grid) != 0)
910 ge_dbgW("Failed to append album items!");
911 evas_object_del(grid);
918 evas_object_show (grid);
921 evas_object_smart_callback_add(grid, "selected", _ge_albums_selected, NULL);
922 evas_object_smart_callback_add(grid, "unselected", _ge_albums_unselected, NULL);
923 evas_object_smart_callback_add(grid, "clicked", _ge_albums_clicked, NULL);
924 evas_object_smart_callback_add(grid, "longpressed", _ge_albums_longpress, NULL);
925 evas_object_smart_callback_add(grid, "drag,start,up", _ge_albums_drag_up, NULL);
926 evas_object_smart_callback_add(grid, "drag,start,right", _ge_albums_drag_right, NULL);
927 evas_object_smart_callback_add(grid, "drag,start,down", _ge_albums_drag_down, NULL);
928 evas_object_smart_callback_add(grid, "drag,start,left", _ge_albums_drag_left, NULL);
929 evas_object_smart_callback_add(grid, "drag,stop", _ge_albums_drag_stop, NULL);
930 evas_object_smart_callback_add(grid, "realized", _ge_albums_realized, NULL);
935 /* Show no contents if none albums exist */
936 ge_dbgW("@@@@@@@ To create nocontents view @@@@@@@@");
937 ugd->nocontents = ge_ui_create_nocontents(ugd);
938 ugd->albums_view = ugd->nocontents;
939 evas_object_show (ugd->nocontents);
941 return ugd->nocontents;
944 int ge_albums_update_view(ge_ugdata *ugd)
947 GE_CHECK_VAL(ugd, -1);
948 GE_CHECK_VAL(ugd->cluster_list, -1);
949 /* Changed to show no contents if needed */
950 ge_get_ums_state(ugd);
951 if(ugd->ug_exit_mode || !ugd->cluster_list->clist ||
952 (eina_list_count(ugd->cluster_list->clist) == 0)) {
953 ge_dbgW("It's UMS mode or clusters list is empty!");
957 if(ugd->nocontents && ugd->nocontents == ugd->albums_view) {
958 /* It is nocontents, unset it first then create albums view*/
959 evas_object_del(ugd->nocontents);
960 ugd->nocontents = NULL;
962 ugd->albums_view = ge_albums_create_view(ugd, ugd->navi_bar);
963 GE_CHECK_VAL(ugd->albums_view, -1);
964 elm_object_part_content_set(ugd->albums_view_ly, "contents",
966 evas_object_show(ugd->albums_view);
968 if(_ge_albums_create_album(ugd, ugd->albums_view) != 0)
976 if(ugd->albums_view && ugd->albums_view != ugd->nocontents)
977 ge_albums_del_callbacks(ugd);
979 evas_object_del(ugd->albums_view);
981 ge_dbgW("@@@@@@@ To create nocontents view @@@@@@@@");
982 ugd->nocontents = ge_ui_create_nocontents(ugd);
983 ugd->albums_view = ugd->nocontents;
984 GE_CHECK_VAL(ugd->albums_view, -1);
985 evas_object_show(ugd->albums_view);
987 elm_object_part_content_set(ugd->albums_view_ly, "contents", ugd->albums_view);