dbg.h file is removed.
[profile/tv/apps/native/filebrowser.git] / src / views / BaseView / FbBaseView.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 <Ecore.h>
18 #include <aul.h>
19 #include "define.h"
20 #include "common.h"
21
22 #include <AppCommon.h>
23 #include "FbBaseView.h"
24 #include "i18n.h"
25 #include "Info.h"
26 #include "Popup.h"
27 #include "SourceCtxPopup.h"
28 #include "SortCtxPopup.h"
29 #include "FbAllLayout.h"
30 #include "FbPhotoLayout.h"
31 #include "FbVideoLayout.h"
32 #include "FbMusicLayout.h"
33
34 #define TOTAL_GROUP_BTNS        4
35 #define TOTAL_TOP_BTNS          2
36 #define TOTAL_UPDATE_CALLBACKS  2
37 #define PARAM_URI               "uri"
38 #define PARAM_SOURCE            "source"
39
40 struct _btn_info {
41         const char *txt;
42         const char *part;
43         const char *style;
44         const char *icon_path;
45 };
46
47 enum topbtns {
48         TOPBTN_SOURCE,
49         TOPBTN_SORT,
50 };
51
52 enum layoutId {
53         ALL_LAYOUT,
54         PHOTO_LAYOUT,
55         VIDEO_LAYOUT,
56         MUSIC_LAYOUT
57 };
58
59 const char *source_arg[] = {
60         "all",
61         "tv",
62         "pUsb"
63 };
64
65 const char *linked_app[] = {
66         N_(""),
67         N_("org.tizen.gallery-tv-ref"),
68         N_("org.tizen.video-player-tv-ref"),
69         N_("org.tizen.music-player-tv-ref"),
70         N_(""),
71 };
72
73 const char* _get_layout_id(int curLayoutId){
74         switch(curLayoutId)
75         {
76                 case ALL_LAYOUT:
77                         return FB_ALL_LAYOUT;
78                 case PHOTO_LAYOUT:
79                         return FB_PHOTO_LAYOUT;
80                 case VIDEO_LAYOUT:
81                         return FB_VIDEO_LAYOUT;
82                 case MUSIC_LAYOUT:
83                         return FB_MUSIC_LAYOUT;
84         }
85         return FB_ALL_LAYOUT; // default
86 }
87
88 struct SFbBaseView {
89         Evas_Object *eoWin;
90         Evas_Object *eoBase;
91         Evas_Object *eoBtnGroup[TOTAL_GROUP_BTNS];
92         Evas_Object *eoSelectedBtnGroup;//Evas_Object *c_grpbtn;
93         Evas_Object *eoBtnSource;
94         Evas_Object *eoBtnSort;
95
96         CContextPopup   *pCtxPopup;
97         CPopup      *pPopup;
98
99         CLayoutMgr     *pLayoutMgr;
100
101         int            curLayoutId;
102         CFbAllLayout   *pFbAllLayout;
103         CFbPhotoLayout *pFbPhotoLayout;
104         CFbVideoLayout *pFbVideoLayout;
105         CFbMusicLayout *pFbMusicLayout;
106
107         SFbBaseView() {
108                 int a;
109
110                 memset(eoBtnGroup, 0, sizeof(eoBtnGroup));
111                 pHandlerBase = new CHandlerBase(this);
112                 for (a = 0; a < TOTAL_TOP_BTNS; a++)
113                         pHandlerButton[a] = new CHandlerButton(this);
114                 for (a = 0; a < TOTAL_GROUP_BTNS; a++){
115                         pHandlerGroup[a] = new CHandlerGroup(this);
116                 }
117         }
118         virtual ~SFbBaseView() {
119                 int a;
120
121                 delete pHandlerBase;
122                 for (a = 0; a < TOTAL_TOP_BTNS; a++)
123                         delete pHandlerButton[a];
124                 for (a = 0; a < TOTAL_GROUP_BTNS; a++)
125                         delete pHandlerGroup[a];
126         }
127
128         class CHandlerBase : public CListenerMgr, public IKeyDownListener, public IKeyUpListener{
129                 SFbBaseView *m;
130
131         public:
132                 CHandlerBase(SFbBaseView *ins) : IKeyDownListener(this), IKeyUpListener(this) { m = ins; }
133
134                 virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev) {
135                         _DBG("m->curLayoutId = %d",m->curLayoutId);
136                         if (!strcmp(ev->keyname, KEY_EXIT))
137                                 elm_exit();
138                 }
139                 virtual void OnKeyUp(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Up *ev)
140                 {
141                         _DBG("m->curLayoutId = %d",m->curLayoutId);
142                         if (!strcmp(ev->keyname, KEY_ENTER) || !strcmp(ev->keyname, KEY_ENTER_REMOTE)) {
143                                 if (elm_object_focus_get(m->eoSelectedBtnGroup)) {
144                                         switch(m->curLayoutId)
145                                         {
146                                                 case ALL_LAYOUT:
147                                                         m->pFbAllLayout->SetFocus(EINA_TRUE);
148                                                         break;
149                                                 case PHOTO_LAYOUT:
150                                                         m->pFbPhotoLayout->SetFocus(EINA_TRUE);
151                                                         break;
152                                                 case VIDEO_LAYOUT:
153                                                         m->pFbVideoLayout->SetFocus(EINA_TRUE);
154                                                         break;
155                                                 case MUSIC_LAYOUT:
156                                                         m->pFbMusicLayout->SetFocus(EINA_TRUE);
157                                                         break;
158                                         }
159                                 }
160                         }
161
162                 }
163         } *pHandlerBase;
164
165         class CHandlerButton : public CListenerMgr, protected IKeyDownListener, IMouseMoveListener, IMouseClickedListener {
166         private:
167                 SFbBaseView *m;
168         private:
169                 static void sm_CbCtxPopupSelected(void* cookie, CContextPopup* instance, const char* text)
170                 {
171                         SFbBaseView* m = (SFbBaseView*)cookie;
172                         if (!m)
173                                 return;
174
175                         _DBG(" instance->Type(): %d", instance->Type());
176                         switch (instance->Type()) {
177                         case CContextPopup::TOPBTN_SORT:
178                                 elm_object_text_set(m->eoBtnSort, text);
179                                 switch(m->curLayoutId)
180                                 {
181                                         case ALL_LAYOUT:
182                                                 m->pFbAllLayout->SetUpdateFlag(true);
183                                                 break;
184                                         case PHOTO_LAYOUT:
185                                                 m->pFbPhotoLayout->SetUpdateFlag(true);
186                                                 break;
187                                         case VIDEO_LAYOUT:
188                                                 m->pFbVideoLayout->SetUpdateFlag(true);
189                                                 break;
190                                         case MUSIC_LAYOUT:
191                                                 m->pFbMusicLayout->SetUpdateFlag(true);
192                                                 break;
193                                 }
194                                 m->pLayoutMgr->Show(_get_layout_id(m->curLayoutId));
195                                 break;
196
197                         case CContextPopup::TOPBTN_SOURCE:
198                                 elm_object_text_set(m->eoBtnSource, text);
199                                 switch(m->curLayoutId)
200                                 {
201                                         case ALL_LAYOUT:
202                                                 m->pFbAllLayout->SetUpdateFlag(true);
203                                                 break;
204                                         case PHOTO_LAYOUT:
205                                                 m->pFbPhotoLayout->SetUpdateFlag(true);
206                                                 break;
207                                         case VIDEO_LAYOUT:
208                                                 m->pFbVideoLayout->SetUpdateFlag(true);
209                                                 break;
210                                         case MUSIC_LAYOUT:
211                                                 m->pFbMusicLayout->SetUpdateFlag(true);
212                                                 break;
213                                 }
214                                 m->pLayoutMgr->Show(_get_layout_id(m->curLayoutId));
215                                 break;
216
217                         default:
218                                 break;
219                         }
220                 }
221
222         public:
223                 CHandlerButton(SFbBaseView *ins) : IKeyDownListener(this), IMouseMoveListener(this), IMouseClickedListener(this) { m = ins; }
224
225                 virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev) {
226                         _DBG("id = %d", id);
227                         if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_BACK_REMOTE))
228                                 elm_object_focus_set(m->eoSelectedBtnGroup, EINA_TRUE);
229                 }
230                 virtual void OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev) {
231                         _DBG("id = %d", id);
232                         if (!elm_object_focus_get(obj))
233                                 elm_object_focus_set(obj, EINA_TRUE);
234                 }
235                 virtual void OnMouseClicked(int id, Evas_Object *obj) {
236                         _DBG("id = %d", id);
237                         CSourceCtxPopup::SCallback cb;
238                         cb.cookie = m;
239                         cb.onSelected = sm_CbCtxPopupSelected;
240
241                         if (obj == m->eoBtnSource) {
242                                 CSourceCtxPopup* pCtxPopup = new CSourceCtxPopup;
243                                 m->pCtxPopup = pCtxPopup;
244                                 pCtxPopup->Create(m->eoBase, &cb);
245                         }
246                         else if (obj == m->eoBtnSort) {
247                                 CSortCtxPopup* pCtxPopup = new CSortCtxPopup;
248                                 m->pCtxPopup = pCtxPopup;
249                                 pCtxPopup->Create(m->eoBase, &cb);
250                         }
251                 }
252         } *pHandlerButton[TOTAL_TOP_BTNS];
253
254         class CHandlerGroup : public CListenerMgr, IMouseMoveListener, IKeyDownListener, IMouseClickedListener {
255         private:
256                 SFbBaseView *m;
257         public:
258                 CHandlerGroup(SFbBaseView *ins) :
259                         IMouseMoveListener(this),
260                         IKeyDownListener(this),
261                         IMouseClickedListener(this) { m = ins; }
262
263                 virtual void OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev) {
264                         _DBG("id = %d", id);
265                         if (!elm_object_focus_get(obj))
266                                 elm_object_focus_set(obj, EINA_TRUE);
267                 }
268                 virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev) {
269                         _DBG("id = %d", id);
270                         if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_BACK_REMOTE))
271                                 elm_exit();
272                 }
273                 virtual void OnMouseClicked(int id, Evas_Object *obj) {
274                         if (m->eoSelectedBtnGroup == obj)
275                                 return;
276
277                         elm_object_signal_emit(m->eoSelectedBtnGroup, FBR_SIGNAL_GROUP_UNSELECTED, "");
278                         m->eoSelectedBtnGroup = obj;
279                         elm_object_signal_emit(m->eoSelectedBtnGroup, FBR_SIGNAL_GROUP_SELECTED, "");
280
281                         switch(id)
282                         {
283                                 case E_GRP_ALL:
284                                         m->curLayoutId = ALL_LAYOUT;
285                                         break;
286                                 case E_GRP_PHOTO:
287                                         m->curLayoutId = PHOTO_LAYOUT;
288                                         break;
289                                 case E_GRP_VIDEO:
290                                         m->curLayoutId = VIDEO_LAYOUT;
291                                         break;
292                                 case E_GRP_MUSIC:
293                                         m->curLayoutId = MUSIC_LAYOUT;
294                                         break;
295                                 default:
296                                         _ERR("Fix it: it can not make it , MouseClicked");
297                                         m->curLayoutId = ALL_LAYOUT; // default
298                                         break;
299                         }
300                         _DBG("id = %d, m->curLayoutId = %d", id, m->curLayoutId);
301                         m->pLayoutMgr->Show(_get_layout_id(m->curLayoutId));
302                 }
303         } *pHandlerGroup[TOTAL_GROUP_BTNS];
304 };
305
306
307 Evas_Object *_add_button(Evas_Object *box)
308 {
309         Evas_Object *button;
310
311         if (!box)
312                 return NULL;
313
314         button = elm_button_add(box);
315         if (!button)
316                 return NULL;
317
318         evas_object_size_hint_weight_set(button,
319                 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
320         evas_object_show(button);
321
322         return button;
323 }
324
325 void CFbBaseView::UpdateEmptyFocusSequence(void)
326 {
327         _DBG("");
328
329         if (t_SelectedGroupButton() == m->eoBtnGroup[E_GRP_ALL]) {
330                 elm_object_part_text_set(m->eoBase, FBR_PART_NO_CONTENT,     _(NO_FILE_MESSAGE));
331                 elm_object_part_text_set(m->eoBase, FBR_PART_NO_CONTENT_SUB, _(NO_FILE_MESSAGE_SUB));
332         }
333         else if (t_SelectedGroupButton() == m->eoBtnGroup[E_GRP_PHOTO]) {
334                 elm_object_part_text_set(m->eoBase, FBR_PART_NO_CONTENT,     _(NO_PHOTO_MESSAGE));
335                 elm_object_part_text_set(m->eoBase, FBR_PART_NO_CONTENT_SUB, _(NO_PHOTO_MESSAGE_SUB));
336         }
337         else if (t_SelectedGroupButton() == m->eoBtnGroup[E_GRP_VIDEO]) {
338                 elm_object_part_text_set(m->eoBase, FBR_PART_NO_CONTENT,     _(NO_VIDEO_MESSAGE));
339                 elm_object_part_text_set(m->eoBase, FBR_PART_NO_CONTENT_SUB, _(NO_VIDEO_MESSAGE_SUB));
340         }
341         else if (t_SelectedGroupButton() == m->eoBtnGroup[E_GRP_MUSIC]) {
342                 elm_object_part_text_set(m->eoBase, FBR_PART_NO_CONTENT,     _(NO_MUSIC_MESSAGE));
343                 elm_object_part_text_set(m->eoBase, FBR_PART_NO_CONTENT_SUB, _(NO_MUSIC_MESSAGE_SUB));
344         }
345 }
346
347 void CFbBaseView::UnsetFocus(void)
348 {
349         elm_object_focus_set(t_SelectedGroupButton(), EINA_TRUE);
350 }
351
352 void CFbBaseView::CbLinkApp(int type, int source_type, char *path)
353 {
354         bundle *args;
355         int r;
356
357         args = bundle_create();
358         if (!args) {
359                 _ERR("unable to create bundle");
360                 return;
361         }
362
363         bundle_add(args, PARAM_SOURCE, source_arg[source_type]);
364         bundle_add(args, PARAM_URI, path);
365
366         r = aul_launch_app(linked_app[type], args);
367         if (args)
368                 bundle_free(args);
369         if (r < 0) {
370                 _ERR(" Unable to launch linked app");
371                 return;
372         }
373
374         return;
375 }
376
377 void CFbBaseView::UpdatedGrid(void)
378 {
379         elm_object_part_text_set(m->eoBase, FBR_PART_NO_CONTENT, "");
380         elm_object_part_text_set(m->eoBase, FBR_PART_NO_CONTENT_SUB, "");
381 }
382
383 void CFbBaseView::t_CreateTopSession(void)
384 {
385         _DBG();
386         int i;
387         Evas_Object *btn;
388         struct _btn_info btninfo[TOTAL_TOP_BTNS];
389         btninfo[TOPBTN_SOURCE].style = FBR_STYLE_SOURCE_BTN;
390         btninfo[TOPBTN_SOURCE].part  = FBR_PART_SOURCE_HOVERSEL;
391
392         btninfo[TOPBTN_SORT].style = FBR_STYLE_SORT_BTN;
393         btninfo[TOPBTN_SORT].part  = FBR_PART_SORT_HOVERSEL;
394
395         elm_object_part_text_set(m->eoBase, FBR_PART_TITLE,
396                 _(FBR_TEXT_TITLE));
397
398         for (i = 0; i < TOTAL_TOP_BTNS; i++) {
399                 btn = _add_button(m->eoBase);
400                 if (!btn) {
401                         _ERR(" Adding btn failed ");
402                         return;
403                 }
404
405                 elm_object_style_set(btn, btninfo[i].style);
406                 elm_object_part_content_set(m->eoBase, btninfo[i].part, btn);
407
408                 m->pHandlerButton[i]->Connect(btn);
409
410                 if (i == TOPBTN_SOURCE)
411                         m->eoBtnSource = btn;
412                 else if (i == TOPBTN_SORT)
413                         m->eoBtnSort = btn;
414         }
415
416         elm_object_text_set(m->eoBtnSource, _(CSourceCtxPopup::SourceText(CInfo::SourceType())));
417         elm_object_text_set(m->eoBtnSort, _(CSortCtxPopup::SortText(CInfo::SortType())));
418 }
419
420 void CFbBaseView::t_CreateLeftSession(void)
421 {
422         _DBG();
423         Evas_Object *box, *ic;
424         int i;
425         char buf[MAX_LENGTH];
426         static struct _btn_info btninfo[TOTAL_GROUP_BTNS];
427         btninfo[E_GRP_ALL].txt = N_("ALL");
428         btninfo[E_GRP_ALL].icon_path = FBR_IMAGE_GRPBTN_ALL;
429         btninfo[E_GRP_PHOTO].txt = N_("PHOTO");
430         btninfo[E_GRP_PHOTO].icon_path = FBR_IMAGE_GRPBTN_PHOTO;
431         btninfo[E_GRP_VIDEO].txt = N_("VIDEO");
432         btninfo[E_GRP_VIDEO].icon_path = FBR_IMAGE_GRPBTN_VIDEO;
433         btninfo[E_GRP_MUSIC].txt = N_("MUSIC");
434         btninfo[E_GRP_MUSIC].icon_path = FBR_IMAGE_GRPBTN_MUSIC;
435
436         box = elm_box_add(m->eoBase);
437         if (!box)
438                 return;
439         evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
440         evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
441         evas_object_show(box);
442
443         for (i = 0; i < TOTAL_GROUP_BTNS; i++) {
444                 m->eoBtnGroup[i] = _add_button(box);
445                 if (!m->eoBtnGroup[i]) {
446                         _ERR(" failed to add button to box ");
447                         continue;
448                 }
449
450                 elm_box_pack_end(box, m->eoBtnGroup[i]);
451                 elm_object_style_set(m->eoBtnGroup[i], FBR_STYLE_GROUPBTN);
452                 elm_object_text_set(m->eoBtnGroup[i], _(btninfo[i].txt));
453
454                 m->pHandlerGroup[i]->Connect(m->eoBtnGroup[i], i);
455
456                 ic = elm_image_add(m->eoBtnGroup[i]);
457                 if (!ic)
458                         continue;
459
460                 snprintf(buf, sizeof(buf), "%s/%s", IMAGEDIR,
461                         btninfo[i].icon_path);
462                 elm_image_file_set(ic, buf, NULL);
463                 elm_object_part_content_set(m->eoBtnGroup[i],
464                         FBR_PART_ELM_SWALLOWICON, ic);
465         }
466
467         t_SetSelectedGroupButton(m->eoBtnGroup[E_GRP_ALL]);
468
469         elm_object_signal_emit(m->eoBtnGroup[E_GRP_ALL], FBR_SIGNAL_GROUP_SELECTED, "");
470         elm_object_focus_set(m->eoBtnGroup[E_GRP_ALL], EINA_TRUE);
471         elm_object_part_content_set(m->eoBase, FBR_PART_GROUPBTN_BOX, box);
472
473         elm_object_focus_next_object_set(m->eoBtnGroup[E_GRP_ALL], m->eoBtnGroup[E_GRP_MUSIC], ELM_FOCUS_UP);
474         elm_object_focus_next_object_set(m->eoBtnGroup[E_GRP_MUSIC], m->eoBtnGroup[E_GRP_ALL], ELM_FOCUS_DOWN);
475 }
476
477 void CFbBaseView::t_CreateFullView(void)
478 {
479         _DBG();
480         t_CreateTopSession();
481         t_CreateLeftSession();
482         m->pLayoutMgr->Show(_get_layout_id(m->curLayoutId));
483 }
484
485 void CFbBaseView::t_SetSelectedGroupButton(Evas_Object* obj)
486 {
487
488         for (int a = 0; a < TOTAL_GROUP_BTNS; a++) {
489                 if (m->eoBtnGroup[a] == obj)
490                 {
491                         m->eoSelectedBtnGroup = obj;
492                         CInfo::SetGroupIndex(a);
493                         break;
494                 }
495         }
496 }
497
498 Evas_Object* CFbBaseView::t_SelectedGroupButton(void)
499 {
500         return m->eoSelectedBtnGroup;
501 }
502
503 void CFbBaseView::t_OnShow(void)
504 {
505         _DBG();
506
507         evas_object_show(m->eoBase);
508
509         CBaseView::t_OnShow();
510 }
511
512 void CFbBaseView::t_OnUpdate(void *data)
513 {
514         switch(m->curLayoutId)
515         {
516                 case ALL_LAYOUT:
517                         m->pFbAllLayout->Action();
518                         break;
519                 case PHOTO_LAYOUT:
520                         m->pFbPhotoLayout->Action();
521                         break;
522                 case VIDEO_LAYOUT:
523                         m->pFbVideoLayout->Action();
524                         break;
525                 case MUSIC_LAYOUT:
526                         m->pFbMusicLayout->Action();
527                         break;
528         }
529 }
530
531 void CFbBaseView::t_OnHide(void)
532 {
533         evas_object_hide(m->eoBase);
534
535         CBaseView::t_OnHide();
536 }
537
538 bool CFbBaseView::Create(void *data)
539 {
540         ASSERT(!m);
541
542         Evas_Object *eoWin = CViewMgr::GetInstance()->Window();
543         Evas_Object *eoBase = NULL;
544
545         int source_type = E_ALL;
546
547         _CREATE_BEGIN{
548                 _CHECK(m = new SFbBaseView)
549                 _CHECK(eoBase = elm_layout_add(eoWin))
550                 _CHECK(elm_layout_file_set(eoBase, EDJEFILE, FBR_BASE_VIEW))
551                 _COMMAND{
552                         evas_object_size_hint_weight_set(eoBase, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
553                         elm_win_resize_object_add(eoWin, eoBase);
554
555                         /* get the source_type using 'data' string */
556                         if (data) {
557                                 // Find Index
558                                 int i;
559                                 int arrsize = ARRAY_SIZE(source_arg);
560                                 for (i = 0; i < arrsize; i++) {
561                                         if (source_arg[i] && !strcmp(source_arg[i], (const char*)data)) {
562                                                 source_type = i;
563                                                 break;
564                                         }
565                                 }
566                                 if (source_type < E_ALL || source_type > E_USB)
567                                         source_type = E_ALL;
568                                 CInfo::SetSourceType(source_type);
569                                 m->eoWin = eoWin;
570                                 m->eoBase = eoBase;
571                         }
572                 }
573                 _CHECK(m->pLayoutMgr = new CLayoutMgr)
574                 _CHECK(m->pLayoutMgr->Create(eoBase, NULL))
575                 _CHECK(m->pFbAllLayout = new CFbAllLayout(FB_ALL_LAYOUT))
576                 _CHECK(m->pFbPhotoLayout = new CFbPhotoLayout(FB_PHOTO_LAYOUT))
577                 _CHECK(m->pFbVideoLayout = new CFbVideoLayout(FB_VIDEO_LAYOUT))
578                 _CHECK(m->pFbMusicLayout = new CFbMusicLayout(FB_MUSIC_LAYOUT))
579                 _CHECK(m->pFbAllLayout->Create(m->pLayoutMgr, NULL))
580                 _CHECK(m->pFbPhotoLayout->Create(m->pLayoutMgr, NULL))
581                 _CHECK(m->pFbVideoLayout->Create(m->pLayoutMgr, NULL))
582                 _CHECK(m->pFbMusicLayout->Create(m->pLayoutMgr, NULL))
583                 _CHECK(m->pLayoutMgr->AddLayout(m->pFbAllLayout))
584                 _CHECK(m->pLayoutMgr->AddLayout(m->pFbPhotoLayout))
585                 _CHECK(m->pLayoutMgr->AddLayout(m->pFbVideoLayout))
586                 _CHECK(m->pLayoutMgr->AddLayout(m->pFbMusicLayout))
587                 _COMMAND{
588                         if(!CUsbListener::Create())
589                                 _ERR("Fail to create CUsbListener()");
590                         if(!CMediaContentListener::Create())
591                                 _ERR("Fail to create CMediaContentListener()");
592                 }
593                 _WHEN_SUCCESS{}
594
595                 _CHECK_FAIL{ m->pLayoutMgr->RemoveLayout(m->pFbMusicLayout); }
596                 _CHECK_FAIL{ m->pLayoutMgr->RemoveLayout(m->pFbVideoLayout); }
597                 _CHECK_FAIL{ m->pLayoutMgr->RemoveLayout(m->pFbPhotoLayout); }
598                 _CHECK_FAIL{ m->pLayoutMgr->RemoveLayout(m->pFbAllLayout); }
599                 _CHECK_FAIL{ m->pFbMusicLayout->Destroy(); }
600                 _CHECK_FAIL{ m->pFbVideoLayout->Destroy(); }
601                 _CHECK_FAIL{ m->pFbPhotoLayout->Destroy(); }
602                 _CHECK_FAIL{ m->pFbAllLayout->Destroy(); }
603                 _CHECK_FAIL{ delete m->pFbMusicLayout; m->pFbMusicLayout = NULL; }
604                 _CHECK_FAIL{ delete m->pFbVideoLayout; m->pFbVideoLayout = NULL; }
605                 _CHECK_FAIL{ delete m->pFbPhotoLayout; m->pFbPhotoLayout = NULL; }
606                 _CHECK_FAIL{ delete m->pFbAllLayout; m->pFbAllLayout = NULL; }
607                 _CHECK_FAIL{ m->pLayoutMgr->Destroy(); }
608                 _CHECK_FAIL{ delete m->pLayoutMgr; m->pLayoutMgr = NULL; }
609                 _CHECK_FAIL{ /* elm_layout_file_set*/ }
610                 _CHECK_FAIL{ evas_object_del(eoBase); }
611                 _CHECK_FAIL{ delete m; m = NULL; }
612         } _CREATE_END_AND_CATCH{ return false; }
613
614
615         // original create grid
616         CInfo::SetSortType(0/*CSort::SORT_NAME_AZ*/);
617         evas_object_data_set(eoBase, BASE_VIEW_DATA, this);
618         m->curLayoutId = ALL_LAYOUT;
619         _DBG("curLayoutId = %s", _get_layout_id(m->curLayoutId));
620         t_CreateFullView();
621         elm_object_focus_allow_set(eoBase, EINA_FALSE);
622         m->pHandlerBase->Connect(eoBase);
623         CBaseView::Create(NULL);
624         return true;
625 }
626
627 void CFbBaseView::Destroy(void)
628 {
629         ASSERT(m);
630
631         CBaseView::Destroy();
632
633         if(CMediaContentListener::FlagCreate())
634                 CMediaContentListener::Destroy();
635         if(CUsbListener::FlagCreate())
636                 CUsbListener::Destroy();
637
638         m->pLayoutMgr->RemoveLayout(m->pFbMusicLayout);
639         m->pFbMusicLayout->Destroy();
640         delete m->pFbMusicLayout;
641
642         m->pLayoutMgr->RemoveLayout(m->pFbVideoLayout);
643         m->pFbVideoLayout->Destroy();
644         delete m->pFbVideoLayout;
645
646         m->pLayoutMgr->RemoveLayout(m->pFbPhotoLayout);
647         m->pFbPhotoLayout->Destroy();
648         delete m->pFbPhotoLayout;
649
650         m->pLayoutMgr->RemoveLayout(m->pFbAllLayout);
651         m->pFbAllLayout->Destroy();
652         delete m->pFbAllLayout;
653
654         m->pLayoutMgr->Destroy();
655         delete m->pLayoutMgr;
656
657         evas_object_del(m->eoBase);
658
659         delete m;
660         m = NULL;
661 }
662
663
664 Evas_Object* CFbBaseView::Base(void)
665 {
666         ASSERT(m);
667
668         return m->eoBase;
669 }
670
671
672 void CFbBaseView::OnStatusChanged(SUsbHostDeviceInfo *changedDevice, SUsbHostDeviceStatus status)
673 {
674         if(status == USB_HOST_DEV_CONNECTED) {
675                 m->pPopup = new CPopup;
676                 if (!m->pPopup)
677                         return;
678                 if (!m->pPopup->Create(m->eoBase)) {
679                         delete m->pPopup;
680                         m->pPopup = NULL;
681                         return;
682                 }
683
684                 if (CInfo::SourceType() == E_USB) {
685                         if (!FlagConnected()) {
686                                 CInfo::SetSourceType(E_ALL);
687                                 elm_object_text_set(m->eoBtnSource,
688                                                 _(CSourceCtxPopup::SourceText(CInfo::SourceType())));
689                         }
690                 }
691         }
692         /* FIXME: should add disconnected flow */
693 }
694
695
696 void CFbBaseView::OnDbUpdated(const SEntity *entity)
697 {
698         _DBG();
699         m->pPopup->Destroy();
700         delete m->pPopup;
701         m->pPopup = NULL;
702
703         if (m->pCtxPopup) {
704                 m->pCtxPopup->Destroy();
705                 delete m->pCtxPopup;
706                 m->pCtxPopup = NULL;
707         }
708         if (CInfo::SourceType() != E_TV) {
709                 m->pLayoutMgr->Show(_get_layout_id(m->curLayoutId));
710                 elm_object_focus_set(t_SelectedGroupButton(), EINA_TRUE);
711         }
712 }
713