2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
5 // Licensed under the Flora License, Version 1.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://floralicense.org/license/
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an AS IS BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
17 #include <FBaseErrors.h>
18 #include <FBaseRtTimer.h>
19 #include <FBaseSysLog.h>
21 #include "FUi_ResourceManager.h"
22 #include "FUiCtrl_GalleryPresenter.h"
23 #include "FUiCtrl_GalleryModel.h"
24 #include "FUiCtrl_GalleryItemProvider.h"
25 #include "FUiCtrl_GalleryCoreEvent.h"
26 #include "FUiCtrl_GalleryCoreEventArg.h"
27 #include "FUiCtrl_GalleryImageReader.h"
28 #include "FUiCtrl_GalleryViewEventHandler.h"
29 #include "FUiCtrl_IGalleryCoreEventListener.h"
30 #include "FUiCtrl_IGalleryRenderer.h"
31 #include "FUiCtrl_GalleryBitmap.h"
32 #include "FUiCtrl_GalleryViewEvent.h"
33 #include "FUiAnim_VisualElement.h"
36 using namespace Tizen::Base;
37 using namespace Tizen::Graphics;
38 using namespace Tizen::Ui;
40 namespace Tizen { namespace Ui { namespace Controls {
45 const int DEFAULT_ITEM_SPACING = 30;
47 const int DEFAULT_ANIMATION_DURATION = 3000;
48 const int MIN_ANIMATION_DURATION = 300;
49 const int MAX_ANIMATION_DURATION = 20000;
50 const int DEFAULT_VIEW_DURATION = 10;
51 const int MIN_VIEW_DURATION = 10;
52 const int FIRST_SLIDE_SHOW_DURATION = 1;
54 const int PARTIAL_CANVAS = 0;
55 } // unnamed namespace
57 IMPLEMENT_PROPERTY(_GalleryPresenter);
59 _GalleryPresenter::_GalleryPresenter(_IGalleryRenderer& galleryRenderer)
60 : __galleryRenderer(galleryRenderer)
61 , __pGalleryViewEventHandler(null)
62 , __pGalleryCoreEvent(null)
63 , __pGalleryItemProvider(null)
64 , __pGalleryModel(null)
65 , __pGalleryImageReader(null)
66 , __pEmptyGalleryImage(null)
68 , __slideShowAnimationDuration(DEFAULT_ANIMATION_DURATION)
69 , __slideShowViewDuration(DEFAULT_VIEW_DURATION)
70 , __gallerySlideShowType(GALLERY_SLIDESHOW_DISSOLVE)
71 , __currentItemIndex(NO_CURRENT_IMAGE)
72 , __slideShowRepeat(false)
73 , __slideShowStarted(false)
74 , __zoomingEnabled(true)
75 , __pSlideShowTimer(null)
76 , __slideShowPlayCount(0)
77 , __itemSpacing(DEFAULT_ITEM_SPACING)
78 , __pItemToCanvas(null)
79 , __fittingType(GALLERY_FITTING_TYPE_FIT)
80 , __verticalAlignment(GALLERY_VERTICAL_ALIGN_MIDDLE)
81 , __horizontalAlignment(GALLERY_HORIZONTAL_ALIGN_CENTER)
83 , __emptyFontStyle(FONT_STYLE_PLAIN)
85 AddPropertyChangeEventListener(*this);
88 _GalleryPresenter::~_GalleryPresenter(void)
90 delete __pGalleryViewEventHandler;
91 delete __pGalleryImageReader;
92 delete __pGalleryModel;
93 delete __pGalleryItemProvider;
94 delete __pGalleryCoreEvent;
95 delete __pEmptyGalleryImage;
96 delete[] __pItemToCanvas;
97 delete __pSlideShowTimer;
98 __pSlideShowTimer = null;
102 _GalleryPresenter::CreateGalleryPresenterN(_IGalleryRenderer& galleryRenderer, _GalleryItemProviderAdaptorImpl* pGalleryItemProviderAdaptor)
104 _GalleryPresenter* pPresenter = new (std::nothrow) _GalleryPresenter(galleryRenderer);
105 SysTryReturn(NID_UI_CTRL, pPresenter != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
107 result r = pPresenter->Construct(pGalleryItemProviderAdaptor);
108 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
110 SetLastResult(E_SUCCESS);
120 _GalleryPresenter::Construct(_GalleryItemProviderAdaptorImpl* pGalleryItemProviderAdaptor)
122 SetLastResult(E_SUCCESS);
124 result r = E_SUCCESS;
126 __pGalleryCoreEvent = new (std::nothrow) _GalleryCoreEvent();
127 SysTryCatch(NID_UI_CTRL, __pGalleryCoreEvent != null, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
129 __pGalleryItemProvider = new (std::nothrow) _GalleryItemProvider(*__pGalleryCoreEvent, pGalleryItemProviderAdaptor);
130 SysTryCatch(NID_UI_CTRL, __pGalleryItemProvider != null, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
132 __pGalleryModel = _GalleryModel::CreateGalleryModelN(*__pGalleryItemProvider);
133 SysTryCatch(NID_UI_CTRL, __pGalleryModel != null, , GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
135 __pGalleryImageReader = new (std::nothrow) _GalleryImageReader(*__pGalleryModel);
136 SysTryCatch(NID_UI_CTRL, __pGalleryImageReader != null, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
138 __pItemToCanvas = new(std::nothrow) int[MAX_CANVAS_COUNT];
139 SysTryCatch(NID_UI_CTRL, __pItemToCanvas != null, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
140 memset(__pItemToCanvas, -1, sizeof(int) * MAX_CANVAS_COUNT);
142 r = __galleryRenderer.SetCanvasMaxCount(MAX_CANVAS_COUNT);
143 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
145 r = __galleryRenderer.EnableEmptyView();
146 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
148 GET_STRING_CONFIG(IDS_COM_BODY_NO_IMAGES, __emptyText);
149 r = __galleryRenderer.SetEmptyText(__emptyText);
150 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
152 __pGalleryViewEventHandler = new (std::nothrow) _GalleryViewEventHandler(*this, __galleryRenderer, *__pGalleryImageReader);
153 SysTryCatch(NID_UI_CTRL, __pGalleryViewEventHandler != null, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
155 r = __pGalleryViewEventHandler->Construct();
156 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
158 SetFontStyle(FONT_STYLE_PLAIN);
164 delete __pGalleryViewEventHandler;
165 delete __pGalleryImageReader;
166 delete __pGalleryModel;
167 delete __pGalleryItemProvider;
168 delete __pGalleryCoreEvent;
169 delete[] __pItemToCanvas;
175 _GalleryPresenter::GetCurrentItemIndex(void) const
177 return __currentItemIndex;
181 _GalleryPresenter::SetCurrentItemIndex(int index, bool eventFire)
183 SysTryReturn(NID_UI_CTRL, index < __pGalleryModel->GetItemCount(), E_OUT_OF_RANGE, E_OUT_OF_RANGE,
184 "[E_OUT_OF_RANGE] The argument(%d) is out of range.", index);
186 if (__currentItemIndex != NO_CURRENT_IMAGE && __currentItemIndex != index)
188 __currentItemIndex = index;
189 if (eventFire == true)
196 __currentItemIndex = index;
199 __pGalleryViewEventHandler->SetZoomFlag(false);
205 _GalleryPresenter::SetCurrentItem(int index)
207 SysTryReturn(NID_UI_CTRL, index >=0 && index < __pGalleryModel->GetItemCount(), E_OUT_OF_RANGE, E_OUT_OF_RANGE,
208 "[E_OUT_OF_RANGE] The argument(%d) is out of range.", index);
210 int oldCurrentCanvasIndex = 0;
211 result r = E_SUCCESS;
213 if (index == __currentItemIndex)
218 if (__currentItemIndex != NO_CURRENT_IMAGE)
220 oldCurrentCanvasIndex = SearchCanvasIndex(__currentItemIndex);
221 SysTryReturn(NID_UI_CTRL, oldCurrentCanvasIndex != NOT_EXIST_CANVAS, E_SYSTEM, E_SYSTEM,
222 "[E_SYSTEM] The canvas of %d item is not exist.", oldCurrentCanvasIndex);
224 if (__currentItemIndex > index)
226 Rectangle rect = __galleryRenderer.GetViewRect();
228 r = __galleryRenderer.SetCanvasBounds(oldCurrentCanvasIndex, rect);
230 else if (__currentItemIndex < index)
232 Rectangle rect = __galleryRenderer.GetViewRect();
233 rect.x = -rect.width;
234 r = __galleryRenderer.SetCanvasBounds(oldCurrentCanvasIndex, rect);
237 r = __galleryRenderer.SetCanvasVisibility(oldCurrentCanvasIndex, false);
238 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
241 int newCurrentCanvasIndex = SearchCanvasIndex(index);
242 if (newCurrentCanvasIndex == NOT_EXIST_CANVAS)
244 r = SetCanvasImage(index);
245 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
246 newCurrentCanvasIndex = SearchCanvasIndex(index);
248 r = __galleryRenderer.SetCanvasBounds(newCurrentCanvasIndex, __galleryRenderer.GetViewRect());
249 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
251 r = __galleryRenderer.SetCanvasVisibility(newCurrentCanvasIndex, true);
252 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
254 r = SetCurrentItemIndex(index);
255 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
262 result resultValue = __galleryRenderer.SetCanvasVisibility(oldCurrentCanvasIndex, true);
263 if (resultValue != E_SUCCESS)
265 SysLog(NID_UI_CTRL, "[%s] Failed to setting of canvas visibility.", GetErrorMessage(resultValue));
272 _GalleryPresenter::GetItemCount(void) const
274 return __pGalleryModel->GetItemCount();
278 _GalleryPresenter::SetItemSpacing(int spacing)
280 __itemSpacing = spacing;
283 _GalleryPresenter::GetItemSpacing(void) const
285 return __itemSpacing;
288 _GallerySlideShowType
289 _GalleryPresenter::GetSlideShowType(void) const
291 return __gallerySlideShowType;
295 _GalleryPresenter::SetSlideShowType(_GallerySlideShowType slideShowType)
297 SysTryReturn(NID_UI_CTRL, slideShowType >= GALLERY_SLIDESHOW_DISSOLVE && slideShowType <= GALLERY_SLIDESHOW_PAGE,
298 E_OUT_OF_RANGE, E_OUT_OF_RANGE, "[E_OUT_OF_RANGE] The animation argument(%d) is out of range", slideShowType);
300 __gallerySlideShowType = slideShowType;
306 _GalleryPresenter::GetSlideShowAnimationDuration(void) const
308 Variant variant = GetProperty("slideShowAnimationDuration");
309 return variant.ToInt();
313 _GalleryPresenter::SetSlideShowAnimationDuration(int duration)
315 SysTryReturn(NID_UI_CTRL, duration >= MIN_ANIMATION_DURATION && duration <= MAX_ANIMATION_DURATION,
316 E_OUT_OF_RANGE, E_OUT_OF_RANGE, "[E_OUT_OF_RANGE] The argument(%d) is out of range.", duration);
318 return SetProperty("slideShowAnimationDuration", Variant(duration));
322 _GalleryPresenter::GetSlideShowViewDuration(void) const
324 Variant variant = GetProperty("slideShowViewDuration");
325 return variant.ToInt();
329 _GalleryPresenter::SetSlideShowViewDuration(int duration)
331 SysTryReturn(NID_UI_CTRL, duration >= MIN_VIEW_DURATION, E_OUT_OF_RANGE, E_OUT_OF_RANGE,
332 "[E_OUT_OF_RANGE] The argument(%d) is out of range.", duration);
334 return SetProperty("slideShowViewDuration", Variant(duration));
338 _GalleryPresenter::StartSlideShow(bool repeat)
340 SysTryReturn(NID_UI_CTRL, __pSlideShowTimer == null, E_INVALID_OPERATION, E_INVALID_OPERATION,
341 "[E_INVALID_OPERATION] Slide show is already started");
343 if (GetItemCount() == 0)
348 __slideShowRepeat = repeat;
349 __slideShowPlayCount = GetItemCount() - 1;
351 result r = StartSlideShowTimer(GetSlideShowViewDuration());
352 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
354 _GalleryCoreEventArg* pArg = new(std::nothrow) _GalleryCoreEventArg(GALLERY_CORE_EVENT_SLIDE_SHOW_STARTED);
355 __pGalleryCoreEvent->Fire(*pArg);
361 _GalleryPresenter::StopSlideShow(void)
363 SysTryReturn(NID_UI_CTRL, __pSlideShowTimer != null, E_INVALID_OPERATION, E_INVALID_OPERATION,
364 "[E_INVALID_OPERATION] Slide show is already stopped");
366 StopSlideShowTimer();
367 __galleryRenderer.StopAllCanvasAnimation();
369 result r = __pGalleryViewEventHandler->SetVisibleCanvas();
370 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
372 _GalleryCoreEventArg* pArg = new(std::nothrow) _GalleryCoreEventArg(GALLERY_CORE_EVENT_SLIDE_SHOW_STOPPED);
373 __pGalleryCoreEvent->Fire(*pArg);
375 r = __galleryRenderer.RefreshView();
376 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
382 _GalleryPresenter::GetTextOfEmptyGallery(void) const
384 Variant variant = GetProperty("textOfEmptyGallery");
385 return variant.ToString();
389 _GalleryPresenter::SetTextOfEmptyGallery(const String& text)
391 result r = __galleryRenderer.SetEmptyText(text);
392 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
394 return SetProperty("textOfEmptyGallery", Variant(text));
398 _GalleryPresenter::SetBitmapOfEmptyGallery(const _GalleryBitmap* pBitmap)
400 result r = __galleryRenderer.SetEmptyImage(pBitmap);
401 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
403 __pEmptyGalleryImage = const_cast <_GalleryBitmap*>(pBitmap);
409 _GalleryPresenter::IsSlideShowStarted(void) const
411 return __pSlideShowTimer != null ? true : false;
415 _GalleryPresenter::SetZoomingEnabled(bool enable)
417 return SetProperty("zoomingEnabled", Variant(enable));
421 _GalleryPresenter::IsZoomingEnabled(void) const
423 Variant variant = GetProperty("zoomingEnabled");
425 return variant.ToBool();
429 _GalleryPresenter::PostEvent(_GalleryViewEvent& event)
431 bool slideShowStarted = false;
432 if (__pSlideShowTimer != null && event.GetEventType() != GALLERY_VIEW_EVENT_BOUNDS_CHANGED)
434 result r = StopSlideShow();
435 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, false, r, "[%s] Propagating.", GetErrorMessage(r));
436 slideShowStarted = true;
439 if (GetItemCount() == 0)
441 if (event.GetEventType() == GALLERY_VIEW_EVENT_BOUNDS_CHANGED)
443 return OnBoundsChanged();
445 //SetLastResult(E_SUCCESS);
449 switch (event.GetEventType())
451 case GALLERY_VIEW_EVENT_TOUCH_PRESSED:
453 if (slideShowStarted == true)
455 result r = __pGalleryViewEventHandler->SetVisibleCanvas();
456 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, false, r, "[%s] Propagating.", GetErrorMessage(r));
459 return __pGalleryViewEventHandler->OnTouchPressed(*(event.GetEventInfo()));
462 case GALLERY_VIEW_EVENT_TOUCH_RELEASED:
463 return __pGalleryViewEventHandler->OnTouchReleased(*(event.GetEventInfo()));
465 case GALLERY_VIEW_EVENT_TOUCH_DOUBLE_PRESSED:
466 __galleryRenderer.SetCanvasVisibility(PARTIAL_CANVAS, false);
467 return __pGalleryViewEventHandler->OnTouchDoublePressed(*(event.GetEventInfo()));
469 case GALLERY_VIEW_EVENT_TOUCH_MOVED:
470 __galleryRenderer.SetCanvasVisibility(PARTIAL_CANVAS, false);
471 return __pGalleryViewEventHandler->OnTouchMoved(*(event.GetEventInfo()));
473 case GALLERY_VIEW_EVENT_TOUCH_PINCH_ZOOM:
474 return __pGalleryViewEventHandler->OnTouchPinchZoom(*(event.GetEventInfo()));
476 case GALLERY_VIEW_EVENT_TOUCH_FLICK:
477 //__galleryRenderer.SetCanvasVisibility(PARTIAL_CANVAS, false);
478 return __pGalleryViewEventHandler->OnTouchFlicked(*(event.GetEventInfo()));
480 case GALLERY_VIEW_EVENT_BOUNDS_CHANGED:
481 return OnBoundsChanged();
484 SysTryReturn(NID_UI_CTRL, false, false, E_INVALID_ARG,
485 "[E_INVALID_ARG] The event type(%d) is invalid type", event.GetEventType());
488 //SetLastResult(E_SUCCESS);
493 _GalleryPresenter::OnBoundsChanged(void)
496 result r = E_SUCCESS;
498 r = __galleryRenderer.InitializeCanvasBounds();
499 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, true, r, "[%s] Propagating.", GetErrorMessage(r));
501 if (GetItemCount() > 0)
503 for (int canvasIndex = PARTIAL_CANVAS + 1; canvasIndex < MAX_CANVAS_COUNT; canvasIndex++)
505 itemIndex = __pItemToCanvas[canvasIndex];
506 if (itemIndex != NOT_EXIST_CANVAS)
508 r = __galleryRenderer.SetCanvasImage(canvasIndex, __pGalleryImageReader->GetItemImage(itemIndex)
509 , __verticalAlignment, __horizontalAlignment, __fittingType);
510 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, true, r, "[%s] Propagating.", GetErrorMessage(r));
516 r = __galleryRenderer.EnableEmptyView();
517 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, true, r, "[%s] Propagating.", GetErrorMessage(r));
518 SetLastResult(E_SUCCESS);
522 int currentItemIndex = GetCurrentItemIndex();
523 int currentCanvasIndex = SearchCanvasIndex(currentItemIndex);
524 int nextItemIndex = GetCurrentItemIndex() + 1;
525 if (nextItemIndex >= GetItemCount())
529 int nextCanvasIndex = SearchCanvasIndex(nextItemIndex);
531 r = __galleryRenderer.SetCanvasShowState(currentCanvasIndex, true);
532 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, true, r, "[%s] Propagating.", GetErrorMessage(r));
534 if (__pSlideShowTimer != null && __slideShowStarted == true)
536 r = __galleryRenderer.SetCanvasShowState(nextCanvasIndex, true);
537 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, true, r, "[%s] Propagating.", GetErrorMessage(r));
541 __galleryRenderer.GalleryBoundsChanged(currentCanvasIndex);
542 Rectangle canvasBounds = __galleryRenderer.GetCanvasBounds(currentCanvasIndex);
543 Rectangle imageBounds = __galleryRenderer.GetCanvasImageBounds(currentCanvasIndex);
544 __pGalleryViewEventHandler->CorrectCanvasPosition(canvasBounds, imageBounds);
545 r = __galleryRenderer.SetCanvasBounds(currentCanvasIndex, canvasBounds);
546 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, true, r, "[%s] Propagating.", GetErrorMessage(r));
548 r = __pGalleryViewEventHandler->AlignCanvas(false);
549 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, true, r, "[%s] Propagating.", GetErrorMessage(r));
552 SetLastResult(E_SUCCESS);
558 _GalleryPresenter::OnDraw(void)
560 result r = E_SUCCESS;
562 if (GetItemCount() > 0 && GetCurrentItemIndex() == NO_CURRENT_IMAGE)
564 r = SetCurrentItem(0);
565 SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
568 r = __galleryRenderer.Draw();
569 SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
571 SetLastResult(E_SUCCESS);
575 _GalleryPresenter::SetCoreEventListener(const _IGalleryCoreEventListener& coreEventListener)
577 return __pGalleryCoreEvent->AddListener(coreEventListener);
581 _GalleryPresenter::RemoveCoreEventListener(const _IGalleryCoreEventListener& coreEventListener)
583 return __pGalleryCoreEvent->RemoveListener(coreEventListener);
587 _GalleryPresenter::ClickedItem(void)
589 _GalleryCoreEventArg* pArg = new(std::nothrow) _GalleryCoreEventArg(GALLERY_CORE_EVENT_ITEM_CLICKED, __currentItemIndex);
590 return __pGalleryCoreEvent->Fire(*pArg);
594 _GalleryPresenter::ChangedItem(void)
596 if (__currentItemIndex == NO_CURRENT_IMAGE)
601 _GalleryCoreEventArg* pArg = new(std::nothrow) _GalleryCoreEventArg(GALLERY_CORE_EVENT_CURRENT_ITEM_CHANGED, __currentItemIndex);
602 return __pGalleryCoreEvent->Fire(*pArg);
606 _GalleryPresenter::RequestToLoadItem(int itemIndex)
608 result r = __pGalleryModel->RequestToLoadItem(itemIndex);
609 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
610 SortItemToCanvasIndex(itemIndex, true);
612 if (GetItemCount() == 1)
614 r = __galleryRenderer.DisableEmptyView();
615 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
617 r = SetCurrentItem(itemIndex);
618 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
621 r = __galleryRenderer.RefreshView();
622 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
628 _GalleryPresenter::RequestToUnloadItem(int itemIndex)
630 result r = __pGalleryModel->RequestToUnloadItem(itemIndex);
631 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
633 int canvasIndex = SearchCanvasIndex(itemIndex);
634 if (canvasIndex != NOT_EXIST_CANVAS)
636 __galleryRenderer.SetCanvasVisibility(canvasIndex, false);
637 __pItemToCanvas[canvasIndex] = NOT_USED_CANVAS;
639 SortItemToCanvasIndex(itemIndex, false);
641 if (GetItemCount() == 0)
643 r = SetCurrentItemIndex(NO_CURRENT_IMAGE);
644 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
646 r = __galleryRenderer.EnableEmptyView();
647 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
651 if (itemIndex < GetItemCount())
653 r = SetCanvasImage(itemIndex);
654 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
656 int canvasIndex = SearchCanvasIndex(itemIndex);
657 SysTryReturn(NID_UI_CTRL, canvasIndex != NOT_EXIST_CANVAS, E_SYSTEM, E_SYSTEM,
658 "[E_SYSTEM] Failed to search canvas");
660 r = __galleryRenderer.SetCanvasVisibility(canvasIndex, true);
661 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
665 r = SetCurrentItem(itemIndex - 1);
666 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
670 r = __galleryRenderer.RefreshView();
671 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
677 _GalleryPresenter::RequestToUnloadAllItems(void)
679 result r = __pGalleryModel->RequestToUnloadAllItems();
680 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
682 for (int i = 0; i < MAX_CANVAS_COUNT; i++)
684 __pItemToCanvas[i] = NOT_USED_CANVAS;
687 r = SetCurrentItemIndex(NO_CURRENT_IMAGE);
688 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
690 r = __galleryRenderer.EnableEmptyView();
691 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
693 //r = __galleryRenderer.RefreshView();
694 //SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
700 _GalleryPresenter::RequestToUpdateItem(int itemIndex)
702 result r = __pGalleryModel->RequestToUpdateItem(itemIndex);
703 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
705 int canvasIndex = SearchCanvasIndex(itemIndex);
706 if (itemIndex == GetCurrentItemIndex())
708 _GalleryBitmap* pImage = __pGalleryImageReader->GetItemImage(itemIndex);
710 SysTryReturn(NID_UI_CTRL, pImage != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
712 r = __galleryRenderer.SetCanvasImage(canvasIndex, (const _GalleryBitmap*)pImage
713 , __verticalAlignment, __horizontalAlignment, __fittingType);
714 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
716 else if (canvasIndex != NOT_EXIST_CANVAS)
718 __pItemToCanvas[canvasIndex] = NOT_USED_CANVAS;
721 r = __galleryRenderer.RefreshView();
722 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
728 _GalleryPresenter::RequestToUpdateAllItems(void)
730 result r = __pGalleryModel->RequestToUpdateAllItems();
731 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
733 r = __galleryRenderer.ResetAllCanvas();
734 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
736 for (int i = 0; i < MAX_CANVAS_COUNT; i++)
738 __pItemToCanvas[i] = NOT_USED_CANVAS;
741 int itemCount = GetItemCount();
744 r = __galleryRenderer.DisableEmptyView();
745 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
747 if (GetCurrentItemIndex() != NO_CURRENT_IMAGE)
749 r = SetCanvasImage(GetCurrentItemIndex());
750 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
752 r = __galleryRenderer.SetCanvasVisibility(SearchCanvasIndex(GetCurrentItemIndex()), true);
753 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
757 r = SetCurrentItem(0);
758 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
760 r = __galleryRenderer.SetCanvasVisibility(SearchCanvasIndex(0), true);
761 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
766 r = __galleryRenderer.EnableEmptyView();
767 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
770 //r = __galleryRenderer.RefreshView();
771 //SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
777 _GalleryPresenter::RequestToUpdateItemCount(void)
779 __pGalleryModel->UpdateItemCount();
785 _GalleryPresenter::OnTimerExpired(Runtime::Timer& timer)
787 result r = E_SUCCESS;
788 if (&timer == __pSlideShowTimer)
791 SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
793 SetLastResult(E_SUCCESS);
797 _GalleryPresenter::OnTransitionCancel(void)
799 __slideShowStarted = false;
800 int endItemIndex = __currentItemIndex + 1;
801 if (GetItemCount() > 0)
803 endItemIndex = endItemIndex % GetItemCount();
810 result r = SetCurrentItemIndex(endItemIndex);
811 SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
813 StopSlideShowTimer();
817 _GalleryPresenter::OnTransitionCompleted(void)
819 __slideShowStarted = false;
820 if (__slideShowPlayCount > 0 || __slideShowRepeat == true)
822 StartSlideShowTimer(GetSlideShowViewDuration());
826 result r = StopSlideShow();
827 SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating", GetErrorMessage(r));
830 int endItemIndex = __currentItemIndex + 1;
831 if (GetItemCount() > 0)
833 endItemIndex = endItemIndex % GetItemCount();
840 result r = SetCurrentItemIndex(endItemIndex);
841 SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
843 SetLastResult(E_SUCCESS);
847 _GalleryPresenter::OnCanvasAnimationCancel(void)
852 _GalleryPresenter::OnCanvasAnimationCompleted(void)
857 _GalleryPresenter::OnCanvasAnimationStarted(void)
859 __slideShowStarted = true;
863 _GalleryPresenter::SetCanvasImage(int itemIndex)
865 SysTryReturn(NID_UI_CTRL, itemIndex >= 0, E_INVALID_ARG, E_INVALID_ARG,
866 "[E_INVALID_ARG] The argument(%d) is negative value.", itemIndex);
867 SysTryReturn(NID_UI_CTRL, itemIndex >=0 && itemIndex < __pGalleryModel->GetItemCount(),
868 E_OUT_OF_RANGE, E_OUT_OF_RANGE, "[E_OUT_OF_RANGE] The argument(%d) is out of range.", itemIndex);
870 if (SearchCanvasIndex(itemIndex) != NOT_EXIST_CANVAS)
875 int emptyCanvasIndex = GetEmptyCanvasIndex();
876 if (emptyCanvasIndex == NOT_EXIST_CANVAS)
878 emptyCanvasIndex = ClearCanvasIndex(__currentItemIndex);
881 _GalleryBitmap* pImage = __pGalleryImageReader->GetItemImage(itemIndex);
882 result r = GetLastResult();
883 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
885 __pItemToCanvas[emptyCanvasIndex] = itemIndex;
886 r = __galleryRenderer.SetCanvasImage(emptyCanvasIndex, (const _GalleryBitmap*)pImage
887 , __verticalAlignment, __horizontalAlignment, __fittingType);
888 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
890 Rectangle bounds = __galleryRenderer.GetViewRect();
891 r = __galleryRenderer.SetCanvasBounds(emptyCanvasIndex, bounds);
892 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
894 r = __galleryRenderer.SetCanvasVisibility(emptyCanvasIndex, false);
895 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
901 _GalleryPresenter::SetPartialCanvasImage(void)
903 SysTryReturn(NID_UI_CTRL, __currentItemIndex >= 0, E_INVALID_ARG, E_INVALID_ARG,
904 "[E_INVALID_ARG] The argument(%d) is negative value.", __currentItemIndex);
906 if (__galleryRenderer.IsCanvasVisibility(PARTIAL_CANVAS) == true)
911 int currentCanvasIndex = SearchCanvasIndex(__currentItemIndex);
912 Rectangle canvasBounds = __galleryRenderer.GetCanvasBounds(currentCanvasIndex);
913 Rectangle imageBounds = __galleryRenderer.GetCanvasImageBounds(currentCanvasIndex);
914 Rectangle viewBounds = __galleryRenderer.GetViewRect();
916 if (imageBounds.width < viewBounds.width)
918 imageBounds.x -= (viewBounds.width - imageBounds.width) / 2;
921 if (imageBounds.height < viewBounds.height)
923 imageBounds.y -= (viewBounds.height - imageBounds.height) / 2;
926 canvasBounds.x = _Abs(-canvasBounds.x - imageBounds.x);
927 canvasBounds.y = _Abs(-canvasBounds.y - imageBounds.y);
928 canvasBounds.width = viewBounds.width < imageBounds.width ? viewBounds.width : imageBounds.width;
929 canvasBounds.height = viewBounds.height < imageBounds.height ? viewBounds.height : imageBounds.height;
931 //Dimension size(canvasBounds.width, canvasBounds.height);
932 Dimension size(imageBounds.width, imageBounds.height);
934 _GalleryBitmap* pImage = __pGalleryImageReader->GetPartialImageFromFileN(__currentItemIndex, canvasBounds, size);
935 SysTryReturn(NID_UI_CTRL, pImage != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
937 __pItemToCanvas[PARTIAL_CANVAS] = __currentItemIndex;
938 result r = __galleryRenderer.SetCanvasImage(PARTIAL_CANVAS, (const _GalleryBitmap*)pImage
939 , GALLERY_VERTICAL_ALIGN_MIDDLE, GALLERY_HORIZONTAL_ALIGN_CENTER, __fittingType);
940 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
942 r = __galleryRenderer.SetCanvasBounds(PARTIAL_CANVAS, viewBounds);
943 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
945 r = __galleryRenderer.SetCanvasVisibility(PARTIAL_CANVAS, true);
946 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
958 _GalleryPresenter::SearchCanvasIndex(int itemIndex)
960 if (itemIndex == NO_CURRENT_IMAGE)
962 return NOT_EXIST_CANVAS;
965 for (int i = 1; i < MAX_CANVAS_COUNT; i++)
967 if (__pItemToCanvas[i] == itemIndex)
973 return NOT_EXIST_CANVAS;
977 _GalleryPresenter::GetEmptyCanvasIndex(void) const
979 for (int i = 1; i < MAX_CANVAS_COUNT; i++)
981 if (__pItemToCanvas[i] == NOT_USED_CANVAS)
986 return NOT_EXIST_CANVAS;
990 _GalleryPresenter::SetCanvasIndex(int canvasIndex, int itemIndex)
992 SysTryReturn(NID_UI_CTRL, canvasIndex >= 0, E_INVALID_ARG, E_INVALID_ARG,
993 "[E_INVALID_ARG] The argument(%d) is negative value.", canvasIndex);
994 SysTryReturn(NID_UI_CTRL, canvasIndex > 0 && canvasIndex < MAX_CANVAS_COUNT, E_OUT_OF_RANGE, E_OUT_OF_RANGE,
995 "[E_OUT_OF_RANGE] The canvas index(%d) is out of range", canvasIndex);
996 SysTryReturn(NID_UI_CTRL, itemIndex >= 0, E_INVALID_ARG, E_INVALID_ARG,
997 "[E_INVALID_ARG] The argument(%d) is negative value.", itemIndex);
998 SysTryReturn(NID_UI_CTRL, itemIndex >=0 && itemIndex < __pGalleryModel->GetItemCount(), E_OUT_OF_RANGE, E_OUT_OF_RANGE,
999 "[E_OUT_OF_RANGE] The argument(%d) is out of range.", itemIndex);
1001 if (__pItemToCanvas[canvasIndex] == NOT_USED_CANVAS)
1003 __pItemToCanvas[canvasIndex] = itemIndex;
1007 SysTryReturn(NID_UI_CTRL, false, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The canvas index(%d) is used.", canvasIndex);
1014 _GalleryPresenter::ClearCanvasIndex(int currentItemIndex)
1016 SysTryReturn(NID_UI_CTRL, currentItemIndex >= 0, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The argument(%d) is negative value.", currentItemIndex);
1018 int clearCanvasIndex = 1;
1019 int maxAbsValue = 0;
1022 for (int i = 1; i < MAX_CANVAS_COUNT; i++)
1024 absValue = _Abs(currentItemIndex - __pItemToCanvas[i]);
1025 if (absValue > maxAbsValue)
1027 maxAbsValue = absValue;
1028 clearCanvasIndex = i;
1031 __pItemToCanvas[clearCanvasIndex] = NOT_USED_CANVAS;
1033 SetLastResult(E_SUCCESS);
1034 return clearCanvasIndex;
1038 _GalleryPresenter::SortItemToCanvasIndex(int itemIndex, bool add)
1042 for (int i = 0; i < MAX_CANVAS_COUNT; i++)
1044 if (__pItemToCanvas[i] >= itemIndex)
1046 __pItemToCanvas[i]++;
1052 for (int i = 0; i < MAX_CANVAS_COUNT; i++)
1054 if (__pItemToCanvas[i] > itemIndex)
1056 __pItemToCanvas[i]--;
1063 _GalleryPresenter::StartSlideShowTimer(int duration)
1065 result r = E_SUCCESS;
1066 if (__pSlideShowTimer != null)
1068 delete __pSlideShowTimer;
1069 __pSlideShowTimer = null;
1072 __pSlideShowTimer = new(std::nothrow) Runtime::Timer();
1073 SysTryCatch(NID_UI_CTRL, __pSlideShowTimer != null, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
1075 r = __pSlideShowTimer->Construct(*this);
1076 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1078 __pSlideShowTimer->Start(duration);
1079 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1084 delete __pSlideShowTimer;
1085 __pSlideShowTimer = null;
1087 return GetLastResult();
1091 _GalleryPresenter::StopSlideShowTimer(void)
1093 delete __pSlideShowTimer;
1094 __pSlideShowTimer = null;
1096 __slideShowRepeat = false;
1097 __slideShowPlayCount = 0;
1101 _GalleryPresenter::PlaySlideShow(void)
1103 int startCanvasIndex = SearchCanvasIndex(__currentItemIndex);
1104 SysTryReturn(NID_UI_CTRL, startCanvasIndex != NOT_EXIST_CANVAS, E_SYSTEM, E_SYSTEM,
1105 "[E_SYSTEM] The current item not exist.");
1107 int endItemIndex = __currentItemIndex + 1;
1108 if (endItemIndex >= GetItemCount())
1113 result r = __galleryRenderer.SetCanvasVisibility(PARTIAL_CANVAS, false);
1114 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1116 r = __galleryRenderer.SetCanvasVisibility(startCanvasIndex, true);
1117 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1119 int endCanvasIndex = SearchCanvasIndex(endItemIndex);
1120 if (endCanvasIndex == NOT_EXIST_CANVAS)
1122 r = SetCanvasImage(endItemIndex);
1123 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1124 endCanvasIndex = SearchCanvasIndex(endItemIndex);
1127 _GalleryTransitionType transition = static_cast<_GalleryTransitionType>(GetSlideShowType());
1128 _GalleryAnimationTiming animation = {__slideShowAnimationDuration, GALLERY_ANIMATION_TIMING_FUNC_EASEOUT};
1129 r = __galleryRenderer.SetCanvasVisibility(endCanvasIndex, true);
1130 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1132 r = __galleryRenderer.RunCanvasTransition(startCanvasIndex, endCanvasIndex, transition, &animation);
1133 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1135 if (__slideShowRepeat == false)
1137 __slideShowPlayCount--;
1140 r = __galleryRenderer.RefreshView();
1141 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1148 _GalleryPresenter::GetPropertySlideShowViewDuration(void) const
1150 return Variant(__slideShowViewDuration);
1154 _GalleryPresenter::SetPropertySlideShowViewDuration(const Variant& variant)
1156 __slideShowViewDuration = variant.ToInt();
1162 _GalleryPresenter::GetPropertySlideShowAnimationDuration(void) const
1164 return Variant(__slideShowAnimationDuration);
1168 _GalleryPresenter::SetPropertySlideShowAnimationDuration(const Variant& variant)
1170 __slideShowAnimationDuration = variant.ToInt();
1176 _GalleryPresenter::GetPropertyTextOfEmptyGallery(void) const
1178 return Variant(__emptyText);
1182 _GalleryPresenter::SetPropertyTextOfEmptyGallery(const Variant& variant)
1184 __emptyText = variant.ToString();
1190 _GalleryPresenter::GetPropertyZoomingEnabled(void) const
1192 return Variant(__zoomingEnabled);
1196 _GalleryPresenter::SetPropertyZoomingEnabled(const Variant& variant)
1198 __zoomingEnabled = variant.ToBool();
1204 _GalleryPresenter::OnPropertyChanging(_PropertyBase& source, const String& name,
1205 const Variant& oldProperty, const Variant& newProperty)
1210 _GalleryPresenter::OnPropertyChanged(_PropertyBase& source, const String& name,
1211 const Variant& oldProperty, const Variant& newProperty)
1216 _GalleryPresenter::SetFontSize(int size)
1218 __emptyFontSize = size;
1222 _GalleryPresenter::GetFontSize(void) const
1224 return __emptyFontSize;
1228 _GalleryPresenter::SetFontStyle(FontStyle style)
1230 __emptyFontStyle = style;
1234 _GalleryPresenter::GetFontStyle(void) const
1236 return __emptyFontStyle;
1240 _GalleryPresenter::OnFontInfoRequested(unsigned long& style, int& size)
1242 style = GetFontStyle();
1243 size = GetFontSize();
1247 _GalleryPresenter::OnFontChanged(void)
1249 if (GetItemCount() == 0)
1251 result r = __galleryRenderer.EnableEmptyView();
1252 SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
1256 }}} // Tizen::Ui::Controls