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_Gallery.h"
23 #include "FUiCtrl_GalleryPresenter.h"
24 #include "FUiCtrl_GalleryModel.h"
25 #include "FUiCtrl_GalleryItem.h"
26 #include "FUiCtrl_GalleryItemProvider.h"
27 #include "FUiCtrl_GalleryCoreEvent.h"
28 #include "FUiCtrl_GalleryCoreEventArg.h"
29 #include "FUiCtrl_GalleryImageReader.h"
30 #include "FUiCtrl_GalleryViewEventHandler.h"
31 #include "FUiCtrl_IGalleryCoreEventListener.h"
32 #include "FUiCtrl_IGalleryRenderer.h"
33 #include "FUiCtrl_GalleryBitmap.h"
34 #include "FUiCtrl_GalleryViewEvent.h"
35 #include "FUiAnim_VisualElement.h"
38 using namespace Tizen::Base;
39 using namespace Tizen::Graphics;
40 using namespace Tizen::Ui;
42 namespace Tizen { namespace Ui { namespace Controls {
47 const int DEFAULT_ITEM_SPACING = 30;
49 const int DEFAULT_ANIMATION_DURATION = 3000;
50 const int MIN_ANIMATION_DURATION = 300;
51 const int MAX_ANIMATION_DURATION = 20000;
52 const int DEFAULT_VIEW_DURATION = 10;
53 const int MIN_VIEW_DURATION = 10;
54 const int FIRST_SLIDE_SHOW_DURATION = 1;
56 const int PARTIAL_CANVAS = 0;
57 } // unnamed namespace
59 IMPLEMENT_PROPERTY(_GalleryPresenter);
61 _GalleryPresenter::_GalleryPresenter(_IGalleryRenderer& galleryRenderer)
62 : __galleryRenderer(galleryRenderer)
63 , __pGalleryViewEventHandler(null)
64 , __pGalleryCoreEvent(null)
65 , __pGalleryItemProvider(null)
66 , __pGalleryModel(null)
67 , __pGalleryImageReader(null)
68 , __pEmptyGalleryImage(null)
70 , __slideShowAnimationDuration(DEFAULT_ANIMATION_DURATION)
71 , __slideShowViewDuration(DEFAULT_VIEW_DURATION)
72 , __gallerySlideShowType(GALLERY_SLIDESHOW_DISSOLVE)
73 , __currentItemIndex(NO_CURRENT_IMAGE)
74 , __slideShowRepeat(false)
75 , __slideShowStarted(false)
76 , __zoomingEnabled(true)
77 , __pSlideShowTimer(null)
78 , __slideShowPlayCount(0)
79 , __itemSpacing(DEFAULT_ITEM_SPACING)
80 , __pItemToCanvas(null)
81 , __fittingType(GALLERY_FITTING_TYPE_FIT)
82 , __verticalAlignment(GALLERY_VERTICAL_ALIGN_MIDDLE)
83 , __horizontalAlignment(GALLERY_HORIZONTAL_ALIGN_CENTER)
85 , __emptyFontStyle(FONT_STYLE_PLAIN)
86 , __pGalleryView(null)
88 AddPropertyChangeEventListener(*this);
91 _GalleryPresenter::~_GalleryPresenter(void)
93 delete __pGalleryViewEventHandler;
94 delete __pGalleryImageReader;
95 delete __pGalleryModel;
96 delete __pGalleryItemProvider;
97 delete __pGalleryCoreEvent;
98 delete __pEmptyGalleryImage;
99 delete[] __pItemToCanvas;
100 delete __pSlideShowTimer;
101 __pSlideShowTimer = null;
105 _GalleryPresenter::CreateGalleryPresenterN(_IGalleryRenderer& galleryRenderer,
106 _GalleryItemProviderAdaptorImpl* pGalleryItemProviderAdaptor, _Gallery* pGalleryView)
108 _GalleryPresenter* pPresenter = new (std::nothrow) _GalleryPresenter(galleryRenderer);
109 SysTryReturn(NID_UI_CTRL, pPresenter != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
111 result r = pPresenter->Construct(pGalleryItemProviderAdaptor, pGalleryView);
112 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
114 SetLastResult(E_SUCCESS);
124 _GalleryPresenter::Construct(_GalleryItemProviderAdaptorImpl* pGalleryItemProviderAdaptor, _Gallery* pGalleryView)
126 SetLastResult(E_SUCCESS);
128 result r = E_SUCCESS;
130 __pGalleryCoreEvent = new (std::nothrow) _GalleryCoreEvent();
131 SysTryCatch(NID_UI_CTRL, __pGalleryCoreEvent != null, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
133 __pGalleryItemProvider = new (std::nothrow) _GalleryItemProvider(*__pGalleryCoreEvent, pGalleryItemProviderAdaptor);
134 SysTryCatch(NID_UI_CTRL, __pGalleryItemProvider != null, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
136 __pGalleryModel = _GalleryModel::CreateGalleryModelN(*__pGalleryItemProvider);
137 SysTryCatch(NID_UI_CTRL, __pGalleryModel != null, , GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
139 __pGalleryImageReader = new (std::nothrow) _GalleryImageReader(*__pGalleryModel);
140 SysTryCatch(NID_UI_CTRL, __pGalleryImageReader != null, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
142 __pItemToCanvas = new(std::nothrow) int[MAX_CANVAS_COUNT];
143 SysTryCatch(NID_UI_CTRL, __pItemToCanvas != null, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
144 memset(__pItemToCanvas, -1, sizeof(int) * MAX_CANVAS_COUNT);
146 r = __galleryRenderer.SetCanvasMaxCount(MAX_CANVAS_COUNT);
147 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
149 r = __galleryRenderer.EnableEmptyView();
150 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
152 GET_STRING_CONFIG(IDS_COM_BODY_NO_IMAGES, __emptyText);
153 r = __galleryRenderer.SetEmptyText(__emptyText);
154 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
156 __pGalleryViewEventHandler = new (std::nothrow) _GalleryViewEventHandler(*this, __galleryRenderer, *__pGalleryImageReader);
157 SysTryCatch(NID_UI_CTRL, __pGalleryViewEventHandler != null, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
159 r = __pGalleryViewEventHandler->Construct();
160 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
162 SetFontStyle(FONT_STYLE_PLAIN);
165 __pGalleryView = pGalleryView;
170 delete __pGalleryViewEventHandler;
171 delete __pGalleryImageReader;
172 delete __pGalleryModel;
173 delete __pGalleryItemProvider;
174 delete __pGalleryCoreEvent;
175 delete[] __pItemToCanvas;
181 _GalleryPresenter::GetCurrentItemIndex(void) const
183 return __currentItemIndex;
187 _GalleryPresenter::SetCurrentItemIndex(int index, bool eventFire)
189 SysTryReturn(NID_UI_CTRL, index < __pGalleryModel->GetItemCount(), E_OUT_OF_RANGE, E_OUT_OF_RANGE,
190 "[E_OUT_OF_RANGE] The argument(%d) is out of range.", index);
192 if (__currentItemIndex != NO_CURRENT_IMAGE && __currentItemIndex != index)
194 __currentItemIndex = index;
195 if (eventFire == true)
202 __currentItemIndex = index;
205 __pGalleryViewEventHandler->SetZoomFlag(false);
211 _GalleryPresenter::SetCurrentItem(int index)
213 SysTryReturn(NID_UI_CTRL, index >=0 && index < __pGalleryModel->GetItemCount(), E_OUT_OF_RANGE, E_OUT_OF_RANGE,
214 "[E_OUT_OF_RANGE] The argument(%d) is out of range.", index);
216 int oldCurrentCanvasIndex = 0;
217 result r = E_SUCCESS;
219 if (index == __currentItemIndex)
224 if (__currentItemIndex != NO_CURRENT_IMAGE)
226 oldCurrentCanvasIndex = SearchCanvasIndex(__currentItemIndex);
227 SysTryReturn(NID_UI_CTRL, oldCurrentCanvasIndex != NOT_EXIST_CANVAS, E_SYSTEM, E_SYSTEM,
228 "[E_SYSTEM] The canvas of %d item is not exist.", oldCurrentCanvasIndex);
230 if (__currentItemIndex > index)
232 FloatRectangle rect = __galleryRenderer.GetViewRect();
234 r = __galleryRenderer.SetCanvasBounds(oldCurrentCanvasIndex, rect);
236 else if (__currentItemIndex < index)
238 FloatRectangle rect = __galleryRenderer.GetViewRect();
239 rect.x = -rect.width;
240 r = __galleryRenderer.SetCanvasBounds(oldCurrentCanvasIndex, rect);
243 r = __galleryRenderer.SetCanvasVisibility(oldCurrentCanvasIndex, false);
244 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
247 int newCurrentCanvasIndex = SearchCanvasIndex(index);
248 if (newCurrentCanvasIndex == NOT_EXIST_CANVAS)
250 r = SetCanvasImage(index);
251 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
252 newCurrentCanvasIndex = SearchCanvasIndex(index);
254 r = __galleryRenderer.SetCanvasBounds(newCurrentCanvasIndex, __galleryRenderer.GetViewRect());
255 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
257 r = __galleryRenderer.SetCanvasVisibility(newCurrentCanvasIndex, true);
258 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
260 r = SetCurrentItemIndex(index);
261 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
268 result resultValue = __galleryRenderer.SetCanvasVisibility(oldCurrentCanvasIndex, true);
269 if (resultValue != E_SUCCESS)
271 SysLog(NID_UI_CTRL, "[%s] Failed to setting of canvas visibility.", GetErrorMessage(resultValue));
278 _GalleryPresenter::GetItemCount(void) const
280 return __pGalleryModel->GetItemCount();
284 _GalleryPresenter::SetItemSpacing(int spacing)
286 __itemSpacing = spacing;
289 _GalleryPresenter::GetItemSpacing(void) const
291 return __itemSpacing;
294 _GallerySlideShowType
295 _GalleryPresenter::GetSlideShowType(void) const
297 return __gallerySlideShowType;
301 _GalleryPresenter::SetSlideShowType(_GallerySlideShowType slideShowType)
303 SysTryReturn(NID_UI_CTRL, slideShowType >= GALLERY_SLIDESHOW_DISSOLVE && slideShowType <= GALLERY_SLIDESHOW_PAGE,
304 E_OUT_OF_RANGE, E_OUT_OF_RANGE, "[E_OUT_OF_RANGE] The animation argument(%d) is out of range", slideShowType);
306 __gallerySlideShowType = slideShowType;
312 _GalleryPresenter::GetSlideShowAnimationDuration(void) const
314 Variant variant = GetProperty("slideShowAnimationDuration");
315 return variant.ToInt();
319 _GalleryPresenter::SetSlideShowAnimationDuration(int duration)
321 SysTryReturn(NID_UI_CTRL, duration >= MIN_ANIMATION_DURATION && duration <= MAX_ANIMATION_DURATION,
322 E_OUT_OF_RANGE, E_OUT_OF_RANGE, "[E_OUT_OF_RANGE] The argument(%d) is out of range.", duration);
324 return SetProperty("slideShowAnimationDuration", Variant(duration));
328 _GalleryPresenter::GetSlideShowViewDuration(void) const
330 Variant variant = GetProperty("slideShowViewDuration");
331 return variant.ToInt();
335 _GalleryPresenter::SetSlideShowViewDuration(int duration)
337 SysTryReturn(NID_UI_CTRL, duration >= MIN_VIEW_DURATION, E_OUT_OF_RANGE, E_OUT_OF_RANGE,
338 "[E_OUT_OF_RANGE] The argument(%d) is out of range.", duration);
340 return SetProperty("slideShowViewDuration", Variant(duration));
344 _GalleryPresenter::StartSlideShow(bool repeat)
346 SysTryReturn(NID_UI_CTRL, __pSlideShowTimer == null, E_INVALID_OPERATION, E_INVALID_OPERATION,
347 "[E_INVALID_OPERATION] Slide show is already started");
349 if (GetItemCount() == 0)
354 __slideShowRepeat = repeat;
355 __slideShowPlayCount = GetItemCount() - 1;
357 result r = StartSlideShowTimer(GetSlideShowViewDuration());
358 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
360 _GalleryCoreEventArg* pArg = new(std::nothrow) _GalleryCoreEventArg(GALLERY_CORE_EVENT_SLIDE_SHOW_STARTED);
361 __pGalleryCoreEvent->Fire(*pArg);
367 _GalleryPresenter::StopSlideShow(void)
369 SysTryReturn(NID_UI_CTRL, __pSlideShowTimer != null, E_INVALID_OPERATION, E_INVALID_OPERATION,
370 "[E_INVALID_OPERATION] Slide show is already stopped");
372 StopSlideShowTimer();
373 __galleryRenderer.StopAllCanvasAnimation();
375 result r = __pGalleryViewEventHandler->SetVisibleCanvas();
376 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
378 _GalleryCoreEventArg* pArg = new(std::nothrow) _GalleryCoreEventArg(GALLERY_CORE_EVENT_SLIDE_SHOW_STOPPED);
379 __pGalleryCoreEvent->Fire(*pArg);
381 r = __galleryRenderer.RefreshView();
382 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
388 _GalleryPresenter::GetTextOfEmptyGallery(void) const
390 Variant variant = GetProperty("textOfEmptyGallery");
391 return variant.ToString();
395 _GalleryPresenter::SetTextOfEmptyGallery(const String& text)
397 result r = __galleryRenderer.SetEmptyText(text);
398 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
400 return SetProperty("textOfEmptyGallery", Variant(text));
404 _GalleryPresenter::SetBitmapOfEmptyGallery(const _GalleryBitmap* pBitmap)
406 result r = __galleryRenderer.SetEmptyImage(pBitmap);
407 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
409 __pEmptyGalleryImage = const_cast <_GalleryBitmap*>(pBitmap);
415 _GalleryPresenter::IsSlideShowStarted(void) const
417 return __pSlideShowTimer != null ? true : false;
421 _GalleryPresenter::SetZoomingEnabled(bool enable)
423 return SetProperty("zoomingEnabled", Variant(enable));
427 _GalleryPresenter::IsZoomingEnabled(void) const
429 Variant variant = GetProperty("zoomingEnabled");
431 return variant.ToBool();
435 _GalleryPresenter::PostEvent(_GalleryViewEvent& event)
437 bool slideShowStarted = false;
438 if (__pSlideShowTimer != null && event.GetEventType() != GALLERY_VIEW_EVENT_BOUNDS_CHANGED)
440 result r = StopSlideShow();
441 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, false, r, "[%s] Propagating.", GetErrorMessage(r));
442 slideShowStarted = true;
445 if (GetItemCount() == 0)
447 if (event.GetEventType() == GALLERY_VIEW_EVENT_BOUNDS_CHANGED)
449 return OnBoundsChanged();
451 //SetLastResult(E_SUCCESS);
455 switch (event.GetEventType())
457 case GALLERY_VIEW_EVENT_TOUCH_PRESSED:
459 if (slideShowStarted == true)
461 result r = __pGalleryViewEventHandler->SetVisibleCanvas();
462 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, false, r, "[%s] Propagating.", GetErrorMessage(r));
465 return __pGalleryViewEventHandler->OnTouchPressed(*(event.GetEventInfo()));
468 case GALLERY_VIEW_EVENT_TOUCH_RELEASED:
469 return __pGalleryViewEventHandler->OnTouchReleased(*(event.GetEventInfo()));
471 case GALLERY_VIEW_EVENT_TOUCH_DOUBLE_PRESSED:
472 __galleryRenderer.SetCanvasVisibility(PARTIAL_CANVAS, false);
473 return __pGalleryViewEventHandler->OnTouchDoublePressed(*(event.GetEventInfo()));
475 case GALLERY_VIEW_EVENT_TOUCH_MOVED:
476 __galleryRenderer.SetCanvasVisibility(PARTIAL_CANVAS, false);
477 return __pGalleryViewEventHandler->OnTouchMoved(*(event.GetEventInfo()));
479 case GALLERY_VIEW_EVENT_TOUCH_PINCH_ZOOM:
480 return __pGalleryViewEventHandler->OnTouchPinchZoom(*(event.GetEventInfo()));
482 case GALLERY_VIEW_EVENT_TOUCH_FLICK:
483 //__galleryRenderer.SetCanvasVisibility(PARTIAL_CANVAS, false);
484 return __pGalleryViewEventHandler->OnTouchFlicked(*(event.GetEventInfo()));
486 case GALLERY_VIEW_EVENT_BOUNDS_CHANGED:
487 return OnBoundsChanged();
490 SysTryReturn(NID_UI_CTRL, false, false, E_INVALID_ARG,
491 "[E_INVALID_ARG] The event type(%d) is invalid type", event.GetEventType());
494 //SetLastResult(E_SUCCESS);
499 _GalleryPresenter::OnBoundsChanged(void)
502 result r = E_SUCCESS;
504 r = __galleryRenderer.InitializeCanvasBounds();
505 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, true, r, "[%s] Propagating.", GetErrorMessage(r));
507 if (GetItemCount() > 0)
509 for (int canvasIndex = PARTIAL_CANVAS + 1; canvasIndex < MAX_CANVAS_COUNT; canvasIndex++)
511 itemIndex = __pItemToCanvas[canvasIndex];
512 if (itemIndex != NOT_EXIST_CANVAS)
514 r = __galleryRenderer.SetCanvasImage(canvasIndex, __pGalleryImageReader->GetItemImage(itemIndex)
515 , __verticalAlignment, __horizontalAlignment, __fittingType);
516 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, true, r, "[%s] Propagating.", GetErrorMessage(r));
522 r = __galleryRenderer.EnableEmptyView();
523 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, true, r, "[%s] Propagating.", GetErrorMessage(r));
524 SetLastResult(E_SUCCESS);
528 int currentItemIndex = GetCurrentItemIndex();
529 int currentCanvasIndex = SearchCanvasIndex(currentItemIndex);
530 int nextItemIndex = GetCurrentItemIndex() + 1;
531 if (nextItemIndex >= GetItemCount())
535 int nextCanvasIndex = SearchCanvasIndex(nextItemIndex);
537 r = __galleryRenderer.SetCanvasShowState(currentCanvasIndex, true);
538 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, true, r, "[%s] Propagating.", GetErrorMessage(r));
540 if (__pSlideShowTimer != null && __slideShowStarted == true)
542 r = __galleryRenderer.SetCanvasShowState(nextCanvasIndex, true);
543 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, true, r, "[%s] Propagating.", GetErrorMessage(r));
547 __galleryRenderer.GalleryBoundsChanged(currentCanvasIndex);
548 FloatRectangle canvasBounds = __galleryRenderer.GetCanvasBounds(currentCanvasIndex);
549 FloatRectangle imageBounds = __galleryRenderer.GetCanvasImageBounds(currentCanvasIndex);
550 __pGalleryViewEventHandler->CorrectCanvasPosition(canvasBounds, imageBounds);
551 r = __galleryRenderer.SetCanvasBounds(currentCanvasIndex, canvasBounds);
552 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, true, r, "[%s] Propagating.", GetErrorMessage(r));
554 r = __pGalleryViewEventHandler->AlignCanvas(false);
555 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, true, r, "[%s] Propagating.", GetErrorMessage(r));
558 SetLastResult(E_SUCCESS);
564 _GalleryPresenter::OnDraw(void)
566 result r = E_SUCCESS;
568 if (GetItemCount() > 0 && GetCurrentItemIndex() == NO_CURRENT_IMAGE)
570 r = SetCurrentItem(0);
571 SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
574 r = __galleryRenderer.Draw();
575 SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
577 SetLastResult(E_SUCCESS);
581 _GalleryPresenter::SetCoreEventListener(const _IGalleryCoreEventListener& coreEventListener)
583 return __pGalleryCoreEvent->AddListener(coreEventListener);
587 _GalleryPresenter::RemoveCoreEventListener(const _IGalleryCoreEventListener& coreEventListener)
589 return __pGalleryCoreEvent->RemoveListener(coreEventListener);
593 _GalleryPresenter::ClickedItem(void)
595 _GalleryCoreEventArg* pArg = new(std::nothrow) _GalleryCoreEventArg(GALLERY_CORE_EVENT_ITEM_CLICKED, __currentItemIndex);
596 return __pGalleryCoreEvent->Fire(*pArg);
600 _GalleryPresenter::ChangedItem(void)
602 if (__currentItemIndex == NO_CURRENT_IMAGE)
607 __pGalleryView->ResizeGalleryAccessibilityElement();
609 _GalleryCoreEventArg* pArg = new(std::nothrow) _GalleryCoreEventArg(GALLERY_CORE_EVENT_CURRENT_ITEM_CHANGED, __currentItemIndex);
610 return __pGalleryCoreEvent->Fire(*pArg);
614 _GalleryPresenter::RequestToLoadItem(int itemIndex)
616 result r = __pGalleryModel->RequestToLoadItem(itemIndex);
617 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
618 SortItemToCanvasIndex(itemIndex, true);
620 if (GetItemCount() == 1)
622 r = __galleryRenderer.DisableEmptyView();
623 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
625 r = SetCurrentItem(itemIndex);
626 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
629 r = __galleryRenderer.RefreshView();
630 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
636 _GalleryPresenter::RequestToUnloadItem(int itemIndex)
638 result r = __pGalleryModel->RequestToUnloadItem(itemIndex);
639 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
641 int canvasIndex = SearchCanvasIndex(itemIndex);
642 if (canvasIndex != NOT_EXIST_CANVAS)
644 __galleryRenderer.SetCanvasVisibility(canvasIndex, false);
645 __pItemToCanvas[canvasIndex] = NOT_USED_CANVAS;
647 SortItemToCanvasIndex(itemIndex, false);
649 if (GetItemCount() == 0)
651 r = SetCurrentItemIndex(NO_CURRENT_IMAGE);
652 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
654 r = __galleryRenderer.EnableEmptyView();
655 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
659 if (itemIndex < GetItemCount())
661 r = SetCanvasImage(itemIndex);
662 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
664 int canvasIndex = SearchCanvasIndex(itemIndex);
665 SysTryReturn(NID_UI_CTRL, canvasIndex != NOT_EXIST_CANVAS, E_SYSTEM, E_SYSTEM,
666 "[E_SYSTEM] Failed to search canvas");
668 r = __galleryRenderer.SetCanvasVisibility(canvasIndex, true);
669 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
673 r = SetCurrentItem(itemIndex - 1);
674 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
678 r = __galleryRenderer.RefreshView();
679 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
685 _GalleryPresenter::RequestToUnloadAllItems(void)
687 result r = __pGalleryModel->RequestToUnloadAllItems();
688 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
690 for (int i = 0; i < MAX_CANVAS_COUNT; i++)
692 __pItemToCanvas[i] = NOT_USED_CANVAS;
695 r = SetCurrentItemIndex(NO_CURRENT_IMAGE);
696 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
698 r = __galleryRenderer.EnableEmptyView();
699 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
701 //r = __galleryRenderer.RefreshView();
702 //SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
708 _GalleryPresenter::RequestToUpdateItem(int itemIndex)
710 result r = __pGalleryModel->RequestToUpdateItem(itemIndex);
711 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
713 int canvasIndex = SearchCanvasIndex(itemIndex);
714 if (itemIndex == GetCurrentItemIndex())
716 _GalleryBitmap* pImage = __pGalleryImageReader->GetItemImage(itemIndex);
718 SysTryReturn(NID_UI_CTRL, pImage != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
720 r = __galleryRenderer.SetCanvasImage(canvasIndex, (const _GalleryBitmap*)pImage
721 , __verticalAlignment, __horizontalAlignment, __fittingType);
722 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
724 __galleryRenderer.GalleryBoundsChanged(canvasIndex);
726 else if (canvasIndex != NOT_EXIST_CANVAS)
728 __pItemToCanvas[canvasIndex] = NOT_USED_CANVAS;
731 r = __galleryRenderer.RefreshView();
732 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
738 _GalleryPresenter::RequestToUpdateAllItems(void)
740 result r = __pGalleryModel->RequestToUpdateAllItems();
741 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
743 r = __galleryRenderer.ResetAllCanvas();
744 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
746 for (int i = 0; i < MAX_CANVAS_COUNT; i++)
748 __pItemToCanvas[i] = NOT_USED_CANVAS;
751 int itemCount = GetItemCount();
754 r = __galleryRenderer.DisableEmptyView();
755 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
757 if (GetCurrentItemIndex() != NO_CURRENT_IMAGE)
759 r = SetCanvasImage(GetCurrentItemIndex());
760 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
762 r = __galleryRenderer.SetCanvasVisibility(SearchCanvasIndex(GetCurrentItemIndex()), true);
763 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
767 r = SetCurrentItem(0);
768 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
770 r = __galleryRenderer.SetCanvasVisibility(SearchCanvasIndex(0), true);
771 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
776 r = __galleryRenderer.EnableEmptyView();
777 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
784 _GalleryPresenter::RequestToUpdateItemCount(void)
786 __pGalleryModel->UpdateItemCount();
792 _GalleryPresenter::OnTimerExpired(Runtime::Timer& timer)
794 result r = E_SUCCESS;
795 if (&timer == __pSlideShowTimer)
798 SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
800 SetLastResult(E_SUCCESS);
804 _GalleryPresenter::OnTransitionCancel(void)
806 __slideShowStarted = false;
807 int endItemIndex = __currentItemIndex + 1;
808 if (GetItemCount() > 0)
810 endItemIndex = endItemIndex % GetItemCount();
817 result r = SetCurrentItemIndex(endItemIndex);
818 SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
820 StopSlideShowTimer();
824 _GalleryPresenter::OnTransitionCompleted(void)
826 __slideShowStarted = false;
827 if (__slideShowPlayCount > 0 || __slideShowRepeat == true)
829 StartSlideShowTimer(GetSlideShowViewDuration());
833 result r = StopSlideShow();
834 SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating", GetErrorMessage(r));
837 int endItemIndex = __currentItemIndex + 1;
838 if (GetItemCount() > 0)
840 endItemIndex = endItemIndex % GetItemCount();
847 result r = SetCurrentItemIndex(endItemIndex);
848 SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
850 SetLastResult(E_SUCCESS);
854 _GalleryPresenter::OnCanvasAnimationCancel(void)
859 _GalleryPresenter::OnCanvasAnimationCompleted(void)
864 _GalleryPresenter::OnCanvasAnimationStarted(void)
866 __slideShowStarted = true;
870 _GalleryPresenter::SetCanvasImage(int itemIndex)
872 SysTryReturn(NID_UI_CTRL, itemIndex >= 0, E_INVALID_ARG, E_INVALID_ARG,
873 "[E_INVALID_ARG] The argument(%d) is negative value.", itemIndex);
874 SysTryReturn(NID_UI_CTRL, itemIndex >=0 && itemIndex < __pGalleryModel->GetItemCount(),
875 E_OUT_OF_RANGE, E_OUT_OF_RANGE, "[E_OUT_OF_RANGE] The argument(%d) is out of range.", itemIndex);
877 if (SearchCanvasIndex(itemIndex) != NOT_EXIST_CANVAS)
882 int emptyCanvasIndex = GetEmptyCanvasIndex();
883 if (emptyCanvasIndex == NOT_EXIST_CANVAS)
885 emptyCanvasIndex = ClearCanvasIndex(__currentItemIndex);
888 _GalleryBitmap* pImage = __pGalleryImageReader->GetItemImage(itemIndex);
889 result r = GetLastResult();
890 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
892 __pItemToCanvas[emptyCanvasIndex] = itemIndex;
893 r = __galleryRenderer.SetCanvasImage(emptyCanvasIndex, (const _GalleryBitmap*)pImage
894 , __verticalAlignment, __horizontalAlignment, __fittingType);
895 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
897 FloatRectangle bounds = __galleryRenderer.GetViewRect();
898 r = __galleryRenderer.SetCanvasBounds(emptyCanvasIndex, bounds);
899 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
901 r = __galleryRenderer.SetCanvasVisibility(emptyCanvasIndex, false);
902 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
908 _GalleryPresenter::SetPartialCanvasImage(void)
910 SysTryReturn(NID_UI_CTRL, __currentItemIndex >= 0, E_INVALID_ARG, E_INVALID_ARG,
911 "[E_INVALID_ARG] The argument(%d) is negative value.", __currentItemIndex);
913 _GalleryItem* pGalleryItem = __pGalleryModel->GetItem(__currentItemIndex);
914 if (pGalleryItem->GetGalleryItemFilePath() == L"")
919 int currentCanvasIndex = SearchCanvasIndex(__currentItemIndex);
921 FloatRectangle canvasBounds = __galleryRenderer.GetCanvasBounds(currentCanvasIndex);
922 FloatRectangle imageBounds = __galleryRenderer.GetCanvasImageBounds(currentCanvasIndex);
923 FloatRectangle viewBounds = __galleryRenderer.GetViewRect();
925 if (imageBounds.width < viewBounds.width)
927 imageBounds.x -= (viewBounds.width - imageBounds.width) / 2;
930 if (imageBounds.height < viewBounds.height)
932 imageBounds.y -= (viewBounds.height - imageBounds.height) / 2;
935 canvasBounds.x = _Abs(-canvasBounds.x - imageBounds.x);
936 canvasBounds.y = _Abs(-canvasBounds.y - imageBounds.y);
937 canvasBounds.width = viewBounds.width < imageBounds.width ? viewBounds.width : imageBounds.width;
938 canvasBounds.height = viewBounds.height < imageBounds.height ? viewBounds.height : imageBounds.height;
940 FloatDimension size(imageBounds.width, imageBounds.height);
942 _GalleryBitmap* pImage = __pGalleryImageReader->GetPartialImageFromFileN(__currentItemIndex, canvasBounds, size);
943 SysTryReturn(NID_UI_CTRL, pImage != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
945 __pItemToCanvas[PARTIAL_CANVAS] = __currentItemIndex;
946 result r = __galleryRenderer.SetCanvasImage(PARTIAL_CANVAS, (const _GalleryBitmap*)pImage
947 , GALLERY_VERTICAL_ALIGN_MIDDLE, GALLERY_HORIZONTAL_ALIGN_CENTER, __fittingType);
948 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
950 r = __galleryRenderer.SetCanvasBounds(PARTIAL_CANVAS, viewBounds);
951 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
953 r = __galleryRenderer.SetCanvasVisibility(PARTIAL_CANVAS, true);
954 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
966 _GalleryPresenter::SearchCanvasIndex(int itemIndex)
968 if (itemIndex == NO_CURRENT_IMAGE)
970 return NOT_EXIST_CANVAS;
973 for (int i = 1; i < MAX_CANVAS_COUNT; i++)
975 if (__pItemToCanvas[i] == itemIndex)
981 return NOT_EXIST_CANVAS;
985 _GalleryPresenter::GetEmptyCanvasIndex(void) const
987 for (int i = 1; i < MAX_CANVAS_COUNT; i++)
989 if (__pItemToCanvas[i] == NOT_USED_CANVAS)
994 return NOT_EXIST_CANVAS;
998 _GalleryPresenter::SetCanvasIndex(int canvasIndex, int itemIndex)
1000 SysTryReturn(NID_UI_CTRL, canvasIndex >= 0, E_INVALID_ARG, E_INVALID_ARG,
1001 "[E_INVALID_ARG] The argument(%d) is negative value.", canvasIndex);
1002 SysTryReturn(NID_UI_CTRL, canvasIndex > 0 && canvasIndex < MAX_CANVAS_COUNT, E_OUT_OF_RANGE, E_OUT_OF_RANGE,
1003 "[E_OUT_OF_RANGE] The canvas index(%d) is out of range", canvasIndex);
1004 SysTryReturn(NID_UI_CTRL, itemIndex >= 0, E_INVALID_ARG, E_INVALID_ARG,
1005 "[E_INVALID_ARG] The argument(%d) is negative value.", itemIndex);
1006 SysTryReturn(NID_UI_CTRL, itemIndex >=0 && itemIndex < __pGalleryModel->GetItemCount(), E_OUT_OF_RANGE, E_OUT_OF_RANGE,
1007 "[E_OUT_OF_RANGE] The argument(%d) is out of range.", itemIndex);
1009 if (__pItemToCanvas[canvasIndex] == NOT_USED_CANVAS)
1011 __pItemToCanvas[canvasIndex] = itemIndex;
1015 SysTryReturn(NID_UI_CTRL, false, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The canvas index(%d) is used.", canvasIndex);
1022 _GalleryPresenter::ClearCanvasIndex(int currentItemIndex)
1024 SysTryReturn(NID_UI_CTRL, currentItemIndex >= 0, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The argument(%d) is negative value.", currentItemIndex);
1026 int clearCanvasIndex = 1;
1027 int maxAbsValue = 0;
1030 for (int i = 1; i < MAX_CANVAS_COUNT; i++)
1032 absValue = _Abs(currentItemIndex - __pItemToCanvas[i]);
1033 if (absValue > maxAbsValue)
1035 maxAbsValue = absValue;
1036 clearCanvasIndex = i;
1039 __pItemToCanvas[clearCanvasIndex] = NOT_USED_CANVAS;
1041 SetLastResult(E_SUCCESS);
1042 return clearCanvasIndex;
1046 _GalleryPresenter::SortItemToCanvasIndex(int itemIndex, bool add)
1050 for (int i = 0; i < MAX_CANVAS_COUNT; i++)
1052 if (__pItemToCanvas[i] >= itemIndex)
1054 __pItemToCanvas[i]++;
1060 for (int i = 0; i < MAX_CANVAS_COUNT; i++)
1062 if (__pItemToCanvas[i] > itemIndex)
1064 __pItemToCanvas[i]--;
1071 _GalleryPresenter::StartSlideShowTimer(int duration)
1073 result r = E_SUCCESS;
1074 if (__pSlideShowTimer != null)
1076 delete __pSlideShowTimer;
1077 __pSlideShowTimer = null;
1080 __pSlideShowTimer = new(std::nothrow) Runtime::Timer();
1081 SysTryCatch(NID_UI_CTRL, __pSlideShowTimer != null, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
1083 r = __pSlideShowTimer->Construct(*this);
1084 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1086 __pSlideShowTimer->Start(duration);
1087 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1092 delete __pSlideShowTimer;
1093 __pSlideShowTimer = null;
1095 return GetLastResult();
1099 _GalleryPresenter::StopSlideShowTimer(void)
1101 delete __pSlideShowTimer;
1102 __pSlideShowTimer = null;
1104 __slideShowRepeat = false;
1105 __slideShowPlayCount = 0;
1109 _GalleryPresenter::PlaySlideShow(void)
1111 int startCanvasIndex = SearchCanvasIndex(__currentItemIndex);
1112 SysTryReturn(NID_UI_CTRL, startCanvasIndex != NOT_EXIST_CANVAS, E_SYSTEM, E_SYSTEM,
1113 "[E_SYSTEM] The current item not exist.");
1115 int endItemIndex = __currentItemIndex + 1;
1116 if (endItemIndex >= GetItemCount())
1121 result r = __galleryRenderer.SetCanvasVisibility(PARTIAL_CANVAS, false);
1122 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1124 r = __galleryRenderer.SetCanvasVisibility(startCanvasIndex, true);
1125 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1127 int endCanvasIndex = SearchCanvasIndex(endItemIndex);
1128 if (endCanvasIndex == NOT_EXIST_CANVAS)
1130 r = SetCanvasImage(endItemIndex);
1131 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1132 endCanvasIndex = SearchCanvasIndex(endItemIndex);
1135 _GalleryTransitionType transition = static_cast<_GalleryTransitionType>(GetSlideShowType());
1136 _GalleryAnimationTiming animation = {__slideShowAnimationDuration, GALLERY_ANIMATION_TIMING_FUNC_EASEOUT};
1137 r = __galleryRenderer.SetCanvasVisibility(endCanvasIndex, true);
1138 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1140 r = __galleryRenderer.RunCanvasTransition(startCanvasIndex, endCanvasIndex, transition, &animation);
1141 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1143 if (__slideShowRepeat == false)
1145 __slideShowPlayCount--;
1148 r = __galleryRenderer.RefreshView();
1149 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1156 _GalleryPresenter::GetPropertySlideShowViewDuration(void) const
1158 return Variant(__slideShowViewDuration);
1162 _GalleryPresenter::SetPropertySlideShowViewDuration(const Variant& variant)
1164 __slideShowViewDuration = variant.ToInt();
1170 _GalleryPresenter::GetPropertySlideShowAnimationDuration(void) const
1172 return Variant(__slideShowAnimationDuration);
1176 _GalleryPresenter::SetPropertySlideShowAnimationDuration(const Variant& variant)
1178 __slideShowAnimationDuration = variant.ToInt();
1184 _GalleryPresenter::GetPropertyTextOfEmptyGallery(void) const
1186 return Variant(__emptyText);
1190 _GalleryPresenter::SetPropertyTextOfEmptyGallery(const Variant& variant)
1192 __emptyText = variant.ToString();
1198 _GalleryPresenter::GetPropertyZoomingEnabled(void) const
1200 return Variant(__zoomingEnabled);
1204 _GalleryPresenter::SetPropertyZoomingEnabled(const Variant& variant)
1206 __zoomingEnabled = variant.ToBool();
1212 _GalleryPresenter::OnPropertyChanging(_PropertyBase& source, const String& name,
1213 const Variant& oldProperty, const Variant& newProperty)
1218 _GalleryPresenter::OnPropertyChanged(_PropertyBase& source, const String& name,
1219 const Variant& oldProperty, const Variant& newProperty)
1224 _GalleryPresenter::SetFontSize(int size)
1226 __emptyFontSize = size;
1230 _GalleryPresenter::GetFontSize(void) const
1232 return __emptyFontSize;
1236 _GalleryPresenter::SetFontStyle(FontStyle style)
1238 __emptyFontStyle = style;
1242 _GalleryPresenter::GetFontStyle(void) const
1244 return __emptyFontStyle;
1248 _GalleryPresenter::OnFontInfoRequested(unsigned long& style, int& size)
1250 style = GetFontStyle();
1251 size = GetFontSize();
1255 _GalleryPresenter::OnFontChanged(void)
1257 if (GetItemCount() == 0)
1259 result r = __galleryRenderer.EnableEmptyView();
1260 SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
1264 }}} // Tizen::Ui::Controls