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.
17 #include <Elementary.h>
23 #include "AppCommon.h"
26 #include "BaseLayout.h"
27 #include "LayoutMgr.h"
28 #include "InputHandler.h"
29 #include "source_mgr.h"
30 #include "menu_view.h"
32 #include "allsource_view.h"
33 #include "nearby_layout.h"
36 #define NEARBY_DATA "nearby_data"
38 #define SET_UP_NETWORK "Set up network"
39 #define NET_WORK_SET "Network Setting"
41 #define NO_SRC_TEXT_LINE1 "No nearby source"
42 #define NO_SRC_TEXT_LINE2 "Add any nearby sources, set up network configuration"
43 #define NO_SRC_TEXT_LINE3 "Wi-Fi ON | Wi-Fi Direct ON"
47 #define SETTING_APP "org.tizen.settings-tv-ref"
48 #define SETTING_ITEM "settings-item"
49 #define SETTING_NETWORK "network-settings"
57 struct SSigCallbackPair {
58 void (*cb)(void *cookie, int sig);
62 struct SNearbyLayout {
65 Evas_Object *utility_pb;
66 Evas_Object *utility_btn;
67 Elm_Object_Item *focus_it;
68 Elm_Object_Item *del_it;
73 SSigCallbackPair *SigCb;
76 memset(this, 0, sizeof(SNearbyLayout));
80 void CNearbyLayout::m_LaunchSettingApp(void)
87 _ERR("create bundle failed.");
91 err = bundle_add(b, SETTING_ITEM, SETTING_NETWORK);
93 _ERR("add bundle failed.");
98 err = aul_launch_app(SETTING_APP, b);
100 _ERR("launch settings failed.");
108 void CNearbyLayout::m_AddSetNetworkButton(void)
112 btn = util_add_btn(Layout(), BTN_STYLE_SET_UP_NETWORK);
114 _ERR("Add network button failed");
118 elm_object_text_set(btn, _(SET_UP_NETWORK));
119 elm_object_part_content_set(Layout(), PART_BUTTON, btn);
121 Connect(btn, NEARBY_BTN_LAYOUT, TYPE_KEY_DOWN | TYPE_MOUSE_MOVE | TYPE_FOCUSED);
124 void CNearbyLayout::m_AddNoSrcUtility(void)
126 Evas_Object *pb, *btn;
131 pb = elm_progressbar_add(m->base);
135 elm_object_style_set(pb, PB_STYLE_SRC_LOAD);
136 elm_object_part_content_set(m->base, PART_UTILITY_LOADING, pb);
137 elm_progressbar_pulse(m->utility_pb, EINA_TRUE);
138 evas_object_show(m->utility_pb);
140 /*TODO:to add utility button*/
141 btn = util_add_btn(m->base, BTN_STYLE_NETWORK_SET);
146 elm_object_text_set(btn, _(NET_WORK_SET));
147 elm_object_part_content_set(m->base, PART_UTILITY_BUTTON, btn);
149 Connect(btn, NEARBY_BTN_TOP, TYPE_KEY_DOWN | TYPE_MOUSE_MOVE | TYPE_FOCUSED);
152 m->utility_btn = btn;
155 void CNearbyLayout::m_DelNoSrcUtility(void)
157 if (m->utility_btn) {
158 evas_object_del(m->utility_btn);
159 m->utility_btn = NULL;
163 evas_object_del(m->utility_pb);
164 m->utility_pb = NULL;
168 void CNearbyLayout::m_DrawNoSrcUtility(void)
170 if (m->list_count > 0)
176 void CNearbyLayout::m_DrawNoContentArea(void)
178 elm_object_part_text_set(Layout(), PART_NO_SRC_TEXT_LINE1,
179 _(NO_SRC_TEXT_LINE1));
180 elm_object_part_text_set(Layout(), PART_NO_SRC_TEXT_LINE2,
181 _(NO_SRC_TEXT_LINE2));
182 elm_object_part_text_set(Layout(), PART_NO_SRC_TEXT_LINE3,
183 _(NO_SRC_TEXT_LINE3));
185 elm_object_part_content_unset(Layout(), PART_CONTENT_CONTENT);
186 evas_object_hide(m->grid);
188 m_AddSetNetworkButton();
190 m->SigCb->cb(m->SigCb->cookie, E_RETURN);
193 void CNearbyLayout::m_DrawContentArea(void)
195 elm_object_part_text_set(Layout(), PART_NO_SRC_TEXT_LINE1, "");
196 elm_object_part_text_set(Layout(), PART_NO_SRC_TEXT_LINE2, "");
197 elm_object_part_text_set(Layout(), PART_NO_SRC_TEXT_LINE3, "");
198 elm_object_part_content_unset(Layout(), PART_BUTTON);
200 elm_object_part_content_set(Layout(), PART_CONTENT_CONTENT, m->grid);
201 evas_object_show(m->grid);
204 Evas_Object *CNearbyLayout::m_DrawGengrid(Evas_Object *layout)
208 grid = util_add_grid(layout, ITEM_W, ITEM_H);
212 Connect(grid, NEARBY_GRID, TYPE_KEY_DOWN | TYPE_MOUSE_MOVE | TYPE_FOCUSED);
217 bool CNearbyLayout::SetSendSigCallback(void (*cb)(void *cookie, int sig), void *cookie)
221 SSigCallbackPair *rcb = new SSigCallbackPair;
226 rcb->cookie = cookie;
233 bool CNearbyLayout::Create(CLayoutMgr *lmgr, void *data)
244 m = new SNearbyLayout;
248 m->base = lmgr->Base();
255 layout = util_add_layout(m->base, GRP_NEARBY_CONTENT);
257 _ERR("Add layout failed");
263 m->grid = m_DrawGengrid(layout);
265 _ERR("Add gengrid failed");
268 evas_object_del(layout);
272 vmgr = CViewMgr::GetInstance();
273 srcmgr = CSourceMgr::GetInstance();
278 evas_object_data_set(m->base, NEARBY_DATA, m);
280 elm_object_part_content_set(layout, PART_CONTENT_CONTENT, m->grid);
282 CBaseLayout::Create(layout);
287 void CNearbyLayout::t_OnShow(void)
291 CBaseLayout::t_OnShow();
293 elm_object_part_content_set(m->base, PART_CONTENT, Layout());
295 m_DrawNoSrcUtility();
298 void CNearbyLayout::t_OnHide(void)
302 CBaseLayout::t_OnHide();
304 elm_object_part_content_unset(m->base, PART_CONTENT);
309 void CNearbyLayout::Destroy(void)
313 evas_object_del(Layout());
315 CBaseLayout::Destroy();
321 Eina_Bool CNearbyLayout::sm_CbTimerDelItem(void *data)
323 CNearbyLayout *root = (CNearbyLayout *)data;
327 root->m_TimerDelItem();
332 void CNearbyLayout::m_TimerDelItem(void)
334 Elm_Object_Item *prev;
335 Elm_Object_Item *next;
340 prev = elm_gengrid_item_prev_get(m->del_it);
341 next = elm_gengrid_item_prev_get(m->del_it);
343 elm_object_item_data_set(m->del_it, NULL);
344 elm_object_item_del(m->del_it);
347 m_DrawNoContentArea();
348 else if (m->del_it == m->focus_it) {
354 elm_object_item_focus_set(m->focus_it, EINA_TRUE);
360 void CNearbyLayout::Update(void *data, enum update_ui type)
368 CSourceInfo *si_data;
373 /*TODO:there is only nearby connected source list*/
374 list = srcmgr->NearbyConnList();
375 m->list_count = eina_list_count(list);
377 if (type == SRC_PLUG_ADD_ONE) {
378 si_data = (CSourceInfo *)data;
379 util_add_item(m->grid, si_data);
381 if (m->list_count >= 1)
383 } else if (type == SRC_PLUG_DEL_ONE) {
384 si_data = (CSourceInfo *)data;
385 m->del_it = (Elm_Object_Item*)si_data->Data();
386 si_data->SetData(NULL);
388 timer = ecore_timer_add(DEL_IT_TIME, sm_CbTimerDelItem, m);
389 elm_object_item_data_set(m->del_it, timer);
390 util_dim_item(m->del_it);
391 } else if (type == SRC_UPDATE_ALL) {
392 if (m->list_count == 0) {
393 m_DrawNoContentArea();
398 elm_gengrid_clear(m->grid);
400 EINA_LIST_FOREACH(list, l, obj) {
401 si = (CSourceInfo *)obj;
402 util_add_item(m->grid, si);
407 void CNearbyLayout::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
413 si = m->srcmgr->SourceInfoByData(m->focus_it);
417 if (!strcmp(ev->keyname, KEY_MENU)
418 || !strcmp(ev->keyname, KEY_MENU_REMOTE))
419 m->vmgr->PushView(MENU_VIEW, si);
423 case NEARBY_BTN_LAYOUT:
427 if (!strcmp(ev->keyname, KEY_ENTER)
428 || !strcmp(ev->keyname, KEY_ENTER_REMOTE))
429 m_LaunchSettingApp();
437 void CNearbyLayout::OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev)
443 it = elm_gengrid_at_xy_item_get(obj, ev->cur.canvas.x,
444 ev->cur.canvas.y, NULL, NULL);
448 if (elm_object_item_focus_get(it))
451 elm_object_item_focus_set(it, EINA_TRUE);
453 m->SigCb->cb(m->SigCb->cookie, E_HIGHLIGHT);
457 case NEARBY_BTN_LAYOUT:
458 if (elm_object_focus_get(obj))
461 elm_object_focus_set(obj, EINA_TRUE);
469 void CNearbyLayout::OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
473 m->focus_it = (Elm_Object_Item*)item;
475 m->SigCb->cb(m->SigCb->cookie, E_HIGHLIGHT);
479 case NEARBY_BTN_LAYOUT:
480 m->SigCb->cb(m->SigCb->cookie, E_HIGHLIGHT);