2 * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
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.
17 #include <Elementary.h>
20 #include "AppCommon.h"
25 #include <InputHandler.h>
26 #include "category_info.h"
27 #include "album_info.h"
28 #include "song_info.h"
29 #include "music-controller.h"
30 #include "LayoutMgr.h"
31 #include "entry-popup.h"
33 #include "common-ui.h"
35 #include "ExtBaseLayout.h"
37 #include "category-layout.h"
38 #include "base-view.h"
40 #define TOTAL_ADD_BTNS 3
41 #define TOTAL_SELECT_BTNS 3
42 #define GENGRID_ITEM_SIZE_W (263+20)
43 #define GENGRID_ITEM_SIZE_H (359+20)
48 CATEGORY_LAYOUT_GENGRID,
49 CATEGORY_LAYOUT_GENLIST,
50 CATEGORY_LAYOUT_PLAY_BUTTON,
51 CATEGORY_LAYOUT_NEXT_BUTTON,
52 CATEGORY_LAYOUT_LAST_BUTTON,
53 CATEGORY_LAYOUT_SELECT_ALL_BUTTON,
54 CATEGORY_LAYOUT_DONE_BUTTON,
55 CATEGORY_LAYOUT_CANCEL_BUTTON
83 struct SCategoryLayout {
87 Evas_Object *add_btn[TOTAL_ADD_BTNS];
88 Evas_Object *select_btn[TOTAL_SELECT_BTNS];
89 Evas_Object *albumCover;
90 Evas_Object *def_foc_btn;
94 Eina_List *it_infolist;
95 Ecore_Idler *focus_idler;
96 CMusicController *pMusicController;
104 memset(this, 0, sizeof(SCategoryLayout));
112 Eina_Bool CCategoryLayout::sm_CbFocusIdler(void *dt)
114 CCategoryLayout *root = (CCategoryLayout *)dt;
116 Eina_Bool ret = EINA_FALSE;
118 ret = root->m_OnFocusIdler();
124 Eina_Bool CCategoryLayout::m_OnFocusIdler(void)
126 Elm_Object_Item *it = NULL;
127 SCatItemInfo *itinfo = NULL;
129 m->focus_idler = NULL;
130 elm_object_tree_focus_allow_set(t.base, EINA_TRUE);
132 if (t.depth == E_DEPTH_CATEGORY) {
133 it = m_FindItemByInfo(m->it_infolist, t.c_catinfo);
135 itinfo = (SCatItemInfo *)eina_list_nth(m->it_infolist, 0);
138 elm_gengrid_item_show(it, ELM_GENGRID_ITEM_SCROLLTO_IN);
139 elm_object_item_focus_set(it, EINA_TRUE);
142 elm_object_focus_set(m->def_foc_btn, EINA_TRUE);
144 return ECORE_CALLBACK_CANCEL;
148 void CCategoryLayout::sm_CbEntrynameSet(void *dt, const char *name)
150 CCategoryLayout *root = (CCategoryLayout *)dt;
152 root->m_OnEntrynameSet(name);
156 void CCategoryLayout::m_OnEntrynameSet(const char *name)
158 Eina_List *idlist = NULL;
164 idlist = m_GetSelectedList(m->it_infolist, (int)ID_TYPE_MEDIA);
168 if (!strcmp(str, MUSIC_STR_EMPTY)) {
169 _create_message_box(Layout(), MUSIC_TEXT_EMPTY_NAME);
174 if (m->pMusicController->MediaExistPlaylist(str)) {
175 _create_message_box(Layout(), MUSIC_TEXT_INUSE_MSG);
180 if (!m->pMusicController->MediaInsertPlaylist(str, idlist)) {
181 _ERR("Playlist creation failed ");
186 t.depth = E_DEPTH_CATEGORY;
187 t_UpdateLayoutWithFocus();
191 char *CCategoryLayout::sm_CbGetSelectlistItemText(void *data, Evas_Object *obj, const char *part)
193 SCatItemInfo *itinfo = (SCatItemInfo *)data;
197 if (!itinfo || !obj || !part)
200 if (!strcmp(part, "elm.text")) {
201 str = song_info_get_title(itinfo->sinfo);
203 index = elm_genlist_item_index_get(itinfo->item);
204 if ((index & 1) == 1)
205 elm_object_item_signal_emit(itinfo->item,
206 MUSIC_SIGNAL_EVEN_ROW, MUSIC_BASE_VIEW);
208 elm_object_item_signal_emit(itinfo->item,
209 MUSIC_SIGNAL_ODD_ROW, MUSIC_BASE_VIEW);
211 if (itinfo->check_status)
212 elm_object_item_signal_emit(itinfo->item,
213 MUSIC_SIGNAL_CHECK_ON, MUSIC_BASE_VIEW);
215 elm_object_item_signal_emit(itinfo->item,
216 MUSIC_SIGNAL_CHECK_OFF, MUSIC_BASE_VIEW);
218 else if (!strcmp(part, "elm.text1")) {
219 str = song_info_get_artist(itinfo->sinfo);
221 else if (!strcmp(part, "elm.text2")) {
222 str = song_info_get_album(itinfo->sinfo);
232 char *CCategoryLayout::sm_CbGetListItemText(void *data, Evas_Object *obj, const char *part)
234 SCatItemInfo *itinfo = (SCatItemInfo *)data;
235 SSongInfo *sinfo = NULL;
236 char buf[MAX_LENGTH];
237 char *timestr = NULL;
241 if (!itinfo || !obj || !part)
244 sinfo = itinfo->sinfo;
246 snprintf(buf, sizeof(buf), "%s", MUSIC_STR_EMPTY);
248 if (!strcmp(part, "elm.text")) {
249 index = elm_genlist_item_index_get(itinfo->item);
250 if ((index & 1) == 1) {
251 elm_object_item_signal_emit(itinfo->item,
252 MUSIC_SIGNAL_EVEN_ROW, MUSIC_BASE_VIEW);
255 elm_object_item_signal_emit(itinfo->item,
256 MUSIC_SIGNAL_ODD_ROW, MUSIC_BASE_VIEW);
258 snprintf(buf, sizeof(buf), "%d", index + 1);
260 else if (!strcmp(part, "elm.text1")) {
261 snprintf(buf, sizeof(buf), "%s", song_info_get_title(sinfo));
263 else if (!strcmp(part, "elm.text2")) {
264 snprintf(buf, sizeof(buf), "%s", song_info_get_artist(sinfo));
266 else if (!strcmp(part, "elm.text3")) {
267 if (song_info_get_duration(sinfo, &duration)) {
268 timestr = _get_timestr_from_milseconds(duration);
270 snprintf(buf, sizeof(buf), "%s", timestr);
276 if (strcmp(buf, MUSIC_STR_EMPTY))
283 void CCategoryLayout::sm_CbRemoveListItem(void *data, Evas_Object *obj)
289 void CCategoryLayout::sm_CbSongItemSelect(void *data, Evas_Object *obj, void *event_info)
291 CCategoryLayout *root = (CCategoryLayout *)data;
293 root->m_OnSongItemSelect(obj, (Elm_Object_Item *)event_info);
297 void CCategoryLayout::m_OnSongItemSelect(Evas_Object *obj, Elm_Object_Item *event_info)
299 SCatItemInfo *itinfo = NULL;
305 itinfo = m_FindItemInfo(m->it_infolist, (Elm_Object_Item *)event_info);
307 _ERR(" no item info found ");
312 song_info_destroy(m->c_sinfo);
315 m->c_sinfo = song_info_duplicate(itinfo->sinfo);
319 id = song_info_get_media_id(m->c_sinfo);
321 song_info_destroy(m->c_sinfo);
326 m_GotoPlayback(ADD_TYPE_FRESH, id);
330 void CCategoryLayout::sm_CbSelectlistItemSelect(void *data, Evas_Object *obj, void *event_info)
332 CCategoryLayout *root = (CCategoryLayout *)data;
334 root->m_OnSelectlistItemSelect(obj, (Elm_Object_Item *)event_info);
338 void CCategoryLayout::m_OnSelectlistItemSelect(Evas_Object *obj, void *event_info)
340 SCatItemInfo *itinfo = NULL;
346 itinfo = m_FindItemInfo(m->it_infolist, (Elm_Object_Item *)event_info);
348 _ERR(" no item info found ");
352 tc = eina_list_count(m->it_infolist);
353 if (itinfo->check_status) {
355 elm_object_text_set(m->select_btn[SBTN_SELECT_ALL],
356 _(MUSIC_TEXT_SELECT_ALL));
357 m->count = m->count - 1;
358 elm_object_item_signal_emit(itinfo->item,
359 MUSIC_SIGNAL_CHECK_OFF, MUSIC_BASE_VIEW);
360 itinfo->check_status = false;
363 m->count = m->count + 1;
365 elm_object_text_set(m->select_btn[SBTN_SELECT_ALL],
366 _(MUSIC_TEXT_DESELECT_ALL));
367 elm_object_item_signal_emit(itinfo->item,
368 MUSIC_SIGNAL_CHECK_ON, MUSIC_BASE_VIEW);
369 itinfo->check_status = true;
374 void CCategoryLayout::sm_CbCtxtUpdate(void *dt, enum EActionType type, int lid)
376 CCategoryLayout *root = (CCategoryLayout *)dt;
379 root->t_OnCtxtUpdate(type, lid);
383 void CCategoryLayout::t_OnCtxtUpdate(enum EActionType type, int lid)
385 Eina_List *list = NULL;
386 Eina_List *alist = NULL, *slist = NULL, *l = NULL, *sl = NULL;
387 SSongInfo *sinfo = NULL;
388 album_info *alinfo = NULL;
392 if (!t.ctxtinfo || !t.ctxtinfo->context)
395 if (type == ACTION_TYPE_ADDNEXT)
396 mode = ADD_TYPE_NEXT;
400 if (t.depth == E_DEPTH_SONG) {
401 sinfo = (SSongInfo *)t.ctxtinfo->context;
402 list = eina_list_append(list, sinfo);
404 else if (t.depth == E_DEPTH_ALBUM) {
405 m->pMusicController->MediaGetList(LIST_TYPE_ALBUM_SONG,
406 t.ctxtinfo->context, &list);
407 sinfo = (SSongInfo *)eina_list_data_get(list);
410 alist = category_info_get_albumlist((category_info *)t.ctxtinfo->context);
411 EINA_LIST_FOREACH(alist, l, obj) {
412 alinfo = (album_info *)obj;
414 if (!m->pMusicController->MediaGetList(LIST_TYPE_ALBUM_SONG, (void *)alinfo, &slist)) {
415 _ERR(" Failed to get album songlist ");
418 EINA_LIST_FOREACH(slist, sl, obj) {
419 sinfo = (SSongInfo *)obj;
420 list = eina_list_append(list,
421 song_info_duplicate((SSongInfo *)sinfo));
423 eina_list_free(slist);
425 sinfo = (SSongInfo *)eina_list_data_get(list);
428 if (type == ACTION_TYPE_ADDTO) {
429 if (!m->pMusicController->MediaAddsongsPlaylist(lid, list))
430 _ERR(" Adding songs to playlist failed ");
432 _create_message_box(t.base, MUSIC_TEXT_ADDTO_MSG);
434 if (t.depth == E_DEPTH_CATEGORY) {
435 EINA_LIST_FREE(list, obj) {
436 sinfo = (SSongInfo *)obj;
437 song_info_destroy(sinfo);
444 m->pMusicController->UpdatePlaylist(list, mode);
445 if (type == ACTION_TYPE_PLAY) {
446 m->pMusicController->Stop();
447 m->pMusicController->SetCurrentSong(song_info_get_media_id((SSongInfo *)sinfo));
450 if (t.depth == E_DEPTH_CATEGORY) {
451 EINA_LIST_FREE(list, obj) {
452 sinfo = (SSongInfo *)obj;
453 song_info_destroy(sinfo);
457 eina_list_free(list);
460 _update_playback_view((EAddType)type, Layout(), t.focused_item);
464 void CCategoryLayout::sm_CbCtxtClose(void *dt)
466 CCategoryLayout *root = (CCategoryLayout *)dt;
468 root->m_OnCtxtClose();
472 void CCategoryLayout::m_OnCtxtClose(void)
475 m->vmgr->PushView(MUSIC_BASE_VIEW, NULL);
476 elm_object_item_focus_set(t.focused_item, EINA_TRUE);
480 char *CCategoryLayout::sm_CbGetGridItemText(void *data, Evas_Object *obj, const char *part)
482 SCatItemInfo *itinfo = (SCatItemInfo *)data;
484 const char *txt = NULL;
485 char buf[MAX_LENGTH];
487 if (!itinfo || !obj || !part)
490 if (!strcmp(part, "elm.text")) {
491 if (itinfo->type == CAT_TYPE_PLAYLIST_NEW)
492 return strdup(_(MUSIC_TEXT_CREATE_PLAYLIST));
494 txt = category_info_get_name(itinfo->catinfo);
498 else if (!strcmp(part, "elm.text1")) {
499 if (itinfo->type == CAT_TYPE_PLAYLIST_NEW) {
502 else if (itinfo->type == CAT_TYPE_PLAYLISTS) {
503 scount = category_info_get_songcount(itinfo->catinfo);
504 snprintf(buf, sizeof(buf), "%d %s", scount, _("Songs"));
507 acount = category_info_get_albumcount(itinfo->catinfo);
508 scount = category_info_get_songcount(itinfo->catinfo);
509 snprintf(buf, sizeof(buf), "%d %s, %d %s", acount,
510 _("Albums"), scount, _("Songs"));
519 char *CCategoryLayout::sm_CbGetGridAlbumItemText(void *data, Evas_Object *obj, const char *part)
521 SCatItemInfo *itinfo = (SCatItemInfo *)data;
522 album_info *alinfo = NULL;
525 if (!itinfo || !obj || !part)
528 alinfo = itinfo->alinfo;
530 if (!strcmp(part, "elm.text")) {
531 txt = album_info_get_name(alinfo);
535 else if (!strcmp(part, "elm.text1")) {
536 if (itinfo->type == CAT_TYPE_ARTIST)
537 txt = album_info_get_artist(alinfo);
539 txt = album_info_get_genre(alinfo);
548 Evas_Object *CCategoryLayout::sm_CbGetGridItemContent(void *data, Evas_Object *obj, const char *part)
550 SCatItemInfo *itinfo = (SCatItemInfo *)data;
551 album_info *alinfo = NULL;
552 void *list_obj = NULL;
553 Eina_List *l = NULL, *alist = NULL;
554 Evas_Object *img = NULL;
556 char buf[MAX_LENGTH];
558 if (!itinfo || !obj || !part)
561 if (!itinfo->catinfo && itinfo->type != CAT_TYPE_PLAYLIST_NEW)
564 if (strcmp(part, "elm.swallow.icon"))
567 img = elm_image_add(obj);
573 if (itinfo->type == CAT_TYPE_ARTIST || itinfo->type == CAT_TYPE_GENRE) {
574 alist = category_info_get_albumlist(itinfo->catinfo);
576 EINA_LIST_FOREACH(alist, l, list_obj) {
577 alinfo = (album_info *)list_obj;
578 path = album_info_get_thumb(alinfo);
584 else if (itinfo->type == CAT_TYPE_PLAYLISTS) {
585 path = category_info_get_thumb(itinfo->catinfo);
589 if (itinfo->type == CAT_TYPE_PLAYLIST_NEW)
590 snprintf(buf, sizeof(buf), "%s/%s", IMAGEDIR,
591 MUSIC_IMAGE_CREATE_PLAYLIST);
593 snprintf(buf, sizeof(buf), "%s/%s", IMAGEDIR,
594 MUSIC_IMAGE_DEFAULT_THUMB_126);
595 elm_image_file_set(img, buf, NULL);
596 elm_image_no_scale_set(img, EINA_TRUE);
599 elm_image_file_set(img, path, NULL);
600 elm_image_aspect_fixed_set(img, EINA_FALSE);
607 Evas_Object *CCategoryLayout::sm_CbGetGridAlbumitemContent(void *data, Evas_Object *obj, const char *part)
609 SCatItemInfo *itinfo = (SCatItemInfo *)data;
610 album_info *alinfo = NULL;
612 Evas_Object *img = NULL;
613 char buf[MAX_LENGTH];
615 if (!itinfo || !obj || !part)
618 alinfo = itinfo->alinfo;
620 if (strcmp(part, "elm.swallow.icon"))
623 img = elm_image_add(obj);
627 path = album_info_get_thumb(alinfo);
629 snprintf(buf, sizeof(buf), "%s/%s", IMAGEDIR,
630 MUSIC_IMAGE_DEFAULT_THUMB_126);
631 elm_image_file_set(img, buf, NULL);
632 elm_image_no_scale_set(img, EINA_TRUE);
635 elm_image_file_set(img, path, NULL);
636 elm_image_aspect_fixed_set(img, EINA_FALSE);
643 void CCategoryLayout::sm_CbRemoveGridItem(void *data, Evas_Object *obj)
649 void CCategoryLayout::sm_CbItemSelect(void *data, Elm_Object_Item *it, const char *emission, const char *source)
651 CCategoryLayout *root = (CCategoryLayout *)data;
653 root->m_OnItemSelect(it, emission, source);
657 void CCategoryLayout::m_OnItemSelect(Elm_Object_Item *it, const char *emission, const char *source)
659 SCatItemInfo *itinfo = NULL;
661 itinfo = m_FindItemInfo(m->it_infolist, it);
663 _ERR(" no item info found ");
667 if (t.depth == E_DEPTH_ALBUM) {
669 album_info_destroy(t.c_alinfo);
672 t.c_alinfo = album_info_duplicate(itinfo->alinfo);
673 t.depth = E_DEPTH_SONG;
677 category_info_destroy(t.c_catinfo);
681 t_HandleItemSelect(itinfo);
684 t_UpdateLayoutWithFocus();
688 int CCategoryLayout::m_ConvertToMin(int milsec)
692 min = milsec / 60000; /*milli seconds per minute*/
698 void CCategoryLayout::m_RemoveFocusIdler(void)
703 ecore_idler_del(m->focus_idler);
704 m->focus_idler = NULL;
708 Elm_Object_Item *CCategoryLayout::m_FindItemByInfo(Eina_List *list, void *info)
711 SCatItemInfo *itinfo = NULL;
718 EINA_LIST_FOREACH(list, l, obj) {
719 itinfo = (SCatItemInfo *)obj;
720 if (!itinfo->catinfo)
723 id = category_info_get_category_id(itinfo->catinfo);
724 if (id == category_info_get_category_id((category_info *)info))
732 CCategoryLayout::SCatItemInfo *CCategoryLayout::m_FindItemInfo(Eina_List *list, Elm_Object_Item *item)
735 SCatItemInfo *itinfo = NULL;
741 EINA_LIST_FOREACH(list, l, obj) {
742 itinfo = (SCatItemInfo *)obj;
743 if (itinfo->item == item)
751 void CCategoryLayout::m_GotoPlayback(int mode, char *id)
753 if (!m->it_infolist || eina_list_count(m->it_infolist) == 0) {
754 _create_message_box(Layout(), MUSIC_TEXT_NO_SONGS);
755 _ERR(" No songs for playback ");
759 if (t.depth == E_DEPTH_ALBUM)
760 m_AddAlbumsToPlayback(mode);
761 else if (t.depth == E_DEPTH_SONG ||
762 t.depth == E_DEPTH_SHOW_LIST)
763 m_AddSongsToPlayback(mode);
767 if (mode == ADD_TYPE_FRESH) {
768 m->pMusicController->Stop();
769 if (id) /* If want to play selected song */
770 m->pMusicController->SetCurrentSong(id);
773 _update_playback_view((EAddType)mode, Layout(), NULL);
777 Eina_List *CCategoryLayout::m_GetSelectedList(Eina_List *infolist, int type)
779 Eina_List *idlist = NULL, *l = NULL;
780 SCatItemInfo *itinfo = NULL;
783 EIdType eType = (EIdType)type;
789 EINA_LIST_FOREACH(infolist, l, obj) {
790 itinfo = (SCatItemInfo *)obj;
791 if (!itinfo->check_status)
794 if (eType == ID_TYPE_MEDIA) {
795 id = song_info_get_media_id(itinfo->sinfo);
797 idlist = eina_list_append(idlist, id);
800 idlist = eina_list_append(idlist,
809 void CCategoryLayout::m_AddSelectedSongs(void)
811 Eina_List *idlist = NULL;
817 lid = category_info_get_category_id(t.c_catinfo);
818 idlist = m_GetSelectedList(m->it_infolist, (int)ID_TYPE_MEDIA);
823 if (!m->pMusicController->MediaAddmediaPlaylist(lid, idlist)) {
824 _ERR(" Failed to add songs to playlist ");
828 t.depth = E_DEPTH_CATEGORY;
829 t_UpdateLayoutWithFocus();
833 void CCategoryLayout::m_RemoveSelectedSongs(void)
835 Eina_List *idlist = NULL;
841 lid = category_info_get_category_id(t.c_catinfo);
842 idlist = m_GetSelectedList(m->it_infolist, (int)ID_TYPE_MEMBER);
847 if (!m->pMusicController->MediaRemovemediaPlaylist(lid, idlist)) {
848 _ERR(" Failed to remove songs from playlist ");
852 t.depth = E_DEPTH_CATEGORY;
853 t_UpdateLayoutWithFocus();
857 void CCategoryLayout::m_AddAlbumsToPlayback(int mode)
859 Eina_List *l = NULL, *sl = NULL;
860 Eina_List *slist = NULL;
861 Eina_List *list = NULL;
862 SSongInfo *sinfo = NULL;
863 SCatItemInfo *itinfo = NULL;
865 Eina_List *infolist = m->it_infolist;
866 CMusicController *pMusicController = m->pMusicController;
869 EINA_LIST_FOREACH(infolist, l, obj) {
870 itinfo = (SCatItemInfo *)obj;
872 if (!pMusicController->MediaGetList(LIST_TYPE_ALBUM_SONG, itinfo->alinfo, &slist)) {
873 _ERR(" Failed to get album songlist ");
877 EINA_LIST_FOREACH(slist, sl, obj) {
878 sinfo = (SSongInfo *)obj;
879 list = eina_list_append(list,
880 song_info_duplicate(sinfo));
883 eina_list_free(slist);
886 pMusicController->UpdatePlaylist(list, mode);
887 EINA_LIST_FREE(list, obj) {
888 sinfo = (SSongInfo *)obj;
889 song_info_destroy(sinfo);
894 void CCategoryLayout::m_AddSongsToPlayback(int mode)
897 Eina_List *list = NULL;
898 struct SCatItemInfo *itinfo = NULL;
900 Eina_List *infolist = m->it_infolist;
901 CMusicController *pMusicController = m->pMusicController;
904 EINA_LIST_FOREACH(infolist, l, obj) {
905 itinfo = (SCatItemInfo *)obj;
906 list = eina_list_append(list, itinfo->sinfo);
909 pMusicController->UpdatePlaylist(list, mode);
910 eina_list_free(list);
914 Evas_Object *CCategoryLayout::m_AddAlbumCover(void)
916 Evas_Object *album_cover = NULL;
918 album_cover = elm_image_add(Layout());
922 evas_object_size_hint_weight_set(album_cover, EVAS_HINT_EXPAND,
929 Evas_Object *CCategoryLayout::m_AddGrid(void)
931 Evas_Object *grid = NULL;
933 grid = elm_gengrid_add(Layout());
937 evas_object_size_hint_weight_set(grid,
938 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
939 elm_gengrid_align_set(grid, 0, 0);
941 Connect(grid, CATEGORY_LAYOUT_GENGRID, TYPE_MOUSE_MOVE | TYPE_KEY_DOWN | TYPE_REALIZED | TYPE_UNREALIZED);
943 elm_gengrid_item_size_set(grid,
944 elm_config_scale_get() * GENGRID_ITEM_SIZE_W,
945 elm_config_scale_get() * GENGRID_ITEM_SIZE_H);
951 void CCategoryLayout::m_AddCategoryItem(Elm_Gengrid_Item_Class *grid_item, ECategoryType type, void *info)
953 SCatItemInfo *itinfo = NULL;
954 Elm_Object_Item *item = NULL;
959 itinfo = (SCatItemInfo *)calloc(1, sizeof(*itinfo));
963 itinfo->catinfo = (category_info *)info;
965 item = elm_gengrid_item_append(t.grid,
966 grid_item, itinfo, NULL, m);
968 m->it_infolist = eina_list_append(m->it_infolist,
973 void CCategoryLayout::m_AddButtons(void)
976 Evas_Object *img = NULL;
977 char buf[MAX_LENGTH];
978 SBtnInfo btninfo[TOTAL_ADD_BTNS];
980 btninfo[ABTN_PLAY].name = MUSIC_STR_PLAY;
981 btninfo[ABTN_PLAY].part = MUSIC_PART_CATEGORY_PLAYBTN;
982 btninfo[ABTN_PLAY].style = MUSIC_STYLE_ADD_PLAY_BTN;
983 btninfo[ABTN_PLAY].icon = MUSIC_IMAGE_ADD_PLAY;
984 btninfo[ABTN_PLAY].type = CATEGORY_LAYOUT_PLAY_BUTTON;
986 btninfo[ABTN_NEXT].name = MUSIC_STR_ADDNEXT;
987 btninfo[ABTN_NEXT].part = MUSIC_PART_CATEGORY_NEXTBTN;
988 btninfo[ABTN_NEXT].style = MUSIC_STYLE_ADD_NEXT_BTN;
989 btninfo[ABTN_NEXT].icon = MUSIC_IMAGE_ADD_NEXT;
990 btninfo[ABTN_NEXT].type = CATEGORY_LAYOUT_NEXT_BUTTON;
992 btninfo[ABTN_LAST].name = MUSIC_STR_ADDLAST;
993 btninfo[ABTN_LAST].part = MUSIC_PART_CATEGORY_LASTBTN;
994 btninfo[ABTN_LAST].style = MUSIC_STYLE_ADD_LAST_BTN;
995 btninfo[ABTN_LAST].icon = MUSIC_IMAGE_ADD_LAST;
996 btninfo[ABTN_LAST].type = CATEGORY_LAYOUT_LAST_BUTTON;
998 if (t.depth == E_DEPTH_SHOW_LIST) {
999 btninfo[ABTN_PLAY].part = MUSIC_PART_ALBUM_PLAYBTN;
1000 btninfo[ABTN_NEXT].part = MUSIC_PART_ALBUM_NEXTBTN;
1001 btninfo[ABTN_LAST].part = MUSIC_PART_ALBUM_LASTBTN;
1004 for (i = 0; i < TOTAL_ADD_BTNS; i++) {
1005 m->add_btn[i] = elm_button_add(Layout());
1009 evas_object_size_hint_weight_set(m->add_btn[i],
1010 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1011 elm_object_text_set(m->add_btn[i], _(btninfo[i].name));
1012 elm_object_style_set(m->add_btn[i], btninfo[i].style);
1014 Connect(m->add_btn[i], btninfo[ABTN_LAST].type, TYPE_CLICKED | TYPE_MOUSE_MOVE);
1016 img = elm_image_add(m->add_btn[i]);
1018 snprintf(buf, sizeof(buf), "%s/%s", IMAGEDIR,
1020 elm_image_file_set(img, buf, NULL);
1021 elm_object_part_content_set(m->add_btn[i],
1022 MUSIC_PART_ELM_SWALLOWICON, img);
1025 elm_object_part_content_set(Layout(), btninfo[i].part, m->add_btn[i]);
1028 elm_object_focus_set(m->add_btn[ABTN_PLAY], EINA_TRUE);
1029 m->def_foc_btn = m->add_btn[ABTN_PLAY];
1033 void CCategoryLayout::m_AddSelectlistButtons(void)
1036 Evas_Object *btn = NULL;
1037 SBtnInfo btninfo[TOTAL_SELECT_BTNS];
1039 btninfo[SBTN_SELECT_ALL].name = MUSIC_TEXT_SELECT_ALL;
1040 btninfo[SBTN_SELECT_ALL].part = MUSIC_PART_LIST_SELECT_ALL;
1041 btninfo[SBTN_SELECT_ALL].style = MUSIC_STYLE_LIST_BTN;
1042 btninfo[SBTN_SELECT_ALL].type = CATEGORY_LAYOUT_SELECT_ALL_BUTTON;
1044 btninfo[SBTN_DONE].name = MUSIC_TEXT_LIST_DONE;
1045 btninfo[SBTN_DONE].part = MUSIC_PART_LIST_DONE_BTN;
1046 btninfo[SBTN_DONE].style = MUSIC_STYLE_LIST_BTN;
1047 btninfo[SBTN_DONE].type = CATEGORY_LAYOUT_DONE_BUTTON;
1049 btninfo[SBTN_CANCEL].name = MUSIC_TEXT_LIST_CANCEL;
1050 btninfo[SBTN_CANCEL].part = MUSIC_PART_LIST_CANCEL_BTN;
1051 btninfo[SBTN_CANCEL].style = MUSIC_STYLE_LIST_BTN;
1052 btninfo[SBTN_CANCEL].type = CATEGORY_LAYOUT_CANCEL_BUTTON;
1054 if (t.sel_type == SELECT_CREATE) {
1055 elm_object_part_text_set(Layout(), MUSIC_PART_LIST_MSG,
1056 _(MUSIC_TEXT_LIST_CREATE_MSG));
1058 else if (t.sel_type == SELECT_ADD) {
1059 elm_object_part_text_set(Layout(), MUSIC_PART_LIST_MSG,
1060 _(MUSIC_TEXT_LIST_ADD_MSG));
1062 else if (t.sel_type == SELECT_REMOVE) {
1063 elm_object_part_text_set(Layout(), MUSIC_PART_LIST_MSG,
1064 _(MUSIC_TEXT_LIST_REMOVE_MSG));
1067 for (i = 0; i < TOTAL_SELECT_BTNS; i++) {
1068 btn = elm_button_add(Layout());
1072 evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND,
1074 elm_object_text_set(btn, _(btninfo[i].name));
1075 elm_object_style_set(btn, btninfo[i].style);
1077 Connect(btn, btninfo[i].type, TYPE_MOUSE_MOVE | TYPE_CLICKED);
1079 elm_object_part_content_set(Layout(), btninfo[i].part, btn);
1080 m->select_btn[i] = btn;
1083 elm_object_focus_set(btn, EINA_TRUE);
1084 m->def_foc_btn = btn;
1088 void CCategoryLayout::m_CreateSongsTopSection(void)
1091 char buf[MAX_LENGTH];
1095 m->albumCover = m_AddAlbumCover();
1099 if (t.depth == E_DEPTH_SHOW_LIST)
1100 path = category_info_get_thumb(t.c_catinfo);
1102 path = album_info_get_thumb(t.c_alinfo);
1105 elm_image_file_set(m->albumCover, path, NULL);
1106 elm_image_aspect_fixed_set(m->albumCover, EINA_FALSE);
1109 snprintf(buf, sizeof(buf), "%s/%s", IMAGEDIR,
1110 MUSIC_IMAGE_DEFAULT_THUMB_126);
1111 elm_image_file_set(m->albumCover, buf, NULL);
1112 elm_image_no_scale_set(m->albumCover, EINA_TRUE);
1114 elm_object_part_content_set(Layout(), MUSIC_PART_ALBUM_THUMB, m->albumCover);
1116 if (t.depth == E_DEPTH_SHOW_LIST) {
1117 elm_object_part_text_set(Layout(), MUSIC_PART_ALBUM_NAME,
1118 category_info_get_name(t.c_catinfo));
1121 elm_object_part_text_set(Layout(),
1122 MUSIC_PART_CATEGORY_NAME,
1123 category_info_get_name(t.c_catinfo));
1124 elm_object_part_text_set(Layout(), MUSIC_PART_ALBUM_NAME,
1125 album_info_get_name(t.c_alinfo));
1126 elm_object_part_text_set(Layout(), MUSIC_PART_ALBUM_ARTIST,
1127 album_info_get_artist(t.c_alinfo));
1130 snprintf(buf, sizeof(buf), "%d %s",
1131 m_ConvertToMin(m->total_duration), _("min"));
1132 elm_object_part_text_set(Layout(), MUSIC_PART_ALBUM_TIME, buf);
1133 snprintf(buf, sizeof(buf), "%d", eina_list_count(m->songlist));
1134 elm_object_part_text_set(Layout(), MUSIC_PART_ALBUM_SONGCOUNT, buf);
1138 void CCategoryLayout::m_CreateSongList(void)
1140 Evas_Object *genlist = NULL;
1141 Elm_Genlist_Item_Class *list_item = NULL;
1143 struct SSongInfo *sinfo = NULL;
1145 Eina_List *l = NULL;
1146 struct SCatItemInfo *itinfo = NULL;
1147 Elm_Object_Item *item = NULL;
1149 void (*item_select_fn)(void *, Evas_Object *, void *) = NULL;
1151 genlist = elm_genlist_add(Layout());
1155 elm_genlist_homogeneous_set(genlist, EINA_TRUE);
1157 evas_object_size_hint_weight_set(genlist,
1158 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1159 elm_object_part_content_set(Layout(), MUSIC_PART_SONGLIST, genlist);
1161 Connect(genlist, CATEGORY_LAYOUT_GENLIST, TYPE_MOUSE_MOVE | TYPE_KEY_DOWN);
1165 list_item = elm_genlist_item_class_new();
1167 evas_object_del(genlist);
1168 _ERR(" elm_genlist_item_class_new failed ");
1171 list_item->func.content_get = NULL;
1172 list_item->func.state_get = NULL;
1173 list_item->func.del = sm_CbRemoveListItem;
1176 if (t.depth == E_DEPTH_SELECT_LIST) {
1177 list_item->func.text_get = sm_CbGetSelectlistItemText;
1178 list_item->item_style = MUSIC_STYLE_SELECT_LIST;
1179 item_select_fn = sm_CbSelectlistItemSelect;
1180 if (t.sel_type == SELECT_REMOVE) {
1181 r = m->pMusicController->MediaGetList(LIST_TYPE_PLAYLISTS_SONG, t.c_catinfo, &(m->songlist));
1184 r = m->pMusicController->MediaGetList(LIST_TYPE_SONG, NULL, &(m->songlist));
1188 list_item->func.text_get = sm_CbGetListItemText;
1189 list_item->item_style = MUSIC_STYLE_ALBUM_SONGLIST;
1190 item_select_fn = sm_CbSongItemSelect;
1191 if (t.depth == E_DEPTH_SHOW_LIST)
1192 r = m->pMusicController->MediaGetList(LIST_TYPE_PLAYLISTS_SONG, t.c_catinfo, &(m->songlist));
1194 r = m->pMusicController->MediaGetList(LIST_TYPE_ALBUM_SONG, t.c_alinfo, &(m->songlist));
1198 _ERR(" Fetching song list from media failed ");
1199 evas_object_del(genlist);
1200 elm_genlist_item_class_free(list_item);
1204 EINA_LIST_FOREACH(m->songlist, l, obj) {
1205 sinfo = (SSongInfo *)obj;
1206 itinfo = (SCatItemInfo *)calloc(1, sizeof(*itinfo));
1210 itinfo->sinfo = sinfo;
1211 item = elm_genlist_item_append(genlist, list_item,
1212 itinfo, NULL, ELM_GENLIST_ITEM_NONE,
1213 item_select_fn, this);
1214 itinfo->item = item;
1215 m->it_infolist = eina_list_append(m->it_infolist, itinfo);
1217 song_info_get_duration(sinfo, &dur);
1218 m->total_duration = m->total_duration + dur;
1220 elm_genlist_item_class_free(list_item);
1224 void CCategoryLayout::m_CreateAlbumgrid(void)
1226 album_info *alinfo = NULL;
1228 Eina_List *l = NULL;
1229 SCatItemInfo *itinfo = NULL;
1230 Elm_Object_Item *item = NULL;
1231 char buf[MAX_LENGTH];
1232 Elm_Gengrid_Item_Class *grid_item = NULL;
1234 t.grid = m_AddGrid();
1238 grid_item = elm_gengrid_item_class_new();
1240 evas_object_del(t.grid);
1241 _ERR(" elm_genlist_item_class_new failed ");
1244 grid_item->item_style = MUSIC_STYLE_CATEGORY_GRID;
1245 grid_item->func.text_get = sm_CbGetGridAlbumItemText;
1246 grid_item->func.content_get = sm_CbGetGridAlbumitemContent;
1247 grid_item->func.state_get = NULL;
1248 grid_item->func.del = sm_CbRemoveGridItem;
1250 m->alblist = category_info_get_albumlist(t.c_catinfo);
1251 if (!m->alblist || eina_list_count(m->alblist) == 0) {
1252 _ERR(" Fetching album list failed ");
1253 evas_object_del(t.grid);
1254 elm_gengrid_item_class_free(grid_item);
1258 EINA_LIST_FOREACH(m->alblist, l, obj) {
1259 alinfo = (album_info *)obj;
1260 itinfo = (SCatItemInfo *)calloc(1, sizeof(*itinfo));
1263 itinfo->alinfo = alinfo;
1264 item = elm_gengrid_item_append(t.grid,
1265 grid_item, itinfo, NULL, m);
1266 itinfo->item = item;
1267 m->it_infolist = eina_list_append(m->it_infolist,
1270 elm_gengrid_item_class_free(grid_item);
1272 elm_object_part_text_set(Layout(),
1273 MUSIC_PART_CATEGORY_NAME,
1274 category_info_get_name(t.c_catinfo));
1275 snprintf(buf, sizeof(buf), "%d",
1276 category_info_get_albumcount(t.c_catinfo));
1277 elm_object_part_text_set(Layout(),
1278 MUSIC_PART_CATEGORY_ALBUMCOUNT, buf);
1279 snprintf(buf, sizeof(buf), "%d",
1280 category_info_get_songcount(t.c_catinfo));
1281 elm_object_part_text_set(Layout(),
1282 MUSIC_PART_CATEGORY_SONGCOUNT, buf);
1283 elm_object_part_content_set(Layout(),
1284 MUSIC_PART_CATEGORY_ALBUM_GRID, t.grid);
1288 void CCategoryLayout::m_CreateCatgrid(bool sort_flag)
1291 Eina_List *l = NULL;
1292 Elm_Gengrid_Item_Class *grid_item = NULL;
1294 t.grid = m_AddGrid();
1298 grid_item = elm_gengrid_item_class_new();
1300 evas_object_del(t.grid);
1301 _ERR(" elm_genlist_item_class_new failed ");
1304 grid_item->item_style = MUSIC_STYLE_CATEGORY_GRID;
1305 grid_item->func.text_get = sm_CbGetGridItemText;
1306 grid_item->func.content_get = sm_CbGetGridItemContent;
1307 grid_item->func.state_get = NULL;
1308 grid_item->func.del = sm_CbRemoveGridItem;
1311 if (!t_GetMediaList(&m->catlist)) {
1312 if (t_CategoryType() != CAT_TYPE_PLAYLISTS) {
1313 _ERR(" Fetching list failed ");
1314 SetEmptyStatus(true);
1315 elm_gengrid_item_class_free(grid_item);
1322 if (t_CategoryType() == CAT_TYPE_PLAYLISTS)
1323 m_AddCategoryItem(grid_item, CAT_TYPE_PLAYLIST_NEW, NULL);
1325 EINA_LIST_FOREACH(m->catlist, l, info)
1326 m_AddCategoryItem(grid_item, t_CategoryType(), info);
1328 elm_gengrid_item_class_free(grid_item);
1330 elm_object_part_content_set(Layout(),
1331 MUSIC_PART_CATEGORY_GRID, t.grid);
1335 void CCategoryLayout::m_SortCatgrid(void)
1337 int(*_sort[])(const void *d1, const void *d2) = {
1346 sort_type = m->pMusicController->SortType();
1347 m->catlist = eina_list_sort(m->catlist, 0,
1352 void CCategoryLayout::m_EmptyLayout(bool sort_flag)
1355 elm_gengrid_clear(t.grid);
1358 elm_genlist_clear(m->glist);
1362 eina_list_free(m->catlist);
1368 eina_list_free(m->alblist);
1373 eina_list_free(m->songlist);
1377 if (m->it_infolist) {
1378 eina_list_free(m->it_infolist);
1379 m->it_infolist = NULL;
1382 m->total_duration = 0;
1386 for (i = 0; i < TOTAL_ADD_BTNS; i++) {
1388 evas_object_del(m->add_btn[i]);
1389 m->add_btn[i] = NULL;
1392 for (i = 0; i < TOTAL_SELECT_BTNS; i++) {
1393 if (m->select_btn[i])
1394 evas_object_del(m->select_btn[i]);
1395 m->select_btn[i] = NULL;
1399 evas_object_del(m->albumCover);
1400 m->albumCover = NULL;
1402 evas_object_hide(Layout());
1403 elm_object_part_content_unset(t.base, MUSIC_PART_CONTENT);
1408 bool CCategoryLayout::t_SetEdje(const char *szLayout)
1411 if (!elm_layout_file_set(Layout(), EDJEFILE, szLayout)) {
1412 _ERR(" elm szLayout file set failed ");
1419 void CCategoryLayout::t_UpdateLayout(bool sort_flag)
1421 /* Remove existing grid and prepare afresh */
1422 m_EmptyLayout(sort_flag);
1425 parcel.ctxtInfo = NULL;
1427 if (t.depth == E_DEPTH_SONG) {
1428 if (!t_SetEdje(MUSIC_CATEGORY_SONGS_LAYOUT)) {
1429 _ERR(" get layout failed ");
1433 m_CreateSongsTopSection();
1435 parcel.updateType = E_LAYOUT_UPDATE;
1436 parcel.layoutId = MUSIC_CATEGORY_SONGS_LAYOUT;
1437 parcel.keyEvent = NULL;
1438 m->vmgr->UpdateView((const char *)MUSIC_BASE_VIEW, &parcel);
1440 else if (t.depth == E_DEPTH_SHOW_LIST) {
1441 if (!t_SetEdje(MUSIC_ALBUM_SONGS_LAYOUT)) {
1442 _ERR(" get layout failed ");
1446 m_CreateSongsTopSection();
1448 parcel.updateType = E_LAYOUT_UPDATE;
1449 parcel.layoutId = MUSIC_CATEGORY_SONGS_LAYOUT;
1450 parcel.keyEvent = NULL;
1451 m->vmgr->UpdateView((const char *)MUSIC_BASE_VIEW, &parcel);
1453 else if (t.depth == E_DEPTH_ALBUM) {
1454 if (!t_SetEdje(MUSIC_CATEGORY_ALBUM_LAYOUT)) {
1455 _ERR(" get layout failed ");
1459 m_CreateAlbumgrid();
1461 parcel.updateType = E_LAYOUT_UPDATE;
1462 parcel.layoutId = MUSIC_CATEGORY_ALBUM_LAYOUT;
1463 parcel.keyEvent = NULL;
1464 m->vmgr->UpdateView((const char *)MUSIC_BASE_VIEW, &parcel);
1466 else if (t.depth == E_DEPTH_SELECT_LIST) {
1467 if (!t_SetEdje(MUSIC_CATEGORY_SELECTLIST_LAYOUT)) {
1468 _ERR(" get layout failed ");
1472 m_AddSelectlistButtons();
1474 parcel.updateType = E_LAYOUT_UPDATE;
1475 parcel.layoutId = MUSIC_CATEGORY_SELECTLIST_LAYOUT;
1476 parcel.keyEvent = NULL;
1477 m->vmgr->UpdateView((const char *)MUSIC_BASE_VIEW, &parcel);
1478 elm_object_focus_next_object_set(m->glist,
1479 m->select_btn[SBTN_DONE], ELM_FOCUS_RIGHT);
1482 if (!t_SetEdje(MUSIC_CATEGORY_LAYOUT)) {
1483 _ERR(" get layout failed ");
1486 m_CreateCatgrid(sort_flag);
1488 parcel.updateType = E_LAYOUT_UPDATE;
1489 parcel.layoutId = MUSIC_CATEGORY_LAYOUT;
1490 parcel.keyEvent = NULL;
1491 m->vmgr->UpdateView((const char *)MUSIC_BASE_VIEW, &parcel);
1496 void CCategoryLayout::t_UpdateLayoutWithFocus(void)
1498 elm_object_tree_focus_allow_set(t.base, EINA_FALSE);
1499 t_UpdateLayout(false);
1500 elm_object_part_content_set(t.base, MUSIC_PART_CONTENT, Layout());
1501 evas_object_show(Layout());
1502 m_RemoveFocusIdler();
1503 m->focus_idler = ecore_idler_add(sm_CbFocusIdler, this);
1507 bool CCategoryLayout::Create(CLayoutMgr *mgr)
1511 Evas_Object *base = NULL;
1512 Evas_Object *win = NULL;
1513 Evas_Object *layout = NULL;
1514 CMusicController *pMusicController = NULL;
1515 CViewMgr *vmgr = NULL;
1520 m = new SCategoryLayout;
1522 _ERR(" calloc failed ");
1526 vmgr = CViewMgr::GetInstance();
1528 _ERR(" get view mgr failed ");
1536 _ERR(" get base failed ");
1542 win = vmgr->Window();
1544 _ERR(" vimewmgr get win failed ");
1550 pMusicController = CMusicController::GetInstance();
1551 if (!pMusicController) {
1552 _ERR(" music controller get music instance failed ");
1558 layout = elm_layout_add(base);
1560 _ERR(" layout creation failed ");
1566 bool r = CExtBaseLayout::Create(layout);
1568 _ERR(" CBaseLayout creation failed ");
1569 evas_object_del(layout);
1575 t.epopup = new CEntryPopup;
1577 _ERR(" CEntryPopup creation failed ");
1578 CExtBaseLayout::Destroy();
1579 evas_object_del(layout);
1588 m->pMusicController = pMusicController;
1590 t.depth = E_DEPTH_CATEGORY;
1592 t_UpdateLayout(false);
1594 Connect(Layout(), CATEGORY_LAYOUT, TYPE_KEY_DOWN);
1600 void CCategoryLayout::Destroy(void)
1604 Disconnect(Layout());
1605 if (t.epopup->FlagCreate())
1606 t.epopup->Destroy();
1608 m_RemoveFocusIdler();
1609 m_EmptyLayout(false);
1610 category_info_destroy(t.c_catinfo);
1611 album_info_destroy(t.c_alinfo);
1612 song_info_destroy(m->c_sinfo);
1614 CExtBaseLayout::Destroy();
1615 evas_object_del(Layout());
1622 void CCategoryLayout::t_OnShow(void)
1626 t.depth = E_DEPTH_CATEGORY;
1627 t_UpdateLayout(false);
1628 elm_object_part_content_set(t.base, MUSIC_PART_CONTENT, Layout());
1629 evas_object_show(Layout());
1633 void CCategoryLayout::Update(bool focusFlag)
1638 if (t.depth != E_DEPTH_CATEGORY)
1640 t_UpdateLayout(true);
1641 elm_object_part_content_set(t.base, MUSIC_PART_CONTENT, Layout());
1642 evas_object_show(Layout());
1646 elm_object_focus_set(t.grid, EINA_TRUE);
1650 void CCategoryLayout::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
1653 case CATEGORY_LAYOUT:
1656 Eina_List *alist = NULL;
1658 if (!strcmp(ev->keyname, KEY_BACK)) {
1659 if (t.depth == E_DEPTH_CATEGORY) {
1661 parcel.ctxtInfo = NULL;
1662 parcel.updateType = E_FOCUS_UPDATE;
1663 parcel.layoutId = NULL;
1664 parcel.keyEvent = NULL;
1665 m->vmgr->UpdateView((const char *)MUSIC_BASE_VIEW, &parcel);
1668 else if (t.depth == E_DEPTH_ALBUM) {
1669 t.depth = E_DEPTH_CATEGORY;
1671 else if (t.depth == E_DEPTH_SELECT_LIST) {
1672 t.depth = E_DEPTH_CATEGORY;
1674 else if (t.depth == E_DEPTH_SHOW_LIST) {
1675 t.depth = E_DEPTH_CATEGORY;
1677 else if (t.depth == E_DEPTH_SONG) {
1679 alist = category_info_get_albumlist(t.c_catinfo);
1681 count = eina_list_count(alist);
1683 t.depth = E_DEPTH_CATEGORY;
1685 t.depth = E_DEPTH_ALBUM;
1688 t_UpdateLayoutWithFocus();
1693 case CATEGORY_LAYOUT_GENGRID:
1694 case CATEGORY_LAYOUT_GENLIST:
1696 Elm_Object_Item *it = NULL;
1697 SContentInfo *ctxtinfo = NULL;
1698 SCatItemInfo *itinfo = NULL;
1703 if (strcmp(ev->keyname, KEY_MENU) || t.depth ==
1704 E_DEPTH_SELECT_LIST || t.depth ==
1708 it = elm_object_focused_item_get(obj);
1710 _ERR(" unable to get focused item ");
1713 t.focused_item = it;
1720 ctxtinfo = (SContentInfo *)calloc(1, sizeof(*ctxtinfo));
1724 itinfo = m_FindItemInfo(m->it_infolist, it);
1725 if (!itinfo || itinfo->type == CAT_TYPE_PLAYLIST_NEW) {
1730 ctxtinfo->cbdata = this;
1731 ctxtinfo->update = sm_CbCtxtUpdate;
1732 ctxtinfo->close = sm_CbCtxtClose;
1733 if (t.depth == E_DEPTH_SONG) {
1734 ctxtinfo->type = CONTEXT_TYPE_SONG;
1735 ctxtinfo->context = itinfo->sinfo;
1737 else if (t.depth == E_DEPTH_ALBUM) {
1738 ctxtinfo->type = CONTEXT_TYPE_ALBUM;
1739 ctxtinfo->context = itinfo->alinfo;
1742 ctxtinfo->type = t_ContextType();
1743 ctxtinfo->context = itinfo->catinfo;
1746 t.ctxtinfo = ctxtinfo;
1749 parcel.ctxtInfo = ctxtinfo;
1750 if (!m->vmgr->PushView(MUSIC_CONTEXT_VIEW, &parcel))
1751 _ERR("viewmgr push view MUSIC_CONTEXT_VIEW failed");
1761 void CCategoryLayout::OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev)
1764 case CATEGORY_LAYOUT_GENGRID:
1766 Elm_Object_Item *item;
1771 item = elm_gengrid_at_xy_item_get(obj, ev->cur.canvas.x,
1772 ev->cur.canvas.y, NULL, NULL);
1776 if (!elm_object_item_focus_get(item))
1777 elm_object_item_focus_set(item, EINA_TRUE);
1781 case CATEGORY_LAYOUT_GENLIST:
1783 Elm_Object_Item *item;
1788 item = elm_genlist_at_xy_item_get(obj, ev->cur.canvas.x,
1789 ev->cur.canvas.y, NULL);
1791 if (!elm_object_item_focus_get(item))
1792 elm_object_item_focus_set(item, EINA_TRUE);
1796 case CATEGORY_LAYOUT_PLAY_BUTTON:
1797 case CATEGORY_LAYOUT_NEXT_BUTTON:
1798 case CATEGORY_LAYOUT_LAST_BUTTON:
1799 case CATEGORY_LAYOUT_SELECT_ALL_BUTTON:
1800 case CATEGORY_LAYOUT_DONE_BUTTON:
1801 case CATEGORY_LAYOUT_CANCEL_BUTTON:
1802 if (!elm_object_focus_get(obj))
1803 elm_object_focus_set(obj, EINA_TRUE);
1812 void CCategoryLayout::OnMouseClicked(int id, Evas_Object *obj)
1815 case CATEGORY_LAYOUT_PLAY_BUTTON:
1816 m_GotoPlayback(ADD_TYPE_FRESH, NULL);
1819 case CATEGORY_LAYOUT_NEXT_BUTTON:
1820 m_GotoPlayback(ADD_TYPE_NEXT, NULL);
1823 case CATEGORY_LAYOUT_LAST_BUTTON:
1824 m_GotoPlayback(ADD_TYPE_END, NULL);
1827 case CATEGORY_LAYOUT_SELECT_ALL_BUTTON:
1829 Eina_List *l = NULL;
1830 SCatItemInfo *itinfo = NULL;
1831 void *list_obj = NULL;
1834 tc = eina_list_count(m->it_infolist);
1836 if (m->count == tc) {
1837 elm_object_text_set(m->select_btn[SBTN_SELECT_ALL],
1838 _(MUSIC_TEXT_SELECT_ALL));
1840 EINA_LIST_FOREACH(m->it_infolist, l, list_obj) {
1841 itinfo = (SCatItemInfo *)list_obj;
1842 itinfo->check_status = false;
1844 elm_genlist_realized_items_update(m->glist);
1849 elm_object_text_set(m->select_btn[SBTN_SELECT_ALL],
1850 _(MUSIC_TEXT_DESELECT_ALL));
1852 EINA_LIST_FOREACH(m->it_infolist, l, list_obj) {
1853 itinfo = (SCatItemInfo *)list_obj;
1854 itinfo->check_status = true;
1856 elm_genlist_realized_items_update(m->glist);
1860 case CATEGORY_LAYOUT_DONE_BUTTON:
1862 if (t.sel_type == SELECT_ADD) {
1863 m_AddSelectedSongs();
1866 else if (t.sel_type == SELECT_REMOVE) {
1867 m_RemoveSelectedSongs();
1871 if (t.epopup->FlagCreate())
1872 t.epopup->Destroy();
1874 t.epopup->Create(t.base, MUSIC_STR_EMPTY, sm_CbEntrynameSet, this);
1878 case CATEGORY_LAYOUT_CANCEL_BUTTON:
1880 t.depth = E_DEPTH_CATEGORY;
1881 t_UpdateLayoutWithFocus();
1891 void CCategoryLayout::OnRealized(int id, Evas_Object *obj, Elm_Object_Item *item)
1894 case CATEGORY_LAYOUT_GENGRID:
1895 elm_object_item_signal_callback_add(item,
1896 MUSIC_SIGNAL_BTN_CLICKED, MUSIC_BASE_VIEW,
1897 sm_CbItemSelect, this);
1906 void CCategoryLayout::OnUnrealized(int id, Evas_Object *obj, Elm_Object_Item *item)
1909 case CATEGORY_LAYOUT_GENGRID:
1910 elm_object_item_signal_callback_del(item,
1911 MUSIC_SIGNAL_BTN_CLICKED, MUSIC_BASE_VIEW,