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