private:
struct SMenuView* m;
+protected:
+ virtual void t_OnShow(void);
+ virtual void t_OnHide(void);
+ virtual void t_OnResume(void);
+;
private:
Evas_Object *m_AddLayout(Evas_Object *win);
Evas_Object *m_AddBtn(Evas_Object *parent, const char *part,
void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
void OnMouseDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Down *ev);
void OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev);
+ void OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item);
};
ALL_PLUG_BTN = 0,
};
+enum EFocusArea {
+ FOCUS_MENU_BTN = 0,
+ FOCUS_CONTENT_AREA
+};
+
struct SAllSourceView {
Evas_Object *base;
Evas_Object *plug_btn;
Evas_Object *focus_btn;
Evas_Object *plug_layout;
+
CViewMgr *vmgr;
+
enum launch_mode mode;
+ int focus_area;
CLayoutMgr *pLayoutMgr;
Connect(m->plug_btn, ALL_PLUG_BTN, TYPE_KEY_DOWN | TYPE_MOUSE_MOVE | TYPE_FOCUSED);
+ m->focus_btn = m->plug_btn;
+
return true;
}
{
SAllSourceView *m = (SAllSourceView *)cookie;
- if (signal == E_HIGHLIGHT)
+ if (signal == E_HIGHLIGHT) {
elm_object_signal_emit(m->focus_btn,
SIG_ELM_ACTION_HIGHLIGHT, SIG_ELM);
- else if (signal == E_RETURN)
+ m->focus_area = FOCUS_CONTENT_AREA;
+ } else if (signal == E_RETURN) {
elm_object_focus_set(m->focus_btn, EINA_TRUE);
+ m->focus_area = FOCUS_MENU_BTN;
+ }
}
void CAllSourceView::sm_CbUpdateSrcList(void *cookie, void *data, enum update_ui type)
{
ASSERT(m);
- Evas_Object *btn;
-
- btn = m->plug_btn;
-
- elm_object_focus_set(btn, EINA_TRUE);
+ switch (m->focus_area) {
+ case FOCUS_MENU_BTN:
+ elm_object_focus_set(m->focus_btn, EINA_TRUE);
+ break;
+ case FOCUS_CONTENT_AREA:
+ m->pPluggedLayout->Focus();
+ break;
+ default:
+ break;
+ }
}
void CAllSourceView::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
#include "menu_view.h"
#include "external.h"
-#define PRIV "priv"
-
#define TEXT_SEL _("SELECT")
#define TEXT_RM _("REMOVE")
struct SMenuView {
Evas_Object *base;
Evas_Object *btn[MAX_BTN_NUM];
+ Evas_Object *focus_btn;
CSourceInfo *node;
CViewMgr *vmgr;
};
return false;
}
- Connect(sel_btn, MENU_SELECT_BTN, TYPE_KEY_DOWN | TYPE_MOUSE_DOWN | TYPE_MOUSE_MOVE);
+ Connect(sel_btn, MENU_SELECT_BTN, TYPE_KEY_DOWN | TYPE_MOUSE_DOWN
+ | TYPE_MOUSE_MOVE | TYPE_FOCUSED);
+
+ elm_object_focus_next_object_set(sel_btn, sel_btn, ELM_FOCUS_UP);
+ elm_object_focus_next_object_set(sel_btn, sel_btn, ELM_FOCUS_DOWN);
+ elm_object_focus_next_object_set(sel_btn, sel_btn, ELM_FOCUS_LEFT);
rm_btn = m_AddBtnByIndex(USB_ROW, RM_COL);
if (!rm_btn) {
return false;
}
- Connect(rm_btn, MENU_REMOVE_BTN, TYPE_KEY_DOWN | TYPE_MOUSE_DOWN | TYPE_MOUSE_MOVE);
+ Connect(rm_btn, MENU_REMOVE_BTN, TYPE_KEY_DOWN | TYPE_MOUSE_DOWN
+ | TYPE_MOUSE_MOVE | TYPE_FOCUSED);
+
+ elm_object_focus_next_object_set(rm_btn, rm_btn, ELM_FOCUS_UP);
+ elm_object_focus_next_object_set(rm_btn, rm_btn, ELM_FOCUS_DOWN);
+ elm_object_focus_next_object_set(rm_btn, rm_btn, ELM_FOCUS_RIGHT);
+
+ elm_object_focus_set(sel_btn, EINA_TRUE);
return true;
}
return false;
}
- Connect(sel_btn, MENU_SELECT_BTN, TYPE_KEY_DOWN | TYPE_MOUSE_DOWN | TYPE_MOUSE_MOVE);
+ Connect(sel_btn, MENU_SELECT_BTN, TYPE_KEY_DOWN | TYPE_MOUSE_DOWN
+ | TYPE_MOUSE_MOVE | TYPE_FOCUSED);
+
+ elm_object_focus_next_object_set(sel_btn, sel_btn, ELM_FOCUS_UP);
+ elm_object_focus_next_object_set(sel_btn, sel_btn, ELM_FOCUS_DOWN);
+ elm_object_focus_next_object_set(sel_btn, sel_btn, ELM_FOCUS_LEFT);
+ elm_object_focus_next_object_set(sel_btn, sel_btn, ELM_FOCUS_RIGHT);
+
+ elm_object_focus_set(sel_btn, EINA_TRUE);
return true;
}
m->base = base;
m->node = (CSourceInfo *)data;
m->vmgr = vmgr;
- evas_object_data_set(base, PRIV, m);
if (!m_AddFocusItem()) {
_ERR("add focus item failed.");
m = NULL;
}
+void CMenuView::t_OnShow(void)
+{
+ ASSERT(m);
+
+ evas_object_show(m->base);
+
+ t_OnResume();
+}
+
+void CMenuView::t_OnHide(void)
+{
+ ASSERT(m);
+
+ evas_object_hide(m->base);
+}
+
+void CMenuView::t_OnResume(void)
+{
+ ASSERT(m);
+
+ elm_object_focus_set(m->focus_btn, EINA_TRUE);
+}
+
void CMenuView::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
{
switch (id) {
break;
}
}
+
+void CMenuView::OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
+{
+ switch (id) {
+ case MENU_SELECT_BTN:
+ case MENU_REMOVE_BTN:
+ m->focus_btn = obj;
+ break;
+ default:
+ break;
+ }
+}