bool EmptyStatus(void);
virtual void Update(bool flag) {}
+ virtual void SetFocus(const char *btnStr) = 0;
};
virtual void Destroy(void);
virtual void Update(bool focusFlag);
+ virtual void SetFocus(const char *btnStr) {}
void SetEmptyStatusHandleCallback(void(*handleEmptyStatusCb)(void *cookie, bool emptyStatus), void *cookie);
public:
static void sm_CbItemSelect(void *data, Evas_Object *obj, void *event_info);
void m_OnItemSelect(Evas_Object *obj, void *event_info);
+ static Eina_Bool sm_CbFocusIdler(void *dt);
+ void m_OnFocusIdler(void);
+
private:
SAlbumSongsItemInfo *m_FindItemInfoFromItem(Eina_List *list, Elm_Object_Item *item);
void m_UpdateSongList(void);
void SetCurrentAlbum(CAlbumInfo *albumInfo);
CAlbumInfo*CurrentAlbum(void);
+ virtual void SetFocus(const char *btnStr);
+
public:
virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
virtual void OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev);
void CreateEntryPopup(void);
void SetEmptyStatusHandleCallback(void(*handleEmptyStatusCb)(void *cookie, bool emptyStatus), void *cookie);
+ virtual void SetFocus(const char *btnStr);
public:
virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
void SetParameter(EDepth depth, ESelectType selType, CCategoryInfo *catInfo, CAlbumInfo *albumInfo);
Eina_List *CategorySongItemInfoList(void);
+ virtual void SetFocus(const char *btnStr);
+
public:
virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
virtual void OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev);
int updateType;
const char *layoutId;
const char *keyEvent;
- const char *prevFocusedBtn;
+ const char *focusedBtn;
};
#endif /* __COMMON_H__ */
#define KEY_UP "Up"
#undef KEY_DOWN
#define KEY_DOWN "Down"
+#undef KEY_LEFT
+#define KEY_LEFT "Left"
+#undef KEY_RIGHT
+#define KEY_RIGHT "Right"
/* SHOULD BE DEFINED */
#undef KEY_PLAY
static Eina_Bool sm_CbFocusIdler(void *dt);
void m_OnFocusIdler(void);
- static Eina_Bool sm_CbButtonFocusIdler(void *dt);
- void m_OnButtonFocusIdler(void);
-
static void sm_CbCtxtUpdate(void *dt, enum EActionType type, int lid);
void m_OnCtxtUpdate(EActionType type, int lid);
virtual void Destroy(void);
virtual void Update(bool focusFlag);
- void SetButtonFocus(const char *btnStr);
+ virtual void SetFocus(const char *btnStr);
public:
virtual void OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev);
virtual void Destroy(void);
virtual void Update(bool focusFlag);
+ 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 *songlist;
+ Evas_Object *addBtns[TOTAL_ADD_BTNS];
Elm_Object_Item *focused_item;
CMusicController* mhandle;
Eina_List *it_infolist;
Elm_Genlist_Item_Class *item_class;
int total_duration;
+ const char *focusBtnStr;
+ Ecore_Idler *focusIdler;
SAlbumSongsLayout() {
memset(this, 0, sizeof(SAlbumSongsLayout));
}
+Eina_Bool CAlbumSongsLayout::sm_CbFocusIdler(void *dt)
+{
+ CAlbumSongsLayout *root = (CAlbumSongsLayout *)dt;
+
+ if (root)
+ root->m_OnFocusIdler();
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+
+void CAlbumSongsLayout::m_OnFocusIdler(void)
+{
+ Evas_Object *focus = NULL;
+
+ m->focusIdler = NULL;
+
+ if (!strcmp(m->focusBtnStr, MUSIC_FIRST_BTN))
+ focus = m->addBtns[BTN_PLAY];
+ else if (!strcmp(m->focusBtnStr, MUSIC_SECOND_BTN))
+ focus = m->addBtns[BTN_NEXT];
+ else // MUSIC_THIRD_BTN
+ focus = m->addBtns[BTN_LAST];
+
+ elm_object_focus_set(focus, EINA_TRUE);
+}
+
+
SAlbumSongsItemInfo *CAlbumSongsLayout::m_FindItemInfoFromItem(Eina_List *list, Elm_Object_Item *item)
{
Eina_List *l = NULL;
{
Evas_Object *thumb = NULL;
int i;
- Evas_Object *btn[TOTAL_ADD_BTNS];
+ Evas_Object *btn;
Evas_Object *img = NULL;
char *path = NULL;
char buf[MAX_LENGTH];
return;
for (i = 0; i < TOTAL_ADD_BTNS; i++) {
- btn[i] = elm_button_add(layout);
- if (!btn[i])
+ btn = elm_button_add(layout);
+ if (!btn)
continue;
- evas_object_size_hint_weight_set(btn[i],
+ evas_object_size_hint_weight_set(btn,
EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- elm_object_text_set(btn[i], _(btninfo[i].name));
- elm_object_style_set(btn[i], btninfo[i].style);
+ elm_object_text_set(btn, _(btninfo[i].name));
+ elm_object_style_set(btn, btninfo[i].style);
- Connect(btn[i], btninfo[i].type, TYPE_MOUSE_MOVE | TYPE_CLICKED | TYPE_KEY_DOWN);
+ Connect(btn, btninfo[i].type, TYPE_MOUSE_MOVE | TYPE_CLICKED | TYPE_KEY_DOWN);
- img = elm_image_add(btn[i]);
+ img = elm_image_add(btn);
if (img) {
snprintf(buf, sizeof(buf), "%s/%s", IMAGEDIR,
btninfo[i].icon);
elm_image_file_set(img, buf, NULL);
- elm_object_part_content_set(btn[i],
+ elm_object_part_content_set(btn,
MUSIC_PART_ELM_SWALLOWICON, img);
}
elm_object_part_content_set(layout, btninfo[i].part,
- btn[i]);
+ btn);
+
+ m->addBtns[i] = btn;
}
- elm_object_focus_set(btn[0], EINA_TRUE);
+ elm_object_focus_set(m->addBtns[BTN_PLAY], EINA_TRUE);
path = m->alinfo->ThumbnailPath();
if (path) {
}
+void CAlbumSongsLayout::SetFocus(const char *btnStr)
+{
+ ASSERT(m);
+
+ m->focusBtnStr = btnStr;
+ m->focusIdler = ecore_idler_add(sm_CbFocusIdler, this);
+}
+
+
void CAlbumSongsLayout::t_OnShow(void)
{
ASSERT(m);
m_CreateSongList();
m_CreateTopSection();
+ elm_object_focus_next_object_set(m->songlist,
+ m->addBtns[BTN_PLAY], ELM_FOCUS_UP);
+
CBaseLayout::t_OnShow();
SParcel parcel;
Elm_Object_Item *it = NULL;
SContentInfo *ctxtinfo = NULL;
SAlbumSongsItemInfo *itinfo = NULL;
+ SParcel parcel;
- if (strcmp(ev->keyname, KEY_MENU) &&
- strcmp(ev->keyname, KEY_MENU_REMOTE))
- return;
+ memset(&parcel, 0, sizeof(SParcel));
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;
+ if (!strcmp(ev->keyname, KEY_LEFT)) {
+ parcel.updateType = E_FOCUS_UPDATE;
+ m->vmgr->UpdateView(MUSIC_BASE_VIEW, &parcel);
}
-
- ctxtinfo = (SContentInfo *)calloc(1, sizeof(*ctxtinfo));
- if (!ctxtinfo)
- return;
-
- itinfo = m_FindItemInfoFromItem(m->it_infolist, it);
- if (!itinfo) {
- free(ctxtinfo);
- return;
+ else if (!strcmp(ev->keyname, KEY_MENU) ||
+ !strcmp(ev->keyname, KEY_MENU_REMOTE)) {
+ m->focused_item = it;
+
+ if (m->ctxtinfo) {
+ free(m->ctxtinfo);
+ m->ctxtinfo = NULL;
+ }
+
+ ctxtinfo = (SContentInfo *)calloc(1, sizeof(*ctxtinfo));
+ if (!ctxtinfo)
+ return;
+
+ itinfo = m_FindItemInfoFromItem(m->it_infolist, it);
+ if (!itinfo) {
+ free(ctxtinfo);
+ return;
+ }
+
+ ctxtinfo->type = CONTEXT_TYPE_SONG;
+ ctxtinfo->context = itinfo->sinfo;
+ ctxtinfo->cbdata = this;
+ ctxtinfo->update = sm_CbCtxtUpdate;
+ ctxtinfo->close = sm_CbCtxtClose;
+
+ m->ctxtinfo = ctxtinfo;
+
+ parcel.ctxtInfo = ctxtinfo;
+ if (!m->vmgr->PushView(MUSIC_CONTEXT_VIEW, &parcel))
+ _ERR("viewmgr push view MUSIC_CONTEXT_VIEW failed");
}
-
- ctxtinfo->type = CONTEXT_TYPE_SONG;
- ctxtinfo->context = itinfo->sinfo;
- 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;
memset(&parcel, 0, sizeof(SParcel));
parcel.updateType = E_FOCUS_UPDATE;
parcel.keyEvent = KEY_UP;
- parcel.prevFocusedBtn = btnText;
+ parcel.focusedBtn = btnText;
m->vmgr->UpdateView((const char *)MUSIC_BASE_VIEW, &parcel);
}
break;
SArgList *arglist;
int btntype;
bool fresh_view;
+ bool srcBtnFocusedBySecondBtn;
CSongLayout *layoutSong;
CAlbumLayout *layoutAlbum;
m->lmgr->Show(layoutId);
m_UpdateFocusSequence();
- if (!strcmp(layoutId, MUSIC_FOLDER_LAYOUT)) {
+ // 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 (parcel->keyEvent && !strcmp(parcel->keyEvent, KEY_UP)) {
Evas_Object *focus = NULL;
- if (!strcmp(parcel->prevFocusedBtn, MUSIC_FIRST_BTN))
+ if (!strcmp(parcel->focusedBtn, MUSIC_FIRST_BTN)) {
+ m->srcBtnFocusedBySecondBtn = false;
focus = m->plbackbtn;
- else if (!strcmp(parcel->prevFocusedBtn, MUSIC_SECOND_BTN)) {
- if (elm_object_disabled_get(m->sortbtn))
+ }
+ else if (!strcmp(parcel->focusedBtn, MUSIC_SECOND_BTN)) {
+ if (elm_object_disabled_get(m->sortbtn)) {
+ m->srcBtnFocusedBySecondBtn = true;
focus = m->srcbtn;
- else
+ }
+ else {
+ m->srcBtnFocusedBySecondBtn = false;
focus = m->sortbtn;
+ }
}
- else if (!strcmp(parcel->prevFocusedBtn, MUSIC_THIRD_BTN))
+ else if (!strcmp(parcel->focusedBtn, MUSIC_THIRD_BTN)) {
+ m->srcBtnFocusedBySecondBtn = false;
focus = m->srcbtn;
+ }
elm_object_focus_set(focus, EINA_TRUE);
}
!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_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))) {
const char *btnText = NULL;
if (id == BASE_VIEW_PLAY_BUTTON)
btnText = MUSIC_FIRST_BTN;
else if (id == BASE_VIEW_SORT_BUTTON)
btnText = MUSIC_SECOND_BTN;
- else //BASE_VIEW_SOURCE_BUTTON
- btnText = MUSIC_THIRD_BTN;
+ else { //BASE_VIEW_SOURCE_BUTTON
+ if (m->srcBtnFocusedBySecondBtn)
+ btnText = MUSIC_SECOND_BTN;
+ else
+ btnText = MUSIC_THIRD_BTN;
+ }
- CFolderLayout *folderLayout = (CFolderLayout *)m->lmgr->Layout();
- folderLayout->SetButtonFocus(btnText);
+ CExtBaseLayout *layout = (CExtBaseLayout *)m->lmgr->Layout();
+ layout->SetFocus(btnText);
}
break;
case BASE_VIEW_GROUP_GENRE:
case BASE_VIEW_GROUP_FOLDER:
case BASE_VIEW_GROUP_PLAYLIST:
- if (m->lmgr->Layout())
+ if (m->lmgr->Layout()) {
+ m_ShowCurrentLayout();
m_UpdateCurrentLayout(false);
+ }
break;
default:
ID_TYPE_MEMBER
};
+enum EFocusIderType {
+ IDLER_TYPE_LAYOUT_UPDATE,
+ IDLER_TYPE_FOCUS_MOVE_BY_USER_INPUT
+};
+
struct SBtnInfo {
const char *name;
const char *part;
struct SCategoryLayout {
Evas_Object *win;
Evas_Object *layout;
- Evas_Object *add_btn[TOTAL_ADD_BTNS];
+ Evas_Object *addBtns[TOTAL_ADD_BTNS];
Evas_Object *def_foc_btn;
Eina_List *catlist;
Eina_List *alblist;
Eina_List *songlist;
Eina_List *it_infolist;
- Ecore_Idler *focus_idler;
+ Ecore_Idler *focusIdler;
CMusicController *pMusicController;
CLayoutMgr *lmgr;
CViewMgr *vmgr;
int total_duration;
int count;
+ const char *focusBtnStr;
+ Elm_Object_Item *curItem;
+ EFocusIderType idlerType;
+
const char *catSongLayoutId;
SCategoryLayout() {
void CCategoryLayout::m_OnFocusIdler(void)
{
- Elm_Object_Item *it = NULL;
- SCatItemInfo *itinfo = NULL;
+ m->focusIdler = NULL;
- m->focus_idler = NULL;
+ if (m->idlerType == IDLER_TYPE_LAYOUT_UPDATE) {
+ Elm_Object_Item *it = NULL;
+ SCatItemInfo *itinfo = NULL;
- elm_object_tree_focus_allow_set(t.base, EINA_TRUE);
+ elm_object_tree_focus_allow_set(t.base, EINA_TRUE);
- if (t.depth == E_DEPTH_CATEGORY) {
- it = m_FindItemByInfo(m->it_infolist, t.c_catinfo);
- if (!it) {
- itinfo = (SCatItemInfo *)eina_list_nth(m->it_infolist, 0);
- it = itinfo->item;
+ if (t.depth == E_DEPTH_CATEGORY) {
+ it = m_FindItemByInfo(m->it_infolist, t.c_catinfo);
+ if (!it) {
+ itinfo = (SCatItemInfo *)eina_list_nth(m->it_infolist, 0);
+ it = itinfo->item;
+ }
+ elm_gengrid_item_show(it, ELM_GENGRID_ITEM_SCROLLTO_IN);
+ elm_object_item_focus_set(it, EINA_TRUE);
+ }
+ else if (t.depth == E_DEPTH_ALBUM)
+ elm_object_focus_set(m->def_foc_btn, EINA_TRUE);
+ }
+ else {
+ 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);
+ }
+ else if (t.depth == E_DEPTH_ALBUM) {
+ if (!strcmp(m->focusBtnStr, MUSIC_FIRST_BTN))
+ focus = m->addBtns[ABTN_PLAY];
+ else if (!strcmp(m->focusBtnStr, MUSIC_SECOND_BTN))
+ focus = m->addBtns[ABTN_NEXT];
+ else // MUSIC_THIRD_BTN
+ focus = m->addBtns[ABTN_LAST];
+
+ elm_object_focus_set(focus, EINA_TRUE);
}
- elm_gengrid_item_show(it, ELM_GENGRID_ITEM_SCROLLTO_IN);
- elm_object_item_focus_set(it, EINA_TRUE);
}
- else if (t.depth == E_DEPTH_ALBUM)
- elm_object_focus_set(m->def_foc_btn, EINA_TRUE);
}
void CCategoryLayout::m_RemoveFocusIdler(void)
{
- if (!m->focus_idler)
+ if (!m->focusIdler)
return;
- ecore_idler_del(m->focus_idler);
- m->focus_idler = NULL;
+ ecore_idler_del(m->focusIdler);
+ m->focusIdler = NULL;
}
}
for (i = 0; i < TOTAL_ADD_BTNS; i++) {
- m->add_btn[i] = elm_button_add(Layout());
- if (!m->add_btn[i])
+ m->addBtns[i] = elm_button_add(Layout());
+ if (!m->addBtns[i])
continue;
- evas_object_size_hint_weight_set(m->add_btn[i],
+ evas_object_size_hint_weight_set(m->addBtns[i],
EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- elm_object_text_set(m->add_btn[i], _(btninfo[i].name));
- elm_object_style_set(m->add_btn[i], btninfo[i].style);
+ elm_object_text_set(m->addBtns[i], _(btninfo[i].name));
+ elm_object_style_set(m->addBtns[i], btninfo[i].style);
- Connect(m->add_btn[i], btninfo[i].type, TYPE_CLICKED | TYPE_MOUSE_MOVE | TYPE_KEY_DOWN);
+ Connect(m->addBtns[i], btninfo[i].type, TYPE_CLICKED | TYPE_MOUSE_MOVE | TYPE_KEY_DOWN);
- img = elm_image_add(m->add_btn[i]);
+ img = elm_image_add(m->addBtns[i]);
if (img) {
snprintf(buf, sizeof(buf), "%s/%s", IMAGEDIR,
btninfo[i].icon);
elm_image_file_set(img, buf, NULL);
- elm_object_part_content_set(m->add_btn[i],
+ elm_object_part_content_set(m->addBtns[i],
MUSIC_PART_ELM_SWALLOWICON, img);
}
- elm_object_part_content_set(Layout(), btninfo[i].part, m->add_btn[i]);
+ elm_object_part_content_set(Layout(), btninfo[i].part, m->addBtns[i]);
}
- elm_object_focus_set(m->add_btn[ABTN_PLAY], EINA_TRUE);
- m->def_foc_btn = m->add_btn[ABTN_PLAY];
+ elm_object_focus_set(m->addBtns[ABTN_PLAY], EINA_TRUE);
+ m->def_foc_btn = m->addBtns[ABTN_PLAY];
}
return;
}
+ int i = 0;
EINA_LIST_FOREACH(m->alblist, l, obj) {
alinfo = (CAlbumInfo *)obj;
itinfo = (SCatItemInfo *)calloc(1, sizeof(*itinfo));
itinfo->item = item;
m->it_infolist = eina_list_append(m->it_infolist,
itinfo);
+ if (i == 0)
+ m->curItem = item;
+ i++;
}
elm_gengrid_item_class_free(grid_item);
int i;
for (i = 0; i < TOTAL_ADD_BTNS; i++) {
- if (m->add_btn[i])
- evas_object_del(m->add_btn[i]);
- m->add_btn[i] = NULL;
+ if (m->addBtns[i])
+ evas_object_del(m->addBtns[i]);
+ m->addBtns[i] = NULL;
}
}
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);
parcel.layoutId = MUSIC_CATEGORY_SELECTLIST_LAYOUT;
m->vmgr->UpdateView((const char *)MUSIC_BASE_VIEW, &parcel);
}
- else {
+ else { // E_DEPTH_CATEGORY
if (!t_SetEdje(MUSIC_CATEGORY_LAYOUT)) {
_ERR(" get layout failed ");
return;
if (needFocusIdler) {
m_RemoveFocusIdler();
- m->focus_idler = ecore_idler_add(sm_CbFocusIdler, this);
+ m->idlerType = IDLER_TYPE_LAYOUT_UPDATE;
+ m->focusIdler = ecore_idler_add(sm_CbFocusIdler, this);
}
}
}
+void CCategoryLayout::SetFocus(const char *btnStr)
+{
+ ASSERT(m);
+
+ m->idlerType = IDLER_TYPE_FOCUS_MOVE_BY_USER_INPUT;
+ m->focusBtnStr = btnStr;
+ m->focusIdler = ecore_idler_add(sm_CbFocusIdler, this);
+}
+
+
void CCategoryLayout::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
{
switch (id) {
if (!obj)
return;
+ it = elm_object_focused_item_get(obj);
+ if (!it) {
+ _ERR(" unable to get focused item ");
+ 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;
- it = elm_object_focused_item_get(obj);
- if (!it) {
- _ERR(" unable to get focused item ");
- return;
- }
t.focused_item = it;
if (t.ctxtinfo) {
memset(&parcel, 0, sizeof(SParcel));
parcel.updateType = E_FOCUS_UPDATE;
parcel.keyEvent = KEY_UP;
- parcel.prevFocusedBtn = btnText;
+ parcel.focusedBtn = btnText;
m->vmgr->UpdateView((const char *)MUSIC_BASE_VIEW, &parcel);
}
break;
if (!elm_object_item_focus_get(item))
elm_object_item_focus_set(item, EINA_TRUE);
+
+ m->curItem = item;
}
break;
ID_TYPE_MEMBER
};
+enum EFocusIderType {
+ IDLER_TYPE_LAYOUT_UPDATE,
+ IDLER_TYPE_FOCUS_MOVE_BY_USER_INPUT
+};
struct SCategorySongsLayout {
Evas_Object *win;
Evas_Object *base;
Evas_Object *songlist;
Elm_Object_Item *focused_item;
- Evas_Object *add_btn[TOTAL_ADD_BTNS];
- Evas_Object *select_btn[TOTAL_SELECT_BTNS];
+ Evas_Object *addBtns[TOTAL_ADD_BTNS];
+ Evas_Object *selectBtns[TOTAL_SELECT_BTNS];
Evas_Object *def_foc_btn;
Evas_Object *albumCover;
- Ecore_Idler *focus_idler;
+ Ecore_Idler *focusIdler;
CMusicController* mhandle;
CLayoutMgr *mgr;
CCategoryInfo *catInfo;
CAlbumInfo *albumInfo;
+ const char *focusBtnStr;
+ EFocusIderType idlerType;
+
SCategorySongsLayout() {
memset(this, 0, sizeof(SCategorySongsLayout));
}
void CCategorySongsLayout::m_OnFocusIdler(void)
{
- m->focus_idler = NULL;
- elm_object_tree_focus_allow_set(m->base, EINA_TRUE);
- elm_object_focus_set(m->def_foc_btn, EINA_TRUE);
+ m->focusIdler = NULL;
+
+ if (m->idlerType == IDLER_TYPE_LAYOUT_UPDATE) {
+ elm_object_tree_focus_allow_set(m->base, EINA_TRUE);
+ elm_object_focus_set(m->def_foc_btn, EINA_TRUE);
+ }
+ else {
+ Evas_Object *focus = NULL;
+
+ if (!strcmp(m->focusBtnStr, MUSIC_FIRST_BTN)) {
+ if (m->depth == DEPTH_SELECT_LIST)
+ focus = m->selectBtns[SBTN_SELECT_ALL];
+ else
+ focus = m->addBtns[ABTN_PLAY];
+ }
+ else if (!strcmp(m->focusBtnStr, MUSIC_SECOND_BTN)) {
+ if (m->depth == DEPTH_SELECT_LIST)
+ focus = m->selectBtns[SBTN_DONE];
+ else
+ focus = m->addBtns[ABTN_NEXT];
+ }
+ else { // MUSIC_THIRD_BTN
+ if (m->depth == DEPTH_SELECT_LIST)
+ focus = m->selectBtns[SBTN_CANCEL];
+ else
+ focus = m->addBtns[ABTN_LAST];
+ }
+
+ elm_object_focus_set(focus, EINA_TRUE);
+ }
}
tc = eina_list_count(m->it_infolist);
if (itinfo->check_status) {
if (tc == m->count)
- elm_object_text_set(m->select_btn[SBTN_SELECT_ALL],
+ elm_object_text_set(m->selectBtns[SBTN_SELECT_ALL],
_(MUSIC_TEXT_SELECT_ALL));
m->count = m->count - 1;
elm_object_item_signal_emit(itinfo->item,
else {
m->count = m->count + 1;
if (tc == m->count)
- elm_object_text_set(m->select_btn[SBTN_SELECT_ALL],
+ elm_object_text_set(m->selectBtns[SBTN_SELECT_ALL],
_(MUSIC_TEXT_DESELECT_ALL));
elm_object_item_signal_emit(itinfo->item,
MUSIC_SIGNAL_CHECK_ON, MUSIC_BASE_VIEW);
void CCategorySongsLayout::m_RemoveFocusIdler(void)
{
- if (!m->focus_idler)
+ if (!m->focusIdler)
return;
- ecore_idler_del(m->focus_idler);
- m->focus_idler = NULL;
+ ecore_idler_del(m->focusIdler);
+ m->focusIdler = NULL;
}
int i;
for (i = 0; i < TOTAL_ADD_BTNS; i++) {
- if (m->add_btn[i])
- evas_object_del(m->add_btn[i]);
- m->add_btn[i] = NULL;
+ if (m->addBtns[i])
+ evas_object_del(m->addBtns[i]);
+ m->addBtns[i] = NULL;
}
for (i = 0; i < TOTAL_SELECT_BTNS; i++) {
- if (m->select_btn[i])
- evas_object_del(m->select_btn[i]);
- m->select_btn[i] = NULL;
+ if (m->selectBtns[i])
+ evas_object_del(m->selectBtns[i]);
+ m->selectBtns[i] = NULL;
}
m->total_duration = 0;
}
for (i = 0; i < TOTAL_ADD_BTNS; i++) {
- m->add_btn[i] = elm_button_add(Layout());
- if (!m->add_btn[i])
+ m->addBtns[i] = elm_button_add(Layout());
+ if (!m->addBtns[i])
continue;
- evas_object_size_hint_weight_set(m->add_btn[i],
+ evas_object_size_hint_weight_set(m->addBtns[i],
EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- elm_object_text_set(m->add_btn[i], _(btninfo[i].name));
- elm_object_style_set(m->add_btn[i], btninfo[i].style);
+ elm_object_text_set(m->addBtns[i], _(btninfo[i].name));
+ elm_object_style_set(m->addBtns[i], btninfo[i].style);
- Connect(m->add_btn[i], btninfo[i].type, TYPE_CLICKED | TYPE_MOUSE_MOVE | TYPE_KEY_DOWN);
+ Connect(m->addBtns[i], btninfo[i].type, TYPE_CLICKED | TYPE_MOUSE_MOVE | TYPE_KEY_DOWN);
- img = elm_image_add(m->add_btn[i]);
+ img = elm_image_add(m->addBtns[i]);
if (img) {
snprintf(buf, sizeof(buf), "%s/%s", IMAGEDIR,
btninfo[i].icon);
elm_image_file_set(img, buf, NULL);
- elm_object_part_content_set(m->add_btn[i],
+ elm_object_part_content_set(m->addBtns[i],
MUSIC_PART_ELM_SWALLOWICON, img);
}
- elm_object_part_content_set(Layout(), btninfo[i].part, m->add_btn[i]);
+ elm_object_part_content_set(Layout(), btninfo[i].part, m->addBtns[i]);
}
- elm_object_focus_set(m->add_btn[ABTN_PLAY], EINA_TRUE);
- m->def_foc_btn = m->add_btn[ABTN_PLAY];
+ elm_object_focus_set(m->addBtns[ABTN_PLAY], EINA_TRUE);
+ m->def_foc_btn = m->addBtns[ABTN_PLAY];
}
Connect(btn, btninfo[i].type, TYPE_MOUSE_MOVE | TYPE_CLICKED | TYPE_KEY_DOWN);
elm_object_part_content_set(Layout(), btninfo[i].part, btn);
- m->select_btn[i] = btn;
+ m->selectBtns[i] = btn;
}
- elm_object_focus_set(btn, EINA_TRUE);
- m->def_foc_btn = btn;
+ elm_object_focus_set(m->selectBtns[SBTN_CANCEL], EINA_TRUE);
+ m->def_foc_btn = m->selectBtns[SBTN_CANCEL];
}
}
+void CCategorySongsLayout::SetFocus(const char *btnStr)
+{
+ ASSERT(m);
+
+ m->idlerType = IDLER_TYPE_FOCUS_MOVE_BY_USER_INPUT;
+ m->focusBtnStr = btnStr;
+ m->focusIdler = ecore_idler_add(sm_CbFocusIdler, this);
+}
+
+
void CCategorySongsLayout::t_OnShow(void)
{
ASSERT(m);
}
m_CreateSongList();
m_CreateSongsTopSection();
+
+ elm_object_focus_next_object_set(m->songlist,
+ m->addBtns[ABTN_PLAY], ELM_FOCUS_UP);
}
else if (m->depth == DEPTH_SHOW_LIST) {
if (!m_SetEdje(MUSIC_ALBUM_SONGS_LAYOUT)) {
}
m_CreateSongList();
m_CreateSongsTopSection();
+
+ elm_object_focus_next_object_set(m->songlist,
+ m->addBtns[ABTN_PLAY], ELM_FOCUS_UP);
}
else if (m->depth == DEPTH_SELECT_LIST) {
if (!m_SetEdje(MUSIC_CATEGORY_SELECTLIST_LAYOUT)) {
m_AddSelectlistButtons();
elm_object_focus_next_object_set(m->songlist,
- m->select_btn[SBTN_DONE], ELM_FOCUS_RIGHT);
+ m->selectBtns[SBTN_DONE], ELM_FOCUS_RIGHT);
+
+ elm_object_focus_next_object_set(m->songlist,
+ m->selectBtns[SBTN_DONE], ELM_FOCUS_UP);
}
elm_object_tree_focus_allow_set(m->base, EINA_FALSE);
m_RemoveFocusIdler();
- m->focus_idler = ecore_idler_add(sm_CbFocusIdler, this);
+ m->idlerType = IDLER_TYPE_LAYOUT_UPDATE;
+ m->focusIdler = ecore_idler_add(sm_CbFocusIdler, this);
}
SContentInfo *ctxtinfo = NULL;
SCategorySongsItemsInfo *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;
+ if (!strcmp(ev->keyname, KEY_LEFT)) {
+ SParcel parcel;
+ memset(&parcel, 0, sizeof(SParcel));
+ parcel.updateType = E_FOCUS_UPDATE;
+ m->vmgr->UpdateView(MUSIC_BASE_VIEW, &parcel);
}
- m->focused_item = it;
+ else if (!strcmp(ev->keyname, KEY_MENU) ||
+ !strcmp(ev->keyname, KEY_MENU_REMOTE)) {
+ 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;
- }
+ if (m->ctxtinfo) {
+ free(m->ctxtinfo);
+ m->ctxtinfo = NULL;
+ }
- ctxtinfo = (SContentInfo *)calloc(1, sizeof(*ctxtinfo));
- if (!ctxtinfo)
- return;
+ ctxtinfo = (SContentInfo *)calloc(1, sizeof(*ctxtinfo));
+ if (!ctxtinfo)
+ return;
- itinfo = m_FindItemInfoFromItem(m->it_infolist, it);
- if (!itinfo) {
- free(ctxtinfo);
- return;
- }
+ itinfo = m_FindItemInfoFromItem(m->it_infolist, it);
+ if (!itinfo) {
+ free(ctxtinfo);
+ return;
+ }
- ctxtinfo->type = CONTEXT_TYPE_SONG;
- ctxtinfo->context = itinfo->sinfo;
- ctxtinfo->cbdata = this;
- ctxtinfo->update = sm_CbCtxtUpdate;
- ctxtinfo->close = sm_CbCtxtClose;
+ ctxtinfo->type = CONTEXT_TYPE_SONG;
+ ctxtinfo->context = itinfo->sinfo;
+ ctxtinfo->cbdata = this;
+ ctxtinfo->update = sm_CbCtxtUpdate;
+ ctxtinfo->close = sm_CbCtxtClose;
- m->ctxtinfo = ctxtinfo;
+ 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");
+ 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;
memset(&parcel, 0, sizeof(SParcel));
parcel.updateType = E_FOCUS_UPDATE;
parcel.keyEvent = KEY_UP;
- parcel.prevFocusedBtn = btnText;
+ parcel.focusedBtn = btnText;
m->vmgr->UpdateView((const char *)MUSIC_BASE_VIEW, &parcel);
}
break;
tc = eina_list_count(m->it_infolist);
if (m->count == tc) {
- elm_object_text_set(m->select_btn[SBTN_SELECT_ALL],
+ elm_object_text_set(m->selectBtns[SBTN_SELECT_ALL],
_(MUSIC_TEXT_SELECT_ALL));
m->count = 0;
EINA_LIST_FOREACH(m->it_infolist, l, list_obj) {
return;
}
- elm_object_text_set(m->select_btn[SBTN_SELECT_ALL],
+ elm_object_text_set(m->selectBtns[SBTN_SELECT_ALL],
_(MUSIC_TEXT_DESELECT_ALL));
m->count = tc;
EINA_LIST_FOREACH(m->it_infolist, l, list_obj) {
E_DEPTH_SONG
};
+enum EFocusIderType {
+ IDLER_TYPE_LAYOUT_UPDATE,
+ IDLER_TYPE_FOCUS_MOVE_BY_USER_INPUT
+};
+
struct SBtnInfo {
const char *name;
const char *part;
Eina_List *it_infolist;
Elm_Gengrid_Item_Class *item_class;
Elm_Gengrid_Item_Class *songitem_class;
- Ecore_Idler *focus_idler;
+ Ecore_Idler *focusIdler;
CMusicController *mhandle;
CLayoutMgr *lmgr;
CViewMgr *vmgr;
CFolderInfo *c_finfo;
CSongInfo *c_sinfo;
SContentInfo *ctxtinfo;
- Ecore_Idler *focusBtnIdler;
- const char *focusBtnStr;
int depth;
+
+ EFocusIderType idlerType;
+ const char *focusBtnStr;
SFolderLayout() {
memset(this, 0, sizeof(SFolderLayout));
void CFolderLayout::m_OnFocusIdler(void)
{
- Elm_Object_Item *it = NULL;
+ m->focusIdler = NULL;
- m->focus_idler = NULL;
+ if (m->idlerType == IDLER_TYPE_LAYOUT_UPDATE) {
+ Elm_Object_Item *it = NULL;
- if (m->depth == E_DEPTH_SONG) {
- it = elm_gengrid_first_item_get(m->grid);
- elm_object_item_focus_set(it, EINA_TRUE);
- }
- else {
- it = m_FindItemByInfo(m->it_infolist, m->c_finfo);
- if (it) {
- elm_gengrid_item_show(it, ELM_GENGRID_ITEM_SCROLLTO_IN);
+ if (m->depth == E_DEPTH_SONG) {
+ it = elm_gengrid_first_item_get(m->grid);
elm_object_item_focus_set(it, EINA_TRUE);
}
+ else {
+ it = m_FindItemByInfo(m->it_infolist, m->c_finfo);
+ if (it) {
+ elm_gengrid_item_show(it, ELM_GENGRID_ITEM_SCROLLTO_IN);
+ elm_object_item_focus_set(it, EINA_TRUE);
+ }
+ }
}
-}
-
-
-Eina_Bool CFolderLayout::sm_CbButtonFocusIdler(void *dt)
-{
- CFolderLayout *root = (CFolderLayout *)dt;
-
- if (root)
- root->m_OnButtonFocusIdler();
-
- return ECORE_CALLBACK_CANCEL;
-}
-
-
-void CFolderLayout::m_OnButtonFocusIdler(void)
-{
- Evas_Object *focus = NULL;
-
- m->focusBtnIdler = NULL;
+ else {
+ Evas_Object *focus = NULL;
- if (!strcmp(m->focusBtnStr, MUSIC_FIRST_BTN))
- focus = m->addBtns[BTN_PLAY];
- else if (!strcmp(m->focusBtnStr, MUSIC_SECOND_BTN))
- focus = m->addBtns[BTN_NEXT];
- else // MUSIC_THIRD_BTN
- focus = m->addBtns[BTN_LAST];
+ if (!strcmp(m->focusBtnStr, MUSIC_FIRST_BTN))
+ focus = m->addBtns[BTN_PLAY];
+ else if (!strcmp(m->focusBtnStr, MUSIC_SECOND_BTN))
+ focus = m->addBtns[BTN_NEXT];
+ else // MUSIC_THIRD_BTN
+ focus = m->addBtns[BTN_LAST];
- elm_object_focus_set(focus, EINA_TRUE);
+ elm_object_focus_set(focus, EINA_TRUE);
+ }
}
else {
m->depth = E_DEPTH_SONG;
m_UpdateFolderGrid(false);
- m->focus_idler = ecore_idler_add(sm_CbFocusIdler, this);
+ m->idlerType = IDLER_TYPE_LAYOUT_UPDATE;
+ m->focusIdler = ecore_idler_add(sm_CbFocusIdler, this);
}
}
void CFolderLayout::m_RemoveFocusIdler(void)
{
- if (!m->focus_idler)
+ if (!m->focusIdler)
return;
- ecore_idler_del(m->focus_idler);
- m->focus_idler = NULL;
+ ecore_idler_del(m->focusIdler);
+ m->focusIdler = NULL;
}
}
-void CFolderLayout::SetButtonFocus(const char *btnStr)
+void CFolderLayout::SetFocus(const char *btnStr)
{
ASSERT(m);
m->focusBtnStr = btnStr;
- m->focusBtnIdler = ecore_idler_add(sm_CbButtonFocusIdler, this);
+ m->idlerType = IDLER_TYPE_FOCUS_MOVE_BY_USER_INPUT;
+ m->focusIdler = ecore_idler_add(sm_CbFocusIdler, this);
}
m->depth = E_DEPTH_FOLDER;
m_UpdateFolderGrid(false);
m_RemoveFocusIdler();
- m->focus_idler = ecore_idler_add(sm_CbFocusIdler, this);
+ m->idlerType = IDLER_TYPE_LAYOUT_UPDATE;
+ m->focusIdler = ecore_idler_add(sm_CbFocusIdler, this);
}
else {
SParcel parcel;
memset(&parcel, 0, sizeof(SParcel));
parcel.updateType = E_FOCUS_UPDATE;
parcel.keyEvent = KEY_UP;
- parcel.prevFocusedBtn = btnText;
+ parcel.focusedBtn = btnText;
m->vmgr->UpdateView((const char *)MUSIC_BASE_VIEW, &parcel);
}
break;