2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 // Licensed under the Flora License, Version 1.0 (the License);
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
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)
55 : __pContentIconListView(null)
56 , __pCheckButton(null)
57 , __pLabelSelectCnt(null)
59 , __pPresentationModel(null)
63 AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
66 ImageListEditorPanel::~ImageListEditorPanel(void)
70 AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
74 ImageListEditorPanel::Initialize(void)
77 result r = Construct(RECT_INITIAL);
78 AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
84 ImageListEditorPanel::OnInitializing(void)
87 const Form* pForm = dynamic_cast<Form*>(GetParent());
88 TryReturn(pForm != null, E_FAILURE, "[%s] fail to get the form.", GetErrorMessage(GetLastResult()));
90 __pPresentationModel = FileListPresentationModel::GetInstance();
91 __pPresentationModel->ClearThumbnailRequests();
92 __pPresentationModel->AddPresentationModelListener(this);
95 Rectangle clientAreaBounds = pForm->GetClientAreaBounds();
96 SetBounds(0, 0, clientAreaBounds.width, clientAreaBounds.height);
98 if (__pPresentationModel->GetAppControlMode() == APP_CONTROL_MODE_PICK)
100 __pContentIconListView = new (std::nothrow) IconListView();
102 if (__pPresentationModel->GetAppControlSelectionMode() == APPCONTROL_SELECTION_MODE_MULTIPLE)
104 __pContentIconListView->Construct(Rectangle(0, 0, clientAreaBounds.width, clientAreaBounds.height - H_COUNT_LABEL),
105 DIMENSION_DEFAULT_THUMBNAIL, ICON_LIST_VIEW_STYLE_MARK,
106 ICON_LIST_VIEW_SCROLL_DIRECTION_VERTICAL);
107 Bitmap* pBitmapEmpty = ResourceManager::GetBitmapN(IDB_LISTVIEW_EMPTY);
108 if (pBitmapEmpty != null)
110 __pContentIconListView->SetBitmapOfEmptyList(pBitmapEmpty);
113 __pContentIconListView->SetTextOfEmptyList(ResourceManager::GetString(L"IDS_COM_BODY_NO_ITEMS"));
114 __pContentIconListView->SetItemBorderStyle(ICON_LIST_VIEW_ITEM_BORDER_STYLE_NONE);
115 __pContentIconListView->SetItemProvider(*this);
116 __pContentIconListView->SetCheckBoxPosition(ICON_LIST_VIEW_CHECK_BOX_POSITION_TOP_RIGHT);
117 __pContentIconListView->AddIconListViewItemEventListener(*this);
118 __pContentIconListView->SetTouchAnimationEnabled(false);
119 AddControl(*__pContentIconListView);
120 __pContentIconListView->SetShowState(true);
122 __pLabelSelectCnt = new (std::nothrow) Label();
123 __pLabelSelectCnt->Construct(Rectangle(0, clientAreaBounds.height-H_COUNT_LABEL,
124 clientAreaBounds.width, H_COUNT_LABEL), ResourceManager::GetString(L"IDS_ST_POP_NO_ITEMS_SELECTED"));
125 __pLabelSelectCnt->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
126 __pLabelSelectCnt->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
127 __pLabelSelectCnt->SetBackgroundColor(COLOR_COUNT_LABEL);
128 __pLabelSelectCnt->SetTextColor(Color(COLOR_SELECT_COUNT_FONT));
129 __pLabelSelectCnt->SetTextConfig(COUNT_LABEL_FONT_SIZE, LABEL_TEXT_STYLE_BOLD);
130 AddControl(*__pLabelSelectCnt);
134 __pContentIconListView->Construct(Rectangle(0, 0, clientAreaBounds.width, clientAreaBounds.height),
135 DIMENSION_DEFAULT_THUMBNAIL, ICON_LIST_VIEW_STYLE_NORMAL,
136 ICON_LIST_VIEW_SCROLL_DIRECTION_VERTICAL);
137 Bitmap* pBitmapEmpty = ResourceManager::GetBitmapN(IDB_LISTVIEW_EMPTY);
138 if (pBitmapEmpty != null)
140 __pContentIconListView->SetBitmapOfEmptyList(pBitmapEmpty);
143 __pContentIconListView->SetTextOfEmptyList(ResourceManager::GetString(L"IDS_COM_BODY_NO_ITEMS"));
144 __pContentIconListView->SetItemBorderStyle(ICON_LIST_VIEW_ITEM_BORDER_STYLE_NONE);
145 __pContentIconListView->SetItemProvider(*this);
146 __pContentIconListView->SetCheckBoxPosition(ICON_LIST_VIEW_CHECK_BOX_POSITION_TOP_RIGHT);
147 __pContentIconListView->AddIconListViewItemEventListener(*this);
148 __pContentIconListView->SetTouchAnimationEnabled(false);
149 AddControl(*__pContentIconListView);
150 __pContentIconListView->SetShowState(true);
155 __pContentIconListView = new (std::nothrow) IconListView();
156 __pContentIconListView->Construct(Rectangle(0, H_SELECTALL_REGION, clientAreaBounds.width,
157 clientAreaBounds.height - H_SELECTALL_REGION), DIMENSION_DEFAULT_THUMBNAIL,
158 ICON_LIST_VIEW_STYLE_MARK, ICON_LIST_VIEW_SCROLL_DIRECTION_VERTICAL);
159 Bitmap* pBitmapEmpty = ResourceManager::GetBitmapN(IDB_LISTVIEW_EMPTY);
160 if (pBitmapEmpty != null)
162 __pContentIconListView->SetBitmapOfEmptyList(pBitmapEmpty);
165 __pContentIconListView->SetTextOfEmptyList(ResourceManager::GetString(L"IDS_COM_BODY_NO_ITEMS"));
166 __pContentIconListView->SetItemBorderStyle(ICON_LIST_VIEW_ITEM_BORDER_STYLE_NONE);
167 __pContentIconListView->SetItemProvider(*this);
168 __pContentIconListView->SetCheckBoxPosition(ICON_LIST_VIEW_CHECK_BOX_POSITION_TOP_RIGHT);
169 __pContentIconListView->AddIconListViewItemEventListener(*this);
170 __pContentIconListView->SetTouchAnimationEnabled(false);
171 AddControl(*__pContentIconListView);
172 __pContentIconListView->SetShowState(true);
174 __pLabelSelectCnt = new (std::nothrow) Label();
175 __pLabelSelectCnt->Construct(
176 Rectangle(0, clientAreaBounds.height-H_COUNT_LABEL, clientAreaBounds.width, H_COUNT_LABEL),
177 ResourceManager::GetString(L"IDS_ST_POP_NO_ITEMS_SELECTED"));
178 __pLabelSelectCnt->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
179 __pLabelSelectCnt->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
180 __pLabelSelectCnt->SetBackgroundColor(COLOR_COUNT_LABEL);
181 __pLabelSelectCnt->SetTextColor(Color(COLOR_SELECT_COUNT_FONT));
182 AddControl(*__pLabelSelectCnt);
184 AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
190 ImageListEditorPanel::OnTerminating(void)
192 AppLogDebug("ENTER");
193 __pPresentationModel->RemovePresentationModelListener(*this);
194 AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
200 ImageListEditorPanel::GetItemCount(void)
202 AppLogDebug("ENTER");
203 AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
209 ImageListEditorPanel::CreateItem(int index)
211 AppLogDebug("ENTER : index(%d)", index);
212 IconListViewItem* pIconListviewItem = new (std::nothrow) IconListViewItem();
213 Bitmap* pBitmap = null;
214 String* pItemText = null;
216 result r = __pPresentationModel->GetThumbnailInSyncCacheN(index, pItemText, pBitmap);
217 if (pBitmap == null || r == E_FAILURE)
219 __pPresentationModel->RequestThumbnail(index);
220 pBitmap = CommonUtil::GetEmptyThumbnailN();
223 if (pItemText == null)
225 pItemText = new (std::nothrow) String(ResourceManager::GetString(L"EMPTY_SPACE"));
227 else if ((*pItemText) != ResourceManager::GetString(L"EMPTY_SPACE"))
230 pItemText = new (std::nothrow) String(ResourceManager::GetString(L"EMPTY_SPACE"));
233 if (__pContentIconListView->IsItemChecked(index) == true)
237 BufferInfo bufferInfo;
238 pBitmap->Lock(bufferInfo, INFINITE);
240 Color dimColor(COLOR_THUMBNAIL_DIM);
241 dimColor.SetAlpha(ALPHA_THUMBNAIL_DIM);
244 canvas.Construct(bufferInfo);
245 canvas.FillRectangle(dimColor, canvas.GetBounds());
247 Bitmap* pSelectedBitmap = new (std::nothrow) Bitmap();
248 pSelectedBitmap->Construct(canvas, canvas.GetBounds());
249 pIconListviewItem->Construct(*pBitmap, pItemText, pSelectedBitmap);
250 delete pSelectedBitmap;
254 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
255 delete pIconListviewItem;
262 pIconListviewItem->Construct(*pBitmap, pItemText);
269 if (pItemText != null)
273 AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
275 return pIconListviewItem;
279 ImageListEditorPanel::DeleteItem(int index, IconListViewItem* pItem)
281 AppLogDebug("ENTER");
283 AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
289 ImageListEditorPanel::OnIconListViewItemStateChanged(IconListView& view, int index, IconListViewItemStatus status)
291 AppLogDebug("ENTER");
293 if (status == ICON_LIST_VIEW_ITEM_CHECKED || status == ICON_LIST_VIEW_ITEM_UNCHECKED)
295 if (__pPresentationModel->GetAppControlMode() == APP_CONTROL_MODE_PICK)
297 if (__pPresentationModel->GetAppControlSelectionMode() == APPCONTROL_SELECTION_MODE_MULTIPLE)
299 int checkedCount = GetItemCheckedCount();
301 if (checkedCount == 0)
303 strTmp = ResourceManager::GetString(L"IDS_ST_POP_NO_ITEMS_SELECTED");
305 else if (checkedCount == 1)
307 strTmp = ResourceManager::GetString(L"IDS_VR_POP_1_ITEM_SELECTED");
311 strTmp.Format(LENGTH_COUNT_LABEL,
312 ResourceManager::GetString(L"IDS_VR_POP_PD_ITEMS_SELECTED").GetPointer(), checkedCount);
315 __pLabelSelectCnt->SetText(strTmp);
316 __pLabelSelectCnt->RequestRedraw(true);
317 __pContentIconListView->RefreshList(index, LIST_REFRESH_TYPE_ITEM_MODIFY);
322 int checkedCount = GetItemCheckedCount();
324 if (checkedCount == 0)
326 strTmp = ResourceManager::GetString(L"IDS_ST_POP_NO_ITEMS_SELECTED");
328 else if (checkedCount == 1)
330 strTmp = ResourceManager::GetString(L"IDS_VR_POP_1_ITEM_SELECTED");
334 strTmp.Format(LENGTH_COUNT_LABEL,
335 ResourceManager::GetString(L"IDS_VR_POP_PD_ITEMS_SELECTED").GetPointer(), checkedCount);
338 __pLabelSelectCnt->SetText(strTmp);
339 __pLabelSelectCnt->RequestRedraw(true);
340 if (__pCheckButton->IsSelected())
342 __pCheckButton->SetSelected(false);
344 __pContentIconListView->RefreshList(index, LIST_REFRESH_TYPE_ITEM_MODIFY);
348 if ( __pPresentationModel->GetAppControlMode() == APP_CONTROL_MODE_PICK
349 && __pPresentationModel->GetAppControlSelectionMode() == APPCONTROL_SELECTION_MODE_SINGLE)
351 if (status == ICON_LIST_VIEW_ITEM_SELECTED)
353 HashMap* map = new (std::nothrow) HashMap(SingleObjectDeleter);
354 result r = map->Construct();
357 ArrayList* pArrayList = new (std::nothrow) ArrayList(SingleObjectDeleter);
358 r = pArrayList->Construct();
362 pArrayList->Add(new (std::nothrow) String(__pPresentationModel->GetContentFilePath(index)));
363 map->Add(new (std::nothrow) String(APPCONTROL_KEY_DATA_SELECTED), (Object*)pArrayList);
365 GalleryApp* pApp = dynamic_cast<GalleryApp*>(UiApp::GetInstance());
368 pApp->SendAppControlResult(APP_CTRL_RESULT_SUCCEEDED, map);
390 AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
394 ImageListEditorPanel::OnFileInfoChanged(const ContentType contentType)
396 AppLogDebug("ENTER");
397 if (contentType == CONTENT_TYPE_IMAGE)
399 __pPresentationModel->RefreshCurrentAlbumContentInfoList(CONTENT_TYPE_IMAGE);
400 __itemCount = __pPresentationModel->GetCurrentAlbumContentInfoCount();
401 __pContentIconListView->UpdateList();
403 AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
407 ImageListEditorPanel::OnThumbnailDecoded(const int index)
409 AppLogDebug("ENTER : index(%d)",index);
412 __pContentIconListView->RefreshList(index, LIST_REFRESH_TYPE_ITEM_MODIFY);
414 AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
418 ImageListEditorPanel::OnSceneActivatedN(const SceneId& previousSceneId,
419 const SceneId& currentSceneId, IList* pArgs)
421 AppLogDebug("ENTER");
423 SceneManager* pSceneManager = SceneManager::GetInstance();
424 __pFileListEditorForm = dynamic_cast<FileListEditorForm*>(pSceneManager->GetCurrentScene()->GetForm());
426 __pPresentationModel = FileListPresentationModel::GetInstance();
428 if (__pPresentationModel->GetAppControlMode() == APP_CONTROL_MODE_PICK)
430 if (currentSceneId == IDSCN_IMAGE_LIST_EDITOR)
432 if (previousSceneId == IDSCN_ALBUM_LIST)
434 AlbumInfo* pAlbumInfo = static_cast<AlbumInfo*>(pArgs->GetAt(0));
435 if (pAlbumInfo == null)
437 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
442 IList* pDirectoryList = pAlbumInfo->GetDirectoryListN();
443 __pPresentationModel->SetCurrentAlbumInfo(pAlbumInfo->GetAlbumName(), *pDirectoryList);
445 if (pDirectoryList != null)
447 delete pDirectoryList;
451 __itemCount = __pPresentationModel->GetCurrentAlbumContentInfoCount();
452 __pContentIconListView->UpdateList();
458 __itemCount = __pPresentationModel->GetCurrentAlbumContentInfoCount();
459 __pContentIconListView->RequestRedraw(true);
461 AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
465 ImageListEditorPanel::OnSceneDeactivated(const SceneId& currentSceneId,
466 const SceneId& nextSceneId)
468 AppLogDebug("ENTER");
469 AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
473 ImageListEditorPanel::GetItemCheckedCount(void) const
475 AppLogDebug("ENTER");
477 if (__pContentIconListView != null)
479 int loopCount = __pPresentationModel->GetCurrentAlbumContentInfoCount();
480 for (int i = 0; i < loopCount; ++i)
482 if (__pContentIconListView->IsItemChecked(i))
488 AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
494 ImageListEditorPanel::GetItemCheckedIndexListN(void) const
496 AppLogDebug("ENTER");
497 IList* pList = new (std::nothrow) ArrayList(SingleObjectDeleter);
498 Integer* pIndex = null;
500 if (__pContentIconListView != null)
502 int loopCount = __pPresentationModel->GetCurrentAlbumContentInfoCount();
503 AppLogDebug("ENTER loopCount(%d)", loopCount);
504 for (int i = 0; i < loopCount; ++i)
506 if (__pContentIconListView->IsItemChecked(i))
508 pIndex = new (std::nothrow) Integer(i);
509 AppLogDebug("ENTER loopCount(%d)", loopCount);
510 AppLogDebug("ENTER loopCount(%d)", pIndex->ToInt());
515 AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
520 void ImageListEditorPanel::OnFileOpInvalidate(enum FileActionMode actionId)
522 SceneManager* pSceneManager = SceneManager::GetInstance();
523 FileListEditorForm* pFileListEditorForm =
524 dynamic_cast<FileListEditorForm*>(pSceneManager->GetCurrentScene()->GetForm());
525 TryReturnVoid(pFileListEditorForm != null, "[%s] fail to get SceneManager.",
526 GetErrorMessage(GetLastResult()));
527 pFileListEditorForm->Invalidate(true);
530 void ImageListEditorPanel::OnFileOpComplete(enum FileActionMode actionId, enum FileActionCompleteRes res)
535 ImageListEditorPanel::OnRequestAppExitWithMultipleSelectionAppControlResult(void)
537 AppLogDebug("ENTER");
538 IList* pIndexList = GetItemCheckedIndexListN();
540 if (pIndexList->GetCount() <= 0)
543 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
547 ArrayList* pArrayList = new (std::nothrow) ArrayList(SingleObjectDeleter);
548 pArrayList->Construct();
549 int loopCount = pIndexList->GetCount();
550 Integer* temp = null;
551 for (int i = 0; i < loopCount; ++i)
553 temp = static_cast<Integer*>(pIndexList->GetAt(i));
554 pArrayList->Add(new (std::nothrow) String(__pPresentationModel->GetContentFilePath(temp->ToInt())));
557 HashMap* map = new (std::nothrow) HashMap(SingleObjectDeleter);
559 map->Add(new (std::nothrow) String(APPCONTROL_KEY_DATA_SELECTED), pArrayList);
561 GalleryApp* pApp = dynamic_cast<GalleryApp*>(UiApp::GetInstance());
564 pApp->SendAppControlResult(APP_CTRL_RESULT_SUCCEEDED, map);
569 AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
573 ImageListEditorPanel::SelectAllPressed(void)
575 bool needToSelectAll = true;
576 int checkedCount = GetItemCheckedCount();
577 int totalFileCount = __pPresentationModel->GetCurrentAlbumContentInfoCount();
578 if (checkedCount == totalFileCount)
580 needToSelectAll = false;
583 if (needToSelectAll == true)
585 for (int i = 0 ; i < totalFileCount; ++i)
587 if (__pContentIconListView->IsItemChecked(i) == false)
589 __pContentIconListView->SetItemChecked(i,true);
590 __pContentIconListView->RefreshList(i, LIST_REFRESH_TYPE_ITEM_MODIFY);
596 for (int i = 0 ; i < totalFileCount; ++i)
598 if (__pContentIconListView->IsItemChecked(i) == true)
600 __pContentIconListView->SetItemChecked(i, false);
601 __pContentIconListView->RefreshList(i, LIST_REFRESH_TYPE_ITEM_MODIFY);
607 if (needToSelectAll == true)
609 tempString.Format(LENGTH_COUNT_LABEL,
610 ResourceManager::GetString(L"IDS_VR_POP_PD_ITEMS_SELECTED").GetPointer(), totalFileCount);
614 tempString = ResourceManager::GetString(L"IDS_ST_POP_NO_ITEMS_SELECTED");
617 __pLabelSelectCnt->SetText(tempString);
618 __pLabelSelectCnt->RequestRedraw(true);
622 ImageListEditorPanel::SetButtonState(void)
624 AppLogDebug("ENTER");
625 SceneManager* pSceneManager = SceneManager::GetInstance();
626 TryReturnVoid(pSceneManager != null, "[%s] fail to get SceneManager.", GetErrorMessage(GetLastResult()));
628 if (GetItemCheckedCount() > 0)
630 AppLogDebug("BUTTONSTATE : Request Enable");
631 __pFileListEditorForm->SetFooterButtonsState(true);
635 AppLogDebug("BUTTONSTATE : Request disable");
636 __pFileListEditorForm->SetFooterButtonsState(false);
638 AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));