2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
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
8 // http://floralicense.org/license/
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.
18 * @file GlImageListEditorPanel.cpp
19 * @brief This is the implementation file for ImageListEditorPanel class.
24 #include "GlAlbumInfo.h"
25 #include "GlCommonUtil.h"
26 #include "GlFileListPresentationModel.h"
27 #include "GlGalleryApp.h"
28 #include "GlImageListEditorPanel.h"
29 #include "GlResourceManager.h"
31 #include "GlFileUpdateTimer.h"
32 #include "GlFileListEditorForm.h"
34 using namespace Tizen::App;
35 using namespace Tizen::Base;
36 using namespace Tizen::Base::Collection;
37 using namespace Tizen::Content;
38 using namespace Tizen::Graphics;
39 using namespace Tizen::Media;
40 using namespace Tizen::Ui;
41 using namespace Tizen::Ui::Controls;
42 using namespace Tizen::Ui::Scenes;
44 static const int H_SELECTALL_REGION = 112;
45 static const int COUNT_LABEL_FONT_SIZE = 33;
46 static const unsigned int COLOR_COUNT_LABEL = Color32<68, 68, 68>::Value;
47 static const unsigned int COLOR_SELECT_COUNT_FONT = Color32<255, 255, 255>::Value;
48 static const Color COLOR_THUMBNAIL_DIM (Color::GetColor(COLOR_ID_BLACK));
49 static const int H_COUNT_LABEL = 48;
50 static const int LENGTH_COUNT_LABEL = 256;
51 static const int ALPHA_THUMBNAIL_DIM = 70;
52 static const Rectangle RECT_INITIAL (0, 0, 10, 10);
54 ImageListEditorPanel::ImageListEditorPanel(void)
56 , __pContentIconListView(null)
57 , __pCheckButton(null)
58 , __pLabelSelectCnt(null)
59 , __pPresentationModel(null)
60 , __pFileListEditorForm(null)
63 AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
66 ImageListEditorPanel::~ImageListEditorPanel(void)
69 AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
73 ImageListEditorPanel::Initialize(void)
76 result r = Construct(RECT_INITIAL);
77 AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
83 ImageListEditorPanel::OnInitializing(void)
86 const Form* pForm = dynamic_cast<Form*>(GetParent());
87 TryReturn(pForm != null, E_FAILURE, "[%s] fail to get the form.", GetErrorMessage(GetLastResult()));
89 __pPresentationModel = FileListPresentationModel::GetInstance();
90 __pPresentationModel->ClearThumbnailRequests();
91 __pPresentationModel->AddPresentationModelListener(this);
94 Rectangle clientAreaBounds = pForm->GetClientAreaBounds();
95 SetBounds(0, 0, clientAreaBounds.width, clientAreaBounds.height);
97 if (__pPresentationModel->GetAppControlMode() == APPCONTROL_MODE_PICK)
99 __pContentIconListView = new (std::nothrow) IconListView();
101 if (__pPresentationModel->GetAppControlSelectionMode() == APPCONTROL_SELECTION_MODE_MULTIPLE)
103 __pContentIconListView->Construct(Rectangle(0, 0, clientAreaBounds.width, clientAreaBounds.height - H_COUNT_LABEL),
104 DIMENSION_DEFAULT_THUMBNAIL, ICON_LIST_VIEW_STYLE_MARK,
105 ICON_LIST_VIEW_SCROLL_DIRECTION_VERTICAL);
106 Bitmap* pBitmapEmpty = ResourceManager::GetBitmapN(IDB_LISTVIEW_EMPTY);
107 if (pBitmapEmpty != null)
109 __pContentIconListView->SetBitmapOfEmptyList(pBitmapEmpty);
112 __pContentIconListView->SetTextOfEmptyList(ResourceManager::GetString(L"IDS_COM_BODY_NO_ITEMS"));
113 __pContentIconListView->SetItemBorderStyle(ICON_LIST_VIEW_ITEM_BORDER_STYLE_NONE);
114 __pContentIconListView->SetItemProvider(*this);
115 __pContentIconListView->SetCheckBoxPosition(ICON_LIST_VIEW_CHECK_BOX_POSITION_TOP_RIGHT);
116 __pContentIconListView->AddIconListViewItemEventListener(*this);
117 __pContentIconListView->SetTouchAnimationEnabled(false);
118 AddControl(__pContentIconListView);
119 __pContentIconListView->SetShowState(true);
121 __pLabelSelectCnt = new (std::nothrow) Label();
122 __pLabelSelectCnt->Construct(Rectangle(0, clientAreaBounds.height - H_COUNT_LABEL,
123 clientAreaBounds.width, H_COUNT_LABEL), ResourceManager::GetString(L"IDS_ST_POP_NO_ITEMS_SELECTED"));
124 __pLabelSelectCnt->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
125 __pLabelSelectCnt->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
126 __pLabelSelectCnt->SetBackgroundColor(COLOR_COUNT_LABEL);
127 __pLabelSelectCnt->SetTextColor(Color(COLOR_SELECT_COUNT_FONT));
128 __pLabelSelectCnt->SetTextConfig(COUNT_LABEL_FONT_SIZE, LABEL_TEXT_STYLE_BOLD);
129 AddControl(__pLabelSelectCnt);
133 __pContentIconListView->Construct(Rectangle(0, 0, clientAreaBounds.width, clientAreaBounds.height),
134 DIMENSION_DEFAULT_THUMBNAIL, ICON_LIST_VIEW_STYLE_NORMAL,
135 ICON_LIST_VIEW_SCROLL_DIRECTION_VERTICAL);
136 Bitmap* pBitmapEmpty = ResourceManager::GetBitmapN(IDB_LISTVIEW_EMPTY);
137 if (pBitmapEmpty != null)
139 __pContentIconListView->SetBitmapOfEmptyList(pBitmapEmpty);
142 __pContentIconListView->SetTextOfEmptyList(ResourceManager::GetString(L"IDS_COM_BODY_NO_ITEMS"));
143 __pContentIconListView->SetItemBorderStyle(ICON_LIST_VIEW_ITEM_BORDER_STYLE_NONE);
144 __pContentIconListView->SetItemProvider(*this);
145 __pContentIconListView->SetCheckBoxPosition(ICON_LIST_VIEW_CHECK_BOX_POSITION_TOP_RIGHT);
146 __pContentIconListView->AddIconListViewItemEventListener(*this);
147 __pContentIconListView->SetTouchAnimationEnabled(false);
148 AddControl(__pContentIconListView);
149 __pContentIconListView->SetShowState(true);
154 __pContentIconListView = new (std::nothrow) IconListView();
155 __pContentIconListView->Construct(Rectangle(0, H_SELECTALL_REGION, clientAreaBounds.width,
156 clientAreaBounds.height - H_SELECTALL_REGION), DIMENSION_DEFAULT_THUMBNAIL,
157 ICON_LIST_VIEW_STYLE_MARK, ICON_LIST_VIEW_SCROLL_DIRECTION_VERTICAL);
158 Bitmap* pBitmapEmpty = ResourceManager::GetBitmapN(IDB_LISTVIEW_EMPTY);
159 if (pBitmapEmpty != null)
161 __pContentIconListView->SetBitmapOfEmptyList(pBitmapEmpty);
164 __pContentIconListView->SetTextOfEmptyList(ResourceManager::GetString(L"IDS_COM_BODY_NO_ITEMS"));
165 __pContentIconListView->SetItemBorderStyle(ICON_LIST_VIEW_ITEM_BORDER_STYLE_NONE);
166 __pContentIconListView->SetItemProvider(*this);
167 __pContentIconListView->SetCheckBoxPosition(ICON_LIST_VIEW_CHECK_BOX_POSITION_TOP_RIGHT);
168 __pContentIconListView->AddIconListViewItemEventListener(*this);
169 __pContentIconListView->SetTouchAnimationEnabled(false);
170 AddControl(__pContentIconListView);
171 __pContentIconListView->SetShowState(true);
173 __pLabelSelectCnt = new (std::nothrow) Label();
174 __pLabelSelectCnt->Construct(
175 Rectangle(0, clientAreaBounds.height - H_COUNT_LABEL, clientAreaBounds.width, H_COUNT_LABEL),
176 ResourceManager::GetString(L"IDS_ST_POP_NO_ITEMS_SELECTED"));
177 __pLabelSelectCnt->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
178 __pLabelSelectCnt->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
179 __pLabelSelectCnt->SetBackgroundColor(COLOR_COUNT_LABEL);
180 __pLabelSelectCnt->SetTextColor(Color(COLOR_SELECT_COUNT_FONT));
181 AddControl(__pLabelSelectCnt);
183 AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
189 ImageListEditorPanel::OnTerminating(void)
191 AppLogDebug("ENTER");
192 __pPresentationModel->RemovePresentationModelListener(*this);
193 AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
199 ImageListEditorPanel::GetItemCount(void)
201 AppLogDebug("ENTER");
202 AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
208 ImageListEditorPanel::CreateItem(int index)
210 AppLogDebug("ENTER : index(%d)", index);
211 IconListViewItem* pIconListviewItem = new (std::nothrow) IconListViewItem();
212 Bitmap* pBitmap = null;
213 String* pItemText = null;
215 result r = __pPresentationModel->GetThumbnailInSyncCacheN(index, pItemText, pBitmap);
216 if (pBitmap == null || r == E_FAILURE)
218 __pPresentationModel->RequestThumbnail(index);
219 pBitmap = CommonUtil::GetEmptyThumbnailN();
222 if (pItemText == null)
224 pItemText = new (std::nothrow) String(ResourceManager::GetString(L"EMPTY_SPACE"));
226 else if ((*pItemText) != ResourceManager::GetString(L"EMPTY_SPACE"))
229 pItemText = new (std::nothrow) String(ResourceManager::GetString(L"EMPTY_SPACE"));
232 if (__pContentIconListView->IsItemChecked(index) == true)
236 BufferInfo bufferInfo;
237 pBitmap->Lock(bufferInfo, INFINITE);
239 Color dimColor(COLOR_THUMBNAIL_DIM);
240 dimColor.SetAlpha(ALPHA_THUMBNAIL_DIM);
243 canvas.Construct(bufferInfo);
244 canvas.FillRectangle(dimColor, canvas.GetBounds());
246 Bitmap* pSelectedBitmap = new (std::nothrow) Bitmap();
247 pSelectedBitmap->Construct(canvas, canvas.GetBounds());
248 pIconListviewItem->Construct(*pBitmap, pItemText, pSelectedBitmap);
249 delete pSelectedBitmap;
253 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
254 delete pIconListviewItem;
261 pIconListviewItem->Construct(*pBitmap, pItemText);
268 if (pItemText != null)
272 AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
274 return pIconListviewItem;
278 ImageListEditorPanel::DeleteItem(int index, IconListViewItem* pItem)
280 AppLogDebug("ENTER");
282 AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
288 ImageListEditorPanel::OnIconListViewItemStateChanged(IconListView& view, int index, IconListViewItemStatus status)
290 AppLogDebug("ENTER");
292 if (status == ICON_LIST_VIEW_ITEM_CHECKED || status == ICON_LIST_VIEW_ITEM_UNCHECKED)
294 if (__pPresentationModel->GetAppControlMode() == APPCONTROL_MODE_PICK)
296 if (__pPresentationModel->GetAppControlSelectionMode() == APPCONTROL_SELECTION_MODE_MULTIPLE)
298 int checkedCount = GetItemCheckedCount();
300 if (checkedCount == 0)
302 strTmp = ResourceManager::GetString(L"IDS_ST_POP_NO_ITEMS_SELECTED");
304 else if (checkedCount == 1)
306 strTmp = ResourceManager::GetString(L"IDS_VR_POP_1_ITEM_SELECTED");
310 strTmp.Format(LENGTH_COUNT_LABEL,
311 ResourceManager::GetString(L"IDS_VR_POP_PD_ITEMS_SELECTED").GetPointer(), checkedCount);
314 __pLabelSelectCnt->SetText(strTmp);
315 __pLabelSelectCnt->RequestRedraw(true);
316 __pContentIconListView->RefreshList(index, LIST_REFRESH_TYPE_ITEM_MODIFY);
321 int checkedCount = GetItemCheckedCount();
323 if (checkedCount == 0)
325 strTmp = ResourceManager::GetString(L"IDS_ST_POP_NO_ITEMS_SELECTED");
327 else if (checkedCount == 1)
329 strTmp = ResourceManager::GetString(L"IDS_VR_POP_1_ITEM_SELECTED");
333 strTmp.Format(LENGTH_COUNT_LABEL,
334 ResourceManager::GetString(L"IDS_VR_POP_PD_ITEMS_SELECTED").GetPointer(), checkedCount);
337 __pLabelSelectCnt->SetText(strTmp);
338 __pLabelSelectCnt->RequestRedraw(true);
339 if (__pCheckButton->IsSelected())
341 __pCheckButton->SetSelected(false);
343 __pContentIconListView->RefreshList(index, LIST_REFRESH_TYPE_ITEM_MODIFY);
347 if ( __pPresentationModel->GetAppControlMode() == APPCONTROL_MODE_PICK
348 && __pPresentationModel->GetAppControlSelectionMode() == APPCONTROL_SELECTION_MODE_SINGLE)
350 if (status == ICON_LIST_VIEW_ITEM_SELECTED)
352 HashMap* pMap = new (std::nothrow) HashMap(SingleObjectDeleter);
353 result r = pMap->Construct();
356 ArrayList* pArrayList = new (std::nothrow) ArrayList(SingleObjectDeleter);
357 r = pArrayList->Construct();
361 pArrayList->Add(new (std::nothrow) String(__pPresentationModel->GetContentFilePath(index)));
362 pMap->Add(new (std::nothrow) String(APPCONTROL_KEY_DATA_SELECTED), (Object*)pArrayList);
364 GalleryApp* pApp = dynamic_cast<GalleryApp*>(UiApp::GetInstance());
367 pApp->SendAppControlResult(APP_CTRL_RESULT_SUCCEEDED, pMap);
389 AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
393 ImageListEditorPanel::OnFileInfoChanged(const ContentType contentType)
395 AppLogDebug("ENTER");
396 if (contentType == CONTENT_TYPE_IMAGE)
398 __pPresentationModel->RefreshCurrentAlbumContentInfoList(CONTENT_TYPE_IMAGE);
399 __itemCount = __pPresentationModel->GetCurrentAlbumContentInfoCount();
400 __pContentIconListView->UpdateList();
402 AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
406 ImageListEditorPanel::OnThumbnailDecoded(const int index)
408 AppLogDebug("ENTER : index(%d)",index);
411 __pContentIconListView->RefreshList(index, LIST_REFRESH_TYPE_ITEM_MODIFY);
413 AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
417 ImageListEditorPanel::OnSceneActivatedN(const SceneId& previousSceneId,
418 const SceneId& currentSceneId, IList* pArgs)
420 AppLogDebug("ENTER");
424 SceneManager* pSceneManager = SceneManager::GetInstance();
425 __pFileListEditorForm = dynamic_cast<FileListEditorForm*>(pSceneManager->GetCurrentScene()->GetForm());
427 __pPresentationModel = FileListPresentationModel::GetInstance();
429 if (__pPresentationModel->GetAppControlMode() == APPCONTROL_MODE_PICK)
431 if (currentSceneId == IDSCN_IMAGE_LIST_EDITOR)
433 if (previousSceneId == IDSCN_ALBUM_LIST)
435 AlbumInfo* pAlbumInfo = static_cast<AlbumInfo*>(pArgs->GetAt(0));
436 if (pAlbumInfo == null)
438 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
443 IList* pDirectoryList = pAlbumInfo->GetDirectoryListN();
444 __pPresentationModel->SetCurrentAlbumInfo(pAlbumInfo->GetAlbumName(), *pDirectoryList);
446 if (pDirectoryList != null)
448 delete pDirectoryList;
452 __itemCount = __pPresentationModel->GetCurrentAlbumContentInfoCount();
453 __pContentIconListView->UpdateList();
459 __itemCount = __pPresentationModel->GetCurrentAlbumContentInfoCount();
460 __pContentIconListView->RequestRedraw(true);
462 AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
466 ImageListEditorPanel::OnSceneDeactivated(const SceneId& currentSceneId,
467 const SceneId& nextSceneId)
469 AppLogDebug("ENTER");
470 AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
474 ImageListEditorPanel::GetItemCheckedCount(void) const
476 AppLogDebug("ENTER");
478 if (__pContentIconListView != null)
480 int loopCount = __pPresentationModel->GetCurrentAlbumContentInfoCount();
481 for (int i = 0; i < loopCount; ++i)
483 if (__pContentIconListView->IsItemChecked(i))
489 AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
495 ImageListEditorPanel::GetItemCheckedIndexListN(void) const
497 AppLogDebug("ENTER");
498 IList* pList = new (std::nothrow) ArrayList(SingleObjectDeleter);
499 Integer* pIndex = null;
501 if (__pContentIconListView != null)
503 int loopCount = __pPresentationModel->GetCurrentAlbumContentInfoCount();
504 AppLogDebug("ENTER loopCount(%d)", loopCount);
505 for (int i = 0; i < loopCount; ++i)
507 if (__pContentIconListView->IsItemChecked(i))
509 pIndex = new (std::nothrow) Integer(i);
510 AppLogDebug("ENTER loopCount(%d)", loopCount);
511 AppLogDebug("ENTER loopCount(%d)", pIndex->ToInt());
516 AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
521 void ImageListEditorPanel::OnFileOpInvalidate(enum FileActionMode actionId)
523 SceneManager* pSceneManager = SceneManager::GetInstance();
524 FileListEditorForm* pFileListEditorForm =
525 dynamic_cast<FileListEditorForm*>(pSceneManager->GetCurrentScene()->GetForm());
526 TryReturnVoid(pFileListEditorForm != null, "[%s] fail to get SceneManager.",
527 GetErrorMessage(GetLastResult()));
528 pFileListEditorForm->Invalidate(true);
531 void ImageListEditorPanel::OnFileOpComplete(enum FileActionMode actionId, enum FileActionCompleteRes res)
536 ImageListEditorPanel::OnRequestAppExitWithMultipleSelectionAppControlResult(void)
538 AppLogDebug("ENTER");
539 IList* pIndexList = GetItemCheckedIndexListN();
541 if (pIndexList->GetCount() <= 0)
544 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
548 ArrayList* pArrayList = new (std::nothrow) ArrayList(SingleObjectDeleter);
549 pArrayList->Construct();
550 int loopCount = pIndexList->GetCount();
551 Integer* pTemp = null;
552 for (int i = 0; i < loopCount; ++i)
554 pTemp = static_cast<Integer*>(pIndexList->GetAt(i));
555 pArrayList->Add(new (std::nothrow) String(__pPresentationModel->GetContentFilePath(pTemp->ToInt())));
558 HashMap* pMap = new (std::nothrow) HashMap(SingleObjectDeleter);
560 pMap->Add(new (std::nothrow) String(APPCONTROL_KEY_DATA_SELECTED), pArrayList);
562 GalleryApp* pApp = dynamic_cast<GalleryApp*>(UiApp::GetInstance());
565 pApp->SendAppControlResult(APP_CTRL_RESULT_SUCCEEDED, pMap);
570 AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
574 ImageListEditorPanel::OnSelectAllPressed(void)
576 bool needToSelectAll = true;
577 int checkedCount = GetItemCheckedCount();
578 int totalFileCount = __pPresentationModel->GetCurrentAlbumContentInfoCount();
579 if (checkedCount == totalFileCount)
581 needToSelectAll = false;
584 if (needToSelectAll == true)
586 for (int i = 0; i < totalFileCount; ++i)
588 if (__pContentIconListView->IsItemChecked(i) == false)
590 __pContentIconListView->SetItemChecked(i, true);
591 __pContentIconListView->RefreshList(i, LIST_REFRESH_TYPE_ITEM_MODIFY);
593 __pFileListEditorForm->SetFooterButtonsState(true);
598 for (int i = 0; i < totalFileCount; ++i)
600 if (__pContentIconListView->IsItemChecked(i) == true)
602 __pContentIconListView->SetItemChecked(i, false);
603 __pContentIconListView->RefreshList(i, LIST_REFRESH_TYPE_ITEM_MODIFY);
605 __pFileListEditorForm->SetFooterButtonsState(false);
610 if (needToSelectAll == true)
612 tempString.Format(LENGTH_COUNT_LABEL,
613 ResourceManager::GetString(L"IDS_VR_POP_PD_ITEMS_SELECTED").GetPointer(), totalFileCount);
617 tempString = ResourceManager::GetString(L"IDS_ST_POP_NO_ITEMS_SELECTED");
620 __pLabelSelectCnt->SetText(tempString);
621 __pLabelSelectCnt->RequestRedraw(true);
625 ImageListEditorPanel::SetButtonState(void)
627 AppLogDebug("ENTER");
628 SceneManager* pSceneManager = SceneManager::GetInstance();
629 TryReturnVoid(pSceneManager != null, "[%s] fail to get SceneManager.", GetErrorMessage(GetLastResult()));
631 if (GetItemCheckedCount() > 0)
633 AppLogDebug("BUTTONSTATE : Request Enable");
634 __pFileListEditorForm->SetFooterButtonsState(true);
638 AppLogDebug("BUTTONSTATE : Request disable");
639 __pFileListEditorForm->SetFooterButtonsState(false);
641 AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
645 ImageListEditorPanel::ChangeOrientation(void)
647 AppLogDebug("ENTER");
648 SceneManager* pSceneManager = SceneManager::GetInstance();
649 const Form* pForm = dynamic_cast<Form*>(pSceneManager->GetCurrentScene()->GetForm());
650 TryReturn(pForm != null, , "[%s] fail to get the form.", GetErrorMessage(GetLastResult()));
652 Rectangle clientAreaBounds = pForm->GetClientAreaBounds();
653 SetBounds(0, 0, clientAreaBounds.width, clientAreaBounds.height);
654 if ( __pLabelSelectCnt != NULL )
656 __pLabelSelectCnt->SetBounds(0, clientAreaBounds.height - H_COUNT_LABEL, clientAreaBounds.width, H_COUNT_LABEL);
658 __pContentIconListView->SetBounds(0, 0, clientAreaBounds.width, clientAreaBounds.height -H_COUNT_LABEL);