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 "allsource_view.h"
23 #include "plugged_layout.h"
25 #define TEXT_PLUGGED "PLUGGED"
26 #define LAYOUT_PLUGGED "LAYOUT_PLUGGED"
37 struct SAllSourceView {
39 Evas_Object *plug_btn;
40 Evas_Object *focus_btn;
41 Evas_Object *plug_layout;
45 enum launch_mode mode;
48 CLayoutMgr *pLayoutMgr;
50 CPluggedLayout *pPluggedLayout;
52 SSigCallbackPair *sigCb;
55 memset(this, 0, sizeof(SAllSourceView));
59 Evas_Object *CAllSourceView::m_AddLayout(Evas_Object *win)
66 base = elm_layout_add(win);
70 elm_layout_file_set(base, EDJ_FILE, GRP_ALLSRC);
71 elm_object_part_text_set(base, PART_TITLE_STR, _("SOURCE"));
73 evas_object_size_hint_weight_set(base,
74 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
76 evas_object_show(base);
81 Evas_Object *CAllSourceView::m_AddBtn(const char *style, const char *str)
85 btn = elm_button_add(m->base);
87 _ERR("add button error.");
91 elm_object_style_set(btn, style);
92 elm_object_part_text_set(btn, PART_MENU_BTN_TEXT, str);
94 evas_object_size_hint_weight_set(btn,
95 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
96 evas_object_size_hint_align_set(btn,
97 EVAS_HINT_FILL, EVAS_HINT_FILL);
99 evas_object_show(btn);
104 bool CAllSourceView::m_AddMenuArea(void)
106 m->plug_btn = m_AddBtn(BTN_STYLE_PLUG, _(TEXT_PLUGGED));
108 _ERR("Add plug_button failed.");
112 elm_object_part_content_set(m->base, PART_MENU_PLUGGED, m->plug_btn);
114 Connect(m->plug_btn, ALL_PLUG_BTN, TYPE_KEY_DOWN | TYPE_MOUSE_MOVE | TYPE_FOCUSED);
116 m->focus_btn = m->plug_btn;
121 SSigCallbackPair *CAllSourceView::m_CreateSigCbPair(void)
125 SSigCallbackPair *scb = new SSigCallbackPair;
129 scb->cb = sm_CbGetSignalFromLayout;
137 void CAllSourceView::sm_CbGetSignalFromLayout(void *cookie, int signal)
139 SAllSourceView *m = (SAllSourceView *)cookie;
141 if (signal == E_HIGHLIGHT) {
142 elm_object_signal_emit(m->focus_btn,
143 SIG_ELM_ACTION_HIGHLIGHT, SIG_ELM);
144 m->focus_area = FOCUS_CONTENT_AREA;
145 } else if (signal == E_RETURN) {
146 elm_object_focus_set(m->focus_btn, EINA_TRUE);
147 m->focus_area = FOCUS_MENU_BTN;
151 void CAllSourceView::sm_CbUpdateSrcList(void *cookie, void *data, enum update_ui type)
153 SAllSourceView *m = (SAllSourceView *)cookie;
155 if (type == SRC_PLUG_ADD_ONE
156 || type == SRC_PLUG_DEL_ONE
157 || type == SRC_UPDATE_ALL)
158 m->pPluggedLayout->Update(data, type);
161 Evas_Object *CAllSourceView::Base(void)
168 bool CAllSourceView::Create(void *data)
172 Evas_Object *win = NULL;
175 vmgr = CViewMgr::GetInstance();
180 _CHECK(win = vmgr->Window());
181 _CHECK(m = new SAllSourceView);
182 _CHECK(m->base = m_AddLayout(win));
183 _CHECK(m->sigCb = m_CreateSigCbPair());
184 _CHECK(CSourceMgr::Initialize(sm_CbUpdateSrcList, m));
185 _CHECK(m->pLayoutMgr = new CLayoutMgr);
186 _CHECK(m->pLayoutMgr->Create(m->base, NULL));
187 _CHECK(m->pPluggedLayout = new CPluggedLayout(LAYOUT_PLUGGED));
188 _CHECK(m->pPluggedLayout->Create(m->pLayoutMgr, m->sigCb));
189 _CHECK(m->pLayoutMgr->AddLayout(m->pPluggedLayout));
190 _CHECK(m_AddMenuArea());
193 m->mode = (launch_mode)(size_t)data;
194 CSourceMgr::GetInstance()->Refresh();
195 CBaseView::Create(NULL);
198 _CHECK_FAIL{ m->pLayoutMgr->RemoveLayout(m->pPluggedLayout); }
199 _CHECK_FAIL{ m->pPluggedLayout->Destroy(); }
200 _CHECK_FAIL{ delete m->pPluggedLayout; }
201 _CHECK_FAIL{ m->pLayoutMgr->Destroy(); }
202 _CHECK_FAIL{ delete m->pLayoutMgr; }
203 _CHECK_FAIL{ CSourceMgr::Finalize(); }
204 _CHECK_FAIL{ delete m->sigCb; }
205 _CHECK_FAIL{ evas_object_del(m->base); }
206 _CHECK_FAIL{ delete m; m = NULL; }
208 } _CREATE_END_AND_CATCH{ return false; }
213 void CAllSourceView::Destroy(void)
217 CBaseView::Destroy();
219 m->pLayoutMgr->RemoveLayout(m->pPluggedLayout);
220 m->pPluggedLayout->Destroy();
221 delete m->pPluggedLayout;
223 m->pLayoutMgr->Destroy();
224 delete m->pLayoutMgr;
228 CSourceMgr::Finalize();
234 void CAllSourceView::t_OnShow(void)
238 switch (m->focus_area) {
240 elm_object_focus_set(m->focus_btn, EINA_TRUE);
242 case FOCUS_CONTENT_AREA:
243 m->pPluggedLayout->Focus();
250 void CAllSourceView::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
254 if (!strcmp(ev->keyname, KEY_BACK)
255 || !strcmp(ev->keyname, KEY_BACK_REMOTE))
257 else if (!strcmp(ev->keyname, KEY_ENTER)
258 || !strcmp(ev->keyname, KEY_ENTER_REMOTE))
259 m->pPluggedLayout->Focus();
266 void CAllSourceView::OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev)
270 if (!elm_object_focus_get(obj))
271 elm_object_focus_set(obj, EINA_TRUE);
278 void CAllSourceView::OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
283 m->pLayoutMgr->Show(LAYOUT_PLUGGED);