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