2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
5 // Licensed under the Apache License, Version 2.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://www.apache.org/licenses/LICENSE-2.0/
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 <FBaseString.h>
18 #include <FGrpColor.h>
19 #include "FUi_AccessibilityContainer.h"
20 #include "FUi_AccessibilityElement.h"
21 #include "FUi_AccessibilityManager.h"
22 #include "FUi_CoordinateSystemUtils.h"
23 #include "FUi_ResourceManager.h"
24 #include "FUi_TouchFlickGestureDetector.h"
25 #include "FUi_TouchTapGestureDetector.h"
26 #include "FUi_TouchPinchGestureDetector.h"
27 #include "FUiCtrl_Gallery.h"
28 #include "FUiCtrl_GalleryBitmap.h"
29 #include "FUiCtrl_GalleryPresenter.h"
30 #include "FUiCtrl_GalleryRenderer.h"
31 #include "FUiCtrl_GalleryRendererNotification.h"
32 #include "FUiCtrl_GalleryViewEventInfo.h"
33 #include "FUiCtrl_GalleryViewEvent.h"
34 #include "FUiCtrl_IGalleryCoreEventListener.h"
35 #include "FUiCtrl_IGalleryRendererNotiListener.h"
37 using namespace Tizen::Base;
38 using namespace Tizen::Graphics;
39 using namespace Tizen::Ui::Effects;
41 namespace Tizen { namespace Ui { namespace Controls {
43 _Gallery::_Gallery(void)
46 , __modelInitialized(false)
47 , __pGalleryImageElement(null)
49 _AccessibilityContainer* pContainer = GetAccessibilityContainer();
50 if (pContainer != null)
52 pContainer->Activate(true);
56 _Gallery::~_Gallery(void)
58 result r = __flickGesture.RemoveGestureListener(*this);
65 r = RemoveGestureDetector(__flickGesture);
72 r = __oneTapGesture.RemoveGestureListener(*this);
79 r = RemoveGestureDetector(__oneTapGesture);
86 r = __twoTapGesture.RemoveGestureListener(*this);
93 r = RemoveGestureDetector(__twoTapGesture);
100 r = __pinchGesture.RemoveGestureListener(*this);
107 r = RemoveGestureDetector(__pinchGesture);
114 RemoveGalleryAccessibilityElements();
121 _Gallery::CreateGalleryN(_GalleryItemProviderAdaptorImpl* pGalleryItemProviderAdaptor)
123 result r = E_SUCCESS;
126 _Gallery* pGallery = new (std::nothrow) _Gallery();
127 SysTryCatch(NID_UI_CTRL, pGallery != null, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Failed to allocate the memory for the _Gallery.");
129 r = pGallery->Construct(pGalleryItemProviderAdaptor);
130 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
132 SetLastResult(E_SUCCESS);
143 _Gallery::Construct(_GalleryItemProviderAdaptorImpl* pGalleryItemProviderAdaptor)
145 result r = E_SUCCESS;
146 _GalleryRenderer* pRenderer = null;
147 _GalleryPresenter* pPresenter = null;
149 pRenderer = _GalleryRenderer::CreateGalleryRendererN((Tizen::Ui::_Control&)*this);
150 SysTryCatch(NID_UI_CTRL, pRenderer != null, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] Failed to create the _GalleryRenderer.");
152 pPresenter = _GalleryPresenter::CreateGalleryPresenterN((_IGalleryRenderer&)*pRenderer, pGalleryItemProviderAdaptor, this);
153 SysTryCatch(NID_UI_CTRL, pPresenter != null, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] Failed to create the _GalleryPresenter.");
155 r = pRenderer->AddNotiListener(*pPresenter);
156 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
160 r = __flickGesture.AddGestureListener(*this);
161 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
163 r = _Control::AddGestureDetector(__flickGesture);
164 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
166 r = __oneTapGesture.AddGestureListener(*this);
167 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
169 __oneTapGesture.SetTapCount(1);
170 r = _Control::AddGestureDetector(__oneTapGesture);
171 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
173 r = __twoTapGesture.AddGestureListener(*this);
174 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
176 __twoTapGesture.SetTapCount(2);
177 r = _Control::AddGestureDetector(__twoTapGesture);
178 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
180 __oneTapGesture.StartOnFailureOf(__twoTapGesture);
182 SetMultiTouchEnabled(true);
183 r = _Control::AddGestureDetector(__pinchGesture);
184 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
186 r = __pinchGesture.AddGestureListener(*this);
187 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
189 SetRenderer((_GalleryRenderer &)*pRenderer);
190 SetPresenter((_GalleryPresenter &)*pPresenter);
203 _Gallery::SetTextOfEmptyGallery(const String& text)
205 return GetPresenter().SetTextOfEmptyGallery(text);
209 _Gallery::GetTextOfEmptyGallery(void) const
211 return GetPresenter().GetTextOfEmptyGallery();
215 _Gallery::SetBitmapOfEmptyGallery(const _GalleryBitmap* pBitmap)
217 return GetPresenter().SetBitmapOfEmptyGallery(pBitmap);
221 _Gallery::SetCoreEventListener(const _IGalleryCoreEventListener& coreEventListener)
223 return GetPresenter().SetCoreEventListener(coreEventListener);
227 _Gallery::RemoveCoreEventListener(const _IGalleryCoreEventListener& coreEventListener)
229 return GetPresenter().RemoveCoreEventListener(coreEventListener);
233 _Gallery::SetZoomingEnabled(bool enable)
235 return GetPresenter().SetZoomingEnabled(enable);
239 _Gallery::IsZoomingEnabled(void) const
241 return GetPresenter().IsZoomingEnabled();
245 _Gallery::SetSlideShowType(_GallerySlideShowType slideShowType)
247 return GetPresenter().SetSlideShowType(slideShowType);
250 _GallerySlideShowType
251 _Gallery::GetSlideShowType(void) const
253 return GetPresenter().GetSlideShowType();
257 _Gallery::SetSlideShowAnimationDuration(int duration)
259 return GetPresenter().SetSlideShowAnimationDuration(duration);
263 _Gallery::GetSlideShowAnimationDuration(void) const
265 return GetPresenter().GetSlideShowAnimationDuration();
269 _Gallery::SetSlideShowViewDuration(int duration)
271 return GetPresenter().SetSlideShowViewDuration(duration);
275 _Gallery::GetSlideShowViewDuration(void) const
277 return GetPresenter().GetSlideShowViewDuration();
281 _Gallery::StartSlideShow(bool repeat)
283 return GetPresenter().StartSlideShow(repeat);
287 _Gallery::StopSlideShow(void)
289 return GetPresenter().StopSlideShow();
293 _Gallery::IsSlideShowStarted(void) const
295 return GetPresenter().IsSlideShowStarted();
300 _Gallery::SetCurrentItemIndex(int itemIndex)
302 return GetPresenter().SetCurrentItem(itemIndex);
306 _Gallery::GetCurrentItemIndex(void) const
308 return GetPresenter().GetCurrentItemIndex();
312 _Gallery::GetItemCount(void) const
314 return GetPresenter().GetItemCount();
318 _Gallery::RequestToLoadItem(int itemIndex)
320 SysTryReturnResult(NID_UI_CTRL, __modelInitialized == true, E_INVALID_OPERATION, "Does not call to first draw.");
321 result r = GetPresenter().RequestToLoadItem(itemIndex);
322 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagation.", GetErrorMessage(r));
324 InitializeAccessibilityElement();
330 _Gallery::RequestToUnloadItem(int itemIndex)
332 SysTryReturnResult(NID_UI_CTRL, __modelInitialized == true, E_INVALID_OPERATION, "Does not call to first draw.");
333 result r = GetPresenter().RequestToUnloadItem(itemIndex);
334 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagation.", GetErrorMessage(r));
336 InitializeAccessibilityElement();
342 _Gallery::RequestToUnloadAllItems(void)
344 result r = GetPresenter().RequestToUnloadAllItems();
345 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagation.", GetErrorMessage(r));
347 InitializeAccessibilityElement();
353 _Gallery::RequestToUpdateItem(int itemIndex)
355 SysTryReturnResult(NID_UI_CTRL, __modelInitialized == true, E_INVALID_OPERATION, "Does not call to first draw.");
356 result r = GetPresenter().RequestToUpdateItem(itemIndex);
357 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagation.", GetErrorMessage(r));
359 InitializeAccessibilityElement();
365 _Gallery::RequestToUpdateAllItems(void)
367 result r = GetPresenter().RequestToUpdateAllItems();
368 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagation.", GetErrorMessage(r));
370 InitializeAccessibilityElement();
376 _Gallery::OnFlickGestureDetected(_TouchFlickGestureDetector& gesture)
378 _GalleryViewEventInfo viewEventInfo;
381 gesture.GetDistance(distanceX, distanceY);
382 Point flickPoint(distanceX, distanceY);
384 viewEventInfo.SetFlickPosition(flickPoint);
385 viewEventInfo.SetFlicked(true);
386 viewEventInfo.SetFlickTime(gesture.GetDuration());
387 _GalleryViewEvent viewEvent(GALLERY_VIEW_EVENT_TOUCH_FLICK, &viewEventInfo);
388 bool r = GetPresenter().PostEvent(viewEvent);
389 SysTryReturn(NID_UI_CTRL, r == true, true, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
395 _Gallery::OnFlickGestureCanceled(_TouchFlickGestureDetector& gesture)
401 _Gallery::OnTapGestureDetected(_TouchTapGestureDetector& gesture)
403 if (gesture.GetTapCount() == 1)
405 PLAY_FEEDBACK(_RESOURCE_FEEDBACK_PATTERN_TAP);
409 PLAY_FEEDBACK(_RESOURCE_FEEDBACK_PATTERN_MULTI_TAP);
411 Tizen::Ui::_TouchInfo touchInfo(0, _TOUCH_DOUBLE_PRESSED, pos, false, 0);
412 _GalleryViewEventInfo viewEventInfo(touchInfo);
413 _GalleryViewEvent viewEvent(GALLERY_VIEW_EVENT_TOUCH_DOUBLE_PRESSED, &viewEventInfo);
415 bool r = GetPresenter().PostEvent(viewEvent);
416 SysTryReturn(NID_UI_CTRL, r == true, true, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
423 _Gallery::OnTapGestureCanceled(_TouchTapGestureDetector& gesture)
429 _Gallery::OnPinchGestureStarted(_TouchPinchGestureDetector& gesture)
431 //return OnPinchGestureChanged(gesture);
436 _Gallery::OnPinchGestureChanged(_TouchPinchGestureDetector& gesture)
438 _GalleryViewEventInfo viewEventInfo;
439 viewEventInfo.SetPinchCenterPosition(_CoordinateSystemUtils::ConvertToFloat(gesture.GetCenterPoint()));
440 viewEventInfo.SetPinchArea(gesture.GetScale());
441 _GalleryViewEvent viewEvent(GALLERY_VIEW_EVENT_TOUCH_PINCH_ZOOM, &viewEventInfo);
442 bool r = GetPresenter().PostEvent(viewEvent);
443 SysTryReturn(NID_UI_CTRL, r == true, true, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
448 _Gallery::OnPinchGestureFinished(_TouchPinchGestureDetector& gesture)
450 //return OnPinchGestureChanged(gesture);
455 _Gallery::OnPinchGestureCanceled(_TouchPinchGestureDetector& gesture)
460 // Touch Event Callbacks
462 _Gallery::OnTouchPressed(const _Control& source, const _TouchInfo& touchinfo)
464 _GalleryViewEventInfo viewEventInfo(const_cast <_TouchInfo&>(touchinfo));
465 _GalleryViewEvent viewEvent(GALLERY_VIEW_EVENT_TOUCH_PRESSED, &viewEventInfo);
467 return GetPresenter().PostEvent(viewEvent);
471 _Gallery::OnTouchReleased(const _Control& source, const _TouchInfo& touchinfo)
473 _GalleryViewEventInfo viewEventInfo(const_cast <_TouchInfo&>(touchinfo));
474 _GalleryViewEvent viewEvent(GALLERY_VIEW_EVENT_TOUCH_RELEASED, &viewEventInfo);
476 return GetPresenter().PostEvent(viewEvent);
480 _Gallery::OnTouchMoved(const _Control& source, const _TouchInfo& touchinfo)
482 _GalleryViewEventInfo viewEventInfo(const_cast <_TouchInfo&>(touchinfo));
483 _GalleryViewEvent viewEvent(GALLERY_VIEW_EVENT_TOUCH_MOVED, &viewEventInfo);
485 bool r = GetPresenter().PostEvent(viewEvent);
486 SysTryReturn(NID_UI_CTRL, r == true, true, GetLastResult(), "[%s] Propagating.", GetErrorMessage(r));
488 SetLastResult(E_SUCCESS);
494 _Gallery::OnTouchCanceled(const _Control& source, const _TouchInfo& touchinfo)
499 // Windowing Event Callbacks
501 _Gallery::OnDraw(void)
503 if (__modelInitialized == false)
505 //GetPresenter().RequestToUpdateItemCount();
506 __modelInitialized = true;
509 GetPresenter().OnDraw();
513 _Gallery::OnBoundsChanged(void)
515 _GalleryViewEventInfo viewEventInfo;
516 _GalleryViewEvent viewEvent(GALLERY_VIEW_EVENT_BOUNDS_CHANGED, &viewEventInfo);
518 bool r = GetPresenter().PostEvent(viewEvent);
519 SysTryReturnVoidResult(NID_UI_CTRL, r == true, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
520 ResizeGalleryAccessibilityElement();
524 _Gallery::OnFontInfoRequested(unsigned long& style, int& size)
526 GetPresenter().OnFontInfoRequested(style, size);
530 _Gallery::OnFontChanged(Font* pFont)
532 GetPresenter().OnFontChanged();
536 _Gallery::SetEffect(Effect* pEffect)
538 GetRenderer().SetEffect(pEffect);
542 _Gallery::GetEffect(void)
544 return GetRenderer().GetEffect();
548 _Gallery::OnAttachedToMainTree(void)
550 InitializeAccessibilityElement();
556 _Gallery::InitializeAccessibilityElement(void)
558 if (_AccessibilityManager::IsActivated() != true)
563 if (GetItemCount() > 0)
565 AddGalleryAccessibilityElement();
569 RemoveGalleryAccessibilityElements();
576 _Gallery::ResizeGalleryAccessibilityElement(void)
578 if (_AccessibilityManager::IsActivated() == true && __pGalleryImageElement != null)
580 // TODO : need _AccessibilityElement::SetBoundsF()
581 FloatRectangle floatRect = __pRenderer->GetCanvasImageBounds(__pPresenter->SearchCanvasIndex(GetCurrentItemIndex()));
582 Rectangle rect(floatRect.x, floatRect.y, floatRect.width, floatRect.height);
583 __pGalleryImageElement->SetBounds(rect);
590 _Gallery::RemoveGalleryAccessibilityElements(void)
592 _AccessibilityContainer* pContainer = GetAccessibilityContainer();
594 if (pContainer != null && __pGalleryImageElement != null)
596 result r = pContainer->RemoveElement(*__pGalleryImageElement);
597 SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
598 __pGalleryImageElement = null;
603 _Gallery::AddGalleryAccessibilityElement(void)
605 _AccessibilityContainer* pContainer = GetAccessibilityContainer();
606 if(pContainer != null && __pGalleryImageElement == null)
608 _AccessibilityElement* pGalleryElement = new (std::nothrow) _AccessibilityElement(true);
609 SysTryReturnVoidResult(NID_UI_CTRL, pGalleryElement, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
611 FloatRectangle floatRect = __pRenderer->GetCanvasImageBounds(__pPresenter->SearchCanvasIndex(GetCurrentItemIndex()));
612 Rectangle rect(floatRect.x, floatRect.y, floatRect.width, floatRect.height);
613 pGalleryElement->SetBounds(rect);
614 pGalleryElement->SetTrait(L"Image");
615 pGalleryElement->SetName(L"GalleryImage");
617 pContainer->AddElement(*pGalleryElement);
618 __pGalleryImageElement = pGalleryElement;
624 }}} // Tizen::Ui::Controls