}
+enum EObjectType {
+ BASE_VIEW,
+ BASE_VIEW_PLAY_BUTTON,
+ BASE_VIEW_SOURCE_BUTTON,
+ BASE_VIEW_SORT_BUTTON,
+ BASE_VIEW_GROUP_SONG,
+ BASE_VIEW_GROUP_ALBUM,
+ BASE_VIEW_GROUP_ARTIST,
+ BASE_VIEW_GROUP_GENRE,
+ BASE_VIEW_GROUP_FOLDER,
+ BASE_VIEW_GROUP_PLAYLIST,
+};
+
+
struct SMusicBaseView {
Evas_Object *win;
Evas_Object *base;
Evas_Object *c_grpbtn;
CMusicController *mhandle;
CLayoutMgr *lmgr;
- struct _arg_list *arglist;
+ SArgList *arglist;
int btntype;
bool fresh_view;
CMusicBaseView *parent;
CHandleVolume *pHandleVolume;
- class CHandlerBtn : public CListenerMgr, public IKeyDownListener, public IMouseMoveListener, public IMouseClickedListener {
- public:
- SMusicBaseView *m;
- void(*m_cbClicked)(void* cookie, Evas_Object *obj);
- void *m_cookie;
-
- public:
- CHandlerBtn(SMusicBaseView *ins) : IKeyDownListener(this), IMouseMoveListener(this), IMouseClickedListener(this) { m = ins; }
-
- void SetCallback(void(*clicked)(void* cookie, Evas_Object *obj), void* cookie) {
- m_cbClicked = clicked;
- m_cookie = cookie;
- }
-
- virtual void OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev) {
- if (!elm_object_focus_get(obj))
- elm_object_focus_set(obj, EINA_TRUE);
- }
- };
-
- class CHandlerBtnGroup : public CHandlerBtn {
- public:
- CHandlerBtnGroup(SMusicBaseView *ins) : CHandlerBtn(ins) {}
-
- virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev) {
- if (!strcmp(ev->keyname, KEY_BACK)) {
- m->mhandle->Stop();
- elm_exit();
- }
- }
-
- virtual void OnMouseClicked(int id, Evas_Object *obj) {
- if (m->c_grpbtn == obj)
- return;
-
- elm_object_signal_emit(m->c_grpbtn,
- MUSIC_SIGNAL_GROUP_UNSELECTED, MUSIC_BASE_VIEW);
- m->c_grpbtn = obj;
- elm_object_signal_emit(m->c_grpbtn,
- MUSIC_SIGNAL_GROUP_SELECTED, MUSIC_BASE_VIEW);
-
- if (obj == m->group_btn[GRP_FOLDER])
- elm_object_text_set(m->sortbtn, _(g_sortTextFolder[0]));
- else if (obj == m->group_btn[GRP_PLAYLISTS])
- elm_object_text_set(m->sortbtn, _(g_sortTextPlaylists[0]));
- else if (obj == m->group_btn[GRP_ALBUM])
- elm_object_text_set(m->sortbtn, _(g_sortTextAlbum[0]));
- else if (obj == m->group_btn[GRP_ARTIST])
- elm_object_text_set(m->sortbtn, _(g_sortTextArtist[0]));
- else if (obj == m->group_btn[GRP_GENRE])
- elm_object_text_set(m->sortbtn, _(g_sortTextGenre[0]));
- else
- elm_object_text_set(m->sortbtn, _(g_sortText[0]));
-
- m->mhandle->SetSortType(0);
-
- if (m_cbClicked)
- m_cbClicked(m_cookie, obj);
- }
- } *pHandlerBtnGroup[TOTAL_GROUP_BTNS];
-
- class CHandlerBtnPlayback : public CHandlerBtn {
- private:
- void m_GotoPlayback(void)
- {
- if (!CViewMgr::GetInstance()->PushView(MUSIC_PLAYBACK_VIEW, NULL))
- _ERR(" viewmgr push view MUSIC_PLAYBACK_VIEW failed ");
- }
-
- public:
- CHandlerBtnPlayback(SMusicBaseView *ins) : CHandlerBtn(ins) {}
-
- virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev) {
- if (!strcmp(ev->keyname, KEY_BACK))
- elm_object_focus_set(m->c_grpbtn, EINA_TRUE);
- }
-
- virtual void OnMouseClicked(int id, Evas_Object *obj) {
- Eina_List *list = NULL;
- bool r;
- int state;
-
- state = m->mhandle->PlayState();
-
- if (state != PLAY_STATUS_INITIAL) {
- if (!CViewMgr::GetInstance()->PushView(MUSIC_PLAYBACK_VIEW, NULL))
- _ERR(" viewmgr push view failed ");
-
- return;
- }
-
- r = m->mhandle->MediaGetList(LIST_TYPE_SONG, NULL, &list);
- if (r == false || eina_list_count(list) == 0) {
- _ERR(" No songs ");
- return;
- }
-
- m->mhandle->Stop();
- m->mhandle->UpdatePlaylist(list, ADD_TYPE_FRESH);
- eina_list_free(list);
-
- m_GotoPlayback();
- }
- } *pHandlerBtnPlayback;
-
- class CHandlerBtnCtxpopup : public CHandlerBtn {
- private:
- ETopBtnType m_type;
-
- public:
- CHandlerBtnCtxpopup(SMusicBaseView *ins, ETopBtnType type) : CHandlerBtn(ins) { m_type = type; }
-
- private:
- static void sm_CbCtxPopupBtnClicked(void *dt, Evas_Object *obj, void *ev)
- {
- CHandlerBtnCtxpopup *root = (CHandlerBtnCtxpopup*)dt;
- if (root)
- root->m_CbCtxPopupBtnClicked(obj, ev);
- }
-
- void m_CbCtxPopupBtnClicked(Evas_Object *obj, void *ev)
- {
- const char *text = NULL;
- const char *layout_id = NULL;
- int size = 0;
- int type = 0;
-
- text = elm_object_text_get(obj);
-
- if (m->btntype == TOP_BTN_TYPE_SOURCE) {
- size = ARRAY_SIZE(g_sourceText);
- st_FindIndex(g_sourceText, size, text, &type);
- DestroyCtxPopup();
- if (type == m->mhandle->SourceType())
- return;
-
- m->mhandle->SetSourceType(type);
- elm_object_text_set(m->srcbtn, _(text));
- }
- else {
- layout_id = m->lmgr->Layout()->LayoutId();
- if (!strcmp(layout_id, MUSIC_FOLDER_LAYOUT)) {
- size = ARRAY_SIZE(g_sortTextFolder);
- st_FindIndex(g_sortTextFolder, size, text, &type);
- }
- else if (!strcmp(layout_id, MUSIC_ALBUM_LAYOUT)) {
- size = ARRAY_SIZE(g_sortTextAlbum);
- st_FindIndex(g_sortTextAlbum, size, text, &type);
- }
- else if (!strcmp(layout_id, MUSIC_CATEGORY_PLAYLISTS_LAYOUT)) {
- size = ARRAY_SIZE(g_sortTextPlaylists);
- st_FindIndex(g_sortTextPlaylists, size, text, &type);
- }
- else if (!strcmp(layout_id, MUSIC_CATEGORY_ARTIST_LAYOUT)) {
- size = ARRAY_SIZE(g_sortTextArtist);
- st_FindIndex(g_sortTextArtist, size, text, &type);
- }
- else if (!strcmp(layout_id, MUSIC_CATEGORY_GENRE_LAYOUT)) {
- size = ARRAY_SIZE(g_sortTextGenre);
- st_FindIndex(g_sortTextGenre, size, text, &type);
- }
- else {
- size = ARRAY_SIZE(g_sortText);
- st_FindIndex(g_sortText, size, text, &type);
- }
- DestroyCtxPopup();
- if (type == m->mhandle->SortType())
- return;
-
- m->mhandle->SetSortType(type);
- elm_object_text_set(m->sortbtn, _(text));
- }
-
- if (m_cbClicked)
- m_cbClicked(m_cookie, obj);
- }
-
- static void sm_CbCtxPopupBtnKeyPressed(void *dt, Evas *e, Evas_Object *obj, void *ei)
- {
- CHandlerBtnCtxpopup *root = (CHandlerBtnCtxpopup*)dt;
- if (root)
- root->m_OnCtxPopupBtnKeyPressed(e, obj, (Evas_Event_Key_Down*)ei);
- }
-
- void m_OnCtxPopupBtnKeyPressed(Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
- {
- if (strcmp(ev->keyname, KEY_BACK) == 0)
- DestroyCtxPopup();
- }
-
- protected:
- static bool st_FindIndex(const char **arr, int arrsize, const char *text, int *index)
- {
- int i;
-
- if (!arr || !arrsize || !text)
- return false;
-
- for (i = 0; i < arrsize; i++) {
- if (arr[i] && !strcmp(arr[i], text)) {
- *index = i;
- return true;
- }
- }
-
- return false;
- }
-
- void t_CreateCtxPopup(int btnType)
- {
- Evas_Object *ctxpopup = NULL, *box = NULL, *btn = NULL;
- Evas_Object *firstbtn = NULL;
- int i, size, selected_index;
- const char **arr;
- const char *layout_id = NULL;
- const char *part = NULL;
-
- if (!m->base)
- return;
-
- ctxpopup = elm_ctxpopup_add(m->base);
- if (!ctxpopup)
- return;
-
- box = elm_box_add(ctxpopup);
- if (!box) {
- evas_object_del(ctxpopup);
- return;
- }
- evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, 0);
- evas_object_size_hint_align_set(box, EVAS_HINT_FILL, 0);
-
- if (btnType == TOP_BTN_TYPE_SOURCE) {
- arr = g_sourceText;
- size = ARRAY_SIZE(g_sourceText);
- selected_index = m->mhandle->SourceType();
- m->btntype = btnType;
- part = MUSIC_PART_SOURCE_POPUP;
- }
- else if (btnType == TOP_BTN_TYPE_SORT) {
- arr = g_sortText;
- size = ARRAY_SIZE(g_sortText);
- layout_id = m->lmgr->Layout()->LayoutId();
- if (layout_id) {
- if (!strcmp(layout_id, MUSIC_ALBUM_LAYOUT)) {
- arr = g_sortTextAlbum;
- size = ARRAY_SIZE(g_sortTextAlbum);
- }
- else if (!strcmp(layout_id, MUSIC_FOLDER_LAYOUT)) {
- arr = g_sortTextFolder;
- size = ARRAY_SIZE(g_sortTextFolder);
- }
- else if (!strcmp(layout_id, MUSIC_CATEGORY_PLAYLISTS_LAYOUT)) {
- arr = g_sortTextPlaylists;
- size = ARRAY_SIZE(g_sortTextPlaylists);
- }
- else if (!strcmp(layout_id, MUSIC_CATEGORY_ARTIST_LAYOUT)) {
- arr = g_sortTextArtist;
- size = ARRAY_SIZE(g_sortTextArtist);
- }
- else if (!strcmp(layout_id, MUSIC_CATEGORY_GENRE_LAYOUT)) {
- arr = g_sortTextGenre;
- size = ARRAY_SIZE(g_sortTextGenre);
- }
- }
- part = MUSIC_PART_SORT_POPUP;
- selected_index = m->mhandle->SortType();
- m->btntype = btnType;
- }
- else {
- evas_object_del(ctxpopup);
- return;
- }
-
- for (i = 0; i < size; i++) {
- if (btnType == TOP_BTN_TYPE_SOURCE && i == SOURCE_TYPE_USB &&
- !m->mhandle->CheckUsb())
- continue;
-
- btn = s_AddButton(box);
- if (!btn) {
- evas_object_del(ctxpopup);
- return;
- }
- elm_object_style_set(btn, MUSIC_STYLE_HOVER_ENTRY);
- elm_object_text_set(btn, _(arr[i]));
- elm_box_pack_end(box, btn);
-
- if (i == 0)
- firstbtn = btn; /* to set focus later */
-
- if (i == selected_index)
- elm_object_signal_emit(btn,
- "elm,action,highlight", "elm");
-
- if (i == size - 1) {
- elm_object_signal_emit(btn,
- "elm,action,hideline", "elm");
- _ERR("hiding last line");
- }
-
- evas_object_smart_callback_add(btn, MUSIC_SIGNAL_CLICKED, sm_CbCtxPopupBtnClicked, this);
- evas_object_event_callback_add(btn, EVAS_CALLBACK_MOUSE_MOVE, _object_mouse_moved, m);
- evas_object_event_callback_add(btn, EVAS_CALLBACK_KEY_DOWN, sm_CbCtxPopupBtnKeyPressed, this);
- }
-
- elm_object_content_set(ctxpopup, box);
- elm_object_style_set(ctxpopup, MUSIC_STYLE_HOVER_CTXPOPUP);
- elm_ctxpopup_direction_priority_set(ctxpopup,
- ELM_CTXPOPUP_DIRECTION_DOWN, ELM_CTXPOPUP_DIRECTION_DOWN, ELM_CTXPOPUP_DIRECTION_DOWN, ELM_CTXPOPUP_DIRECTION_DOWN);
- elm_object_part_content_set(m->base, part, ctxpopup);
-
- m->ctxpopup = ctxpopup;
-
- if (firstbtn && btn) {
- elm_object_focus_set(firstbtn, EINA_TRUE);
- elm_object_focus_next_object_set(firstbtn,
- btn, ELM_FOCUS_UP);
- elm_object_focus_next_object_set(btn,
- firstbtn, ELM_FOCUS_DOWN);
- }
- }
- public:
- void DestroyCtxPopup(void)
- {
- if (!m->ctxpopup)
- return;
-
- evas_object_hide(m->ctxpopup);
- evas_object_del(m->ctxpopup);
- m->ctxpopup = NULL;
- }
-
- public:
- virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev) {
- if (!strcmp(ev->keyname, KEY_BACK))
- elm_object_focus_set(m->c_grpbtn, EINA_TRUE);
- }
-
- virtual void OnMouseClicked(int id, Evas_Object *obj) {
- t_CreateCtxPopup(m_type);
- }
- } *pHandlerBtnSource, *pHandlerBtnSort;
-
-
SMusicBaseView() {
memset(this, 0, sizeof(SMusicBaseView));
- for (int a = 0; a < TOTAL_GROUP_BTNS; a++)
- pHandlerBtnGroup[a] = new CHandlerBtnGroup(this);
-
- pHandlerBtnPlayback = new CHandlerBtnPlayback(this);
- pHandlerBtnSource = new CHandlerBtnCtxpopup(this, TOP_BTN_TYPE_SOURCE);
- pHandlerBtnSort = new CHandlerBtnCtxpopup(this, TOP_BTN_TYPE_SORT);
pHandleVolume = new CHandleVolume;
}
~SMusicBaseView() {
delete pHandleVolume;
- delete pHandlerBtnSort;
- delete pHandlerBtnSource;
- delete pHandlerBtnPlayback;
-
- for (int a = 0; a < TOTAL_GROUP_BTNS; a++)
- delete pHandlerBtnGroup[a];
}
};
const char *part;
const char *style;
const char *icon_path;
-
- SMusicBaseView::CHandlerBtn *handler;
- //Evas_Smart_Cb cb;
};
}
-void CMusicBaseView::sm_CbClickedGroupBtn(void *cookie, Evas_Object *obj)
-{
- CMusicBaseView *root = (CMusicBaseView*)cookie;
- if (root)
- root->m_OnClickedGroupBtn(obj);
-}
-
-
-void CMusicBaseView::m_OnClickedGroupBtn(Evas_Object *obj)
-{
- m_ShowCurrentLayout();
-}
-
-
-void CMusicBaseView::sm_CbClickedCtxBtn(void *cookie, Evas_Object *obj)
-{
- CMusicBaseView *root = (CMusicBaseView*)cookie;
- if (root)
- root->m_OnClickedCtxBtn(obj);
-}
-
-
-void CMusicBaseView::m_OnClickedCtxBtn(Evas_Object *obj)
-{
- if (m->btntype == TOP_BTN_TYPE_SOURCE) {
- if (m->c_grpbtn != m->group_btn[GRP_PLAYLISTS])
- m_ShowCurrentLayout();
- }
- else
- m_UpdateCurrentLayout(false);
-}
-
-
void CMusicBaseView::m_ShowCurrentLayout(void)
{
const char *layoutId = NULL;
}
-void CMusicBaseView::m_DestroyPopup(void)
+void CMusicBaseView::m_GotoPlayback(void)
{
- if (!m->popup)
+ if (!CViewMgr::GetInstance()->PushView(MUSIC_PLAYBACK_VIEW, NULL))
+ _ERR(" viewmgr push view MUSIC_PLAYBACK_VIEW failed ");
+}
+
+
+bool CMusicBaseView::sm_FindIndex(const char **arr, int arrsize, const char *text, int *index)
+{
+ int i;
+
+ if (!arr || !arrsize || !text)
+ return false;
+
+ for (i = 0; i < arrsize; i++) {
+ if (arr[i] && !strcmp(arr[i], text)) {
+ *index = i;
+ return true;
+ }
+ }
+
+ return false;
+}
+
+
+void CMusicBaseView::m_CreateCtxPopup(int btnType)
+{
+ Evas_Object *ctxpopup = NULL, *box = NULL, *btn = NULL;
+ Evas_Object *firstbtn = NULL;
+ int i, size, selected_index;
+ const char **arr;
+ const char *layout_id = NULL;
+ const char *part = NULL;
+
+ if (!m->base)
return;
- if (m->transit) {
- elm_transit_del(m->transit);
- m->transit = NULL;
+ ctxpopup = elm_ctxpopup_add(m->base);
+ if (!ctxpopup)
+ return;
+
+ box = elm_box_add(ctxpopup);
+ if (!box) {
+ evas_object_del(ctxpopup);
+ return;
+ }
+ evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, 0);
+ evas_object_size_hint_align_set(box, EVAS_HINT_FILL, 0);
+
+ if (btnType == TOP_BTN_TYPE_SOURCE) {
+ arr = g_sourceText;
+ size = ARRAY_SIZE(g_sourceText);
+ selected_index = m->mhandle->SourceType();
+ m->btntype = btnType;
+ part = MUSIC_PART_SOURCE_POPUP;
+ }
+ else if (btnType == TOP_BTN_TYPE_SORT) {
+ arr = g_sortText;
+ size = ARRAY_SIZE(g_sortText);
+ layout_id = m->lmgr->Layout()->LayoutId();
+ if (layout_id) {
+ if (!strcmp(layout_id, MUSIC_ALBUM_LAYOUT)) {
+ arr = g_sortTextAlbum;
+ size = ARRAY_SIZE(g_sortTextAlbum);
+ }
+ else if (!strcmp(layout_id, MUSIC_FOLDER_LAYOUT)) {
+ arr = g_sortTextFolder;
+ size = ARRAY_SIZE(g_sortTextFolder);
+ }
+ else if (!strcmp(layout_id, MUSIC_CATEGORY_PLAYLISTS_LAYOUT)) {
+ arr = g_sortTextPlaylists;
+ size = ARRAY_SIZE(g_sortTextPlaylists);
+ }
+ else if (!strcmp(layout_id, MUSIC_CATEGORY_ARTIST_LAYOUT)) {
+ arr = g_sortTextArtist;
+ size = ARRAY_SIZE(g_sortTextArtist);
+ }
+ else if (!strcmp(layout_id, MUSIC_CATEGORY_GENRE_LAYOUT)) {
+ arr = g_sortTextGenre;
+ size = ARRAY_SIZE(g_sortTextGenre);
+ }
+ }
+ part = MUSIC_PART_SORT_POPUP;
+ selected_index = m->mhandle->SortType();
+ m->btntype = btnType;
+ }
+ else {
+ evas_object_del(ctxpopup);
+ return;
+ }
+
+ for (i = 0; i < size; i++) {
+ if (btnType == TOP_BTN_TYPE_SOURCE && i == SOURCE_TYPE_USB &&
+ !m->mhandle->CheckUsb())
+ continue;
+
+ btn = s_AddButton(box);
+ if (!btn) {
+ evas_object_del(ctxpopup);
+ return;
+ }
+ elm_object_style_set(btn, MUSIC_STYLE_HOVER_ENTRY);
+ elm_object_text_set(btn, _(arr[i]));
+ elm_box_pack_end(box, btn);
+
+ if (i == 0)
+ firstbtn = btn; /* to set focus later */
+
+ if (i == selected_index)
+ elm_object_signal_emit(btn,
+ "elm,action,highlight", "elm");
+
+ if (i == size - 1) {
+ elm_object_signal_emit(btn,
+ "elm,action,hideline", "elm");
+ _ERR("hiding last line");
+ }
+
+ evas_object_smart_callback_add(btn, MUSIC_SIGNAL_CLICKED, sm_CbCtxPopupBtnClicked, this);
+ evas_object_event_callback_add(btn, EVAS_CALLBACK_MOUSE_MOVE, _object_mouse_moved, m);
+ evas_object_event_callback_add(btn, EVAS_CALLBACK_KEY_DOWN, sm_CbCtxPopupBtnKeyPressed, this);
+ }
+
+ elm_object_content_set(ctxpopup, box);
+ elm_object_style_set(ctxpopup, MUSIC_STYLE_HOVER_CTXPOPUP);
+ elm_ctxpopup_direction_priority_set(ctxpopup,
+ ELM_CTXPOPUP_DIRECTION_DOWN, ELM_CTXPOPUP_DIRECTION_DOWN, ELM_CTXPOPUP_DIRECTION_DOWN, ELM_CTXPOPUP_DIRECTION_DOWN);
+ elm_object_part_content_set(m->base, part, ctxpopup);
+
+ m->ctxpopup = ctxpopup;
+
+ if (firstbtn && btn) {
+ elm_object_focus_set(firstbtn, EINA_TRUE);
+ elm_object_focus_next_object_set(firstbtn,
+ btn, ELM_FOCUS_UP);
+ elm_object_focus_next_object_set(btn,
+ firstbtn, ELM_FOCUS_DOWN);
}
- evas_object_del(m->popup);
- m->popup = NULL;
}
void CMusicBaseView::m_DestroyCtxPopup(void)
{
- m->pHandlerBtnSource->DestroyCtxPopup();
- m->pHandlerBtnSort->DestroyCtxPopup();
+ if (!m->ctxpopup)
+ return;
+
+ evas_object_hide(m->ctxpopup);
+ evas_object_del(m->ctxpopup);
+ m->ctxpopup = NULL;
+}
+
+
+void CMusicBaseView::sm_CbCtxPopupBtnClicked(void *dt, Evas_Object *obj, void *ev)
+{
+ CMusicBaseView *root = (CMusicBaseView*)dt;
+ if (root)
+ root->m_CbCtxPopupBtnClicked(obj, ev);
+}
+
+
+void CMusicBaseView::m_CbCtxPopupBtnClicked(Evas_Object *obj, void *ev)
+{
+ const char *text = NULL;
+ const char *layout_id = NULL;
+ int size = 0;
+ int type = 0;
+
+ text = elm_object_text_get(obj);
+
+ if (m->btntype == TOP_BTN_TYPE_SOURCE) {
+ size = ARRAY_SIZE(g_sourceText);
+ sm_FindIndex(g_sourceText, size, text, &type);
+ m_DestroyCtxPopup();
+ if (type == m->mhandle->SourceType())
+ return;
+
+ m->mhandle->SetSourceType(type);
+ elm_object_text_set(m->srcbtn, _(text));
+ }
+ else {
+ layout_id = m->lmgr->Layout()->LayoutId();
+ if (!strcmp(layout_id, MUSIC_FOLDER_LAYOUT)) {
+ size = ARRAY_SIZE(g_sortTextFolder);
+ sm_FindIndex(g_sortTextFolder, size, text, &type);
+ }
+ else if (!strcmp(layout_id, MUSIC_ALBUM_LAYOUT)) {
+ size = ARRAY_SIZE(g_sortTextAlbum);
+ sm_FindIndex(g_sortTextAlbum, size, text, &type);
+ }
+ else if (!strcmp(layout_id, MUSIC_CATEGORY_PLAYLISTS_LAYOUT)) {
+ size = ARRAY_SIZE(g_sortTextPlaylists);
+ sm_FindIndex(g_sortTextPlaylists, size, text, &type);
+ }
+ else if (!strcmp(layout_id, MUSIC_CATEGORY_ARTIST_LAYOUT)) {
+ size = ARRAY_SIZE(g_sortTextArtist);
+ sm_FindIndex(g_sortTextArtist, size, text, &type);
+ }
+ else if (!strcmp(layout_id, MUSIC_CATEGORY_GENRE_LAYOUT)) {
+ size = ARRAY_SIZE(g_sortTextGenre);
+ sm_FindIndex(g_sortTextGenre, size, text, &type);
+ }
+ else {
+ size = ARRAY_SIZE(g_sortText);
+ sm_FindIndex(g_sortText, size, text, &type);
+ }
+ m_DestroyCtxPopup();
+ if (type == m->mhandle->SortType())
+ return;
+
+ m->mhandle->SetSortType(type);
+ elm_object_text_set(m->sortbtn, _(text));
+ }
+
+ if (m->btntype == TOP_BTN_TYPE_SOURCE) {
+ if (m->c_grpbtn != m->group_btn[GRP_PLAYLISTS])
+ m_ShowCurrentLayout();
+ }
+ else {
+ m_UpdateCurrentLayout(false);
+ }
+}
+
+
+void CMusicBaseView::sm_CbCtxPopupBtnKeyPressed(void *dt, Evas *e, Evas_Object *obj, void *ei)
+{
+ CMusicBaseView *root = (CMusicBaseView*)dt;
+ if (root)
+ root->m_OnCtxPopupBtnKeyPressed(e, obj, (Evas_Event_Key_Down*)ei);
+}
+
+
+void CMusicBaseView::m_OnCtxPopupBtnKeyPressed(Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
+{
+ if (strcmp(ev->keyname, KEY_BACK) == 0)
+ m_DestroyCtxPopup();
}
}
+void CMusicBaseView::m_DestroyPopup(void)
+{
+ if (!m->popup)
+ return;
+
+ if (m->transit) {
+ elm_transit_del(m->transit);
+ m->transit = NULL;
+ }
+ evas_object_del(m->popup);
+ m->popup = NULL;
+}
+
+
void CMusicBaseView::m_UpdatePlaysongLabel(void)
{
SSongInfo *sinfo = NULL;
int type;
int i;
Evas_Object *btn = NULL;
- static struct SBtnInfo btninfo[TOTAL_TOP_BTNS];
+ SBtnInfo btninfo[TOTAL_TOP_BTNS];
btninfo[TOP_BTN_TYPE_PLAYBACK].part = MUSIC_PART_PLAYBACK_BTN;
btninfo[TOP_BTN_TYPE_PLAYBACK].style = MUSIC_STYLE_PLAYBACK_BTN;
- btninfo[TOP_BTN_TYPE_PLAYBACK].handler = m->pHandlerBtnPlayback;// cb = sm_CbPlaybackBtnClicked;
btninfo[TOP_BTN_TYPE_SOURCE].part = MUSIC_PART_SOURCE_HOVERSEL;
btninfo[TOP_BTN_TYPE_SOURCE].style = MUSIC_STYLE_SOURCE_BTN;
- btninfo[TOP_BTN_TYPE_SOURCE].handler = m->pHandlerBtnSource;// cb = sm_CbSourceBtnClicked;
btninfo[TOP_BTN_TYPE_SORT].part = MUSIC_PART_SORT_HOVERSEL;
btninfo[TOP_BTN_TYPE_SORT].style = MUSIC_STYLE_SORT_BTN;
- btninfo[TOP_BTN_TYPE_SORT].handler = m->pHandlerBtnSort;// cb = sm_CbSortBtnClicked;
elm_object_part_text_set(m->base, MUSIC_PART_TITLE,
_(MUSIC_TEXT_TITLE));
elm_object_style_set(btn, btninfo[i].style);
elm_object_part_content_set(m->base, btninfo[i].part, btn);
- btninfo[i].handler->Connect(btn);
- //evas_object_smart_callback_add(btn, MUSIC_SIGNAL_CLICKED, btninfo[i].cb, m);
- ////evas_object_event_callback_add(btn, EVAS_CALLBACK_KEY_DOWN, sm_CbTopBtnKeyPressed, m);
- //evas_object_event_callback_add(btn, EVAS_CALLBACK_MOUSE_MOVE, _object_mouse_moved, m);
+ Connect(btn, BASE_VIEW_PLAY_BUTTON + i, TYPE_KEY_DOWN | TYPE_MOUSE_MOVE | TYPE_CLICKED);
if (i == TOP_BTN_TYPE_PLAYBACK)
m->plbackbtn = btn;
elm_object_style_set(m->group_btn[i], MUSIC_STYLE_GROUPBTN);
elm_object_text_set(m->group_btn[i], _(btninfo[i].txt));
- m->pHandlerBtnGroup[i]->Connect(m->group_btn[i]);
- m->pHandlerBtnGroup[i]->SetCallback(sm_CbClickedGroupBtn, this);
+ Connect(m->group_btn[i], BASE_VIEW_GROUP_SONG + i, TYPE_KEY_DOWN | TYPE_MOUSE_MOVE | TYPE_CLICKED);
ic = elm_image_add(m->group_btn[i]);
if (ic) {
m->mhandle = mhandle;
m->lmgr = lmgr;
m->fresh_view = true;
- m->arglist = (_arg_list *)data;
+ m->arglist = (SArgList *)data;
m->parent = this;
m->layoutSong = new CSongLayout(MUSIC_SONG_LAYOUT);
m->pHandleVolume->Create(m->base);
m_UpdateFocusSequence();
- Connect(m->base);
-
- for (int i = 0; i < TOTAL_GROUP_BTNS; i++) {
- m->pHandlerBtnGroup[i]->SetCallback(sm_CbClickedGroupBtn, this);
- }
- m->pHandlerBtnSort->SetCallback(sm_CbClickedCtxBtn, this);
- m->pHandlerBtnSource->SetCallback(sm_CbClickedCtxBtn, this);
+ Connect(m->base, BASE_VIEW, TYPE_KEY_DOWN | TYPE_KEY_UP);
mhandle->AddListener(this);
- //m->cbinfo[E_SONG_COMPLETE] = mhandle->AddCallback(E_SONG_COMPLETE, sm_CbUpdatePlaysongLabel, this);
- //m->cbinfo[E_CONTENT_UPDATE] = mhandle->AddCallback(E_CONTENT_UPDATE, sm_CbContentUpdate, this);
- //m->cbinfo[E_USB_CONNECT] = mhandle->AddCallback(E_USB_CONNECT, sm_CbUsbConnect, this);
return true;
}
ASSERT(m);
m->mhandle->RemoveListener(this);
- //m->mhandle->RemoveCallback(m->cbinfo[E_SONG_COMPLETE]);
- //m->mhandle->RemoveCallback(m->cbinfo[E_CONTENT_UPDATE]);
- //m->mhandle->RemoveCallback(m->cbinfo[E_USB_CONNECT]);
m->pHandleVolume->Destroy();
void CMusicBaseView::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
{
- if (!strcmp(ev->keyname, KEY_EXIT)) {
- m->mhandle->Stop();
- elm_exit();
+ switch (id) {
+ case BASE_VIEW:
+ if (!strcmp(ev->keyname, KEY_EXIT)) {
+ m->mhandle->Stop();
+ elm_exit();
+ }
+ else if (!strcmp(ev->keyname, KEY_ENTER)) {
+ if (elm_object_focus_get(m->c_grpbtn)) {
+ m_UpdateCurrentLayout(true);
+ }
+ }
+ else if (!strcmp(ev->keyname, KEY_VOLUMEUP))
+ m->pHandleVolume->Up();
+ else if (!strcmp(ev->keyname, KEY_VOLUMEDOWN))
+ m->pHandleVolume->Down();
+ else if (!strcmp(ev->keyname, KEY_MUTE))
+ m->pHandleVolume->Mute();
+ else if (!strcmp(ev->keyname, KEY_NEXT) ||
+ !strcmp(ev->keyname, KEY_PREVIOUS) ||
+ !strcmp(ev->keyname, KEY_PLAY) ||
+ !strcmp(ev->keyname, KEY_PAUSE)) {
+ SParcel parcel;
+ parcel.ctxtInfo = NULL;
+ parcel.updateType = E_KEY_PRESS;
+ parcel.layoutId = NULL;
+ parcel.keyEvent = ev->keyname;
+ CViewMgr::GetInstance()->UpdateView((const char *)MUSIC_PLAYBACK_VIEW, &parcel);
+ }
+ break;
+
+ case BASE_VIEW_PLAY_BUTTON:
+ case BASE_VIEW_SORT_BUTTON:
+ case BASE_VIEW_SOURCE_BUTTON:
+ if (!strcmp(ev->keyname, KEY_BACK))
+ elm_object_focus_set(m->c_grpbtn, EINA_TRUE);
+ break;
+
+ case BASE_VIEW_GROUP_SONG:
+ case BASE_VIEW_GROUP_ALBUM:
+ case BASE_VIEW_GROUP_ARTIST:
+ case BASE_VIEW_GROUP_GENRE:
+ case BASE_VIEW_GROUP_FOLDER:
+ case BASE_VIEW_GROUP_PLAYLIST:
+ if (!strcmp(ev->keyname, KEY_BACK)) {
+ m->mhandle->Stop();
+ elm_exit();
+ }
+ break;
+
+ default:
+ break;
}
- else if (!strcmp(ev->keyname, KEY_ENTER)) {
- if (elm_object_focus_get(m->c_grpbtn)) {
- m_UpdateCurrentLayout(true);
+}
+
+
+void CMusicBaseView::OnKeyUp(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Up *ev)
+{
+ switch (id) {
+ case BASE_VIEW:
+ if (!strcmp(ev->keyname, KEY_NEXT) ||
+ !strcmp(ev->keyname, KEY_PREVIOUS)) {
+ SParcel parcel;
+ parcel.ctxtInfo = NULL;
+ parcel.updateType = E_KEY_RELEASE;
+ parcel.layoutId = NULL;
+ parcel.keyEvent = ev->keyname;
+ CViewMgr::GetInstance()->UpdateView((const char *)MUSIC_PLAYBACK_VIEW, &parcel);
+ m_UpdatePlaysongLabel();
}
+ break;
+
+ default:
+ break;
}
- else if (!strcmp(ev->keyname, KEY_VOLUMEUP))
- m->pHandleVolume->Up(); //m_HandleVolumeKey(SOUND_UP);
- else if (!strcmp(ev->keyname, KEY_VOLUMEDOWN))
- m->pHandleVolume->Down();// m_HandleVolumeKey(SOUND_DOWN);
- else if (!strcmp(ev->keyname, KEY_MUTE))
- m->pHandleVolume->Mute();// m_HandleVolumeKey(SOUND_MUTE);
- else if (!strcmp(ev->keyname, KEY_NEXT) ||
- !strcmp(ev->keyname, KEY_PREVIOUS) ||
- !strcmp(ev->keyname, KEY_PLAY) ||
- !strcmp(ev->keyname, KEY_PAUSE)) {
- SParcel parcel;
- parcel.ctxtInfo = NULL;
- parcel.updateType = E_KEY_PRESS;
- parcel.layoutId = NULL;
- parcel.keyEvent = ev->keyname;
- CViewMgr::GetInstance()->UpdateView((const char *)MUSIC_PLAYBACK_VIEW, &parcel);
+}
+
+
+void CMusicBaseView::OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev)
+{
+ switch (id) {
+ case BASE_VIEW_PLAY_BUTTON:
+ case BASE_VIEW_SORT_BUTTON:
+ case BASE_VIEW_SOURCE_BUTTON:
+ case BASE_VIEW_GROUP_SONG:
+ case BASE_VIEW_GROUP_ALBUM:
+ case BASE_VIEW_GROUP_ARTIST:
+ case BASE_VIEW_GROUP_GENRE:
+ case BASE_VIEW_GROUP_FOLDER:
+ case BASE_VIEW_GROUP_PLAYLIST:
+ if (!elm_object_focus_get(obj))
+ elm_object_focus_set(obj, EINA_TRUE);
+ break;
+
+ default:
+ break;
}
}
-void CMusicBaseView::OnKeyUp(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Up *ev)
+void CMusicBaseView::OnMouseClicked(int id, Evas_Object *obj)
{
- if (!strcmp(ev->keyname, KEY_NEXT) ||
- !strcmp(ev->keyname, KEY_PREVIOUS)) {
- SParcel parcel;
- parcel.ctxtInfo = NULL;
- parcel.updateType = E_KEY_RELEASE;
- parcel.layoutId = NULL;
- parcel.keyEvent = ev->keyname;
- CViewMgr::GetInstance()->UpdateView((const char *)MUSIC_PLAYBACK_VIEW, &parcel);
- m_UpdatePlaysongLabel();
+ switch (id) {
+ case BASE_VIEW_PLAY_BUTTON:
+ {
+ Eina_List *list = NULL;
+ bool r;
+ int state;
+
+ state = m->mhandle->PlayState();
+
+ if (state != PLAY_STATUS_INITIAL) {
+ if (!CViewMgr::GetInstance()->PushView(MUSIC_PLAYBACK_VIEW, NULL))
+ _ERR(" viewmgr push view failed ");
+
+ return;
+ }
+
+ r = m->mhandle->MediaGetList(LIST_TYPE_SONG, NULL, &list);
+ if (r == false || eina_list_count(list) == 0) {
+ _ERR(" No songs ");
+ return;
+ }
+
+ m->mhandle->Stop();
+ m->mhandle->UpdatePlaylist(list, ADD_TYPE_FRESH);
+ eina_list_free(list);
+
+ m_GotoPlayback();
+ }
+ break;
+
+ case BASE_VIEW_SOURCE_BUTTON:
+ m_CreateCtxPopup(TOP_BTN_TYPE_SOURCE);
+ break;
+
+ case BASE_VIEW_SORT_BUTTON:
+ m_CreateCtxPopup(TOP_BTN_TYPE_SORT);
+ break;
+
+ case BASE_VIEW_GROUP_SONG:
+ case BASE_VIEW_GROUP_ALBUM:
+ case BASE_VIEW_GROUP_ARTIST:
+ case BASE_VIEW_GROUP_GENRE:
+ case BASE_VIEW_GROUP_FOLDER:
+ case BASE_VIEW_GROUP_PLAYLIST:
+ {
+ if (m->c_grpbtn == obj)
+ return;
+
+ elm_object_signal_emit(m->c_grpbtn,
+ MUSIC_SIGNAL_GROUP_UNSELECTED, MUSIC_BASE_VIEW);
+ m->c_grpbtn = obj;
+ elm_object_signal_emit(m->c_grpbtn,
+ MUSIC_SIGNAL_GROUP_SELECTED, MUSIC_BASE_VIEW);
+
+ if (obj == m->group_btn[GRP_FOLDER])
+ elm_object_text_set(m->sortbtn, _(g_sortTextFolder[0]));
+ else if (obj == m->group_btn[GRP_PLAYLISTS])
+ elm_object_text_set(m->sortbtn, _(g_sortTextPlaylists[0]));
+ else if (obj == m->group_btn[GRP_ALBUM])
+ elm_object_text_set(m->sortbtn, _(g_sortTextAlbum[0]));
+ else if (obj == m->group_btn[GRP_ARTIST])
+ elm_object_text_set(m->sortbtn, _(g_sortTextArtist[0]));
+ else if (obj == m->group_btn[GRP_GENRE])
+ elm_object_text_set(m->sortbtn, _(g_sortTextGenre[0]));
+ else
+ elm_object_text_set(m->sortbtn, _(g_sortText[0]));
+
+ m->mhandle->SetSortType(0);
+
+ m_ShowCurrentLayout();
+ }
+ break;
+
+ default:
+ break;
}
}
#define GENGRID_ITEM_SIZE_W (263+20)
#define GENGRID_ITEM_SIZE_H (359+20)
+
+enum EObjectType {
+ FOLDER_LAYOUT_PLAY_BUTTON,
+ FOLDER_LAYOUT_NEXT_BUTTON,
+ FOLDER_LAYOUT_LAST_BUTTON,
+ FOLDER_LAYOUT,
+ FOLDER_LAYOUT_GENGRID,
+};
+
struct SFolderItemInfo {
folder_info *finfo;
SSongInfo *sinfo;
N_("USB") // SOURCE_TYPE_USB
};
-enum EBtnType {
- ABTN_PLAY,
- ABTN_NEXT,
- ABTN_LAST
-};
-
enum EDepthType {
E_DEPTH_NONE,
E_DEPTH_FOLDER,
CFolderLayout *parent;
int depth;
- class CHandlerButton : public CListenerMgr, public IMouseMoveListener, public IMouseClickedListener {
- public:
- struct SCallback {
- void(*gotoPlayBackView)(void* cookie, int mode, char *mediaId);
- void* cookie;
- };
-
- private:
- SFolderLayout *m;
-
- protected:
- SCallback m_callback;
-
- public:
- CHandlerButton(SFolderLayout *ins) :
- IMouseMoveListener(this),
- IMouseClickedListener(this) {
- m = ins;
- }
-
- void SetCallback(const SCallback* cb) {
- m_callback = *cb;
- }
-
- virtual void OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev)
- {
- if (!obj)
- return;
-
- if (!elm_object_focus_get(obj))
- elm_object_focus_set(obj, EINA_TRUE);
- }
-
- virtual void OnMouseClicked(int id, Evas_Object *obj)
- {
- EBtnType type = (EBtnType)id;
-
- switch (type)
- {
- case ABTN_PLAY:
- if (m_callback.gotoPlayBackView)
- m_callback.gotoPlayBackView(m_callback.cookie, ADD_TYPE_FRESH, NULL);
- break;
-
- case ABTN_NEXT:
- if (m_callback.gotoPlayBackView)
- m_callback.gotoPlayBackView(m_callback.cookie, ADD_TYPE_NEXT, NULL);
- break;
-
- case ABTN_LAST:
- if (m_callback.gotoPlayBackView)
- m_callback.gotoPlayBackView(m_callback.cookie, ADD_TYPE_END, NULL);
- break;
-
- default:
- _ERR("Invalid Button Type");
- ASSERT(0);
- break;
- }
- }
- } *pHandlerButton;
-
- class CHandlerGrid : public CListenerMgr, public IMouseMoveListener, public IKeyDownListener, public IRealizedListener, public IUnrealizedListener {
- public:
- struct SCallback {
- void(*goToPlaybackView)(void *cookie, int mode, char *mediaId);
- void(*goToContextView)(void *cookie, SContentInfo *contextInfo);
- void(*updateGrid)(void *cookie);
- void* cookie;
- };
-
- private:
- SFolderLayout *m;
- SCallback m_callback;
-
- private:
- SFolderItemInfo *m_FindItemInfo(Eina_List *list, Elm_Object_Item *item)
- {
- Eina_List *l = NULL;
- SFolderItemInfo *itinfo = NULL;
- void *obj = NULL;
-
- if (!list || !item)
- return NULL;
-
- EINA_LIST_FOREACH(list, l, obj) {
- itinfo = (SFolderItemInfo *)obj;
- if (itinfo->item == item)
- return itinfo;
- }
-
- return NULL;
- }
-
- static void sm_CbCtxtUpdate(void *dt, enum EActionType type, int lid)
- {
- CHandlerGrid *root = (CHandlerGrid *)dt;
- if (root) {
- root->m_OnCtxtUpdate(type, lid);
- }
- }
-
- void m_OnCtxtUpdate(EActionType type, int lid)
- {
- Eina_List *list = NULL;
- SSongInfo *sinfo = NULL;
- EAddType mode;
-
- if (!m->ctxtinfo || !m->ctxtinfo->context)
- return;
-
- if (type == ACTION_TYPE_ADDNEXT)
- mode = ADD_TYPE_NEXT;
- else
- mode = ADD_TYPE_END;
-
- if (m->depth == E_DEPTH_SONG) {
- sinfo = (SSongInfo *)m->ctxtinfo->context;
- list = eina_list_append(list, sinfo);
- }
- else {
- m->mhandle->MediaGetList(LIST_TYPE_FOLDER_SONG,
- m->ctxtinfo->context, &list);
- sinfo = (SSongInfo *)eina_list_data_get(list);
- }
-
- if (type == ACTION_TYPE_ADDTO) {
- if (!m->mhandle->MediaAddsongsPlaylist(lid, list))
- _ERR(" Adding songs to playlist failed ");
- else
- _create_message_box(m->base, MUSIC_TEXT_ADDTO_MSG);
-
- return;
- }
-
- m->mhandle->UpdatePlaylist(list, mode);
- eina_list_free(list);
-
- if (type == ACTION_TYPE_PLAY) {
- m->mhandle->Stop();
- m->mhandle->SetCurrentSong(song_info_get_media_id(sinfo));
- }
-
- _update_playback_view((EAddType)type, m->parent->Layout(), m->focused_item);
- }
-
- static void sm_CbCtxtClose(void *dt)
- {
- CHandlerGrid *root = (CHandlerGrid *)dt;
- if (root)
- root->m_OnCtxtClose();
- }
-
- void m_OnCtxtClose(void)
- {
- m->vmgr->PopView();
- m->vmgr->PushView(MUSIC_BASE_VIEW, NULL);
- elm_object_item_focus_set(m->focused_item, EINA_TRUE);
- }
-
- static void sm_CbItemSelect(void *data, Elm_Object_Item *it, const char *emission, const char *source)
- {
- CHandlerGrid *root = (CHandlerGrid *)data;
- if (root)
- root->m_OnItemSelect(it, emission, source);
- }
-
- void m_OnItemSelect(Elm_Object_Item *it, const char *emission, const char *source)
- {
- SFolderItemInfo *itinfo = NULL;
- char *id = NULL;
-
- if (!m)
- return;
-
- itinfo = m_FindItemInfo(m->it_infolist, it);
- if (!itinfo) {
- _ERR(" no item info found ");
- return;
- }
-
- if (m->depth == E_DEPTH_SONG) {
- if (m->c_sinfo) {
- song_info_destroy(m->c_sinfo);
- m->c_sinfo = NULL;
- }
- m->c_sinfo = song_info_duplicate(itinfo->sinfo);
- }
- else {
- if (m->c_finfo) {
- folder_info_destroy(m->c_finfo);
- m->c_finfo = NULL;
- }
- m->c_finfo = folder_info_duplicate(itinfo->finfo);
- }
-
- if (m->depth == E_DEPTH_SONG) {
- id = song_info_get_media_id(m->c_sinfo);
- elm_gengrid_item_selected_set(it, EINA_FALSE);
- // Goto Playback View with id
- if (m_callback.goToPlaybackView)
- m_callback.goToPlaybackView(m_callback.cookie, ADD_TYPE_FRESH, id);
- }
- else {
- m->depth = E_DEPTH_SONG;
- // Update folder grid and add idler
- if (m_callback.updateGrid)
- m_callback.updateGrid(m_callback.cookie);
- }
- }
-
- public:
- CHandlerGrid(SFolderLayout *ins) :
- IMouseMoveListener(this),
- IKeyDownListener(this),
- IRealizedListener(this),
- IUnrealizedListener(this) {
- m = ins;
- }
-
- void SetCallback(const SCallback* cb)
- {
- m_callback = *cb;
- }
-
- virtual void OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev)
- {
- Elm_Object_Item *item;
-
- item = elm_gengrid_at_xy_item_get(obj, ev->cur.canvas.x,
- ev->cur.canvas.y, NULL, NULL);
- if (!item)
- return;
-
- if (!elm_object_item_focus_get(item))
- elm_object_item_focus_set(item, EINA_TRUE);
- }
-
- virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
- {
- Elm_Object_Item *it = NULL;
- SContentInfo *ctxtinfo = NULL;
- SFolderItemInfo *itinfo = NULL;
-
- if (!obj)
- return;
-
- if (strcmp(ev->keyname, KEY_MENU))
- return;
-
- it = elm_object_focused_item_get(obj);
- if (!it) {
- _ERR(" unable to get focused item ");
- return;
- }
- m->focused_item = it;
-
- if (m->ctxtinfo) {
- free(m->ctxtinfo);
- m->ctxtinfo = NULL;
- }
-
- ctxtinfo = (SContentInfo *)calloc(1, sizeof(*ctxtinfo));
- if (!ctxtinfo)
- return;
-
- itinfo = m_FindItemInfo(m->it_infolist, it);
- if (!itinfo) {
- free(ctxtinfo);
- return;
- }
-
- ctxtinfo->cbdata = this;
- ctxtinfo->update = sm_CbCtxtUpdate;
- ctxtinfo->close = sm_CbCtxtClose;
- if (m->depth == E_DEPTH_SONG) {
- ctxtinfo->type = CONTEXT_TYPE_SONG;
- ctxtinfo->context = itinfo->sinfo;
- }
- else {
- ctxtinfo->type = CONTEXT_TYPE_FOLDER;
- ctxtinfo->context = itinfo->finfo;
- }
-
- m->ctxtinfo = ctxtinfo;
-
- // Go to the context view with ctxtinfo
- if (m_callback.goToContextView)
- m_callback.goToContextView(m_callback.cookie, ctxtinfo);
- }
-
- virtual void OnRealized(int id, Evas_Object *obj, Elm_Object_Item *item)
- {
- elm_object_item_signal_callback_add(item,
- MUSIC_SIGNAL_BTN_CLICKED, MUSIC_BASE_VIEW,
- sm_CbItemSelect, this);
- }
-
- virtual void OnUnrealized(int id, Evas_Object *obj, Elm_Object_Item *item)
- {
- elm_object_item_signal_callback_del((Elm_Object_Item *)item,
- MUSIC_SIGNAL_BTN_CLICKED, MUSIC_BASE_VIEW,
- sm_CbItemSelect);
- }
- } *pHandlerGrid;
-
SFolderLayout() {
memset(this, 0, sizeof(SFolderLayout));
- pHandlerGrid = new CHandlerGrid(this);
- pHandlerButton = new CHandlerButton(this);
}
~SFolderLayout() {
- delete pHandlerGrid;
- delete pHandlerButton;
}
};
}
-void CFolderLayout::sm_CbGoToContextView(void *cookie, SContentInfo *contextInfo)
+void CFolderLayout::sm_CbCtxtUpdate(void *dt, enum EActionType type, int lid)
{
- CFolderLayout *root = (CFolderLayout *)cookie;
+ CFolderLayout *root = (CFolderLayout *)dt;
+ if (root) {
+ root->m_OnCtxtUpdate(type, lid);
+ }
+}
+
+void CFolderLayout::m_OnCtxtUpdate(EActionType type, int lid)
+{
+ Eina_List *list = NULL;
+ SSongInfo *sinfo = NULL;
+ EAddType mode;
+
+ if (!m->ctxtinfo || !m->ctxtinfo->context)
+ return;
+
+ if (type == ACTION_TYPE_ADDNEXT)
+ mode = ADD_TYPE_NEXT;
+ else
+ mode = ADD_TYPE_END;
+
+ if (m->depth == E_DEPTH_SONG) {
+ sinfo = (SSongInfo *)m->ctxtinfo->context;
+ list = eina_list_append(list, sinfo);
+ }
+ else {
+ m->mhandle->MediaGetList(LIST_TYPE_FOLDER_SONG,
+ m->ctxtinfo->context, &list);
+ sinfo = (SSongInfo *)eina_list_data_get(list);
+ }
+
+ if (type == ACTION_TYPE_ADDTO) {
+ if (!m->mhandle->MediaAddsongsPlaylist(lid, list))
+ _ERR(" Adding songs to playlist failed ");
+ else
+ _create_message_box(m->base, MUSIC_TEXT_ADDTO_MSG);
+
+ return;
+ }
+
+ m->mhandle->UpdatePlaylist(list, mode);
+ eina_list_free(list);
+
+ if (type == ACTION_TYPE_PLAY) {
+ m->mhandle->Stop();
+ m->mhandle->SetCurrentSong(song_info_get_media_id(sinfo));
+ }
+
+ _update_playback_view((EAddType)type, m->parent->Layout(), m->focused_item);
+}
+
+void CFolderLayout::sm_CbCtxtClose(void *dt)
+{
+ CFolderLayout *root = (CFolderLayout *)dt;
if (root)
- root->m_OnGotoContextView(contextInfo);
+ root->m_OnCtxtClose();
}
-void CFolderLayout::m_OnGotoContextView(SContentInfo *contextInfo)
+void CFolderLayout::m_OnCtxtClose(void)
{
- SParcel parcel;
- parcel.ctxtInfo = contextInfo;
- if (!m->vmgr->PushView(MUSIC_CONTEXT_VIEW, &parcel))
- _ERR("viewmgr push view MUSIC_CONTEXT_VIEW failed");
+ m->vmgr->PopView();
+ m->vmgr->PushView(MUSIC_BASE_VIEW, NULL);
+ elm_object_item_focus_set(m->focused_item, EINA_TRUE);
}
-void CFolderLayout::sm_CbUpdateGrid(void *cookie)
+void CFolderLayout::sm_CbItemSelect(void *data, Elm_Object_Item *it, const char *emission, const char *source)
{
- CFolderLayout *root = (CFolderLayout *)cookie;
+ CFolderLayout *root = (CFolderLayout *)data;
if (root)
- root->m_OnCbUpdateGrid();
+ root->m_OnItemSelect(it, emission, source);
}
-void CFolderLayout::m_OnCbUpdateGrid(void)
+void CFolderLayout::m_OnItemSelect(Elm_Object_Item *it, const char *emission, const char *source)
{
- m_UpdateFolderGrid(false);
- m->focus_idler = ecore_idler_add(sm_CbFocusIdler, this);
+ SFolderItemInfo *itinfo = NULL;
+ char *id = NULL;
+
+ if (!m)
+ return;
+
+ itinfo = m_FindItemInfo(m->it_infolist, it);
+ if (!itinfo) {
+ _ERR(" no item info found ");
+ return;
+ }
+
+ if (m->depth == E_DEPTH_SONG) {
+ if (m->c_sinfo) {
+ song_info_destroy(m->c_sinfo);
+ m->c_sinfo = NULL;
+ }
+ m->c_sinfo = song_info_duplicate(itinfo->sinfo);
+ }
+ else {
+ if (m->c_finfo) {
+ folder_info_destroy(m->c_finfo);
+ m->c_finfo = NULL;
+ }
+ m->c_finfo = folder_info_duplicate(itinfo->finfo);
+ }
+
+ if (m->depth == E_DEPTH_SONG) {
+ id = song_info_get_media_id(m->c_sinfo);
+ elm_gengrid_item_selected_set(it, EINA_FALSE);
+ m_GotoPlayback(ADD_TYPE_FRESH, id);
+ }
+ else {
+ m->depth = E_DEPTH_SONG;
+ m_UpdateFolderGrid(false);
+ m->focus_idler = ecore_idler_add(sm_CbFocusIdler, this);
+ }
}
-void CFolderLayout::sm_CbGoToPlaybackView(void *cookie, int mode, char *mediaId)
+SFolderItemInfo *CFolderLayout::m_FindItemInfo(Eina_List *list, Elm_Object_Item *item)
{
- CFolderLayout *root = (CFolderLayout *)cookie;
- if (root)
- root->m_GotoPlayback(mode, mediaId);
+ Eina_List *l = NULL;
+ SFolderItemInfo *itinfo = NULL;
+ void *obj = NULL;
+
+ if (!list || !item)
+ return NULL;
+
+ EINA_LIST_FOREACH(list, l, obj) {
+ itinfo = (SFolderItemInfo *)obj;
+ if (itinfo->item == item)
+ return itinfo;
+ }
+
+ return NULL;
}
EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_gengrid_align_set(grid, 0, 0);
elm_object_part_content_set(Layout(), MUSIC_PART_FOLDER_GRID, grid);
- m->pHandlerGrid->Connect(grid);
+ Connect(grid, FOLDER_LAYOUT_GENGRID,
+ TYPE_MOUSE_MOVE | TYPE_KEY_DOWN |
+ TYPE_REALIZED | TYPE_UNREALIZED);
elm_gengrid_item_size_set(grid,
elm_config_scale_get() * GENGRID_ITEM_SIZE_W,
elm_config_scale_get() * GENGRID_ITEM_SIZE_H);
Evas_Object *img;
SBtnInfo btninfo[TOTAL_ADD_BTNS];
- btninfo[ABTN_PLAY].name = MUSIC_STR_PLAY;
- btninfo[ABTN_PLAY].part = MUSIC_PART_FOLDER_PLAYBTN;
- btninfo[ABTN_PLAY].style = MUSIC_STYLE_ADD_PLAY_BTN;
- btninfo[ABTN_PLAY].icon = MUSIC_IMAGE_ADD_PLAY;
+ btninfo[FOLDER_LAYOUT_PLAY_BUTTON].name = MUSIC_STR_PLAY;
+ btninfo[FOLDER_LAYOUT_PLAY_BUTTON].part = MUSIC_PART_FOLDER_PLAYBTN;
+ btninfo[FOLDER_LAYOUT_PLAY_BUTTON].style = MUSIC_STYLE_ADD_PLAY_BTN;
+ btninfo[FOLDER_LAYOUT_PLAY_BUTTON].icon = MUSIC_IMAGE_ADD_PLAY;
- btninfo[ABTN_NEXT].name = MUSIC_STR_ADDNEXT;
- btninfo[ABTN_NEXT].part = MUSIC_PART_FOLDER_NEXTBTN;
- btninfo[ABTN_NEXT].style = MUSIC_STYLE_ADD_NEXT_BTN;
- btninfo[ABTN_NEXT].icon = MUSIC_IMAGE_ADD_NEXT;
+ btninfo[FOLDER_LAYOUT_NEXT_BUTTON].name = MUSIC_STR_ADDNEXT;
+ btninfo[FOLDER_LAYOUT_NEXT_BUTTON].part = MUSIC_PART_FOLDER_NEXTBTN;
+ btninfo[FOLDER_LAYOUT_NEXT_BUTTON].style = MUSIC_STYLE_ADD_NEXT_BTN;
+ btninfo[FOLDER_LAYOUT_NEXT_BUTTON].icon = MUSIC_IMAGE_ADD_NEXT;
- btninfo[ABTN_LAST].name = MUSIC_STR_ADDLAST;
- btninfo[ABTN_LAST].part = MUSIC_PART_FOLDER_LASTBTN;
- btninfo[ABTN_LAST].style = MUSIC_STYLE_ADD_LAST_BTN;
- btninfo[ABTN_LAST].icon = MUSIC_IMAGE_ADD_LAST;
+ btninfo[FOLDER_LAYOUT_LAST_BUTTON].name = MUSIC_STR_ADDLAST;
+ btninfo[FOLDER_LAYOUT_LAST_BUTTON].part = MUSIC_PART_FOLDER_LASTBTN;
+ btninfo[FOLDER_LAYOUT_LAST_BUTTON].style = MUSIC_STYLE_ADD_LAST_BTN;
+ btninfo[FOLDER_LAYOUT_LAST_BUTTON].icon = MUSIC_IMAGE_ADD_LAST;
for (i = 0; i < TOTAL_ADD_BTNS; i++) {
btn = elm_button_add(Layout());
elm_object_text_set(btn, _(btninfo[i].name));
elm_object_style_set(btn, btninfo[i].style);
- m->pHandlerButton->Connect(btn, i);
+ Connect(btn, i, TYPE_MOUSE_MOVE | TYPE_CLICKED);
img = elm_image_add(btn);
if (img) {
m_CreateTopsection();
m_CreateFolderGrid();
- Connect(layout);
-
- SFolderLayout::CHandlerGrid::SCallback cb;
- cb.goToPlaybackView = &sm_CbGoToPlaybackView;
- cb.goToContextView = &sm_CbGoToContextView;
- cb.updateGrid = &sm_CbUpdateGrid;
- cb.cookie = this;
- m->pHandlerGrid->SetCallback(&cb);
-
- SFolderLayout::CHandlerButton::SCallback btnCb;
- btnCb.gotoPlayBackView = &sm_CbGoToPlaybackView;
- btnCb.cookie = this;
- m->pHandlerButton->SetCallback(&btnCb);
+ Connect(layout, FOLDER_LAYOUT, TYPE_KEY_DOWN);
SParcel parcel;
parcel.ctxtInfo = NULL;
}
+void CFolderLayout::OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev)
+{
+ switch (id) {
+ case FOLDER_LAYOUT_GENGRID:
+ {
+ Elm_Object_Item *item;
+
+ item = elm_gengrid_at_xy_item_get(obj, ev->cur.canvas.x,
+ ev->cur.canvas.y, NULL, NULL);
+ if (!item)
+ return;
+
+ if (!elm_object_item_focus_get(item))
+ elm_object_item_focus_set(item, EINA_TRUE);
+ }
+ break;
+
+ case FOLDER_LAYOUT_PLAY_BUTTON:
+ case FOLDER_LAYOUT_NEXT_BUTTON:
+ case FOLDER_LAYOUT_LAST_BUTTON:
+ {
+ if (!elm_object_focus_get(obj))
+ elm_object_focus_set(obj, EINA_TRUE);
+ }
+ break;
+
+ default:
+ break;
+ }
+}
+
+
+void CFolderLayout::OnMouseClicked(int id, Evas_Object *obj)
+{
+ switch (id) {
+ case FOLDER_LAYOUT_PLAY_BUTTON:
+ m_GotoPlayback(ADD_TYPE_FRESH, NULL);
+ break;
+
+ case FOLDER_LAYOUT_NEXT_BUTTON:
+ m_GotoPlayback(ADD_TYPE_NEXT, NULL);
+ break;
+
+ case FOLDER_LAYOUT_LAST_BUTTON:
+ m_GotoPlayback(ADD_TYPE_END, NULL);
+ break;
+
+ default:
+ break;
+ }
+}
+
+
+void CFolderLayout::OnRealized(int id, Evas_Object *obj, Elm_Object_Item *item)
+{
+ switch (id) {
+ case FOLDER_LAYOUT_GENGRID:
+ elm_object_item_signal_callback_add(item,
+ MUSIC_SIGNAL_BTN_CLICKED, MUSIC_BASE_VIEW,
+ sm_CbItemSelect, this);
+ break;
+
+ default:
+ break;
+ }
+}
+
+
+void CFolderLayout::OnUnrealized(int id, Evas_Object *obj, Elm_Object_Item *item)
+{
+ switch (id) {
+ case FOLDER_LAYOUT_GENGRID:
+ elm_object_item_signal_callback_del((Elm_Object_Item *)item,
+ MUSIC_SIGNAL_BTN_CLICKED, MUSIC_BASE_VIEW,
+ sm_CbItemSelect);
+ break;
+
+ default:
+ break;
+ }
+}
+
+
void CFolderLayout::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
{
- if (!strcmp(ev->keyname, KEY_BACK)) {
- if (m->depth == E_DEPTH_SONG) {
- m->depth = E_DEPTH_FOLDER;
- m_UpdateFolderGrid(false);
- m_RemoveFocusIdler();
- m->focus_idler = ecore_idler_add(sm_CbFocusIdler, this);
+ switch (id) {
+ case FOLDER_LAYOUT:
+ {
+ if (!strcmp(ev->keyname, KEY_BACK)) {
+ if (m->depth == E_DEPTH_SONG) {
+ m->depth = E_DEPTH_FOLDER;
+ m_UpdateFolderGrid(false);
+ m_RemoveFocusIdler();
+ m->focus_idler = ecore_idler_add(sm_CbFocusIdler, this);
+ }
+ else {
+ SParcel parcel;
+ parcel.ctxtInfo = NULL;
+ parcel.updateType = E_FOCUS_UPDATE;
+ parcel.layoutId = NULL;
+ parcel.keyEvent = NULL;
+ m->vmgr->UpdateView((const char *)MUSIC_BASE_VIEW, &parcel);
+ }
+ }
}
- else {
+ break;
+
+ case FOLDER_LAYOUT_GENGRID:
+ {
+ Elm_Object_Item *it = NULL;
+ SContentInfo *ctxtinfo = NULL;
+ SFolderItemInfo *itinfo = NULL;
+
+ if (!obj)
+ return;
+
+ if (strcmp(ev->keyname, KEY_MENU))
+ return;
+
+ it = elm_object_focused_item_get(obj);
+ if (!it) {
+ _ERR(" unable to get focused item ");
+ return;
+ }
+ m->focused_item = it;
+
+ if (m->ctxtinfo) {
+ free(m->ctxtinfo);
+ m->ctxtinfo = NULL;
+ }
+
+ ctxtinfo = (SContentInfo *)calloc(1, sizeof(*ctxtinfo));
+ if (!ctxtinfo)
+ return;
+
+ itinfo = m_FindItemInfo(m->it_infolist, it);
+ if (!itinfo) {
+ free(ctxtinfo);
+ return;
+ }
+
+ ctxtinfo->cbdata = this;
+ ctxtinfo->update = sm_CbCtxtUpdate;
+ ctxtinfo->close = sm_CbCtxtClose;
+ if (m->depth == E_DEPTH_SONG) {
+ ctxtinfo->type = CONTEXT_TYPE_SONG;
+ ctxtinfo->context = itinfo->sinfo;
+ }
+ else {
+ ctxtinfo->type = CONTEXT_TYPE_FOLDER;
+ ctxtinfo->context = itinfo->finfo;
+ }
+
+ m->ctxtinfo = ctxtinfo;
+
SParcel parcel;
- parcel.ctxtInfo = NULL;
- parcel.updateType = E_FOCUS_UPDATE;
- parcel.layoutId = NULL;
- parcel.keyEvent = NULL;
- m->vmgr->UpdateView((const char *)MUSIC_BASE_VIEW, &parcel);
+ parcel.ctxtInfo = ctxtinfo;
+ if (!m->vmgr->PushView(MUSIC_CONTEXT_VIEW, &parcel))
+ _ERR("viewmgr push view MUSIC_CONTEXT_VIEW failed");
}
+ break;
+
+ default:
+ break;
}
}
\ No newline at end of file