struct SAlbumLayout *m;
private:
+ static Eina_Bool sm_CbFocusIdler(void *dt);
+ void m_OnFocusIdler(void);
+
static char *sm_CbGetGridItemText(void *data, Evas_Object *obj, const char *part);
static Evas_Object *sm_CbGetGridItemContent(void *data, Evas_Object *obj, const char *part);
static void sm_CbRemoveGridItem(void *data, Evas_Object *obj);
virtual void Destroy(void);
virtual void Update(bool focusFlag);
- virtual void SetFocus(const char *btnStr) {}
+ virtual void SetFocus(const char *btnStr);
+
void SetEmptyStatusHandleCallback(void(*handleEmptyStatusCb)(void *cookie, bool emptyStatus), void *cookie);
public:
struct SSongLayout *m;
private:
+ static Eina_Bool sm_CbFocusIdler(void *dt);
+ void m_OnFocusIdler(void);
+
static char *sm_CbGetListItemText(void *data, Evas_Object *obj, const char *part);
static Evas_Object *sm_CbGetListItemContent(void *data, Evas_Object *obj, const char *part);
static void sm_CbRemoveListItem(void *data, Evas_Object *obj);
virtual void Destroy(void);
virtual void Update(bool focusFlag);
- virtual void SetFocus(const char *btnStr) {}
+ virtual void SetFocus(const char *btnStr);
public:
virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
Evas_Object *win;
Evas_Object *base;
Evas_Object *grid;
- Elm_Object_Item *focused_item;
+ Elm_Object_Item *focusedItem;
Eina_List *alblist;
Eina_List *it_infolist;
Elm_Gengrid_Item_Class *item_class;
char *album_id;
CAlbumSongsLayout *layoutAlbumSongs;
SCallback callback;
+ Ecore_Idler *focusIdler;
SAlbumLayout() {
memset(this, 0, sizeof(SAlbumLayout));
};
+Eina_Bool CAlbumLayout::sm_CbFocusIdler(void *dt)
+{
+ CAlbumLayout *root = (CAlbumLayout *)dt;
+
+ if (root)
+ root->m_OnFocusIdler();
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+
+void CAlbumLayout::m_OnFocusIdler(void)
+{
+ m->focusIdler = NULL;
+
+ ASSERT(m->focusedItem);
+ elm_gengrid_item_show(m->focusedItem, ELM_GENGRID_ITEM_SCROLLTO_IN);
+ elm_object_item_focus_set(m->focusedItem, EINA_TRUE);
+}
+
+
char *CAlbumLayout::sm_CbGetGridItemText(void *data, Evas_Object *obj, const char *part)
{
SAlbumItemInfo *itinfo = (SAlbumItemInfo *)data;
m->mhandle->SetCurrentSong(sinfo->Id());
}
- CCommonUI::UpdatePlaybackView((EAddType)type, Layout(), m->focused_item);
+ CCommonUI::UpdatePlaybackView((EAddType)type, Layout(), m->focusedItem);
}
{
m->vmgr->PopView();
m->vmgr->PushView(MUSIC_BASE_VIEW, NULL);
- elm_object_item_focus_set(m->focused_item, EINA_TRUE);
+ elm_object_item_focus_set(m->focusedItem, EINA_TRUE);
}
m_SortAlbumGrid();
+ int i = 0;
EINA_LIST_FOREACH(m->alblist, l, obj) {
alinfo = (CAlbumInfo *)obj;
itinfo = (SAlbumItemInfo *)calloc(1, sizeof(*itinfo));
item = elm_gengrid_item_append(m->grid, m->item_class, itinfo, NULL, NULL);
itinfo->item = item;
m->it_infolist = eina_list_append(m->it_infolist, itinfo);
+ if (i == 0)
+ m->focusedItem = item;
+ i++;
}
}
}
+void CAlbumLayout::SetFocus(const char *btnStr)
+{
+ ASSERT(m);
+ m->focusIdler = ecore_idler_add(sm_CbFocusIdler, this);
+}
+
+
void CAlbumLayout::SetEmptyStatusHandleCallback(void(*handleEmptyStatusCb)(void *cookie, bool emptyStatus), void *cookie)
{
ASSERT(m);
SContentInfo *ctxtinfo = NULL;
SAlbumItemInfo *itinfo = NULL;
- if (strcmp(ev->keyname, KEY_MENU) &&
- strcmp(ev->keyname, KEY_MENU_REMOTE))
- 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;
+ m->focusedItem = it;
+
+ if (!strcmp(ev->keyname, KEY_MENU) ||
+ !strcmp(ev->keyname, KEY_MENU_REMOTE)) {
+ 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->type = CONTEXT_TYPE_ALBUM;
+ ctxtinfo->context = itinfo->alinfo;
+ ctxtinfo->cbdata = this;
+ ctxtinfo->update = sm_CbCtxtUpdate;
+ ctxtinfo->close = sm_CbCtxtClose;
+
+ m->ctxtinfo = ctxtinfo;
+
+ SParcel parcel;
+ memset(&parcel, 0, sizeof(SParcel));
+ parcel.ctxtInfo = ctxtinfo;
+ if (!m->vmgr->PushView(MUSIC_CONTEXT_VIEW, &parcel))
+ _ERR("viewmgr push view MUSIC_CONTEXT_VIEW failed");
}
-
- ctxtinfo->type = CONTEXT_TYPE_ALBUM;
- ctxtinfo->context = itinfo->alinfo;
- ctxtinfo->cbdata = this;
- ctxtinfo->update = sm_CbCtxtUpdate;
- ctxtinfo->close = sm_CbCtxtClose;
-
- m->ctxtinfo = ctxtinfo;
-
- SParcel parcel;
- memset(&parcel, 0, sizeof(SParcel));
- parcel.ctxtInfo = ctxtinfo;
- if (!m->vmgr->PushView(MUSIC_CONTEXT_VIEW, &parcel))
- _ERR("viewmgr push view MUSIC_CONTEXT_VIEW failed");
}
break;
void CAlbumLayout::OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev)
{
- Elm_Object_Item *item;
+ switch (id) {
+ case ALBUM_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;
+ 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);
+
+ m->focusedItem = item;
+ }
+ break;
- if (!elm_object_item_focus_get(item))
- elm_object_item_focus_set(item, EINA_TRUE);
+ default:
+ break;
+ }
}
elm_object_focus_next_object_set(m->plbackbtn, m->c_grpbtn, ELM_FOCUS_LEFT);
else
elm_object_focus_next_object_set(m->plbackbtn, m->group_btn[GROUP_BTN_SONG], ELM_FOCUS_LEFT);
- elm_object_focus_next_object_set(m->plbackbtn, m->content, ELM_FOCUS_DOWN);
- elm_object_focus_next_object_set(m->srcbtn, m->content, ELM_FOCUS_DOWN);
- elm_object_focus_next_object_set(m->sortbtn, m->content, ELM_FOCUS_DOWN);
elm_object_part_text_set(m->base, MUSIC_PART_NO_CONTENT, MUSIC_STR_EMPTY);
elm_object_part_text_set(m->base, MUSIC_PART_NO_CONTENT_SUB, MUSIC_STR_EMPTY);
elm_object_part_content_set(m->base, MUSIC_PART_CONTENT, evasLayout);
m->lmgr->Show(layoutId);
m_UpdateFocusSequence();
-
- // Button sequnce is processed by key event handling
- // in case of layouts with 3 buttons (play, add next, add last..)
- if ((!strcmp(m->lmgr->Layout()->LayoutId(), MUSIC_FOLDER_LAYOUT) ||
- !strcmp(m->lmgr->Layout()->LayoutId(), MUSIC_CATEGORY_ARTIST_LAYOUT) ||
- !strcmp(m->lmgr->Layout()->LayoutId(), MUSIC_CATEGORY_GENRE_LAYOUT) ||
- !strcmp(m->lmgr->Layout()->LayoutId(), MUSIC_CATEGORY_PLAYLISTS_LAYOUT) ||
- !strcmp(m->lmgr->Layout()->LayoutId(), MUSIC_ALBUM_SONGS_LAYOUT) ||
- !strcmp(m->lmgr->Layout()->LayoutId(), MUSIC_CATEGORY_ARTIST_SONGS_LAYOUT) ||
- !strcmp(m->lmgr->Layout()->LayoutId(), MUSIC_CATEGORY_GENRE_SONGS_LAYOUT) ||
- !strcmp(m->lmgr->Layout()->LayoutId(), MUSIC_CATEGORY_PLAYLISTS_SONGS_LAYOUT))) {
- elm_object_focus_next_object_set(m->plbackbtn, m->plbackbtn, ELM_FOCUS_DOWN);
- elm_object_focus_next_object_set(m->srcbtn, m->srcbtn, ELM_FOCUS_DOWN);
- elm_object_focus_next_object_set(m->sortbtn, m->sortbtn, ELM_FOCUS_DOWN);
- }
}
}
if (!strcmp(ev->keyname, KEY_BACK) ||
!strcmp(ev->keyname, KEY_BACK_REMOTE))
elm_object_focus_set(m->c_grpbtn, EINA_TRUE);
- else if (!strcmp(ev->keyname, KEY_DOWN) &&
- (!strcmp(m->lmgr->Layout()->LayoutId(), MUSIC_FOLDER_LAYOUT) ||
- !strcmp(m->lmgr->Layout()->LayoutId(), MUSIC_CATEGORY_ARTIST_LAYOUT) ||
- !strcmp(m->lmgr->Layout()->LayoutId(), MUSIC_CATEGORY_GENRE_LAYOUT) ||
- !strcmp(m->lmgr->Layout()->LayoutId(), MUSIC_CATEGORY_PLAYLISTS_LAYOUT) ||
- !strcmp(m->lmgr->Layout()->LayoutId(), MUSIC_ALBUM_SONGS_LAYOUT) ||
- !strcmp(m->lmgr->Layout()->LayoutId(), MUSIC_CATEGORY_ARTIST_SONGS_LAYOUT) ||
- !strcmp(m->lmgr->Layout()->LayoutId(), MUSIC_CATEGORY_GENRE_SONGS_LAYOUT) ||
- !strcmp(m->lmgr->Layout()->LayoutId(), MUSIC_CATEGORY_PLAYLISTS_SONGS_LAYOUT))) {
+ else if (!strcmp(ev->keyname, KEY_DOWN)) {
const char *btnText = NULL;
if (id == BASE_VIEW_PLAY_BUTTON)
int count;
const char *focusBtnStr;
- Elm_Object_Item *curItem;
EFocusIderType idlerType;
const char *catSongLayoutId;
Evas_Object *focus = NULL;
if (t.depth == E_DEPTH_CATEGORY) {
- elm_gengrid_item_show(m->curItem, ELM_GENGRID_ITEM_SCROLLTO_IN);
- elm_object_item_focus_set(m->curItem, EINA_TRUE);
+ elm_gengrid_item_show(t.focused_item, ELM_GENGRID_ITEM_SCROLLTO_IN);
+ elm_object_item_focus_set(t.focused_item, EINA_TRUE);
}
else if (t.depth == E_DEPTH_ALBUM) {
if (!strcmp(m->focusBtnStr, MUSIC_FIRST_BTN))
m->it_infolist = eina_list_append(m->it_infolist,
itinfo);
if (i == 0)
- m->curItem = item;
+ t.focused_item = item;
i++;
}
elm_gengrid_item_class_free(grid_item);
m_AddButtons();
m_CreateAlbumgrid();
- elm_object_focus_next_object_set(t.grid,
- m->addBtns[ABTN_PLAY], ELM_FOCUS_UP);
-
parcel.updateType = E_LAYOUT_UPDATE;
parcel.layoutId = MUSIC_CATEGORY_ALBUM_LAYOUT;
m->vmgr->UpdateView((const char *)MUSIC_BASE_VIEW, &parcel);
return;
}
- if (!strcmp(ev->keyname, KEY_UP) ||
- !strcmp(ev->keyname, KEY_DOWN) ||
- !strcmp(ev->keyname, KEY_LEFT) ||
- !strcmp(ev->keyname, KEY_RIGHT)) {
- m->curItem = it;
- return;
- }
-
- if ((strcmp(ev->keyname, KEY_MENU) &&
- strcmp(ev->keyname, KEY_MENU_REMOTE)) ||
- t.depth == E_DEPTH_SELECT_LIST ||
- t.depth == E_DEPTH_SHOW_LIST)
- return;
-
t.focused_item = it;
- if (t.ctxtinfo) {
- free(t.ctxtinfo);
- t.ctxtinfo = NULL;
- }
+ if ((!strcmp(ev->keyname, KEY_MENU) ||
+ !strcmp(ev->keyname, KEY_MENU_REMOTE)) &&
+ t.depth != E_DEPTH_SELECT_LIST &&
+ t.depth != E_DEPTH_SHOW_LIST) {
+ if (t.ctxtinfo) {
+ free(t.ctxtinfo);
+ t.ctxtinfo = NULL;
+ }
- ctxtinfo = (SContentInfo *)calloc(1, sizeof(*ctxtinfo));
- if (!ctxtinfo)
- return;
+ ctxtinfo = (SContentInfo *)calloc(1, sizeof(*ctxtinfo));
+ if (!ctxtinfo)
+ return;
- itinfo = m_FindItemInfo(m->it_infolist, it);
- if (!itinfo || itinfo->type == CAT_TYPE_PLAYLIST_NEW) {
- free(ctxtinfo);
- return;
- }
+ itinfo = m_FindItemInfo(m->it_infolist, it);
+ if (!itinfo || itinfo->type == CAT_TYPE_PLAYLIST_NEW) {
+ free(ctxtinfo);
+ return;
+ }
- ctxtinfo->cbdata = this;
- ctxtinfo->update = sm_CbCtxtUpdate;
- ctxtinfo->close = sm_CbCtxtClose;
- if (t.depth == E_DEPTH_SONG) {
- ctxtinfo->type = CONTEXT_TYPE_SONG;
- ctxtinfo->context = itinfo->sinfo;
- }
- else if (t.depth == E_DEPTH_ALBUM) {
- ctxtinfo->type = CONTEXT_TYPE_ALBUM;
- ctxtinfo->context = itinfo->alinfo;
- }
- else {
- ctxtinfo->type = t_ContextType();
- ctxtinfo->context = itinfo->catinfo;
- }
+ ctxtinfo->cbdata = this;
+ ctxtinfo->update = sm_CbCtxtUpdate;
+ ctxtinfo->close = sm_CbCtxtClose;
+ if (t.depth == E_DEPTH_SONG) {
+ ctxtinfo->type = CONTEXT_TYPE_SONG;
+ ctxtinfo->context = itinfo->sinfo;
+ }
+ else if (t.depth == E_DEPTH_ALBUM) {
+ ctxtinfo->type = CONTEXT_TYPE_ALBUM;
+ ctxtinfo->context = itinfo->alinfo;
+ }
+ else {
+ ctxtinfo->type = t_ContextType();
+ ctxtinfo->context = itinfo->catinfo;
+ }
- t.ctxtinfo = ctxtinfo;
+ t.ctxtinfo = ctxtinfo;
- SParcel parcel;
- memset(&parcel, 0, sizeof(SParcel));
- parcel.ctxtInfo = ctxtinfo;
- if (!m->vmgr->PushView(MUSIC_CONTEXT_VIEW, &parcel))
- _ERR("viewmgr push view MUSIC_CONTEXT_VIEW failed");
+ SParcel parcel;
+ memset(&parcel, 0, sizeof(SParcel));
+ parcel.ctxtInfo = ctxtinfo;
+ if (!m->vmgr->PushView(MUSIC_CONTEXT_VIEW, &parcel))
+ _ERR("viewmgr push view MUSIC_CONTEXT_VIEW failed");
+ }
}
break;
if (!elm_object_item_focus_get(item))
elm_object_item_focus_set(item, EINA_TRUE);
- m->curItem = item;
+ t.focused_item = item;
}
break;
CViewMgr* vmgr;
SContentInfo *ctxtinfo;
char *uri;
+ Ecore_Idler *focusIdler;
SSongLayout() {
memset(this, 0, sizeof(SSongLayout));
};
+Eina_Bool CSongLayout::sm_CbFocusIdler(void *dt)
+{
+ CSongLayout *root = (CSongLayout *)dt;
+
+ if (root)
+ root->m_OnFocusIdler();
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+
+void CSongLayout::m_OnFocusIdler(void)
+{
+ m->focusIdler = NULL;
+
+ Elm_Object_Item *item = elm_genlist_first_item_get(m->songlist);
+ ASSERT(item);
+
+ elm_genlist_item_show(item, ELM_GENLIST_ITEM_SCROLLTO_IN);
+ elm_object_item_focus_set(item, EINA_TRUE);
+}
+
+
char *CSongLayout::sm_CbGetListItemText(void *data, Evas_Object *obj, const char *part)
{
SSongItemInfo *itinfo = (SSongItemInfo *)data;
}
+void CSongLayout::SetFocus(const char *btnStr)
+{
+ ASSERT(m);
+ m->focusIdler = ecore_idler_add(sm_CbFocusIdler, this);
+}
+
+
void CSongLayout::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
{
switch (id) {