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.
18 #include <AppCommon.h>
19 #include "source_mgr.h"
22 #include "menu_view.h"
25 #define TEXT_SEL _("SELECT")
26 #define TEXT_RM _("REMOVE")
28 #define STYLE_MENU_SEL "menu_ctx_sel"
29 #define STYLE_MENU_RM "menu_ctx_rm"
33 #define EXTERNAL_ROW 1
51 Evas_Object *btn[MAX_BTN_NUM];
52 Evas_Object *focus_btn;
57 Evas_Object *CMenuView::m_AddLayout(Evas_Object *win)
64 base = util_add_layout(win, GRP_MENU);
68 evas_object_show(base);
73 Evas_Object *CMenuView::m_AddBtn(Evas_Object *parent,
80 if (!parent || !style || !str)
83 btn = elm_button_add(parent);
85 _ERR("add button error.");
89 elm_object_style_set(btn, style);
90 elm_object_part_text_set(btn, PART_MENU_BTN_TEXT, str);
91 evas_object_size_hint_weight_set(btn,
92 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
93 evas_object_size_hint_align_set(btn,
94 EVAS_HINT_FILL, EVAS_HINT_FILL);
96 evas_object_show(btn);
97 elm_object_part_content_set(parent, part, btn);
102 Evas_Object *CMenuView::m_AddBtnByIndex(unsigned int row, unsigned int col)
105 unsigned int bp_arr_row;
106 struct bp_property bp_arr[][MAX_BTN_NUM] = {
133 bp_arr_row = sizeof(bp_arr) /
134 (sizeof(struct bp_property) * MAX_BTN_NUM);
136 if (row >= bp_arr_row || col >= MAX_BTN_NUM)
139 btn = m_AddBtn(m->base, bp_arr[row][col].part,
140 bp_arr[row][col].style,
141 bp_arr[row][col].text);
148 bool CMenuView::m_AddUsbMenuBtn(void)
150 Evas_Object *sel_btn, *rm_btn;
152 sel_btn = m_AddBtnByIndex(USB_ROW, SEL_COL);
154 _ERR("Add usb select button failed.");
158 Connect(sel_btn, MENU_SELECT_BTN, TYPE_KEY_DOWN | TYPE_MOUSE_DOWN
159 | TYPE_MOUSE_MOVE | TYPE_FOCUSED);
161 elm_object_focus_next_object_set(sel_btn, sel_btn, ELM_FOCUS_UP);
162 elm_object_focus_next_object_set(sel_btn, sel_btn, ELM_FOCUS_DOWN);
163 elm_object_focus_next_object_set(sel_btn, sel_btn, ELM_FOCUS_LEFT);
165 rm_btn = m_AddBtnByIndex(USB_ROW, RM_COL);
167 _ERR("Add usb remove button failed.");
168 evas_object_del(sel_btn);
172 Connect(rm_btn, MENU_REMOVE_BTN, TYPE_KEY_DOWN | TYPE_MOUSE_DOWN
173 | TYPE_MOUSE_MOVE | TYPE_FOCUSED);
175 elm_object_focus_next_object_set(rm_btn, rm_btn, ELM_FOCUS_UP);
176 elm_object_focus_next_object_set(rm_btn, rm_btn, ELM_FOCUS_DOWN);
177 elm_object_focus_next_object_set(rm_btn, rm_btn, ELM_FOCUS_RIGHT);
179 elm_object_focus_set(sel_btn, EINA_TRUE);
184 bool CMenuView::m_AddExternalMenuBtn(void)
186 Evas_Object *sel_btn;
188 sel_btn = m_AddBtnByIndex(EXTERNAL_ROW, SEL_COL);
190 _ERR("Add wifi select button failed.");
194 Connect(sel_btn, MENU_SELECT_BTN, TYPE_KEY_DOWN | TYPE_MOUSE_DOWN
195 | TYPE_MOUSE_MOVE | TYPE_FOCUSED);
197 elm_object_focus_next_object_set(sel_btn, sel_btn, ELM_FOCUS_UP);
198 elm_object_focus_next_object_set(sel_btn, sel_btn, ELM_FOCUS_DOWN);
199 elm_object_focus_next_object_set(sel_btn, sel_btn, ELM_FOCUS_LEFT);
200 elm_object_focus_next_object_set(sel_btn, sel_btn, ELM_FOCUS_RIGHT);
202 elm_object_focus_set(sel_btn, EINA_TRUE);
207 bool CMenuView::m_AddMenuBtn(void)
209 switch (m->node->Type()) {
211 return m_AddUsbMenuBtn();
213 return m_AddExternalMenuBtn();
221 bool CMenuView::m_AddFocusItem(void)
226 elm_object_part_text_set(m->base,
227 PART_FOCUS_ITEM_TEXT_NAME,
229 elm_object_part_text_set(m->base,
230 PART_FOCUS_ITEM_TEXT_TYPE,
231 _(m->node->TypeName()));
233 path = m->node->IconPath();
237 img = elm_image_add(m->base);
241 elm_image_file_set(img, path, NULL);
242 evas_object_show(img);
243 elm_object_part_content_set(m->base, PART_FOCUS_ITEM_IMG, img);
249 Evas_Object *CMenuView::Base(void)
257 bool CMenuView::Create(void *data)
262 Evas_Object *win, *base;
263 CViewMgr *vmgr = CViewMgr::GetInstance();
266 win = vmgr->Window();
270 base = m_AddLayout(win);
276 _ERR("calloc private data failed.");
277 evas_object_del(base);
280 memset(m, 0, sizeof(SMenuView));
283 m->node = (CSourceInfo *)data;
286 if (!m_AddFocusItem()) {
287 _ERR("add focus item failed.");
288 evas_object_del(base);
294 if (!m_AddMenuBtn()) {
295 _ERR("add menu button failed.");
296 evas_object_del(base);
302 Connect(base, MENU_BASE, TYPE_KEY_DOWN);
304 CBaseView::Create(NULL);
309 void CMenuView::Destroy(void)
313 CBaseView::Destroy();
319 void CMenuView::t_OnShow(void)
323 evas_object_show(m->base);
328 void CMenuView::t_OnHide(void)
332 evas_object_hide(m->base);
335 void CMenuView::t_OnResume(void)
339 elm_object_focus_set(m->focus_btn, EINA_TRUE);
342 void CMenuView::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
349 if (!strcmp(ev->keyname, KEY_BACK)
350 || !strcmp(ev->keyname, KEY_BACK_REMOTE))
354 case MENU_SELECT_BTN:
358 if (!strcmp(ev->keyname, KEY_ENTER)
359 || !strcmp(ev->keyname, KEY_ENTER_REMOTE))
363 case MENU_REMOVE_BTN:
367 if (!strcmp(ev->keyname, KEY_ENTER)
368 || !strcmp(ev->keyname, KEY_ENTER_REMOTE)) {
369 /* TODO call usb remove */
379 void CMenuView::OnMouseDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Down *ev)
382 case MENU_SELECT_BTN:
385 case MENU_REMOVE_BTN:
393 void CMenuView::OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev)
396 case MENU_SELECT_BTN:
397 case MENU_REMOVE_BTN:
398 if (!elm_object_focus_get(obj))
399 elm_object_focus_set(obj, EINA_TRUE);
407 void CMenuView::OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
410 case MENU_SELECT_BTN:
411 case MENU_REMOVE_BTN: