dbg.h file is removed.
[profile/tv/apps/native/source.git] / src / view / allsource_view.cpp
1 /*
2  * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 #include <aul.h>
18 #include <AppCommon.h>
19 #include "source_mgr.h"
20 #include "util.h"
21 #include "def.h"
22 #include "allsource_view.h"
23 #include "plugged_layout.h"
24
25 #define TEXT_PLUGGED "PLUGGED"
26 #define LAYOUT_PLUGGED "LAYOUT_PLUGGED"
27
28 enum EObjectType {
29         ALL_PLUG_BTN = 0,
30 };
31
32 enum EFocusArea {
33         FOCUS_MENU_BTN = 0,
34         FOCUS_CONTENT_AREA
35 };
36
37 struct SAllSourceView {
38         Evas_Object *base;
39         Evas_Object *plug_btn;
40         Evas_Object *focus_btn;
41         Evas_Object *plug_layout;
42
43         CViewMgr *vmgr;
44
45         enum launch_mode mode;
46         int focus_area;
47
48         CLayoutMgr *pLayoutMgr;
49
50         CPluggedLayout *pPluggedLayout;
51
52         SSigCallbackPair *sigCb;
53
54         SAllSourceView() {
55                 memset(this, 0, sizeof(SAllSourceView));
56         }
57 };
58
59 Evas_Object *CAllSourceView::m_AddLayout(Evas_Object *win)
60 {
61         Evas_Object *base;
62
63         if (!win)
64                 return NULL;
65
66         base = elm_layout_add(win);
67         if (!base)
68                 return NULL;
69
70         elm_layout_file_set(base, EDJ_FILE, GRP_ALLSRC);
71         elm_object_part_text_set(base, PART_TITLE_STR, _("SOURCE"));
72
73         evas_object_size_hint_weight_set(base,
74                         EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
75
76         evas_object_show(base);
77
78         return base;
79 }
80
81 Evas_Object *CAllSourceView::m_AddBtn(const char *style, const char *str)
82 {
83         Evas_Object *btn;
84
85         btn = elm_button_add(m->base);
86         if (!btn) {
87                 _ERR("add button error.");
88                 return NULL;
89         }
90
91         elm_object_style_set(btn, style);
92         elm_object_part_text_set(btn, PART_MENU_BTN_TEXT, str);
93
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);
98
99         evas_object_show(btn);
100
101         return btn;
102 }
103
104 bool CAllSourceView::m_AddMenuArea(void)
105 {
106         m->plug_btn = m_AddBtn(BTN_STYLE_PLUG, _(TEXT_PLUGGED));
107         if (!m->plug_btn) {
108                 _ERR("Add plug_button failed.");
109                 return false;
110         }
111
112         elm_object_part_content_set(m->base, PART_MENU_PLUGGED, m->plug_btn);
113
114         Connect(m->plug_btn, ALL_PLUG_BTN, TYPE_KEY_DOWN | TYPE_MOUSE_MOVE | TYPE_FOCUSED);
115
116         m->focus_btn = m->plug_btn;
117
118         return true;
119 }
120
121 SSigCallbackPair *CAllSourceView::m_CreateSigCbPair(void)
122 {
123         ASSERT(m);
124
125         SSigCallbackPair *scb = new SSigCallbackPair;
126         if (!scb)
127                 return NULL;
128
129         scb->cb = sm_CbGetSignalFromLayout;
130         scb->cookie = m;
131
132         m->sigCb = scb;
133
134         return scb;
135 }
136
137 void CAllSourceView::sm_CbGetSignalFromLayout(void *cookie, int signal)
138 {
139         SAllSourceView *m = (SAllSourceView *)cookie;
140
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;
148         }
149 }
150
151 void CAllSourceView::sm_CbUpdateSrcList(void *cookie, void *data, enum update_ui type)
152 {
153         SAllSourceView *m = (SAllSourceView *)cookie;
154
155         if (type == SRC_PLUG_ADD_ONE
156                         || type == SRC_PLUG_DEL_ONE
157                         || type == SRC_UPDATE_ALL)
158                 m->pPluggedLayout->Update(data, type);
159 }
160
161 Evas_Object *CAllSourceView::Base(void)
162 {
163         ASSERT(m);
164
165         return m->base;
166 }
167
168 bool CAllSourceView::Create(void *data)
169 {
170         ASSERT(!m);
171
172         Evas_Object *win = NULL;
173         CViewMgr *vmgr;
174
175         vmgr = CViewMgr::GetInstance();
176         ASSERT(vmgr);
177
178         _CREATE_BEGIN
179         {
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());
191                 _WHEN_SUCCESS{
192                         m->vmgr = vmgr;
193                         m->mode = (launch_mode)(size_t)data;
194                         CSourceMgr::GetInstance()->Refresh();
195                         CBaseView::Create(NULL);
196                 }
197                 _CHECK_FAIL{}
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; }
207                 _CHECK_FAIL{}
208         } _CREATE_END_AND_CATCH{ return false; }
209
210         return true;
211 }
212
213 void CAllSourceView::Destroy(void)
214 {
215         ASSERT(m);
216
217         CBaseView::Destroy();
218
219         m->pLayoutMgr->RemoveLayout(m->pPluggedLayout);
220         m->pPluggedLayout->Destroy();
221         delete m->pPluggedLayout;
222
223         m->pLayoutMgr->Destroy();
224         delete m->pLayoutMgr;
225
226         delete m->sigCb;
227
228         CSourceMgr::Finalize();
229
230         delete m;
231         m = NULL;
232 }
233
234 void CAllSourceView::t_OnShow(void)
235 {
236         ASSERT(m);
237
238         switch (m->focus_area) {
239         case FOCUS_MENU_BTN:
240                 elm_object_focus_set(m->focus_btn, EINA_TRUE);
241                 break;
242         case FOCUS_CONTENT_AREA:
243                 m->pPluggedLayout->Focus();
244                 break;
245         default:
246                 break;
247         }
248 }
249
250 void CAllSourceView::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
251 {
252         switch (id) {
253         case ALL_PLUG_BTN:
254                 if (!strcmp(ev->keyname, KEY_BACK)
255                         || !strcmp(ev->keyname, KEY_BACK_REMOTE))
256                         app_efl_exit();
257                 else if (!strcmp(ev->keyname, KEY_ENTER)
258                         || !strcmp(ev->keyname, KEY_ENTER_REMOTE))
259                         m->pPluggedLayout->Focus();
260                 break;
261         default:
262                 break;
263         }
264 }
265
266 void CAllSourceView::OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev)
267 {
268         switch (id) {
269         case ALL_PLUG_BTN:
270                 if (!elm_object_focus_get(obj))
271                         elm_object_focus_set(obj, EINA_TRUE);
272                 break;
273         default:
274                 break;
275         }
276 }
277
278 void CAllSourceView::OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
279 {
280         switch (id) {
281         case ALL_PLUG_BTN:
282                 m->focus_btn = obj;
283                 m->pLayoutMgr->Show(LAYOUT_PLUGGED);
284                 break;
285         default:
286                 break;
287         }
288 }