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