8d1e06c0dd3479454a169f5096fe20664f0973e0
[profile/tv/apps/native/filebrowser.git] / src / layouts / FbVideoLayout.cpp
1 #include <Elementary.h>
2
3 #include "dbg.h"
4 #include <AppCommon.h>
5 #include "define.h"
6 #include "FileGrid.h"
7
8 #include "FbBaseView.h"
9 #include "FbVideoLayout.h"
10 #include "../views/BaseView/Info.h"
11 #include "common.h"
12
13
14 struct SFbVideoLayout {
15         Evas_Object *eoWin;
16         Evas_Object *eoBase;
17         CFileGrid  *pFileGrid;
18
19         CLayoutMgr *pLayoutMgr;
20         CViewMgr   *pViewMgr;
21
22         bool       updateFlag;
23 };
24
25
26 void CFbVideoLayout::sm_CbUpdateEmptyFocusSequence(void* cookie)
27 {
28         _DBG();
29         CFbBaseView *pfbBaseView = NULL;
30         Evas_Object *eoBase = (Evas_Object*)cookie;
31
32         if (!eoBase)
33                 return;
34
35         pfbBaseView = (CFbBaseView*)evas_object_data_get(eoBase, BASE_VIEW_DATA);
36         ASSERT(pfbBaseView);
37         pfbBaseView->UpdateEmptyFocusSequence();
38 }
39
40
41 void CFbVideoLayout::sm_CbUpdatedGrid(void* cookie)
42 {
43         _DBG();
44         CFbBaseView *pfbBaseView = NULL;
45         Evas_Object *eoBase = (Evas_Object*)cookie;
46         if (!eoBase)
47                 return;
48
49         pfbBaseView = (CFbBaseView*)evas_object_data_get(eoBase, BASE_VIEW_DATA);
50         ASSERT(pfbBaseView);
51         pfbBaseView->UpdatedGrid();
52 }
53
54
55 void CFbVideoLayout::sm_CbUnsetFocus(void* cookie)
56 {
57         _DBG();
58         CFbBaseView *pfbBaseView = NULL;
59         Evas_Object *eoBase = (Evas_Object*)cookie;
60         if (eoBase) {
61                 pfbBaseView = (CFbBaseView*)evas_object_data_get(eoBase, BASE_VIEW_DATA);
62                 ASSERT(pfbBaseView);
63                 pfbBaseView->UnsetFocus();
64         }
65 }
66
67
68 void CFbVideoLayout::sm_CbLinkApp(void* cookie, int type, int source_type, char *path)
69 {
70         _DBG();
71         CFbBaseView *pfbBaseView = NULL;
72         Evas_Object *eoBase = (Evas_Object*)cookie;
73         if (eoBase)
74         {
75                 pfbBaseView = (CFbBaseView*)evas_object_data_get(eoBase, BASE_VIEW_DATA);
76                 ASSERT(pfbBaseView);
77                 pfbBaseView->CbLinkApp(type, source_type, path);
78         }
79 }
80
81
82 bool CFbVideoLayout::t_CreateFileGrid(Evas_Object *layout)
83 {
84         m->pFileGrid = new CFileGrid;
85         if (!m->pFileGrid)
86                 return false;
87
88         CFileGrid::SCallback cb;
89         cb.cbUpdateEmptyFocusSequence = sm_CbUpdateEmptyFocusSequence;
90         cb.cbUpdatedGrid = sm_CbUpdatedGrid;
91         cb.cbUnsetFocus = sm_CbUnsetFocus;
92         cb.cbLinkApp = sm_CbLinkApp;
93         cb.cookie = m->eoBase;
94         if (!m->pFileGrid->Create(m->eoWin, layout, &cb)) {
95                 _DBG("Fail to create FileGrid");
96                 delete m->pFileGrid;
97                 m->pFileGrid = NULL;
98                 return false;
99         }
100         return true;
101 }
102
103
104 void CFbVideoLayout::t_DestroyFileGrid(void)
105 {
106         if (!m->pFileGrid)
107                 return;
108
109         m->pFileGrid->Destroy();
110         delete m->pFileGrid;
111         m->pFileGrid = NULL;
112 }
113
114
115 void CFbVideoLayout::t_OnShow(void)
116 {
117         elm_object_part_content_unset(m->eoBase, FBR_PART_CONTENT);
118         elm_object_part_content_set(m->eoBase, FBR_PART_CONTENT, Layout()); 
119         CInfo::SetGroupIndex(E_GRP_VIDEO);
120         m->pFileGrid->Update(m->updateFlag);
121         m->updateFlag = false; // set default
122         CBaseLayout::t_OnShow();
123 }
124
125
126 bool CFbVideoLayout::Create(CLayoutMgr *mgr, void *data)
127 {
128         ASSERT(!m);
129         ASSERT(mgr);
130
131         Evas_Object* layout = NULL;
132
133         _CREATE_BEGIN{
134                 _CHECK(m = new SFbVideoLayout)
135                 _CHECK(m->pLayoutMgr = mgr)
136                 _CHECK(m->pViewMgr = CViewMgr::GetInstance())
137                 _CHECK(m->eoBase = m->pLayoutMgr->Base())
138                 _CHECK(m->eoWin = m->pViewMgr->Window())
139                 _CHECK(layout = elm_layout_add(m->eoBase))
140                 _CHECK(elm_layout_file_set(layout, EDJEFILE, FB_VIDEO_LAYOUT))
141                 _CHECK(t_CreateFileGrid(layout))
142                 _COMMAND{
143                         m->updateFlag = false;
144                         elm_object_part_content_unset(m->eoBase, FBR_PART_CONTENT);
145                         elm_object_part_content_set(m->eoBase, FBR_PART_CONTENT, layout);
146                 }
147                 _CHECK(CBaseLayout::Create(layout))
148
149                 _WHEN_SUCCESS{}
150
151                 _CHECK_FAIL{ CBaseLayout::Destroy(); }
152                 _CHECK_FAIL{ t_DestroyFileGrid(); }
153                 _CHECK_FAIL{ /* elm_layout_file_set */ }
154                 _CHECK_FAIL{ /* elm_layout_add */ }
155                 _CHECK_FAIL{ /* m->pViewMgr->Window()*/ }
156                 _CHECK_FAIL{ /* m->pLayoutMgr->Base() */ }
157                 _CHECK_FAIL{ /* CViewMgr::GetInstace() */ }
158                 _CHECK_FAIL{ /* m->pLayoutMgr = mgr */ }
159                 _CHECK_FAIL{ delete m; m = NULL; }
160         } _CREATE_END_AND_CATCH{ return false; }
161
162         return true;
163 }
164
165
166 void CFbVideoLayout::Destroy(void)
167 {
168         ASSERT(m);
169
170         CBaseLayout::Destroy();
171         t_DestroyFileGrid();
172         delete m;
173         m = NULL;
174 }
175
176
177 void CFbVideoLayout::SetFocus(Eina_Bool flag)
178 {
179         ASSERT(m);
180         _DBG();
181
182         m->pFileGrid->SetFocus(flag);
183 }
184
185
186 void CFbVideoLayout::Action(void)
187 {
188         ASSERT(m);
189
190         return m->pFileGrid->Action();
191 }
192
193
194 void CFbVideoLayout::SetUpdateFlag(bool flag)
195 {
196         ASSERT(m);
197
198         m->updateFlag = flag;
199 }