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