7d33a91615fc388da3b0fb73b092fa6efec2937d
[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         __pPresentationModel = FileListPresentationModel::GetInstance();
429
430         SceneManager* pSceneManager = SceneManager::GetInstance();
431         TryReturnVoid(pSceneManager != null, "[%s] fail to get SceneManager.", GetErrorMessage(GetLastResult()));
432         __pFileListEditorForm = dynamic_cast<FileListEditorForm*>(pSceneManager->GetCurrentScene()->GetForm());
433         TryReturnVoid(__pFileListEditorForm != null, "[%s] fail to get SceneManager.", GetErrorMessage(GetLastResult()));
434         __pPresentationModel->AddContentEventListener(__pFileListEditorForm);
435
436         if (previousSceneId == IDSCN_ALL_LIST_SELECTION)
437         {
438                 if (pArgs != null && pArgs->GetCount() > 0)
439                 {
440                         IList* pSeletedIndexList = pArgs;
441                         int loopCount = pSeletedIndexList->GetCount();
442                         for (int i = 0; i < loopCount; ++i)
443                         {
444                                 int index = static_cast<Integer*>(pSeletedIndexList->GetAt(i))->ToInt();
445                                 __pContentIconListView->SetItemChecked(index, true);
446                         }
447                         __pContentIconListView->RequestRedraw(true);
448                 }
449
450                 int checkedCount = GetItemCheckedCount();
451                 String strTmp;
452
453                 if (checkedCount == 0)
454                 {
455                         strTmp = ResourceManager::GetString(L"IDS_ST_POP_NO_ITEMS_SELECTED");
456                 }
457                 else if (checkedCount == 1)
458                 {
459                         strTmp = ResourceManager::GetString(L"IDS_VR_POP_1_ITEM_SELECTED");
460                 }
461                 else
462                 {
463                         strTmp.Format(LENGTH_COUNT_LABEL,
464                                         ResourceManager::GetString(L"IDS_VR_POP_PD_ITEMS_SELECTED").GetPointer(), checkedCount);
465                 }
466
467                 __pLabelSelectCnt->SetText(strTmp);
468                 __pLabelSelectCnt->RequestRedraw(true);
469                 SetButtonState();
470         }
471         else if (previousSceneId == IDSCN_ALL_LIST)
472         {
473                 ResetSelection();
474         }
475
476         SetButtonState();
477
478         __pFileListEditorForm->SetTitleText(ResourceManager::GetString(L"IDS_COM_BODY_EDIT"));
479         
480         if (pArgs != null && pArgs->GetCount() > 0 && previousSceneId != IDSCN_ALL_LIST_SELECTION)
481         {
482                 String* pDirectory = static_cast<String*>(pArgs->GetAt(0));
483                 if (pDirectory != null && pDirectory->GetLength() > 0)
484                 {
485                         __pFileListEditorForm->MoveToAlbum(*pDirectory);
486                 }
487         }
488
489         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
490 }
491
492 void
493 AllListEditorPanel::OnSceneDeactivated(const SceneId& currentSceneId, const SceneId& nextSceneId)
494 {
495         AppLogDebug("ENTER");
496         __pPresentationModel->RemoveContentEventListener(__pFileListEditorForm);
497         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
498 }
499
500 int
501 AllListEditorPanel::GetItemCheckedCount(void) const
502 {
503         AppLogDebug("ENTER");
504         int count = 0;
505         if (__pContentIconListView != null)
506         {
507                 int loopCount = __pPresentationModel->GetCurrentAlbumContentInfoCount();
508                 for (int i = 0; i < loopCount; ++i)
509                 {
510                         if (__pContentIconListView->IsItemChecked(i))
511                         {
512                                 ++count;
513                         }
514                 }
515         }
516         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
517
518         return count;
519 }
520
521 IList*
522 AllListEditorPanel::GetItemCheckedIndexListN(void) const
523 {
524         AppLogDebug("ENTER");
525         IList* pList = new (std::nothrow) ArrayList(SingleObjectDeleter);
526         Integer* pIndex = null;
527
528         if (__pContentIconListView!=null)
529         {
530                 int loopCount = __pPresentationModel->GetCurrentAlbumContentInfoCount();
531                 for (int i = 0; i < loopCount; ++i)
532                 {
533                         if (__pContentIconListView->IsItemChecked(i) == true)
534                         {
535                                 pIndex = new (std::nothrow) Integer(i);
536                                 pList->Add(pIndex);
537                                 AppLogDebug("checked index(%d)", i);
538                         }
539                 }
540         }
541         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
542
543         return pList;
544 }
545
546 result
547 AllListEditorPanel::OnRequestDelete(void)
548 {
549         AppLogDebug("ENTER");
550         IList* pIndexList = GetItemCheckedIndexListN();
551         if (pIndexList->GetCount() <= 0)
552         {
553                 delete pIndexList;
554                 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
555
556                 return E_FAILURE;
557         }
558
559         delete __pFileUpdateTimer;
560         __pFileUpdateTimer = new (std::nothrow) FileUpdateTimer(pIndexList, __pPresentationModel, this, FILE_ACTION_DELETE);
561         result r = __pFileUpdateTimer->StartTimer();
562
563         if (IsFailed(r))
564         {
565                 delete __pFileUpdateTimer;
566                 __pFileUpdateTimer = null;
567                 return E_FAILURE;
568         }
569         else
570         {
571                 __pPresentationModel->SetUpdateProgressStatus(true);
572         }
573         return E_SUCCESS;
574 }
575
576 void AllListEditorPanel::OnFileOpInvalidate(enum FileActionMode actionId)
577 {
578         __pFileListEditorForm->Invalidate(true);
579 }
580
581 void AllListEditorPanel::OnFileOpComplete(enum FileActionMode actionId, enum FileActionCompleteRes res)
582 {
583         __pPresentationModel->SetUpdateProgressStatus(false);
584
585         __pLabelSelectCnt->SetText(ResourceManager::GetString(L"IDS_ST_POP_NO_ITEMS_SELECTED"));
586         __pLabelSelectCnt->RequestRedraw(true);
587
588         __pPresentationModel->RefreshCurrentAlbumContentInfoList(CONTENT_TYPE_ALL);
589         __itemCount = __pPresentationModel->GetCurrentAlbumContentInfoCount();
590         __pContentIconListView->UpdateList();
591
592         SceneManager* pSceneManager = SceneManager::GetInstance();
593         if (GetItemCount() > 0)
594         {
595                 pSceneManager->GoForward(ForwardSceneTransition(IDSCN_ALL_LIST));
596         }
597         else
598         {
599                 pSceneManager->GoForward(ForwardSceneTransition(IDSCN_ALBUM_LIST));
600         }
601         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
602 }
603
604 result
605 AllListEditorPanel::OnRequestMessage(void)
606 {
607         AppLogDebug("ENTER");
608         IList* pIndexList = GetItemCheckedIndexListN();
609         if (pIndexList == null || pIndexList->GetCount() <= 0)
610         {
611                 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
612
613                 return E_FAILURE;
614         }
615
616         Integer* pIndex = null;
617         int checkedIndex;
618         ArrayList* pArrayList = new (std::nothrow) ArrayList(SingleObjectDeleter);
619         pArrayList->Construct();
620         int loopCount = pIndexList->GetCount();
621
622         for (int i = 0; i < loopCount; ++i)
623         {
624                 pIndex = static_cast<Integer*>(pIndexList->GetAt(i));
625                 if (pIndex != null)
626                 {
627                         checkedIndex = pIndex->ToInt();
628                         pArrayList->Add(new (std::nothrow) String(__pPresentationModel->GetContentFilePath(checkedIndex)));
629                 }
630         }
631
632         HashMap* pDataList = new (std::nothrow) HashMap(SingleObjectDeleter);
633         pDataList->Construct();
634         pDataList->Add(new (std::nothrow) String(APPCONTROL_KEY_MESSAGE_TYPE), new (std::nothrow) String(APPCONTROL_DATA_MMS));
635         pDataList->Add(new (std::nothrow) String(APPCONTROL_KEY_PATH), (Object*)pArrayList);
636
637         __pPresentationModel->StartAppControl(APPCONTROL_PROVIDER_ID_MESSAGE, APPCONTROL_OPERATION_ID_COMPOSE, null,
638                         null, pDataList, null);
639         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
640
641         return E_SUCCESS;
642 }
643
644 result
645 AllListEditorPanel::OnRequestEmail(void)
646 {
647         AppLogDebug("ENTER");
648         IList* pIndexList = GetItemCheckedIndexListN();
649         if (pIndexList == null || pIndexList->GetCount() <= 0)
650         {
651                 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
652
653                 return E_FAILURE;
654         }
655
656         Integer* pIndex = null;
657         int checkedIndex;
658         ArrayList* pArrayList = new (std::nothrow) ArrayList(SingleObjectDeleter);
659         pArrayList->Construct();
660         int loopCount = pIndexList->GetCount();
661
662         for (int i = 0; i < loopCount; ++i)
663         {
664                 pIndex = static_cast<Integer*>(pIndexList->GetAt(i));
665                 if (pIndex != null)
666                 {
667                         checkedIndex = pIndex->ToInt();
668                         pArrayList->Add(new (std::nothrow) String(__pPresentationModel->GetContentFilePath(checkedIndex)));
669                 }
670         }
671
672         HashMap* pDataList = new (std::nothrow) HashMap(SingleObjectDeleter);
673         pDataList->Construct();
674         pDataList->Add(new (std::nothrow) String(APPCONTROL_KEY_PATH), (Object*)pArrayList);
675
676         __pPresentationModel->StartAppControl(APPCONTROL_PROVIDER_ID_EMAIL, APPCONTROL_OPERATION_ID_COMPOSE,
677                         new (std::nothrow) String(APPCONTROL_URI_MAIL_TO), null, pDataList, null);
678         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
679
680         return E_SUCCESS;
681 }
682
683 result
684 AllListEditorPanel::OnRequestSlideShow(void)
685 {
686         AppLogDebug("ENTER");
687         IList* pIndexList = GetItemCheckedIndexListN();
688         if (pIndexList == null)
689         {
690                 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
691                 return E_FAILURE;
692         }
693
694         Integer* pRealIndex = null;
695         int realIndex = -1;
696         ArrayList* pArrayList = new (std::nothrow) ArrayList(SingleObjectDeleter);
697         pArrayList->Construct();
698         int loopCount = pIndexList->GetCount();
699
700         for (int i = 0; i < loopCount; ++i)
701         {
702                 pRealIndex = static_cast<Integer*>(pIndexList->GetAt(i));
703                 if (pRealIndex != null)
704                 {
705                         realIndex = pRealIndex->ToInt();
706                         pArrayList->Add(new (std::nothrow) String(__pPresentationModel->GetContentFilePath(realIndex)));
707                 }
708         }
709
710         HashMap* pDataList = new (std::nothrow) HashMap(SingleObjectDeleter);
711         pDataList->Construct();
712         pDataList->Add(new (std::nothrow) String(APPCONTROL_KEY_TYPE), new (std::nothrow) String(APPCONTROL_DATA_SLIDE_SHOW));
713         pDataList->Add(new (std::nothrow) String(APPCONTROL_KEY_PATH), (Object*)pArrayList);
714
715         __pPresentationModel->StartAppControl(APPCONTROL_PROVIDER_ID_IMAGE, APPCONTROL_OPERATION_ID_VIEW, null,
716                         new (std::nothrow) String(APPCONTROL_MIME_IMAGE_ALL), pDataList, null);
717
718         delete pIndexList;
719         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
720
721         return E_SUCCESS;
722 }
723
724 void
725 AllListEditorPanel::ResetSelection(void)
726 {
727         AppLogDebug("ENTER");
728         __pPresentationModel->RefreshCurrentAlbumContentInfoList(CONTENT_TYPE_ALL);
729         __itemCount = __pPresentationModel->GetCurrentAlbumContentInfoCount();
730
731         for ( int index = 0; index < __itemCount; index++)
732         {
733                 __pContentIconListView->SetItemChecked(index, false);
734         }
735
736         __pContentIconListView->UpdateList();
737
738         String strTmp;
739         strTmp = ResourceManager::GetString(L"IDS_ST_POP_NO_ITEMS_SELECTED");
740
741         __pLabelSelectCnt->SetText(strTmp);
742         __pLabelSelectCnt->RequestRedraw(true);
743         SetButtonState();
744         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
745 }
746
747 void
748 AllListEditorPanel::SetButtonState(void)
749 {
750         AppLogDebug("ENTER");
751         SceneManager* pSceneManager = SceneManager::GetInstance();
752         TryReturnVoid(pSceneManager != null, "[%s] fail to get SceneManager.", GetErrorMessage(GetLastResult()));
753
754         if (GetItemCheckedCount() > 0)
755         {
756                 AppLogDebug("BUTTONSTATE : Request Enable");
757                 __pFileListEditorForm->SetFooterButtonsState(true);
758                 __pButtonSelectRegion->SetShowState(true);
759         }
760         else
761         {
762                 AppLogDebug("BUTTONSTATE : Request disable");
763                 __pFileListEditorForm->SetFooterButtonsState(false);
764                 __pButtonSelectRegion->SetShowState(false);
765         }
766         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
767 }
768
769 void
770 AllListEditorPanel::OnSelectAllPressed(void)
771 {
772         bool needToSelectAll = true;
773         int checkedCount = GetItemCheckedCount();
774         int totalFileCount = __pPresentationModel->GetCurrentAlbumContentInfoCount();
775         if (checkedCount == totalFileCount)
776         {
777                 needToSelectAll = false;
778         }
779
780         if (needToSelectAll == true)
781         {
782                 for (int i = 0; i < totalFileCount; ++i)
783                 {
784                         if (__pContentIconListView->IsItemChecked(i) == false)
785                         {
786                                 __pContentIconListView->SetItemChecked(i,true);
787                                 __pContentIconListView->RefreshList(i, LIST_REFRESH_TYPE_ITEM_MODIFY);
788                         }
789                 }
790         }
791         else
792         {
793                 for (int i = 0; i < totalFileCount; ++i)
794                 {
795                         if (__pContentIconListView->IsItemChecked(i) == true)
796                         {
797                                 __pContentIconListView->SetItemChecked(i, false);
798                                 __pContentIconListView->RefreshList(i, LIST_REFRESH_TYPE_ITEM_MODIFY);
799                         }
800                 }
801         }
802
803         String tempString;
804         if (needToSelectAll == true)
805         {
806                 tempString.Format(LENGTH_COUNT_LABEL,
807                                                 ResourceManager::GetString(L"IDS_VR_POP_PD_ITEMS_SELECTED").GetPointer(), totalFileCount);
808         }
809         else
810         {
811                 tempString = ResourceManager::GetString(L"IDS_ST_POP_NO_ITEMS_SELECTED");
812         }
813
814         __pLabelSelectCnt->SetText(tempString);
815         __pLabelSelectCnt->RequestRedraw(true);
816         SetButtonState();
817 }
818
819 result
820 AllListEditorPanel::OnRequestRotate(RotateMode rotateMode)
821 {
822         AppLogDebug("ENTER");
823         IList* pIndexList = GetItemCheckedIndexListN();
824         if (pIndexList == null)
825         {
826                 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
827                 return E_FAILURE;
828         }
829         else if (pIndexList->GetCount() <= 0)
830         {
831                 delete pIndexList;
832                 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
833
834                 return E_FAILURE;
835         }
836
837         delete __pFileUpdateTimer;
838         __pFileUpdateTimer = new (std::nothrow) FileUpdateTimer(pIndexList, __pPresentationModel, this, FILE_ACTION_ROTATE, rotateMode);
839         result r = __pFileUpdateTimer->StartTimer();
840
841         if (IsFailed(r))
842         {
843                 delete __pFileUpdateTimer;
844                 __pFileUpdateTimer = null;
845                 return E_FAILURE;
846         }
847         else
848         {
849                 __pPresentationModel->SetUpdateProgressStatus(true);
850         }
851         return E_SUCCESS;
852 }