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>
28 #include "category_info.h"
29 #include "album_info.h"
30 #include "song_info.h"
31 #include "music-controller.h"
32 #include "LayoutMgr.h"
33 #include "entry-popup.h"
35 #include "common-ui.h"
37 #include "ExtBaseLayout.h"
39 #include "category-layout.h"
40 #include "base-view.h"
42 #define TOTAL_ADD_BTNS 3
43 #define TOTAL_SELECT_BTNS 3
44 #define GENGRID_ITEM_SIZE_W (263+20)
45 #define GENGRID_ITEM_SIZE_H (359+20)
50 CATEGORY_LAYOUT_GENGRID,
51 CATEGORY_LAYOUT_GENLIST,
52 CATEGORY_LAYOUT_PLAY_BUTTON,
53 CATEGORY_LAYOUT_NEXT_BUTTON,
54 CATEGORY_LAYOUT_LAST_BUTTON,
55 CATEGORY_LAYOUT_SELECT_ALL_BUTTON,
56 CATEGORY_LAYOUT_DONE_BUTTON,
57 CATEGORY_LAYOUT_CANCEL_BUTTON
85 struct SCategoryLayout {
89 Evas_Object *add_btn[TOTAL_ADD_BTNS];
90 Evas_Object *select_btn[TOTAL_SELECT_BTNS];
91 Evas_Object *albumCover;
92 Evas_Object *def_foc_btn;
96 Eina_List *it_infolist;
97 Ecore_Idler *focus_idler;
98 CMusicController *pMusicController;
106 memset(this, 0, sizeof(SCategoryLayout));
114 Eina_Bool CCategoryLayout::sm_CbFocusIdler(void *dt)
116 CCategoryLayout *root = (CCategoryLayout *)dt;
118 Eina_Bool ret = EINA_FALSE;
120 ret = root->m_OnFocusIdler();
126 Eina_Bool CCategoryLayout::m_OnFocusIdler(void)
128 Elm_Object_Item *it = NULL;
129 SCatItemInfo *itinfo = NULL;
131 m->focus_idler = NULL;
132 elm_object_tree_focus_allow_set(t.base, EINA_TRUE);
134 if (t.depth == E_DEPTH_CATEGORY) {
135 it = m_FindItemByInfo(m->it_infolist, t.c_catinfo);
137 itinfo = (SCatItemInfo *)eina_list_nth(m->it_infolist, 0);
140 elm_gengrid_item_show(it, ELM_GENGRID_ITEM_SCROLLTO_IN);
141 elm_object_item_focus_set(it, EINA_TRUE);
144 elm_object_focus_set(m->def_foc_btn, EINA_TRUE);
146 return ECORE_CALLBACK_CANCEL;
150 void CCategoryLayout::sm_CbEntrynameSet(void *dt, const char *name)
152 CCategoryLayout *root = (CCategoryLayout *)dt;
154 root->m_OnEntrynameSet(name);
158 void CCategoryLayout::m_OnEntrynameSet(const char *name)
160 Eina_List *idlist = NULL;
166 idlist = m_GetSelectedList(m->it_infolist, (int)ID_TYPE_MEDIA);
170 if (!strcmp(str, MUSIC_STR_EMPTY)) {
171 _create_message_box(Layout(), MUSIC_TEXT_EMPTY_NAME);
176 if (m->pMusicController->MediaExistPlaylist(str)) {
177 _create_message_box(Layout(), MUSIC_TEXT_INUSE_MSG);
182 if (!m->pMusicController->MediaInsertPlaylist(str, idlist)) {
183 _ERR("Playlist creation failed ");
188 t.depth = E_DEPTH_CATEGORY;
189 t_UpdateLayoutWithFocus();
193 char *CCategoryLayout::sm_CbGetSelectlistItemText(void *data, Evas_Object *obj, const char *part)
195 SCatItemInfo *itinfo = (SCatItemInfo *)data;
199 if (!itinfo || !obj || !part)
202 if (!strcmp(part, "elm.text")) {
203 str = itinfo->sinfo->Name();
205 index = elm_genlist_item_index_get(itinfo->item);
206 if ((index & 1) == 1)
207 elm_object_item_signal_emit(itinfo->item,
208 MUSIC_SIGNAL_EVEN_ROW, MUSIC_BASE_VIEW);
210 elm_object_item_signal_emit(itinfo->item,
211 MUSIC_SIGNAL_ODD_ROW, MUSIC_BASE_VIEW);
213 if (itinfo->check_status)
214 elm_object_item_signal_emit(itinfo->item,
215 MUSIC_SIGNAL_CHECK_ON, MUSIC_BASE_VIEW);
217 elm_object_item_signal_emit(itinfo->item,
218 MUSIC_SIGNAL_CHECK_OFF, MUSIC_BASE_VIEW);
220 else if (!strcmp(part, "elm.text1")) {
221 str = itinfo->sinfo->Artist();
223 else if (!strcmp(part, "elm.text2")) {
224 str = itinfo->sinfo->Album();
234 char *CCategoryLayout::sm_CbGetListItemText(void *data, Evas_Object *obj, const char *part)
236 SCatItemInfo *itinfo = (SCatItemInfo *)data;
237 CSongInfo *sinfo = NULL;
238 char buf[MAX_LENGTH];
239 char *timestr = NULL;
243 if (!itinfo || !obj || !part)
246 sinfo = itinfo->sinfo;
248 snprintf(buf, sizeof(buf), "%s", MUSIC_STR_EMPTY);
250 if (!strcmp(part, "elm.text")) {
251 index = elm_genlist_item_index_get(itinfo->item);
252 if ((index & 1) == 1) {
253 elm_object_item_signal_emit(itinfo->item,
254 MUSIC_SIGNAL_EVEN_ROW, MUSIC_BASE_VIEW);
257 elm_object_item_signal_emit(itinfo->item,
258 MUSIC_SIGNAL_ODD_ROW, MUSIC_BASE_VIEW);
260 snprintf(buf, sizeof(buf), "%d", index);
262 else if (!strcmp(part, "elm.text1")) {
263 snprintf(buf, sizeof(buf), "%s", sinfo->Name());
265 else if (!strcmp(part, "elm.text2")) {
266 snprintf(buf, sizeof(buf), "%s", sinfo->Artist());
268 else if (!strcmp(part, "elm.text3")) {
269 duration = sinfo->Duration();
270 timestr = _get_timestr_from_milseconds(duration);
272 snprintf(buf, sizeof(buf), "%s", timestr);
277 if (strcmp(buf, MUSIC_STR_EMPTY))
284 void CCategoryLayout::sm_CbRemoveListItem(void *data, Evas_Object *obj)
290 void CCategoryLayout::sm_CbSongItemSelect(void *data, Evas_Object *obj, void *event_info)
292 CCategoryLayout *root = (CCategoryLayout *)data;
294 root->m_OnSongItemSelect(obj, (Elm_Object_Item *)event_info);
298 void CCategoryLayout::m_OnSongItemSelect(Evas_Object *obj, Elm_Object_Item *event_info)
300 SCatItemInfo *itinfo = NULL;
306 itinfo = m_FindItemInfo(m->it_infolist, (Elm_Object_Item *)event_info);
308 _ERR(" no item info found ");
313 m->c_sinfo = new CSongInfo;
316 if (!m->c_sinfo->FlagCreate()) {
317 m->c_sinfo->Create();
320 m->c_sinfo->Duplicate(itinfo->sinfo);
324 id = m->c_sinfo->Id();
326 m->c_sinfo->Destroy();
332 m_GotoPlayback(ADD_TYPE_FRESH, id);
336 void CCategoryLayout::sm_CbSelectlistItemSelect(void *data, Evas_Object *obj, void *event_info)
338 CCategoryLayout *root = (CCategoryLayout *)data;
340 root->m_OnSelectlistItemSelect(obj, (Elm_Object_Item *)event_info);
344 void CCategoryLayout::m_OnSelectlistItemSelect(Evas_Object *obj, void *event_info)
346 SCatItemInfo *itinfo = NULL;
352 itinfo = m_FindItemInfo(m->it_infolist, (Elm_Object_Item *)event_info);
354 _ERR(" no item info found ");
358 tc = eina_list_count(m->it_infolist);
359 if (itinfo->check_status) {
361 elm_object_text_set(m->select_btn[SBTN_SELECT_ALL],
362 _(MUSIC_TEXT_SELECT_ALL));
363 m->count = m->count - 1;
364 elm_object_item_signal_emit(itinfo->item,
365 MUSIC_SIGNAL_CHECK_OFF, MUSIC_BASE_VIEW);
366 itinfo->check_status = false;
369 m->count = m->count + 1;
371 elm_object_text_set(m->select_btn[SBTN_SELECT_ALL],
372 _(MUSIC_TEXT_DESELECT_ALL));
373 elm_object_item_signal_emit(itinfo->item,
374 MUSIC_SIGNAL_CHECK_ON, MUSIC_BASE_VIEW);
375 itinfo->check_status = true;
380 void CCategoryLayout::sm_CbCtxtUpdate(void *dt, enum EActionType type, int lid)
382 CCategoryLayout *root = (CCategoryLayout *)dt;
385 root->t_OnCtxtUpdate(type, lid);
389 void CCategoryLayout::t_OnCtxtUpdate(enum EActionType type, int lid)
391 Eina_List *list = NULL;
392 Eina_List *alist = NULL, *slist = NULL, *l = NULL, *sl = NULL;
393 CSongInfo *sinfo = NULL;
394 CAlbumInfo *alinfo = NULL;
398 if (!t.ctxtinfo || !t.ctxtinfo->context)
401 if (type == ACTION_TYPE_ADDNEXT)
402 mode = ADD_TYPE_NEXT;
406 if (t.depth == E_DEPTH_SONG) {
407 sinfo = (CSongInfo *)t.ctxtinfo->context;
408 list = eina_list_append(list, sinfo);
410 else if (t.depth == E_DEPTH_ALBUM) {
411 m->pMusicController->MediaGetList(LIST_TYPE_ALBUM_SONG,
412 t.ctxtinfo->context, &list);
413 sinfo = (CSongInfo *)eina_list_data_get(list);
416 alist = ((CCategoryInfo *)t.ctxtinfo->context)->AlbumList();
417 EINA_LIST_FOREACH(alist, l, obj) {
418 alinfo = (CAlbumInfo *)obj;
420 if (!m->pMusicController->MediaGetList(LIST_TYPE_ALBUM_SONG, (void *)alinfo, &slist)) {
421 _ERR(" Failed to get album songlist ");
424 EINA_LIST_FOREACH(slist, sl, obj) {
425 sinfo = (CSongInfo *)obj;
426 CSongInfo *dupSongInfo = new CSongInfo;
427 dupSongInfo->Create();
428 dupSongInfo->Duplicate(sinfo);
429 list = eina_list_append(list, dupSongInfo);
431 eina_list_free(slist);
433 sinfo = (CSongInfo *)eina_list_data_get(list);
436 if (type == ACTION_TYPE_ADDTO) {
437 if (!m->pMusicController->MediaAddsongsPlaylist(lid, list))
438 _ERR(" Adding songs to playlist failed ");
440 _create_message_box(t.base, MUSIC_TEXT_ADDTO_MSG);
442 if (t.depth == E_DEPTH_CATEGORY) {
443 EINA_LIST_FREE(list, obj) {
444 sinfo = (CSongInfo *)obj;
453 m->pMusicController->UpdatePlaylist(list, mode);
454 if (type == ACTION_TYPE_PLAY) {
455 m->pMusicController->Stop();
456 m->pMusicController->SetCurrentSong(sinfo->Id());
459 if (t.depth == E_DEPTH_CATEGORY) {
460 EINA_LIST_FREE(list, obj) {
461 sinfo = (CSongInfo *)obj;
467 eina_list_free(list);
470 _update_playback_view((EAddType)type, Layout(), t.focused_item);
474 void CCategoryLayout::sm_CbCtxtClose(void *dt)
476 CCategoryLayout *root = (CCategoryLayout *)dt;
478 root->m_OnCtxtClose();
482 void CCategoryLayout::m_OnCtxtClose(void)
485 m->vmgr->PushView(MUSIC_BASE_VIEW, NULL);
486 elm_object_item_focus_set(t.focused_item, EINA_TRUE);
490 char *CCategoryLayout::sm_CbGetGridItemText(void *data, Evas_Object *obj, const char *part)
492 SCatItemInfo *itinfo = (SCatItemInfo *)data;
494 const char *txt = NULL;
495 char buf[MAX_LENGTH];
497 if (!itinfo || !obj || !part)
500 if (!strcmp(part, "elm.text")) {
501 if (itinfo->type == CAT_TYPE_PLAYLIST_NEW)
502 return strdup(_(MUSIC_TEXT_CREATE_PLAYLIST));
504 txt = itinfo->catinfo->Name();
508 else if (!strcmp(part, "elm.text1")) {
509 if (itinfo->type == CAT_TYPE_PLAYLIST_NEW) {
512 else if (itinfo->type == CAT_TYPE_PLAYLISTS) {
513 scount = itinfo->catinfo->SongCount();
514 snprintf(buf, sizeof(buf), "%d %s", scount, _("Songs"));
517 acount = itinfo->catinfo->AlbumCount();
518 scount = itinfo->catinfo->SongCount();
519 snprintf(buf, sizeof(buf), "%d %s, %d %s", acount,
520 _("Albums"), scount, _("Songs"));
529 char *CCategoryLayout::sm_CbGetGridAlbumItemText(void *data, Evas_Object *obj, const char *part)
531 SCatItemInfo *itinfo = (SCatItemInfo *)data;
532 CAlbumInfo *alinfo = NULL;
535 if (!itinfo || !obj || !part)
538 alinfo = itinfo->alinfo;
540 if (!strcmp(part, "elm.text")) {
541 txt = alinfo->Name();
545 else if (!strcmp(part, "elm.text1")) {
546 if (itinfo->type == CAT_TYPE_ARTIST)
547 txt = alinfo->Artist();
549 txt = alinfo->Genre();
558 Evas_Object *CCategoryLayout::sm_CbGetGridItemContent(void *data, Evas_Object *obj, const char *part)
560 SCatItemInfo *itinfo = (SCatItemInfo *)data;
561 CAlbumInfo *alinfo = NULL;
562 void *list_obj = NULL;
563 Eina_List *l = NULL, *alist = NULL;
564 Evas_Object *img = NULL;
566 char buf[MAX_LENGTH];
568 if (!itinfo || !obj || !part)
571 if (!itinfo->catinfo && itinfo->type != CAT_TYPE_PLAYLIST_NEW)
574 if (strcmp(part, "elm.swallow.icon"))
577 img = elm_image_add(obj);
583 if (itinfo->type == CAT_TYPE_ARTIST || itinfo->type == CAT_TYPE_GENRE) {
584 alist = itinfo->catinfo->AlbumList();
586 EINA_LIST_FOREACH(alist, l, list_obj) {
587 alinfo = (CAlbumInfo *)list_obj;
588 path = alinfo->ThumbnailPath();
594 else if (itinfo->type == CAT_TYPE_PLAYLISTS) {
595 path = itinfo->catinfo->ThumbnailPath();
599 if (itinfo->type == CAT_TYPE_PLAYLIST_NEW)
600 snprintf(buf, sizeof(buf), "%s/%s", IMAGEDIR,
601 MUSIC_IMAGE_CREATE_PLAYLIST);
603 snprintf(buf, sizeof(buf), "%s/%s", IMAGEDIR,
604 MUSIC_IMAGE_DEFAULT_THUMB_126);
605 elm_image_file_set(img, buf, NULL);
606 elm_image_no_scale_set(img, EINA_TRUE);
609 elm_image_file_set(img, path, NULL);
610 elm_image_aspect_fixed_set(img, EINA_FALSE);
617 Evas_Object *CCategoryLayout::sm_CbGetGridAlbumitemContent(void *data, Evas_Object *obj, const char *part)
619 SCatItemInfo *itinfo = (SCatItemInfo *)data;
620 CAlbumInfo *alinfo = NULL;
622 Evas_Object *img = NULL;
623 char buf[MAX_LENGTH];
625 if (!itinfo || !obj || !part)
628 alinfo = itinfo->alinfo;
630 if (strcmp(part, "elm.swallow.icon"))
633 img = elm_image_add(obj);
637 path = alinfo->ThumbnailPath();
639 snprintf(buf, sizeof(buf), "%s/%s", IMAGEDIR,
640 MUSIC_IMAGE_DEFAULT_THUMB_126);
641 elm_image_file_set(img, buf, NULL);
642 elm_image_no_scale_set(img, EINA_TRUE);
645 elm_image_file_set(img, path, NULL);
646 elm_image_aspect_fixed_set(img, EINA_FALSE);
653 void CCategoryLayout::sm_CbRemoveGridItem(void *data, Evas_Object *obj)
659 void CCategoryLayout::sm_CbItemSelect(void *data, Elm_Object_Item *it, const char *emission, const char *source)
661 CCategoryLayout *root = (CCategoryLayout *)data;
663 root->m_OnItemSelect(it, emission, source);
667 void CCategoryLayout::m_OnItemSelect(Elm_Object_Item *it, const char *emission, const char *source)
669 SCatItemInfo *itinfo = NULL;
671 itinfo = m_FindItemInfo(m->it_infolist, it);
673 _ERR(" no item info found ");
677 if (t.depth == E_DEPTH_ALBUM) {
679 t.c_alinfo = new CAlbumInfo;
682 if (!t.c_alinfo->FlagCreate()) {
683 t.c_alinfo->Create();
685 t.c_alinfo->Duplicate(itinfo->alinfo);
686 t.depth = E_DEPTH_SONG;
689 if (t.c_catinfo && t.c_catinfo->FlagCreate())
690 t.c_catinfo->Destroy();
695 t_HandleItemSelect(itinfo);
698 t_UpdateLayoutWithFocus();
702 int CCategoryLayout::m_ConvertToMin(int milsec)
706 min = milsec / 60000; /*milli seconds per minute*/
712 void CCategoryLayout::m_RemoveFocusIdler(void)
717 ecore_idler_del(m->focus_idler);
718 m->focus_idler = NULL;
722 Elm_Object_Item *CCategoryLayout::m_FindItemByInfo(Eina_List *list, void *info)
725 SCatItemInfo *itinfo = NULL;
732 EINA_LIST_FOREACH(list, l, obj) {
733 itinfo = (SCatItemInfo *)obj;
734 if (!itinfo->catinfo)
737 id = itinfo->catinfo->CategoryId();
738 if (id == ((CCategoryInfo *)info)->CategoryId())
746 CCategoryLayout::SCatItemInfo *CCategoryLayout::m_FindItemInfo(Eina_List *list, Elm_Object_Item *item)
749 SCatItemInfo *itinfo = NULL;
755 EINA_LIST_FOREACH(list, l, obj) {
756 itinfo = (SCatItemInfo *)obj;
757 if (itinfo->item == item)
765 void CCategoryLayout::m_GotoPlayback(int mode, char *id)
767 if (!m->it_infolist || eina_list_count(m->it_infolist) == 0) {
768 _create_message_box(Layout(), MUSIC_TEXT_NO_SONGS);
769 _ERR(" No songs for playback ");
773 if (t.depth == E_DEPTH_ALBUM)
774 m_AddAlbumsToPlayback(mode);
775 else if (t.depth == E_DEPTH_SONG ||
776 t.depth == E_DEPTH_SHOW_LIST)
777 m_AddSongsToPlayback(mode);
781 if (mode == ADD_TYPE_FRESH) {
782 m->pMusicController->Stop();
783 if (id) /* If want to play selected song */
784 m->pMusicController->SetCurrentSong(id);
787 _update_playback_view((EAddType)mode, Layout(), NULL);
791 Eina_List *CCategoryLayout::m_GetSelectedList(Eina_List *infolist, int type)
793 Eina_List *idlist = NULL, *l = NULL;
794 SCatItemInfo *itinfo = NULL;
797 EIdType eType = (EIdType)type;
803 EINA_LIST_FOREACH(infolist, l, obj) {
804 itinfo = (SCatItemInfo *)obj;
805 if (!itinfo->check_status)
808 if (eType == ID_TYPE_MEDIA) {
809 id = itinfo->sinfo->Id();
811 idlist = eina_list_append(idlist, id);
814 idlist = eina_list_append(idlist,
823 void CCategoryLayout::m_AddSelectedSongs(void)
825 Eina_List *idlist = NULL;
828 if (!t.c_catinfo || !t.c_catinfo->FlagCreate())
831 lid = t.c_catinfo->CategoryId();
832 idlist = m_GetSelectedList(m->it_infolist, (int)ID_TYPE_MEDIA);
837 if (!m->pMusicController->MediaAddmediaPlaylist(lid, idlist)) {
838 _ERR(" Failed to add songs to playlist ");
842 t.depth = E_DEPTH_CATEGORY;
843 t_UpdateLayoutWithFocus();
847 void CCategoryLayout::m_RemoveSelectedSongs(void)
849 Eina_List *idlist = NULL;
852 if (!t.c_catinfo || !t.c_catinfo->FlagCreate())
855 lid = t.c_catinfo->CategoryId();
856 idlist = m_GetSelectedList(m->it_infolist, (int)ID_TYPE_MEMBER);
861 if (!m->pMusicController->MediaRemovemediaPlaylist(lid, idlist)) {
862 _ERR(" Failed to remove songs from playlist ");
866 t.depth = E_DEPTH_CATEGORY;
867 t_UpdateLayoutWithFocus();
871 void CCategoryLayout::m_AddAlbumsToPlayback(int mode)
873 Eina_List *l = NULL, *sl = NULL;
874 Eina_List *slist = NULL;
875 Eina_List *list = NULL;
876 CSongInfo *sinfo = NULL;
877 SCatItemInfo *itinfo = NULL;
879 Eina_List *infolist = m->it_infolist;
880 CMusicController *pMusicController = m->pMusicController;
883 EINA_LIST_FOREACH(infolist, l, obj) {
884 itinfo = (SCatItemInfo *)obj;
886 if (!pMusicController->MediaGetList(LIST_TYPE_ALBUM_SONG, itinfo->alinfo, &slist)) {
887 _ERR(" Failed to get album songlist ");
891 EINA_LIST_FOREACH(slist, sl, obj) {
892 sinfo = (CSongInfo *)obj;
893 CSongInfo *dupSongInfo = new CSongInfo;
894 dupSongInfo->Create();
895 dupSongInfo->Duplicate(sinfo);
896 list = eina_list_append(list, dupSongInfo);
899 eina_list_free(slist);
902 pMusicController->UpdatePlaylist(list, mode);
903 EINA_LIST_FREE(list, obj) {
904 sinfo = (CSongInfo *)obj;
911 void CCategoryLayout::m_AddSongsToPlayback(int mode)
914 Eina_List *list = NULL;
915 struct SCatItemInfo *itinfo = NULL;
917 Eina_List *infolist = m->it_infolist;
918 CMusicController *pMusicController = m->pMusicController;
921 EINA_LIST_FOREACH(infolist, l, obj) {
922 itinfo = (SCatItemInfo *)obj;
923 list = eina_list_append(list, itinfo->sinfo);
926 pMusicController->UpdatePlaylist(list, mode);
927 eina_list_free(list);
931 Evas_Object *CCategoryLayout::m_AddAlbumCover(void)
933 Evas_Object *album_cover = NULL;
935 album_cover = elm_image_add(Layout());
939 evas_object_size_hint_weight_set(album_cover, EVAS_HINT_EXPAND,
946 Evas_Object *CCategoryLayout::m_AddGrid(void)
948 Evas_Object *grid = NULL;
950 grid = elm_gengrid_add(Layout());
954 evas_object_size_hint_weight_set(grid,
955 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
956 elm_gengrid_align_set(grid, 0, 0);
958 Connect(grid, CATEGORY_LAYOUT_GENGRID, TYPE_MOUSE_MOVE | TYPE_KEY_DOWN | TYPE_REALIZED | TYPE_UNREALIZED);
960 elm_gengrid_item_size_set(grid,
961 elm_config_scale_get() * GENGRID_ITEM_SIZE_W,
962 elm_config_scale_get() * GENGRID_ITEM_SIZE_H);
968 void CCategoryLayout::m_AddCategoryItem(Elm_Gengrid_Item_Class *grid_item, ECategoryType type, void *info)
970 SCatItemInfo *itinfo = NULL;
971 Elm_Object_Item *item = NULL;
976 itinfo = (SCatItemInfo *)calloc(1, sizeof(*itinfo));
980 itinfo->catinfo = (CCategoryInfo *)info;
982 item = elm_gengrid_item_append(t.grid,
983 grid_item, itinfo, NULL, m);
985 m->it_infolist = eina_list_append(m->it_infolist,
990 void CCategoryLayout::m_AddButtons(void)
993 Evas_Object *img = NULL;
994 char buf[MAX_LENGTH];
995 SBtnInfo btninfo[TOTAL_ADD_BTNS];
997 btninfo[ABTN_PLAY].name = MUSIC_STR_PLAY;
998 btninfo[ABTN_PLAY].part = MUSIC_PART_CATEGORY_PLAYBTN;
999 btninfo[ABTN_PLAY].style = MUSIC_STYLE_ADD_PLAY_BTN;
1000 btninfo[ABTN_PLAY].icon = MUSIC_IMAGE_ADD_PLAY;
1001 btninfo[ABTN_PLAY].type = CATEGORY_LAYOUT_PLAY_BUTTON;
1003 btninfo[ABTN_NEXT].name = MUSIC_STR_ADDNEXT;
1004 btninfo[ABTN_NEXT].part = MUSIC_PART_CATEGORY_NEXTBTN;
1005 btninfo[ABTN_NEXT].style = MUSIC_STYLE_ADD_NEXT_BTN;
1006 btninfo[ABTN_NEXT].icon = MUSIC_IMAGE_ADD_NEXT;
1007 btninfo[ABTN_NEXT].type = CATEGORY_LAYOUT_NEXT_BUTTON;
1009 btninfo[ABTN_LAST].name = MUSIC_STR_ADDLAST;
1010 btninfo[ABTN_LAST].part = MUSIC_PART_CATEGORY_LASTBTN;
1011 btninfo[ABTN_LAST].style = MUSIC_STYLE_ADD_LAST_BTN;
1012 btninfo[ABTN_LAST].icon = MUSIC_IMAGE_ADD_LAST;
1013 btninfo[ABTN_LAST].type = CATEGORY_LAYOUT_LAST_BUTTON;
1015 if (t.depth == E_DEPTH_SHOW_LIST) {
1016 btninfo[ABTN_PLAY].part = MUSIC_PART_ALBUM_PLAYBTN;
1017 btninfo[ABTN_NEXT].part = MUSIC_PART_ALBUM_NEXTBTN;
1018 btninfo[ABTN_LAST].part = MUSIC_PART_ALBUM_LASTBTN;
1021 for (i = 0; i < TOTAL_ADD_BTNS; i++) {
1022 m->add_btn[i] = elm_button_add(Layout());
1026 evas_object_size_hint_weight_set(m->add_btn[i],
1027 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1028 elm_object_text_set(m->add_btn[i], _(btninfo[i].name));
1029 elm_object_style_set(m->add_btn[i], btninfo[i].style);
1031 Connect(m->add_btn[i], btninfo[ABTN_LAST].type, TYPE_CLICKED | TYPE_MOUSE_MOVE);
1033 img = elm_image_add(m->add_btn[i]);
1035 snprintf(buf, sizeof(buf), "%s/%s", IMAGEDIR,
1037 elm_image_file_set(img, buf, NULL);
1038 elm_object_part_content_set(m->add_btn[i],
1039 MUSIC_PART_ELM_SWALLOWICON, img);
1042 elm_object_part_content_set(Layout(), btninfo[i].part, m->add_btn[i]);
1045 elm_object_focus_set(m->add_btn[ABTN_PLAY], EINA_TRUE);
1046 m->def_foc_btn = m->add_btn[ABTN_PLAY];
1050 void CCategoryLayout::m_AddSelectlistButtons(void)
1053 Evas_Object *btn = NULL;
1054 SBtnInfo btninfo[TOTAL_SELECT_BTNS];
1056 btninfo[SBTN_SELECT_ALL].name = MUSIC_TEXT_SELECT_ALL;
1057 btninfo[SBTN_SELECT_ALL].part = MUSIC_PART_LIST_SELECT_ALL;
1058 btninfo[SBTN_SELECT_ALL].style = MUSIC_STYLE_LIST_BTN;
1059 btninfo[SBTN_SELECT_ALL].type = CATEGORY_LAYOUT_SELECT_ALL_BUTTON;
1061 btninfo[SBTN_DONE].name = MUSIC_TEXT_LIST_DONE;
1062 btninfo[SBTN_DONE].part = MUSIC_PART_LIST_DONE_BTN;
1063 btninfo[SBTN_DONE].style = MUSIC_STYLE_LIST_BTN;
1064 btninfo[SBTN_DONE].type = CATEGORY_LAYOUT_DONE_BUTTON;
1066 btninfo[SBTN_CANCEL].name = MUSIC_TEXT_LIST_CANCEL;
1067 btninfo[SBTN_CANCEL].part = MUSIC_PART_LIST_CANCEL_BTN;
1068 btninfo[SBTN_CANCEL].style = MUSIC_STYLE_LIST_BTN;
1069 btninfo[SBTN_CANCEL].type = CATEGORY_LAYOUT_CANCEL_BUTTON;
1071 if (t.sel_type == SELECT_CREATE) {
1072 elm_object_part_text_set(Layout(), MUSIC_PART_LIST_MSG,
1073 _(MUSIC_TEXT_LIST_CREATE_MSG));
1075 else if (t.sel_type == SELECT_ADD) {
1076 elm_object_part_text_set(Layout(), MUSIC_PART_LIST_MSG,
1077 _(MUSIC_TEXT_LIST_ADD_MSG));
1079 else if (t.sel_type == SELECT_REMOVE) {
1080 elm_object_part_text_set(Layout(), MUSIC_PART_LIST_MSG,
1081 _(MUSIC_TEXT_LIST_REMOVE_MSG));
1084 for (i = 0; i < TOTAL_SELECT_BTNS; i++) {
1085 btn = elm_button_add(Layout());
1089 evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND,
1091 elm_object_text_set(btn, _(btninfo[i].name));
1092 elm_object_style_set(btn, btninfo[i].style);
1094 Connect(btn, btninfo[i].type, TYPE_MOUSE_MOVE | TYPE_CLICKED);
1096 elm_object_part_content_set(Layout(), btninfo[i].part, btn);
1097 m->select_btn[i] = btn;
1100 elm_object_focus_set(btn, EINA_TRUE);
1101 m->def_foc_btn = btn;
1105 void CCategoryLayout::m_CreateSongsTopSection(void)
1108 char buf[MAX_LENGTH];
1112 m->albumCover = m_AddAlbumCover();
1116 if (t.depth == E_DEPTH_SHOW_LIST)
1117 path = t.c_catinfo->ThumbnailPath();
1119 path = t.c_alinfo->ThumbnailPath();
1122 elm_image_file_set(m->albumCover, path, NULL);
1123 elm_image_aspect_fixed_set(m->albumCover, EINA_FALSE);
1126 snprintf(buf, sizeof(buf), "%s/%s", IMAGEDIR,
1127 MUSIC_IMAGE_DEFAULT_THUMB_126);
1128 elm_image_file_set(m->albumCover, buf, NULL);
1129 elm_image_no_scale_set(m->albumCover, EINA_TRUE);
1131 elm_object_part_content_set(Layout(), MUSIC_PART_ALBUM_THUMB, m->albumCover);
1133 if (t.depth == E_DEPTH_SHOW_LIST) {
1134 elm_object_part_text_set(Layout(), MUSIC_PART_ALBUM_NAME,
1135 t.c_catinfo->Name());
1138 elm_object_part_text_set(Layout(),
1139 MUSIC_PART_CATEGORY_NAME,
1140 t.c_catinfo->Name());
1141 elm_object_part_text_set(Layout(), MUSIC_PART_ALBUM_NAME,
1142 t.c_alinfo->Name());
1143 elm_object_part_text_set(Layout(), MUSIC_PART_ALBUM_ARTIST,
1144 t.c_alinfo->Artist());
1147 snprintf(buf, sizeof(buf), "%d %s",
1148 m_ConvertToMin(m->total_duration), _("min"));
1149 elm_object_part_text_set(Layout(), MUSIC_PART_ALBUM_TIME, buf);
1150 snprintf(buf, sizeof(buf), "%d", eina_list_count(m->songlist));
1151 elm_object_part_text_set(Layout(), MUSIC_PART_ALBUM_SONGCOUNT, buf);
1155 void CCategoryLayout::m_CreateSongList(void)
1157 Evas_Object *genlist = NULL;
1158 Elm_Genlist_Item_Class *list_item = NULL;
1160 CSongInfo *sinfo = NULL;
1162 Eina_List *l = NULL;
1163 SCatItemInfo *itinfo = NULL;
1164 Elm_Object_Item *item = NULL;
1166 void (*item_select_fn)(void *, Evas_Object *, void *) = NULL;
1168 genlist = elm_genlist_add(Layout());
1172 elm_genlist_homogeneous_set(genlist, EINA_TRUE);
1174 evas_object_size_hint_weight_set(genlist,
1175 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1176 elm_object_part_content_set(Layout(), MUSIC_PART_SONGLIST, genlist);
1178 Connect(genlist, CATEGORY_LAYOUT_GENLIST, TYPE_MOUSE_MOVE | TYPE_KEY_DOWN);
1182 list_item = elm_genlist_item_class_new();
1184 evas_object_del(genlist);
1185 _ERR(" elm_genlist_item_class_new failed ");
1188 list_item->func.content_get = NULL;
1189 list_item->func.state_get = NULL;
1190 list_item->func.del = sm_CbRemoveListItem;
1193 if (t.depth == E_DEPTH_SELECT_LIST) {
1194 list_item->func.text_get = sm_CbGetSelectlistItemText;
1195 list_item->item_style = MUSIC_STYLE_SELECT_LIST;
1196 item_select_fn = sm_CbSelectlistItemSelect;
1197 if (t.sel_type == SELECT_REMOVE) {
1198 r = m->pMusicController->MediaGetList(LIST_TYPE_PLAYLISTS_SONG, t.c_catinfo, &(m->songlist));
1201 r = m->pMusicController->MediaGetList(LIST_TYPE_SONG, NULL, &(m->songlist));
1205 list_item->func.text_get = sm_CbGetListItemText;
1206 list_item->item_style = MUSIC_STYLE_ALBUM_SONGLIST;
1207 item_select_fn = sm_CbSongItemSelect;
1208 if (t.depth == E_DEPTH_SHOW_LIST)
1209 r = m->pMusicController->MediaGetList(LIST_TYPE_PLAYLISTS_SONG, t.c_catinfo, &(m->songlist));
1211 r = m->pMusicController->MediaGetList(LIST_TYPE_ALBUM_SONG, t.c_alinfo, &(m->songlist));
1215 _ERR(" Fetching song list from media failed ");
1216 evas_object_del(genlist);
1217 elm_genlist_item_class_free(list_item);
1221 EINA_LIST_FOREACH(m->songlist, l, obj) {
1222 sinfo = (CSongInfo *)obj;
1223 itinfo = (SCatItemInfo *)calloc(1, sizeof(*itinfo));
1227 itinfo->sinfo = sinfo;
1228 item = elm_genlist_item_append(genlist, list_item,
1229 itinfo, NULL, ELM_GENLIST_ITEM_NONE,
1230 item_select_fn, this);
1231 itinfo->item = item;
1232 m->it_infolist = eina_list_append(m->it_infolist, itinfo);
1233 dur = sinfo->Duration();
1234 m->total_duration = m->total_duration + dur;
1236 elm_genlist_item_class_free(list_item);
1240 void CCategoryLayout::m_CreateAlbumgrid(void)
1242 CAlbumInfo *alinfo = NULL;
1244 Eina_List *l = NULL;
1245 SCatItemInfo *itinfo = NULL;
1246 Elm_Object_Item *item = NULL;
1247 char buf[MAX_LENGTH];
1248 Elm_Gengrid_Item_Class *grid_item = NULL;
1250 t.grid = m_AddGrid();
1254 grid_item = elm_gengrid_item_class_new();
1256 evas_object_del(t.grid);
1257 _ERR(" elm_genlist_item_class_new failed ");
1260 grid_item->item_style = MUSIC_STYLE_CATEGORY_GRID;
1261 grid_item->func.text_get = sm_CbGetGridAlbumItemText;
1262 grid_item->func.content_get = sm_CbGetGridAlbumitemContent;
1263 grid_item->func.state_get = NULL;
1264 grid_item->func.del = sm_CbRemoveGridItem;
1266 m->alblist = t.c_catinfo->AlbumList();
1267 if (!m->alblist || eina_list_count(m->alblist) == 0) {
1268 _ERR(" Fetching album list failed ");
1269 evas_object_del(t.grid);
1270 elm_gengrid_item_class_free(grid_item);
1274 EINA_LIST_FOREACH(m->alblist, l, obj) {
1275 alinfo = (CAlbumInfo *)obj;
1276 itinfo = (SCatItemInfo *)calloc(1, sizeof(*itinfo));
1279 itinfo->alinfo = alinfo;
1280 item = elm_gengrid_item_append(t.grid,
1281 grid_item, itinfo, NULL, m);
1282 itinfo->item = item;
1283 m->it_infolist = eina_list_append(m->it_infolist,
1286 elm_gengrid_item_class_free(grid_item);
1288 elm_object_part_text_set(Layout(),
1289 MUSIC_PART_CATEGORY_NAME,
1290 t.c_catinfo->Name());
1291 snprintf(buf, sizeof(buf), "%d",
1292 t.c_catinfo->AlbumCount());
1293 elm_object_part_text_set(Layout(),
1294 MUSIC_PART_CATEGORY_ALBUMCOUNT, buf);
1295 snprintf(buf, sizeof(buf), "%d",
1296 t.c_catinfo->SongCount());
1297 elm_object_part_text_set(Layout(),
1298 MUSIC_PART_CATEGORY_SONGCOUNT, buf);
1299 elm_object_part_content_set(Layout(),
1300 MUSIC_PART_CATEGORY_ALBUM_GRID, t.grid);
1304 void CCategoryLayout::m_CreateCatgrid(bool sort_flag)
1307 Eina_List *l = NULL;
1308 Elm_Gengrid_Item_Class *grid_item = NULL;
1310 t.grid = m_AddGrid();
1314 grid_item = elm_gengrid_item_class_new();
1316 evas_object_del(t.grid);
1317 _ERR(" elm_genlist_item_class_new failed ");
1320 grid_item->item_style = MUSIC_STYLE_CATEGORY_GRID;
1321 grid_item->func.text_get = sm_CbGetGridItemText;
1322 grid_item->func.content_get = sm_CbGetGridItemContent;
1323 grid_item->func.state_get = NULL;
1324 grid_item->func.del = sm_CbRemoveGridItem;
1327 if (!t_GetMediaList(&m->catlist)) {
1328 if (t_CategoryType() != CAT_TYPE_PLAYLISTS) {
1329 _ERR(" Fetching list failed ");
1330 SetEmptyStatus(true);
1331 elm_gengrid_item_class_free(grid_item);
1338 if (t_CategoryType() == CAT_TYPE_PLAYLISTS)
1339 m_AddCategoryItem(grid_item, CAT_TYPE_PLAYLIST_NEW, NULL);
1341 EINA_LIST_FOREACH(m->catlist, l, info)
1342 m_AddCategoryItem(grid_item, t_CategoryType(), info);
1344 elm_gengrid_item_class_free(grid_item);
1346 elm_object_part_content_set(Layout(),
1347 MUSIC_PART_CATEGORY_GRID, t.grid);
1351 void CCategoryLayout::m_SortCatgrid(void)
1353 char *sortFuncType[] = {
1363 sortType = m->pMusicController->SortType();
1364 m->catlist = CSort::Sort(m->catlist, sortFuncType[sortType]);
1368 void CCategoryLayout::m_EmptyLayout(bool sort_flag)
1371 elm_gengrid_clear(t.grid);
1372 evas_object_del(t.grid);
1377 elm_genlist_clear(m->glist);
1378 evas_object_del(m->glist);
1384 eina_list_free(m->catlist);
1390 eina_list_free(m->alblist);
1395 eina_list_free(m->songlist);
1399 if (m->it_infolist) {
1400 eina_list_free(m->it_infolist);
1401 m->it_infolist = NULL;
1404 m->total_duration = 0;
1408 for (i = 0; i < TOTAL_ADD_BTNS; i++) {
1410 evas_object_del(m->add_btn[i]);
1411 m->add_btn[i] = NULL;
1414 for (i = 0; i < TOTAL_SELECT_BTNS; i++) {
1415 if (m->select_btn[i])
1416 evas_object_del(m->select_btn[i]);
1417 m->select_btn[i] = NULL;
1421 evas_object_del(m->albumCover);
1422 m->albumCover = NULL;
1424 evas_object_hide(Layout());
1425 elm_object_part_content_unset(t.base, MUSIC_PART_CONTENT);
1430 bool CCategoryLayout::t_SetEdje(const char *szLayout)
1433 if (!elm_layout_file_set(Layout(), EDJEFILE, szLayout)) {
1434 _ERR(" elm szLayout file set failed ");
1441 void CCategoryLayout::t_UpdateLayout(bool sort_flag)
1443 /* Remove existing grid and prepare afresh */
1444 m_EmptyLayout(sort_flag);
1447 parcel.ctxtInfo = NULL;
1449 if (t.depth == E_DEPTH_SONG) {
1450 if (!t_SetEdje(MUSIC_CATEGORY_SONGS_LAYOUT)) {
1451 _ERR(" get layout failed ");
1455 m_CreateSongsTopSection();
1457 parcel.updateType = E_LAYOUT_UPDATE;
1458 parcel.layoutId = MUSIC_CATEGORY_SONGS_LAYOUT;
1459 parcel.keyEvent = NULL;
1460 m->vmgr->UpdateView((const char *)MUSIC_BASE_VIEW, &parcel);
1462 else if (t.depth == E_DEPTH_SHOW_LIST) {
1463 if (!t_SetEdje(MUSIC_ALBUM_SONGS_LAYOUT)) {
1464 _ERR(" get layout failed ");
1468 m_CreateSongsTopSection();
1470 parcel.updateType = E_LAYOUT_UPDATE;
1471 parcel.layoutId = MUSIC_CATEGORY_SONGS_LAYOUT;
1472 parcel.keyEvent = NULL;
1473 m->vmgr->UpdateView((const char *)MUSIC_BASE_VIEW, &parcel);
1475 else if (t.depth == E_DEPTH_ALBUM) {
1476 if (!t_SetEdje(MUSIC_CATEGORY_ALBUM_LAYOUT)) {
1477 _ERR(" get layout failed ");
1481 m_CreateAlbumgrid();
1483 parcel.updateType = E_LAYOUT_UPDATE;
1484 parcel.layoutId = MUSIC_CATEGORY_ALBUM_LAYOUT;
1485 parcel.keyEvent = NULL;
1486 m->vmgr->UpdateView((const char *)MUSIC_BASE_VIEW, &parcel);
1488 else if (t.depth == E_DEPTH_SELECT_LIST) {
1489 if (!t_SetEdje(MUSIC_CATEGORY_SELECTLIST_LAYOUT)) {
1490 _ERR(" get layout failed ");
1494 m_AddSelectlistButtons();
1496 parcel.updateType = E_LAYOUT_UPDATE;
1497 parcel.layoutId = MUSIC_CATEGORY_SELECTLIST_LAYOUT;
1498 parcel.keyEvent = NULL;
1499 m->vmgr->UpdateView((const char *)MUSIC_BASE_VIEW, &parcel);
1500 elm_object_focus_next_object_set(m->glist,
1501 m->select_btn[SBTN_DONE], ELM_FOCUS_RIGHT);
1504 if (!t_SetEdje(MUSIC_CATEGORY_LAYOUT)) {
1505 _ERR(" get layout failed ");
1508 m_CreateCatgrid(sort_flag);
1510 parcel.updateType = E_LAYOUT_UPDATE;
1511 parcel.layoutId = MUSIC_CATEGORY_LAYOUT;
1512 parcel.keyEvent = NULL;
1513 m->vmgr->UpdateView((const char *)MUSIC_BASE_VIEW, &parcel);
1518 void CCategoryLayout::t_UpdateLayoutWithFocus(void)
1520 elm_object_tree_focus_allow_set(t.base, EINA_FALSE);
1521 t_UpdateLayout(false);
1522 elm_object_part_content_set(t.base, MUSIC_PART_CONTENT, Layout());
1523 evas_object_show(Layout());
1524 m_RemoveFocusIdler();
1525 m->focus_idler = ecore_idler_add(sm_CbFocusIdler, this);
1529 bool CCategoryLayout::Create(CLayoutMgr *mgr)
1533 Evas_Object *base = NULL;
1534 Evas_Object *win = NULL;
1535 Evas_Object *layout = NULL;
1536 CMusicController *pMusicController = NULL;
1537 CViewMgr *vmgr = NULL;
1542 m = new SCategoryLayout;
1544 _ERR(" calloc failed ");
1548 vmgr = CViewMgr::GetInstance();
1550 _ERR(" get view mgr failed ");
1558 _ERR(" get base failed ");
1564 win = vmgr->Window();
1566 _ERR(" vimewmgr get win failed ");
1572 pMusicController = CMusicController::GetInstance();
1573 if (!pMusicController) {
1574 _ERR(" music controller get music instance failed ");
1580 layout = elm_layout_add(base);
1582 _ERR(" layout creation failed ");
1588 bool r = CExtBaseLayout::Create(layout);
1590 _ERR(" CBaseLayout creation failed ");
1591 evas_object_del(layout);
1597 t.epopup = new CEntryPopup;
1599 _ERR(" CEntryPopup creation failed ");
1600 CExtBaseLayout::Destroy();
1601 evas_object_del(layout);
1610 m->pMusicController = pMusicController;
1612 t.depth = E_DEPTH_CATEGORY;
1614 t_UpdateLayout(false);
1616 Connect(Layout(), CATEGORY_LAYOUT, TYPE_KEY_DOWN);
1622 void CCategoryLayout::Destroy(void)
1626 Disconnect(Layout());
1627 if (t.epopup->FlagCreate())
1628 t.epopup->Destroy();
1630 m_RemoveFocusIdler();
1631 m_EmptyLayout(false);
1633 if (t.c_catinfo && t.c_catinfo->FlagCreate())
1634 t.c_catinfo->Destroy();
1637 if (t.c_alinfo && t.c_alinfo->FlagCreate())
1638 t.c_alinfo->Destroy();
1641 if (m->c_sinfo && m->c_sinfo->FlagCreate())
1642 m->c_sinfo->Destroy();
1646 CExtBaseLayout::Destroy();
1647 evas_object_del(Layout());
1654 void CCategoryLayout::t_OnShow(void)
1658 t.depth = E_DEPTH_CATEGORY;
1659 t_UpdateLayout(false);
1660 elm_object_part_content_set(t.base, MUSIC_PART_CONTENT, Layout());
1661 evas_object_show(Layout());
1665 void CCategoryLayout::Update(bool focusFlag)
1670 if (t.depth != E_DEPTH_CATEGORY)
1672 t_UpdateLayout(true);
1673 elm_object_part_content_set(t.base, MUSIC_PART_CONTENT, Layout());
1674 evas_object_show(Layout());
1678 elm_object_focus_set(t.grid, EINA_TRUE);
1682 void CCategoryLayout::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
1685 case CATEGORY_LAYOUT:
1688 Eina_List *alist = NULL;
1690 if (!strcmp(ev->keyname, KEY_BACK)) {
1691 if (t.depth == E_DEPTH_CATEGORY) {
1693 parcel.ctxtInfo = NULL;
1694 parcel.updateType = E_FOCUS_UPDATE;
1695 parcel.layoutId = NULL;
1696 parcel.keyEvent = NULL;
1697 m->vmgr->UpdateView((const char *)MUSIC_BASE_VIEW, &parcel);
1700 else if (t.depth == E_DEPTH_ALBUM) {
1701 t.depth = E_DEPTH_CATEGORY;
1703 else if (t.depth == E_DEPTH_SELECT_LIST) {
1704 t.depth = E_DEPTH_CATEGORY;
1706 else if (t.depth == E_DEPTH_SHOW_LIST) {
1707 t.depth = E_DEPTH_CATEGORY;
1709 else if (t.depth == E_DEPTH_SONG) {
1711 alist = t.c_catinfo->AlbumList();
1713 count = eina_list_count(alist);
1715 t.depth = E_DEPTH_CATEGORY;
1717 t.depth = E_DEPTH_ALBUM;
1720 t_UpdateLayoutWithFocus();
1725 case CATEGORY_LAYOUT_GENGRID:
1726 case CATEGORY_LAYOUT_GENLIST:
1728 Elm_Object_Item *it = NULL;
1729 SContentInfo *ctxtinfo = NULL;
1730 SCatItemInfo *itinfo = NULL;
1735 if (strcmp(ev->keyname, KEY_MENU) || t.depth ==
1736 E_DEPTH_SELECT_LIST || t.depth ==
1740 it = elm_object_focused_item_get(obj);
1742 _ERR(" unable to get focused item ");
1745 t.focused_item = it;
1752 ctxtinfo = (SContentInfo *)calloc(1, sizeof(*ctxtinfo));
1756 itinfo = m_FindItemInfo(m->it_infolist, it);
1757 if (!itinfo || itinfo->type == CAT_TYPE_PLAYLIST_NEW) {
1762 ctxtinfo->cbdata = this;
1763 ctxtinfo->update = sm_CbCtxtUpdate;
1764 ctxtinfo->close = sm_CbCtxtClose;
1765 if (t.depth == E_DEPTH_SONG) {
1766 ctxtinfo->type = CONTEXT_TYPE_SONG;
1767 ctxtinfo->context = itinfo->sinfo;
1769 else if (t.depth == E_DEPTH_ALBUM) {
1770 ctxtinfo->type = CONTEXT_TYPE_ALBUM;
1771 ctxtinfo->context = itinfo->alinfo;
1774 ctxtinfo->type = t_ContextType();
1775 ctxtinfo->context = itinfo->catinfo;
1778 t.ctxtinfo = ctxtinfo;
1781 parcel.ctxtInfo = ctxtinfo;
1782 if (!m->vmgr->PushView(MUSIC_CONTEXT_VIEW, &parcel))
1783 _ERR("viewmgr push view MUSIC_CONTEXT_VIEW failed");
1793 void CCategoryLayout::OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev)
1796 case CATEGORY_LAYOUT_GENGRID:
1798 Elm_Object_Item *item;
1803 item = elm_gengrid_at_xy_item_get(obj, ev->cur.canvas.x,
1804 ev->cur.canvas.y, NULL, NULL);
1808 if (!elm_object_item_focus_get(item))
1809 elm_object_item_focus_set(item, EINA_TRUE);
1813 case CATEGORY_LAYOUT_GENLIST:
1815 Elm_Object_Item *item;
1820 item = elm_genlist_at_xy_item_get(obj, ev->cur.canvas.x,
1821 ev->cur.canvas.y, NULL);
1823 if (!elm_object_item_focus_get(item))
1824 elm_object_item_focus_set(item, EINA_TRUE);
1828 case CATEGORY_LAYOUT_PLAY_BUTTON:
1829 case CATEGORY_LAYOUT_NEXT_BUTTON:
1830 case CATEGORY_LAYOUT_LAST_BUTTON:
1831 case CATEGORY_LAYOUT_SELECT_ALL_BUTTON:
1832 case CATEGORY_LAYOUT_DONE_BUTTON:
1833 case CATEGORY_LAYOUT_CANCEL_BUTTON:
1834 if (!elm_object_focus_get(obj))
1835 elm_object_focus_set(obj, EINA_TRUE);
1844 void CCategoryLayout::OnMouseClicked(int id, Evas_Object *obj)
1847 case CATEGORY_LAYOUT_PLAY_BUTTON:
1848 m_GotoPlayback(ADD_TYPE_FRESH, NULL);
1851 case CATEGORY_LAYOUT_NEXT_BUTTON:
1852 m_GotoPlayback(ADD_TYPE_NEXT, NULL);
1855 case CATEGORY_LAYOUT_LAST_BUTTON:
1856 m_GotoPlayback(ADD_TYPE_END, NULL);
1859 case CATEGORY_LAYOUT_SELECT_ALL_BUTTON:
1861 Eina_List *l = NULL;
1862 SCatItemInfo *itinfo = NULL;
1863 void *list_obj = NULL;
1866 tc = eina_list_count(m->it_infolist);
1868 if (m->count == tc) {
1869 elm_object_text_set(m->select_btn[SBTN_SELECT_ALL],
1870 _(MUSIC_TEXT_SELECT_ALL));
1872 EINA_LIST_FOREACH(m->it_infolist, l, list_obj) {
1873 itinfo = (SCatItemInfo *)list_obj;
1874 itinfo->check_status = false;
1876 elm_genlist_realized_items_update(m->glist);
1881 elm_object_text_set(m->select_btn[SBTN_SELECT_ALL],
1882 _(MUSIC_TEXT_DESELECT_ALL));
1884 EINA_LIST_FOREACH(m->it_infolist, l, list_obj) {
1885 itinfo = (SCatItemInfo *)list_obj;
1886 itinfo->check_status = true;
1888 elm_genlist_realized_items_update(m->glist);
1892 case CATEGORY_LAYOUT_DONE_BUTTON:
1894 if (t.sel_type == SELECT_ADD) {
1895 m_AddSelectedSongs();
1898 else if (t.sel_type == SELECT_REMOVE) {
1899 m_RemoveSelectedSongs();
1903 if (t.epopup->FlagCreate())
1904 t.epopup->Destroy();
1906 t.epopup->Create(t.base, MUSIC_STR_EMPTY, sm_CbEntrynameSet, this);
1910 case CATEGORY_LAYOUT_CANCEL_BUTTON:
1912 t.depth = E_DEPTH_CATEGORY;
1913 t_UpdateLayoutWithFocus();
1923 void CCategoryLayout::OnRealized(int id, Evas_Object *obj, Elm_Object_Item *item)
1926 case CATEGORY_LAYOUT_GENGRID:
1927 elm_object_item_signal_callback_add(item,
1928 MUSIC_SIGNAL_BTN_CLICKED, MUSIC_BASE_VIEW,
1929 sm_CbItemSelect, this);
1938 void CCategoryLayout::OnUnrealized(int id, Evas_Object *obj, Elm_Object_Item *item)
1941 case CATEGORY_LAYOUT_GENGRID:
1942 elm_object_item_signal_callback_del(item,
1943 MUSIC_SIGNAL_BTN_CLICKED, MUSIC_BASE_VIEW,