4ab8e08afdfc26f3c74e59617e0720850ccbc8a3
[apps/osp/Gallery.git] / src / GlAllListEditorPanel.cpp
1 //
2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
3 //
4 // Licensed under the Flora License, Version 1.1 (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                GlAllListEditorPanel.cpp
19  * @brief               This is the implementation file for AllListEditorPanel class.
20  */
21
22 #include <FContent.h>
23 #include "GlAllListEditorPanel.h"
24 #include "GlCommonUtil.h"
25 #include "GlFileUpdateTimer.h"
26 #include "GlFileListEditorForm.h"
27 #include "GlFileListPresentationModel.h"
28 #include "GlResourceManager.h"
29 #include "GlTypes.h"
30
31 using namespace Tizen::App;
32 using namespace Tizen::Base;
33 using namespace Tizen::Base::Collection;
34 using namespace Tizen::Base::Utility;
35 using namespace Tizen::Content;
36 using namespace Tizen::Graphics;
37 using namespace Tizen::Media;
38 using namespace Tizen::Ui::Controls;
39 using namespace Tizen::Ui::Scenes;
40
41 static const int H_COUNT_LABEL = 48;
42 static const int H_COUNT_LABEL_BUTTON = 42;
43 static const int W_COUNT_LABEL_BUTTON = 42;
44 static const int COUNT_LABEL_FONT_SIZE = 33;
45 static const int H_CONTENT_MARGIN = 9;
46 static const int W_CONTENT_MARGIN = 6;
47 static const int W_CONTENT_SPACE = 6;
48 static const int H_CONTENT_SPACE = 6;
49 static const int LENGTH_COUNT_LABEL = 256;
50 static const unsigned int COLOR_COUNT_LABEL = Color32<68, 68, 68>::Value;
51 static const unsigned int COLOR_SELECT_COUNT_FONT = Color32<255, 255, 255>::Value;
52 static const unsigned int COLOR_COUNT_LABEL_BUTTON = Color32<120, 120, 120>::Value;
53 static const Color COLOR_THUMBNAIL_DIM (Color::GetColor(COLOR_ID_BLACK));
54 static const int ALPHA_THUMBNAIL_DIM = 70;
55
56 static const Rectangle RECT_INITIAL (0, 0, 10, 10);
57
58 AllListEditorPanel::AllListEditorPanel(void)
59         : __itemCount(0)
60         , __pContentIconListView(null)
61         , __pLabelSelectCnt(null)
62         , __pButtonSelectRegion(null)
63         , __pFileUpdateTimer(null)
64         , __pFileListEditorForm(null)
65         , __pPresentationModel(null)
66 {
67         AppLogDebug("ENTER");
68         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
69 }
70
71 AllListEditorPanel::~AllListEditorPanel(void)
72 {
73         AppLogDebug("ENTER");
74         delete __pFileUpdateTimer;
75         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
76 }
77
78 result
79 AllListEditorPanel::Initialize(void)
80 {
81         AppLogDebug("ENTER");
82         result r = Construct(RECT_INITIAL);
83         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
84
85         return r;
86 }
87
88 result
89 AllListEditorPanel::OnInitializing(void)
90 {
91         AppLogDebug("ENTER");
92         const Form* pForm = dynamic_cast<Form*>(GetParent());
93         TryReturn(pForm != null, E_FAILURE, "[%s] fail to get the form.", GetErrorMessage(GetLastResult()));
94
95         __pPresentationModel = FileListPresentationModel::GetInstance();
96         __pPresentationModel->ClearThumbnailRequests();
97         __pPresentationModel->AddPresentationModelListener(this);
98
99         Rectangle clientAreaBounds = pForm->GetClientAreaBounds();
100         SetBounds(0, 0, clientAreaBounds.width, clientAreaBounds.height);
101
102         __pContentIconListView = new (std::nothrow) IconListView();
103         __pContentIconListView->Construct(Rectangle(0, 0, clientAreaBounds.width, clientAreaBounds.height - H_COUNT_LABEL),
104                         DIMENSION_DEFAULT_THUMBNAIL, ICON_LIST_VIEW_STYLE_MARK, ICON_LIST_VIEW_SCROLL_DIRECTION_VERTICAL);
105         Bitmap* pBitmapEmpty = ResourceManager::GetBitmapN(IDB_LISTVIEW_EMPTY);
106         if (pBitmapEmpty != null)
107         {
108                 __pContentIconListView->SetBitmapOfEmptyList(pBitmapEmpty);
109                 delete pBitmapEmpty;
110         }
111         __pContentIconListView->SetTextOfEmptyList(ResourceManager::GetString(L"IDS_COM_BODY_NO_ITEMS"));
112         __pContentIconListView->SetMargin(MARGIN_TYPE_LEFT, W_CONTENT_MARGIN);
113         __pContentIconListView->SetMargin(MARGIN_TYPE_RIGHT, W_CONTENT_MARGIN);
114         __pContentIconListView->SetMargin(MARGIN_TYPE_TOP, H_CONTENT_MARGIN);
115         __pContentIconListView->SetItemSpacing(W_CONTENT_SPACE, H_CONTENT_SPACE);
116         __pContentIconListView->SetItemBorderStyle(ICON_LIST_VIEW_ITEM_BORDER_STYLE_NONE);
117         __pContentIconListView->SetItemProvider(*this);
118         __pContentIconListView->SetCheckBoxPosition(ICON_LIST_VIEW_CHECK_BOX_POSITION_TOP_LEFT);
119         __pContentIconListView->AddIconListViewItemEventListener(*this);
120         __pContentIconListView->SetTouchAnimationEnabled(false);
121         AddControl(__pContentIconListView);
122         __pContentIconListView->SetShowState(true);
123
124         __pLabelSelectCnt = new (std::nothrow) Label();
125         String strTmp;
126         strTmp = ResourceManager::GetString(L"IDS_ST_POP_NO_ITEMS_SELECTED").GetPointer();
127         __pLabelSelectCnt->Construct(
128                         Rectangle(0, clientAreaBounds.height - H_COUNT_LABEL, clientAreaBounds.width, H_COUNT_LABEL), strTmp);
129         __pLabelSelectCnt->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
130         __pLabelSelectCnt->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
131         __pLabelSelectCnt->SetBackgroundColor(COLOR_COUNT_LABEL);
132         __pLabelSelectCnt->SetTextColor(Color(COLOR_SELECT_COUNT_FONT));
133         __pLabelSelectCnt->SetTextConfig(COUNT_LABEL_FONT_SIZE, LABEL_TEXT_STYLE_BOLD);
134         AddControl(__pLabelSelectCnt);
135         __pLabelSelectCnt->Invalidate(true);
136
137         __pButtonSelectRegion = new (std::nothrow) Button();
138         __pButtonSelectRegion->Construct(Rectangle(clientAreaBounds.width - W_COUNT_LABEL_BUTTON - 10,
139                         clientAreaBounds.height - H_COUNT_LABEL_BUTTON - 4, W_COUNT_LABEL_BUTTON, H_COUNT_LABEL_BUTTON),
140                         EMPTY_SPACE);
141         __pButtonSelectRegion->SetActionId(IDA_BUTTON_MOVE_TO_SELECTION);
142         __pButtonSelectRegion->SetColor(BUTTON_STATUS_NORMAL, COLOR_COUNT_LABEL_BUTTON);
143         Bitmap* pSelectionBitmap = ResourceManager::GetBitmapN(IDB_BUTTON_MOVE_SELECTION);
144         if (pSelectionBitmap != null)
145         {
146                 Rectangle buttonRegionRect = __pButtonSelectRegion->GetBounds();
147                 pSelectionBitmap->Scale(Dimension(buttonRegionRect.width, buttonRegionRect.height));
148                 __pButtonSelectRegion->SetNormalBitmap(Point(buttonRegionRect.width, buttonRegionRect.height),
149                                 *pSelectionBitmap);
150         }
151         AddControl(__pButtonSelectRegion);
152
153         if (pSelectionBitmap != null)
154         {
155                 delete pSelectionBitmap;
156         }
157         __pButtonSelectRegion->AddActionEventListener(*this);
158
159         __itemCount = 0;
160         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
161
162         return E_SUCCESS;
163 }
164
165 result
166 AllListEditorPanel::OnTerminating(void)
167 {
168         AppLogDebug("ENTER");
169         __pPresentationModel->RemovePresentationModelListener(*this);
170         __pPresentationModel->RemoveContentEventListener(__pFileListEditorForm);
171         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
172
173         return E_SUCCESS;
174 }
175
176 void
177 AllListEditorPanel::OnActionPerformed(const Control& source, int actionId)
178 {
179         AppLogDebug("ENTER");
180         SceneManager* pSceneManager = SceneManager::GetInstance();
181         TryReturnVoid(pSceneManager != null, "[%s] fail to get SceneManager.", GetErrorMessage(GetLastResult()));
182
183         switch (actionId)
184         {
185         case IDA_BUTTON_CHECKED:
186         {
187                 int loopCount = __pPresentationModel->GetCurrentAlbumContentInfoCount();
188                 for (int i=0; i < loopCount; ++i)
189                 {
190                         if (__pContentIconListView->IsItemChecked(i) == false)
191                         {
192                                 __pContentIconListView->SetItemChecked(i, true);
193                                 __pContentIconListView->RefreshList(i, LIST_REFRESH_TYPE_ITEM_MODIFY);
194                         }
195                 }
196                 int checkedCount = GetItemCheckedCount();
197                 String strTmp;
198
199                 if (checkedCount == 0)
200                 {
201                         strTmp = ResourceManager::GetString(L"IDS_ST_POP_NO_ITEMS_SELECTED");
202                 }
203                 else if (checkedCount == 1)
204                 {
205                         strTmp = ResourceManager::GetString(L"IDS_VR_POP_1_ITEM_SELECTED");
206                 }
207                 else
208                 {
209                         strTmp.Format(LENGTH_COUNT_LABEL,
210                                         ResourceManager::GetString(L"IDS_VR_POP_PD_ITEMS_SELECTED").GetPointer(), checkedCount);
211                 }
212
213                 __pLabelSelectCnt->SetText(strTmp);
214                 __pLabelSelectCnt->RequestRedraw(true);
215                 SetButtonState();
216         }
217         break;
218
219         case IDA_BUTTON_UNCHECKED:
220         {
221                 int loopCount = __pPresentationModel->GetCurrentAlbumContentInfoCount();
222                 for (int i = 0; i < loopCount; ++i)
223                 {
224                         if (__pContentIconListView->IsItemChecked(i) == true)
225                         {
226                                 __pContentIconListView->SetItemChecked(i,false);
227                         }
228                 }
229                 int checkedCount = GetItemCheckedCount();
230                 String strTmp;
231
232                 if (checkedCount == 0)
233                 {
234                         strTmp = ResourceManager::GetString(L"IDS_ST_POP_NO_ITEMS_SELECTED");
235                 }
236                 else if (checkedCount == 1)
237                 {
238                         strTmp = ResourceManager::GetString(L"IDS_VR_POP_1_ITEM_SELECTED");
239                 }
240                 else
241                 {
242                         strTmp.Format(LENGTH_COUNT_LABEL,
243                                         ResourceManager::GetString(L"IDS_VR_POP_PD_ITEMS_SELECTED").GetPointer(), checkedCount);
244                 }
245
246                 __pLabelSelectCnt->SetText(strTmp);
247                 __pLabelSelectCnt->RequestRedraw(true);
248                 __pContentIconListView->UpdateList();
249                 SetButtonState();
250         }
251         break;
252
253         case IDA_BUTTON_MOVE_TO_SELECTION:
254         {
255                 if (pSceneManager->GetCurrentSceneId() == IDSCN_ALL_LIST_EDITOR)
256                 {
257                         IList* pList = GetItemCheckedIndexListN();
258                         if (pList == null)
259                         {
260                                 pList = new (std::nothrow) ArrayList(SingleObjectDeleter);
261                         }
262                         pSceneManager->GoForward(ForwardSceneTransition(IDSCN_ALL_LIST_SELECTION), pList);
263                 }
264                 else
265                 {
266                         pSceneManager->GoForward(ForwardSceneTransition(IDSCN_ALL_LIST_SELECTION));
267                 }
268         }
269         break;
270
271         default:
272                 break;
273         }
274         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
275 }
276
277 int
278 AllListEditorPanel::GetItemCount(void)
279 {
280         AppLogDebug("ENTER");
281         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
282
283         return __itemCount;
284 }
285
286 IconListViewItem*
287 AllListEditorPanel::CreateItem(int index)
288 {
289         AppLogDebug("ENTER : index(%d)", index);
290         IconListViewItem* pIconListviewItem;
291         Bitmap* pBitmap = null;
292         String* pItemText = null;
293         result r = __pPresentationModel->GetThumbnailInSyncCacheN(index, pItemText, pBitmap);
294         if (pBitmap == null || r == E_FAILURE)
295         {
296                 __pPresentationModel->RequestThumbnail(index);
297                 pBitmap = CommonUtil::GetEmptyThumbnailN();
298         }
299
300         if (pItemText == null)
301         {
302                 pItemText = new (std::nothrow) String(ResourceManager::GetString(L"EMPTY_SPACE"));
303         }
304         else if ((*pItemText) != ResourceManager::GetString(L"EMPTY_SPACE"))
305         {
306                 delete pItemText;
307                 pItemText = new (std::nothrow) String(ResourceManager::GetString(L"EMPTY_SPACE"));
308         }
309
310         if (__pContentIconListView->IsItemChecked(index) == true)
311         {
312                 if (pBitmap != null)
313                 {
314                         BufferInfo bufferInfo;
315                         pBitmap->Lock(bufferInfo, INFINITE);
316                         pBitmap->Unlock();
317                         Color dimColor(COLOR_THUMBNAIL_DIM);
318                         dimColor.SetAlpha(ALPHA_THUMBNAIL_DIM);
319
320                         Canvas canvas;
321                         canvas.Construct(bufferInfo);
322                         canvas.FillRectangle(dimColor, canvas.GetBounds());
323
324                         Bitmap* pSelectedBitmap = new (std::nothrow) Bitmap();
325                         pSelectedBitmap->Construct(canvas, canvas.GetBounds());
326                         pIconListviewItem = new (std::nothrow) IconListViewItem();
327                         pIconListviewItem->Construct(*pBitmap, pItemText, pSelectedBitmap);
328                         delete pSelectedBitmap;
329                 }
330                 else
331                 {
332                         AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
333                         delete pItemText;
334                         return null;
335                 }
336         }
337         else
338         {
339                 pIconListviewItem = new (std::nothrow) IconListViewItem();
340                 pIconListviewItem->Construct(*pBitmap, pItemText);
341         }
342
343         if (pBitmap != null)
344         {
345                 delete pBitmap;
346         }
347         if (pItemText != null)
348         {
349                 delete pItemText;
350         }
351         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
352
353         return pIconListviewItem;
354 }
355
356 bool
357 AllListEditorPanel::DeleteItem(int index, IconListViewItem* pItem)
358 {
359         AppLogDebug("ENTER");
360         delete pItem;
361         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
362
363         return true;
364 }
365
366 void
367 AllListEditorPanel::OnIconListViewItemStateChanged(IconListView& view, int index, IconListViewItemStatus status)
368 {
369         AppLogDebug("ENTER");
370         if (status == ICON_LIST_VIEW_ITEM_CHECKED || status == ICON_LIST_VIEW_ITEM_UNCHECKED)
371         {
372                 int checkedCount = GetItemCheckedCount();
373                 String strTmp;
374
375                 if (checkedCount == 0)
376                 {
377                         strTmp = ResourceManager::GetString(L"IDS_ST_POP_NO_ITEMS_SELECTED");
378                 }
379                 else if (checkedCount == 1)
380                 {
381                         strTmp = ResourceManager::GetString(L"IDS_VR_POP_1_ITEM_SELECTED");
382                 }
383                 else
384                 {
385                         strTmp.Format(LENGTH_COUNT_LABEL,
386                                         ResourceManager::GetString(L"IDS_VR_POP_PD_ITEMS_SELECTED").GetPointer(), checkedCount);
387                 }
388
389                 __pLabelSelectCnt->SetText(strTmp);
390                 __pLabelSelectCnt->RequestRedraw(true);
391                 __pContentIconListView->RefreshList(index, LIST_REFRESH_TYPE_ITEM_MODIFY);
392         }
393         SetButtonState();
394         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
395 }
396
397 void
398 AllListEditorPanel::OnFileInfoChanged(const ContentType contentType)
399 {
400         AppLogDebug("ENTER");
401         if (contentType == CONTENT_TYPE_ALL
402                 || contentType == CONTENT_TYPE_IMAGE
403                 || contentType == CONTENT_TYPE_VIDEO)
404         {
405                 __pPresentationModel->RefreshCurrentAlbumContentInfoList(CONTENT_TYPE_ALL);
406                 __itemCount = __pPresentationModel->GetCurrentAlbumContentInfoCount();
407                 __pContentIconListView->UpdateList();
408         }
409         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
410 }
411
412 void
413 AllListEditorPanel::OnThumbnailDecoded(const int index)
414 {
415         AppLogDebug("ENTER : index(%d)", index);
416         if (index >= 0)
417         {
418                 __pContentIconListView->RefreshList(index, LIST_REFRESH_TYPE_ITEM_MODIFY);
419         }
420         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
421 }
422
423 void
424 AllListEditorPanel::OnSceneActivatedN(const SceneId& previousSceneId,
425                                                                 const SceneId& currentSceneId, IList* pArgs)
426 {
427         AppLogDebug("ENTER");
428
429         ChangeOrientation();
430
431         __pPresentationModel = FileListPresentationModel::GetInstance();
432
433         SceneManager* pSceneManager = SceneManager::GetInstance();
434         TryReturnVoid(pSceneManager != null, "[%s] fail to get SceneManager.", GetErrorMessage(GetLastResult()));
435         __pFileListEditorForm = dynamic_cast<FileListEditorForm*>(pSceneManager->GetCurrentScene()->GetForm());
436         TryReturnVoid(__pFileListEditorForm != null, "[%s] fail to get SceneManager.", GetErrorMessage(GetLastResult()));
437         __pPresentationModel->AddContentEventListener(__pFileListEditorForm);
438
439         if (previousSceneId == IDSCN_ALL_LIST_SELECTION)
440         {
441                 if (pArgs != null)
442                 {
443                         if (__pContentIconListView != null)
444                         {
445                                 int loopCount = __pPresentationModel->GetCurrentAlbumContentInfoCount();
446                                 for (int i = 0; i < loopCount; ++i)
447                                 {
448                                         __pContentIconListView->SetItemChecked(i, false);
449                                 }
450                                 __pContentIconListView->UpdateList();
451                         }
452
453                         if (pArgs->GetCount() > 0) //SomeItems are Still Selected.
454                         {
455                                 IList* pSeletedIndexList = pArgs;
456                                 int loopCount = pSeletedIndexList->GetCount();
457                                 if (__pContentIconListView != null)
458                                 {
459                                         for (int i = 0; i < loopCount; ++i)
460                                         {
461                                                 int index = static_cast<Integer*>(pSeletedIndexList->GetAt(i))->ToInt();
462                                                 __pContentIconListView->SetItemChecked(index, true);
463                                         }
464                                         __pContentIconListView->UpdateList();
465                                 }
466                         }
467                 }
468
469                 int checkedCount = GetItemCheckedCount();
470                 String strTmp;
471
472                 if (checkedCount == 0)
473                 {
474                         strTmp = ResourceManager::GetString(L"IDS_ST_POP_NO_ITEMS_SELECTED");
475                 }
476                 else if (checkedCount == 1)
477                 {
478                         strTmp = ResourceManager::GetString(L"IDS_VR_POP_1_ITEM_SELECTED");
479                 }
480                 else
481                 {
482                         strTmp.Format(LENGTH_COUNT_LABEL,
483                                         ResourceManager::GetString(L"IDS_VR_POP_PD_ITEMS_SELECTED").GetPointer(), checkedCount);
484                 }
485
486                 __pLabelSelectCnt->SetText(strTmp);
487                 __pLabelSelectCnt->RequestRedraw(true);
488         }
489         else if (previousSceneId == IDSCN_ALL_LIST)
490         {
491                 ResetSelection();
492         }
493
494         SetButtonState();
495
496         __pFileListEditorForm->SetTitleText(ResourceManager::GetString(L"IDS_COM_BODY_EDIT"));
497         
498         if (pArgs != null && pArgs->GetCount() > 0 && previousSceneId != IDSCN_ALL_LIST_SELECTION)
499         {
500                 String* pDirectory = static_cast<String*>(pArgs->GetAt(0));
501                 if (pDirectory != null && pDirectory->GetLength() > 0)
502                 {
503                         __pFileListEditorForm->MoveToAlbum(*pDirectory);
504                 }
505         }
506
507         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
508 }
509
510 void
511 AllListEditorPanel::OnSceneDeactivated(const SceneId& currentSceneId, const SceneId& nextSceneId)
512 {
513         AppLogDebug("ENTER");
514         __pPresentationModel->RemoveContentEventListener(__pFileListEditorForm);
515         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
516 }
517
518 int
519 AllListEditorPanel::GetItemCheckedCount(void) const
520 {
521         AppLogDebug("ENTER");
522         int count = 0;
523         if (__pContentIconListView != null)
524         {
525                 int loopCount = __pPresentationModel->GetCurrentAlbumContentInfoCount();
526                 for (int i = 0; i < loopCount; ++i)
527                 {
528                         if (__pContentIconListView->IsItemChecked(i))
529                         {
530                                 ++count;
531                         }
532                         else
533                         {
534                                 AppLog("Index i = %d is Not Checked", i);
535                         }
536                 }
537         }
538         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
539
540         return count;
541 }
542
543 IList*
544 AllListEditorPanel::GetItemCheckedIndexListN(void) const
545 {
546         AppLogDebug("ENTER");
547         IList* pList = new (std::nothrow) ArrayList(SingleObjectDeleter);
548         Integer* pIndex = null;
549
550         if (__pContentIconListView!=null)
551         {
552                 int loopCount = __pPresentationModel->GetCurrentAlbumContentInfoCount();
553                 for (int i = 0; i < loopCount; ++i)
554                 {
555                         if (__pContentIconListView->IsItemChecked(i) == true)
556                         {
557                                 pIndex = new (std::nothrow) Integer(i);
558                                 pList->Add(pIndex);
559                                 AppLogDebug("checked index(%d)", i);
560                         }
561                 }
562         }
563         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
564
565         return pList;
566 }
567
568 result
569 AllListEditorPanel::OnRequestDelete(void)
570 {
571         AppLogDebug("ENTER");
572         IList* pIndexList = GetItemCheckedIndexListN();
573         if (pIndexList->GetCount() <= 0)
574         {
575                 delete pIndexList;
576                 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
577
578                 return E_FAILURE;
579         }
580
581         delete __pFileUpdateTimer;
582         __pFileUpdateTimer = new (std::nothrow) FileUpdateTimer(pIndexList, __pPresentationModel, this, FILE_ACTION_DELETE);
583         result r = __pFileUpdateTimer->StartTimer();
584
585         if (IsFailed(r))
586         {
587                 delete __pFileUpdateTimer;
588                 __pFileUpdateTimer = null;
589                 return E_FAILURE;
590         }
591         else
592         {
593                 __pPresentationModel->SetUpdateProgressStatus(true);
594         }
595         return E_SUCCESS;
596 }
597
598 void AllListEditorPanel::OnFileOpInvalidate(enum FileActionMode actionId)
599 {
600         __pFileListEditorForm->Invalidate(true);
601 }
602
603 void AllListEditorPanel::OnFileOpComplete(enum FileActionMode actionId, enum FileActionCompleteRes res)
604 {
605         __pPresentationModel->SetUpdateProgressStatus(false);
606
607         __pLabelSelectCnt->SetText(ResourceManager::GetString(L"IDS_ST_POP_NO_ITEMS_SELECTED"));
608         __pLabelSelectCnt->RequestRedraw(true);
609
610         __pPresentationModel->RefreshCurrentAlbumContentInfoList(CONTENT_TYPE_ALL);
611         __itemCount = __pPresentationModel->GetCurrentAlbumContentInfoCount();
612         __pContentIconListView->UpdateList();
613
614         SceneManager* pSceneManager = SceneManager::GetInstance();
615         if (GetItemCount() > 0)
616         {
617                 pSceneManager->GoForward(ForwardSceneTransition(IDSCN_ALL_LIST,SCENE_TRANSITION_ANIMATION_TYPE_NONE,
618                                                                    SCENE_HISTORY_OPTION_ADD_HISTORY, SCENE_DESTROY_OPTION_DESTROY));
619         }
620         else
621         {
622                 pSceneManager->GoForward(ForwardSceneTransition(IDSCN_ALBUM_LIST,SCENE_TRANSITION_ANIMATION_TYPE_NONE,
623                                                                    SCENE_HISTORY_OPTION_ADD_HISTORY, SCENE_DESTROY_OPTION_DESTROY));
624         }
625         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
626 }
627
628 void
629 AllListEditorPanel::ChangeOrientation(void)
630 {
631         SceneManager* pSceneManager = SceneManager::GetInstance();
632         const Form* pForm = dynamic_cast<Form*>(pSceneManager->GetCurrentScene()->GetForm());
633         TryReturn(pForm != null, , "[%s] fail to get the form.", GetErrorMessage(GetLastResult()));
634
635         Rectangle clientAreaBounds = pForm->GetClientAreaBounds();
636         SetBounds(0, 0, clientAreaBounds.width, clientAreaBounds.height);
637         __pContentIconListView->SetBounds(0, 0, clientAreaBounds.width, clientAreaBounds.height - H_COUNT_LABEL);
638         __pLabelSelectCnt->SetBounds(0, clientAreaBounds.height - H_COUNT_LABEL, clientAreaBounds.width, H_COUNT_LABEL);
639         __pButtonSelectRegion->SetBounds(clientAreaBounds.width - W_COUNT_LABEL_BUTTON - 10, clientAreaBounds.height - H_COUNT_LABEL_BUTTON - 4, W_COUNT_LABEL_BUTTON, H_COUNT_LABEL_BUTTON);
640 }
641
642 result
643 AllListEditorPanel::OnRequestMessage(void)
644 {
645         AppLogDebug("ENTER");
646         result r = E_SUCCESS;
647         IList* pIndexList = GetItemCheckedIndexListN();
648         if (pIndexList == null || pIndexList->GetCount() <= 0)
649         {
650                 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
651
652                 return E_FAILURE;
653         }
654
655         Integer* pIndex = null;
656         int checkedIndex;
657         ArrayList* pArrayList = new (std::nothrow) ArrayList(SingleObjectDeleter);
658         pArrayList->Construct();
659         int loopCount = pIndexList->GetCount();
660
661         for (int i = 0; i < loopCount; ++i)
662         {
663                 pIndex = static_cast<Integer*>(pIndexList->GetAt(i));
664                 if (pIndex != null)
665                 {
666                         checkedIndex = pIndex->ToInt();
667                         pArrayList->Add(new (std::nothrow) String(__pPresentationModel->GetContentFilePath(checkedIndex)));
668                 }
669         }
670
671         HashMap* pDataList = new (std::nothrow) HashMap(SingleObjectDeleter);
672         pDataList->Construct();
673         pDataList->Add(new (std::nothrow) String(APPCONTROL_KEY_MESSAGE_TYPE), new (std::nothrow) String(APPCONTROL_DATA_MMS));
674         pDataList->Add(new (std::nothrow) String(APPCONTROL_KEY_PATH), (Object*)pArrayList);
675
676         r = __pPresentationModel->StartAppControl(APPCONTROL_PROVIDER_ID_MESSAGE, APPCONTROL_OPERATION_ID_COMPOSE, null,
677                         null, pDataList, null);
678
679         if (r == E_MAX_EXCEEDED)
680         {
681                 MessageBox messageBox;
682                 messageBox.Construct(L"", ResourceManager::GetString(L"IDS_RCS_BODY_MAXIMUM_NUMBER_OF_FILES_EXCEEDED"),
683                                 MSGBOX_STYLE_NONE, 3000);
684                 int modalResult;
685                 messageBox.ShowAndWait(modalResult);
686         }
687         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
688
689         return r;
690 }
691
692 result
693 AllListEditorPanel::OnRequestEmail(void)
694 {
695         AppLogDebug("ENTER");
696         result r = E_SUCCESS;
697
698         IList* pIndexList = GetItemCheckedIndexListN();
699         if (pIndexList == null || pIndexList->GetCount() <= 0)
700         {
701                 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
702
703                 return E_FAILURE;
704         }
705
706         Integer* pIndex = null;
707         int checkedIndex;
708         ArrayList* pArrayList = new (std::nothrow) ArrayList(SingleObjectDeleter);
709         pArrayList->Construct();
710         int loopCount = pIndexList->GetCount();
711
712         for (int i = 0; i < loopCount; ++i)
713         {
714                 pIndex = static_cast<Integer*>(pIndexList->GetAt(i));
715                 if (pIndex != null)
716                 {
717                         checkedIndex = pIndex->ToInt();
718                         pArrayList->Add(new (std::nothrow) String(__pPresentationModel->GetContentFilePath(checkedIndex)));
719                 }
720         }
721
722         HashMap* pDataList = new (std::nothrow) HashMap(SingleObjectDeleter);
723         pDataList->Construct();
724         pDataList->Add(new (std::nothrow) String(APPCONTROL_KEY_PATH), (Object*)pArrayList);
725
726         r = __pPresentationModel->StartAppControl(APPCONTROL_PROVIDER_ID_EMAIL, APPCONTROL_OPERATION_ID_COMPOSE,
727                         new (std::nothrow) String(APPCONTROL_URI_MAIL_TO), null, pDataList, null);
728
729         if (r == E_MAX_EXCEEDED)
730         {
731                 MessageBox messageBox;
732                 messageBox.Construct(L"", ResourceManager::GetString(L"IDS_RCS_BODY_MAXIMUM_NUMBER_OF_FILES_EXCEEDED"),
733                                 MSGBOX_STYLE_NONE, 3000);
734                 int modalResult;
735                 messageBox.ShowAndWait(modalResult);
736         }
737
738         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
739
740         return r;
741 }
742
743 result
744 AllListEditorPanel::OnRequestSlideShow(void)
745 {
746         AppLogDebug("ENTER");
747         result r = E_SUCCESS;
748         IList* pIndexList = GetItemCheckedIndexListN();
749         if (pIndexList == null)
750         {
751                 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
752                 return E_FAILURE;
753         }
754
755         Integer* pRealIndex = null;
756         int realIndex = -1;
757         ArrayList* pArrayList = new (std::nothrow) ArrayList(SingleObjectDeleter);
758         pArrayList->Construct();
759         int loopCount = pIndexList->GetCount();
760
761         for (int i = 0; i < loopCount; ++i)
762         {
763                 pRealIndex = static_cast<Integer*>(pIndexList->GetAt(i));
764                 if (pRealIndex != null)
765                 {
766                         realIndex = pRealIndex->ToInt();
767                         pArrayList->Add(new (std::nothrow) String(__pPresentationModel->GetContentFilePath(realIndex)));
768                 }
769         }
770
771         HashMap* pDataList = new (std::nothrow) HashMap(SingleObjectDeleter);
772         pDataList->Construct();
773         pDataList->Add(new (std::nothrow) String(APPCONTROL_KEY_TYPE), new (std::nothrow) String(APPCONTROL_DATA_SLIDE_SHOW));
774         pDataList->Add(new (std::nothrow) String(APPCONTROL_KEY_PATH), (Object*)pArrayList);
775
776         r = __pPresentationModel->StartAppControl(APPCONTROL_PROVIDER_ID_IMAGE, APPCONTROL_OPERATION_ID_VIEW, null,
777                         new (std::nothrow) String(APPCONTROL_MIME_IMAGE_ALL), pDataList, null);
778
779         if (r == E_MAX_EXCEEDED)
780         {
781                 MessageBox messageBox;
782                 messageBox.Construct(L"", ResourceManager::GetString(L"IDS_RCS_BODY_MAXIMUM_NUMBER_OF_FILES_EXCEEDED"),
783                                 MSGBOX_STYLE_NONE, 3000);
784                 int modalResult;
785                 messageBox.ShowAndWait(modalResult);
786         }
787
788         delete pIndexList;
789         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
790
791         return r;
792 }
793
794 void
795 AllListEditorPanel::ResetSelection(void)
796 {
797         AppLogDebug("ENTER");
798         __pPresentationModel->RefreshCurrentAlbumContentInfoList(CONTENT_TYPE_ALL);
799         __itemCount = __pPresentationModel->GetCurrentAlbumContentInfoCount();
800         __pContentIconListView->UpdateList();
801
802         for ( int index = 0; index < __itemCount; index++)
803         {
804                 __pContentIconListView->SetItemChecked(index, false);
805                 __pContentIconListView->RefreshList(index,LIST_REFRESH_TYPE_ITEM_MODIFY);
806         }
807
808         String strTmp;
809         strTmp = ResourceManager::GetString(L"IDS_ST_POP_NO_ITEMS_SELECTED");
810
811         __pLabelSelectCnt->SetText(strTmp);
812         __pLabelSelectCnt->RequestRedraw(true);
813         SetButtonState();
814         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
815 }
816
817 void
818 AllListEditorPanel::SetButtonState(void)
819 {
820         AppLogDebug("ENTER");
821         SceneManager* pSceneManager = SceneManager::GetInstance();
822         TryReturnVoid(pSceneManager != null, "[%s] fail to get SceneManager.", GetErrorMessage(GetLastResult()));
823
824         if (GetItemCheckedCount() > 0)
825         {
826                 AppLogDebug("BUTTONSTATE : Request Enable");
827                 __pFileListEditorForm->SetFooterButtonsState(true);
828                 __pButtonSelectRegion->SetShowState(true);
829         }
830         else
831         {
832                 AppLogDebug("BUTTONSTATE : Request disable");
833                 __pFileListEditorForm->SetFooterButtonsState(false);
834                 __pButtonSelectRegion->SetShowState(false);
835         }
836         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
837 }
838
839 void
840 AllListEditorPanel::OnSelectAllPressed(void)
841 {
842         bool needToSelectAll = true;
843         int checkedCount = GetItemCheckedCount();
844         int totalFileCount = __pPresentationModel->GetCurrentAlbumContentInfoCount();
845         if (checkedCount == totalFileCount)
846         {
847                 needToSelectAll = false;
848         }
849
850         if (needToSelectAll == true)
851         {
852                 for (int i = 0; i < totalFileCount; ++i)
853                 {
854                         if (__pContentIconListView->IsItemChecked(i) == false)
855                         {
856                                 __pContentIconListView->SetItemChecked(i,true);
857                                 __pContentIconListView->RefreshList(i, LIST_REFRESH_TYPE_ITEM_MODIFY);
858                         }
859                 }
860         }
861         else
862         {
863                 for (int i = 0; i < totalFileCount; ++i)
864                 {
865                         if (__pContentIconListView->IsItemChecked(i) == true)
866                         {
867                                 __pContentIconListView->SetItemChecked(i, false);
868                                 __pContentIconListView->RefreshList(i, LIST_REFRESH_TYPE_ITEM_MODIFY);
869                         }
870                 }
871         }
872
873         String tempString;
874         if (needToSelectAll == true)
875         {
876                 tempString.Format(LENGTH_COUNT_LABEL,
877                                                 ResourceManager::GetString(L"IDS_VR_POP_PD_ITEMS_SELECTED").GetPointer(), totalFileCount);
878         }
879         else
880         {
881                 tempString = ResourceManager::GetString(L"IDS_ST_POP_NO_ITEMS_SELECTED");
882         }
883
884         __pLabelSelectCnt->SetText(tempString);
885         __pLabelSelectCnt->RequestRedraw(true);
886         SetButtonState();
887 }
888
889 result
890 AllListEditorPanel::OnRequestRotate(RotateMode rotateMode)
891 {
892         AppLogDebug("ENTER");
893         IList* pIndexList = GetItemCheckedIndexListN();
894         if (pIndexList == null)
895         {
896                 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
897                 return E_FAILURE;
898         }
899         else if (pIndexList->GetCount() <= 0)
900         {
901                 delete pIndexList;
902                 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
903
904                 return E_FAILURE;
905         }
906
907         delete __pFileUpdateTimer;
908         __pFileUpdateTimer = new (std::nothrow) FileUpdateTimer(pIndexList, __pPresentationModel, this, FILE_ACTION_ROTATE, rotateMode);
909         result r = __pFileUpdateTimer->StartTimer();
910
911         if (IsFailed(r))
912         {
913                 delete __pFileUpdateTimer;
914                 __pFileUpdateTimer = null;
915                 return E_FAILURE;
916         }
917         else
918         {
919                 __pPresentationModel->SetUpdateProgressStatus(true);
920         }
921         return E_SUCCESS;
922 }
923
924 void AllListEditorPanel::CancelUpdateProgress(void)
925 {
926         if( __pFileUpdateTimer!= null && __pFileUpdateTimer->IsStarted())
927         {
928                 __pFileUpdateTimer->Cancel();
929                 delete __pFileUpdateTimer;
930                 __pFileUpdateTimer = null;
931         }
932 }