Rename feature added
[apps/osp/Gallery.git] / src / GlAlbumListForm.cpp
1 //
2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
3 //
4 // Licensed under the Flora License, Version 1.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://floralicense.org/license/
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 /**
18  * @file                GlAlbumListForm.cpp
19  * @brief               This is the implementation file for AlbumListForm class.
20  */
21
22 #include <FApp.h>
23 #include "GlAlbumInfo.h"
24 #include "GlAlbumListForm.h"
25 #include "GlAlbumListPresentationModel.h"
26 #include "GlGalleryApp.h"
27 #include "GlResourceManager.h"
28
29 using namespace Tizen::App;
30 using namespace Tizen::Base;
31 using namespace Tizen::Base::Collection;
32 using namespace Tizen::Base::Runtime;
33 using namespace Tizen::Content;
34 using namespace Tizen::Graphics;
35 using namespace Tizen::Io;
36 using namespace Tizen::Media;
37 using namespace Tizen::System;
38 using namespace Tizen::Ui;
39 using namespace Tizen::Ui::Controls;
40 using namespace Tizen::Ui::Scenes;
41
42 static const int W_FOLDER_SIZE = 348;
43 static const int H_FOLDER_SIZE = 348;
44
45 AlbumListForm::AlbumListForm(void)
46         : __pAlbumViewIconList(null)
47         , __pContextMenuMore(null)
48         , __itemCount(0)
49         , __pPresentationModel(null)
50 {
51         AppLogDebug("ENTER");
52         __overlayMsg = false;
53         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
54 }
55
56 AlbumListForm::~AlbumListForm(void)
57 {
58         AppLogDebug("ENTER");
59         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
60 }
61
62 result
63 AlbumListForm::Initialize(void)
64 {
65         AppLogDebug("ENTER");
66         result r = Form::Construct(IDL_FORM_ALBUM_LIST);
67         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
68
69         return r;
70 }
71
72 result
73 AlbumListForm::OnInitializing(void)
74 {
75         AppLogDebug("ENTER");
76         result r = E_SUCCESS;
77
78         __pPresentationModel = AlbumListPresentationModel::GetInstance();
79         __pPresentationModel->ClearThumbnailRequests();
80         __pPresentationModel->AddPresentationModelListener(this);
81
82         if (__pPresentationModel->GetAppControlMode() == APP_CONTROL_MODE_PICK)
83         {
84                 if (__pPresentationModel->GetAppControlMediaType() == APPCONTROL_MEDIA_TYPE_IMAGE)
85                 {
86                         __pPresentationModel->InitializeAlbumInfoList(CONTENT_TYPE_IMAGE);
87                 }
88                 else if (__pPresentationModel->GetAppControlMediaType() == APPCONTROL_MEDIA_TYPE_VIDEO)
89                 {
90                         __pPresentationModel->InitializeAlbumInfoList(CONTENT_TYPE_VIDEO);
91                 }
92                 else
93                 {
94                         __pPresentationModel->InitializeAlbumInfoList(CONTENT_TYPE_VIDEO);
95                 }
96         }
97         else
98         {
99                 __pPresentationModel->InitializeAlbumInfoList(CONTENT_TYPE_ALL);
100         }
101
102         AppLogDebug("ENTER __pPresentationModel(%x)", __pPresentationModel);
103
104         r = InitializeHeader();
105         if (r != E_SUCCESS)
106         {
107                 AppLogDebug("[%s] Unable to set header.", GetErrorMessage(r));
108         }
109
110         r = InitializeFooter();
111         if (r != E_SUCCESS)
112         {
113                 AppLogDebug("[%s] Unable to set footer.", GetErrorMessage(r));
114         }
115
116         __itemCount = __pPresentationModel->GetFolderCount();
117         CreateIconListView();
118         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
119
120         return r;
121 }
122
123 result
124 AlbumListForm::InitializeHeader(void)
125 {
126         AppLogDebug("ENTER");
127         Header* pHeader = GetHeader();
128         if (pHeader == null)
129         {
130                 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
131
132                 return E_SYSTEM;
133         }
134
135         result r = pHeader->SetStyle(HEADER_STYLE_TITLE);
136         if (r != E_SUCCESS)
137         {
138                 AppLogDebug("EXIT 2(%s)", GetErrorMessage(GetLastResult()));
139
140                 return r;
141         }
142
143         pHeader->SetTitleText(ResourceManager::GetString(L"IDS_COM_BODY_GALLERY"));
144         pHeader->AddActionEventListener(*this);
145
146         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
147         return E_SUCCESS;
148 }
149
150 result
151 AlbumListForm::InitializeFooter(void)
152 {
153         AppLogDebug("ENTER");
154         Footer* pFooter = GetFooter();
155         if (pFooter == null)
156         {
157                 AppLogDebug("EXIT 1");
158
159                 return E_SYSTEM;
160         }
161
162         if (__pPresentationModel->GetAppControlMode() == APP_CONTROL_MODE_PICK)
163         {
164                 pFooter->SetBackButton();
165                 SetFormBackEventListener(this);
166         }
167         else
168         {
169                 pFooter->SetStyle(FOOTER_STYLE_BUTTON_ICON);
170                 pFooter->SetBackButton();
171                 pFooter->RemoveAllItems();
172
173                 FooterItem itemCamera;
174                 itemCamera.Construct(ACTION_ID_FOOTER_CAMERA);
175                 itemCamera.SetText(ResourceManager::GetString(L"EMPTY_SPACE"));
176                 Bitmap* pBitmap1 = ResourceManager::GetBitmapN(IDB_CONTROLBAR_CAMERA);
177                 if (pBitmap1 != null)
178                 {
179                         itemCamera.SetIcon(FOOTER_ITEM_STATUS_NORMAL, pBitmap1);
180                 }
181                 pFooter->AddItem(itemCamera);
182                 delete pBitmap1;
183
184                 ButtonItem footerMore;
185                 footerMore.Construct(BUTTON_ITEM_STYLE_ICON, ACTION_ID_FOOTER_MORE);
186                 Bitmap* pBitmapMore = ResourceManager::GetBitmapN(IDB_CONTROLBAR_MORE);
187                 if (pBitmapMore != null)
188                 {
189                         footerMore.SetIcon(BUTTON_ITEM_STATUS_NORMAL, pBitmapMore);
190                 }
191                 pFooter->SetButton(BUTTON_POSITION_LEFT,footerMore);
192                 delete pBitmapMore;
193
194                 __pContextMenuMore = new (std::nothrow) ContextMenu();
195                 __pContextMenuMore->Construct(Point(0, 0), CONTEXT_MENU_STYLE_LIST);
196                 __pContextMenuMore->AddItem(ResourceManager::GetString(L"IDS_COM_HEADER_EDIT"), ACTION_ID_FOOTER_EDIT);
197                 __pContextMenuMore->SetShowState(false);
198                 __pContextMenuMore->AddActionEventListener(*this);
199
200                 SetFormBackEventListener(this);
201         }
202         pFooter->AddActionEventListener(*this);
203         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
204
205         return E_SUCCESS;
206 }
207
208 void
209 AlbumListForm::CreateIconListView(void)
210 {
211         AppLogDebug("ENTER");
212         Dimension itemSize(W_FOLDER_SIZE, H_FOLDER_SIZE);
213
214         __pAlbumViewIconList = static_cast< IconListView* >(GetControl(L"IDC_ICONLISTVIEW_ALBUM_LIST"));
215         AppAssert(__pAlbumViewIconList);
216
217         __pAlbumViewIconList->SetItemProvider(*this);
218         __pAlbumViewIconList->SetItemBorderStyle(ICON_LIST_VIEW_ITEM_BORDER_STYLE_NONE);
219         __pAlbumViewIconList->AddIconListViewItemEventListener(*this);
220
221         Bitmap* pBitmap = ResourceManager::GetBitmapN(IDB_LISTVIEW_EMPTY);
222         if (pBitmap != null)
223         {
224                 __pAlbumViewIconList->SetBitmapOfEmptyList(pBitmap);
225                 delete pBitmap;
226         }
227
228         __pAlbumViewIconList->SetShowState(true);
229         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
230 }
231
232 int
233 AlbumListForm::GetItemCount(void)
234 {
235         AppLogDebug("ENTER");
236         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
237
238         return  __itemCount;
239 }
240
241 IconListViewItem*
242 AlbumListForm::CreateItem(int index)
243 {
244         AppLogDebug("ENTER : index(%d)", index);
245
246         Bitmap* pBitmap = null;
247         IList* pAlbumInfoList = __pPresentationModel->GetAlbumInfoList();
248         if (pAlbumInfoList != null)
249         {
250                 AlbumInfo* pAlbumInfo = static_cast<AlbumInfo*>(pAlbumInfoList->GetAt(index));
251                 if (pAlbumInfo != null)
252                 {
253                         Bitmap* pAlbumBitmap = pAlbumInfo->GetFolderThumnailBitmap();
254
255                         if (pAlbumBitmap == null)
256                         {
257                                 __pPresentationModel->RequestThumbnail(index, 0);
258                         }
259
260                         pBitmap = __pPresentationModel->CreateMergeBitmapN(index);
261
262                         if (pBitmap != null)
263                         {
264                                 IconListViewItem* pIconListview = new (std::nothrow) IconListViewItem();
265                                 pIconListview->Construct(*pBitmap);
266                                 delete pBitmap;
267                                 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
268
269                                 return pIconListview;
270                         }
271                 }
272         }
273         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
274
275         return null;
276 }
277
278 void
279 AlbumListForm::OnIconListViewItemStateChanged(IconListView& view, int index, IconListViewItemStatus status)
280 {
281         AppLogDebug("ENTER");
282         if (status == ICON_LIST_VIEW_ITEM_SELECTED)
283         {
284                 SceneManager* pSceneManager = SceneManager::GetInstance();
285
286                 IList* pAlbumInfoList = __pPresentationModel->GetAlbumInfoList();
287                 AlbumInfo* pAlbumInfo = static_cast<AlbumInfo*>(pAlbumInfoList->GetAt(index));
288                 AlbumInfo* pSendAlbumInfo = new (std::nothrow) AlbumInfo();
289                 pSendAlbumInfo->Construct(*pAlbumInfo);
290
291                 ArrayList* aList = new (std::nothrow) ArrayList(SingleObjectDeleter);
292                 aList->Construct();
293                 aList->Add(pSendAlbumInfo);
294
295                 if (__pPresentationModel->GetAppControlMode() == APP_CONTROL_MODE_PICK)
296                 {
297                         if (__pPresentationModel->GetAppControlMediaType() == APPCONTROL_MEDIA_TYPE_IMAGE)
298                         {
299                                 pSceneManager->GoForward(ForwardSceneTransition(IDSCN_IMAGE_LIST_EDITOR), aList);
300                         }
301                         else if  (__pPresentationModel->GetAppControlMediaType() == APPCONTROL_MEDIA_TYPE_VIDEO)
302                         {
303                                 pSceneManager->GoForward(ForwardSceneTransition(IDSCN_VIDEO_LIST_EDITOR), aList);
304                         }
305                         else
306                         {
307                                 pSceneManager->GoForward(ForwardSceneTransition(IDSCN_IMAGE_LIST_EDITOR), aList);
308                         }
309                 }
310                 else
311                 {
312                         pSceneManager->GoForward(ForwardSceneTransition(IDSCN_ALL_LIST), aList);
313                 }
314         }
315         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
316 }
317
318 bool
319 AlbumListForm::DeleteItem(int index, IconListViewItem* pItem)
320 {
321         AppLogDebug("ENTER");
322         delete pItem;
323         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
324
325         return true;
326 }
327
328 result
329 AlbumListForm::OnTerminating(void)
330 {
331         AppLogDebug("ENTER");
332         __pPresentationModel->RemovePresentationModelListener(*this);
333
334         if (__pContextMenuMore != null)
335         {
336                 delete __pContextMenuMore;
337                 __pContextMenuMore = null;
338         }
339         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
340
341         return E_SUCCESS;
342 }
343
344 void
345 AlbumListForm::OnActionPerformed(const Control& source, int actionId)
346 {
347         AppLogDebug("ENTER");
348         SceneManager* pSceneManager = SceneManager::GetInstance();
349
350         switch (actionId)
351         {
352         case ACTION_ID_FOOTER_CAMERA:
353                 {
354                         HashMap* pDataList = new (std::nothrow) HashMap(SingleObjectDeleter);
355                         pDataList->Construct();
356                         pDataList->Add(new (std::nothrow) String(APPCONTROL_KEY_TYPE),
357                                         new (std::nothrow) String(APPCONTROL_DATA_CAMERA));
358
359                         __pPresentationModel->StartAppControl(APPCONTROL_PROVIDER_ID_CAMERA,
360                                         APPCONTROL_OPERATION_ID_CAPTURE, pDataList, null);
361                 }
362                 break;
363         case ACTION_ID_FOOTER_EDIT:
364                 {
365                         pSceneManager->GoForward(ForwardSceneTransition(IDSCN_ALBUM_LIST_EDITOR));
366                 }
367                 break;
368         case ACTION_ID_FOOTER_MORE:
369                 {
370                         if (__pContextMenuMore->GetShowState() == false && __pPresentationModel->GetFolderCount() != 0)
371                         {
372                                 Rectangle rect = source.GetBounds();
373                                 __pContextMenuMore->SetAnchorPosition(Point(rect.width/8, rect.y));
374                                 __pContextMenuMore->SetShowState(true);
375                                 __pContextMenuMore->Show();
376                         }
377                         else
378                         {
379                                 __pContextMenuMore->SetShowState(false);
380                         }
381                 }
382                 break;
383         default:
384                 {
385                 }
386                 break;
387         }
388         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
389 }
390
391 void
392 AlbumListForm::OnFormBackRequested(Form& source)
393 {
394         AppLogDebug("ENTER");
395         if (__pPresentationModel->GetAppControlMode() == APP_CONTROL_MODE_PICK)
396         {
397                 AppLogDebug("APP_CONTROL_MODE_PICK");
398                 GalleryApp* pApp = dynamic_cast<GalleryApp*>(UiApp::GetInstance());
399                 if (pApp != null)
400                 {
401                         if (__pPresentationModel->GetAppControlMode() == APP_CONTROL_MODE_PICK)
402                         {
403                                 pApp->SendAppControlResult(APP_CTRL_RESULT_CANCELED, null);
404                         }
405                         pApp->Terminate();
406                 }
407         }
408         else
409         {
410                 AppLogDebug("APP_CONTROL_MODE_MAIN");
411                 UiApp* pApp = UiApp::GetInstance();
412                 pApp->Terminate();
413         }
414         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
415 }
416
417 void
418 AlbumListForm::OnSceneActivatedN(const SceneId& previousSceneId,
419                                                                                   const SceneId& currentSceneId, IList* pArgs)
420 {
421         AppLogDebug("ENTER");
422
423         if (__pPresentationModel->GetAppControlMode() == APP_CONTROL_MODE_PICK)
424         {
425                 if (__pPresentationModel->GetAppControlMediaType() == APPCONTROL_MEDIA_TYPE_IMAGE)
426                 {
427                         __pPresentationModel->InitializeAlbumInfoList(CONTENT_TYPE_IMAGE);
428                 }
429                 else if (__pPresentationModel->GetAppControlMediaType() == APPCONTROL_MEDIA_TYPE_VIDEO)
430                 {
431                         __pPresentationModel->InitializeAlbumInfoList(CONTENT_TYPE_VIDEO);
432                 }
433                 else
434                 {
435                         __pPresentationModel->InitializeAlbumInfoList(CONTENT_TYPE_VIDEO);
436                 }
437         }
438         else
439         {
440                 __pPresentationModel->InitializeAlbumInfoList(CONTENT_TYPE_ALL);
441         }
442         __itemCount = __pPresentationModel->GetFolderCount();
443
444         if (__pAlbumViewIconList != null)
445         {
446                 __pAlbumViewIconList->UpdateList();
447         }
448
449         Invalidate(true);
450         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
451 }
452
453 void
454 AlbumListForm::OnSceneDeactivated(const SceneId& currentSceneId,
455                                                                                    const SceneId& nextSceneId)
456 {
457         AppLogDebug("ENTER");
458         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
459 }
460
461 void
462 AlbumListForm::OnUpdateContentList()
463 {
464         AppLogDebug("ENTER");
465
466         if (__pPresentationModel->GetAppControlMode() == APP_CONTROL_MODE_PICK)
467         {
468                 if (__pPresentationModel->GetAppControlMediaType() == APPCONTROL_MEDIA_TYPE_IMAGE)
469                 {
470                         __pPresentationModel->InitializeAlbumInfoList(CONTENT_TYPE_IMAGE);
471                 }
472                 else if (__pPresentationModel->GetAppControlMediaType() == APPCONTROL_MEDIA_TYPE_VIDEO)
473                 {
474                         __pPresentationModel->InitializeAlbumInfoList(CONTENT_TYPE_VIDEO);
475                 }
476                 else
477                 {
478                         __pPresentationModel->InitializeAlbumInfoList(CONTENT_TYPE_VIDEO);
479                 }
480         }
481         else
482         {
483                 __pPresentationModel->InitializeAlbumInfoList(CONTENT_TYPE_ALL);
484         }
485
486         __itemCount = __pPresentationModel->GetFolderCount();
487         __pAlbumViewIconList->UpdateList();
488         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
489 }
490
491 void
492 AlbumListForm::OnFileInfoChanged(const ContentType contentType)
493 {
494         AppLogDebug("ENTER");
495         Update();
496         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
497 }
498
499 void
500 AlbumListForm::OnThumbnailDecoded(const int index)
501 {
502         AppLogDebug("ENTER : index(%d)", index);
503         __pAlbumViewIconList->RefreshList(index, LIST_REFRESH_TYPE_ITEM_MODIFY);
504         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
505 }
506
507 result
508 AlbumListForm::Update(void)
509 {
510         AppLogDebug("ENTER");
511         result r = __pAlbumViewIconList->UpdateList();
512         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
513
514         return r;
515 }