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