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 <FSys_SettingInfoImpl.h>
20 #include "FUi_AccessibilityContainer.h"
21 #include "FUi_AccessibilityElement.h"
22 #include "FUi_AccessibilityManager.h"
23 #include "FUi_CoordinateSystemUtils.h"
24 #include "FUi_ResourceManager.h"
25 #include "FUi_TouchFlickGestureDetector.h"
26 #include "FUi_TouchTapGestureDetector.h"
27 #include "FUi_TouchPinchGestureDetector.h"
28 #include "FUiCtrl_Gallery.h"
29 #include "FUiCtrl_GalleryBitmap.h"
30 #include "FUiCtrl_GalleryPresenter.h"
31 #include "FUiCtrl_GalleryRenderer.h"
32 #include "FUiCtrl_GalleryRendererNotification.h"
33 #include "FUiCtrl_GalleryViewEventInfo.h"
34 #include "FUiCtrl_GalleryViewEvent.h"
35 #include "FUiCtrl_IGalleryCoreEventListener.h"
36 #include "FUiCtrl_IGalleryRendererNotiListener.h"
38 using namespace Tizen::Base;
39 using namespace Tizen::Graphics;
40 using namespace Tizen::System;
41 using namespace Tizen::Ui::Effects;
43 namespace Tizen { namespace Ui { namespace Controls {
45 _Gallery::_Gallery(void)
48 , __modelInitialized(false)
49 , __pGalleryImageElement(null)
51 _AccessibilityContainer* pContainer = GetAccessibilityContainer();
52 if (pContainer != null)
54 pContainer->Activate(true);
58 _Gallery::~_Gallery(void)
60 result r = __flickGesture.RemoveGestureListener(*this);
67 r = RemoveGestureDetector(__flickGesture);
74 r = __oneTapGesture.RemoveGestureListener(*this);
81 r = RemoveGestureDetector(__oneTapGesture);
88 r = __twoTapGesture.RemoveGestureListener(*this);
95 r = RemoveGestureDetector(__twoTapGesture);
102 r = __pinchGesture.RemoveGestureListener(*this);
109 r = RemoveGestureDetector(__pinchGesture);
116 r = _SettingInfoImpl::RemoveSettingEventListenerForInternal(*this);
123 RemoveGalleryAccessibilityElements();
130 _Gallery::CreateGalleryN(_GalleryItemProviderAdaptorImpl* pGalleryItemProviderAdaptor)
132 result r = E_SUCCESS;
135 _Gallery* pGallery = new (std::nothrow) _Gallery();
136 SysTryCatch(NID_UI_CTRL, pGallery != null, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Failed to allocate the memory for the _Gallery.");
138 r = pGallery->Construct(pGalleryItemProviderAdaptor);
139 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
141 SetLastResult(E_SUCCESS);
152 _Gallery::Construct(_GalleryItemProviderAdaptorImpl* pGalleryItemProviderAdaptor)
154 result r = E_SUCCESS;
155 _GalleryRenderer* pRenderer = null;
156 _GalleryPresenter* pPresenter = null;
158 pRenderer = _GalleryRenderer::CreateGalleryRendererN((Tizen::Ui::_Control&)*this);
159 SysTryCatch(NID_UI_CTRL, pRenderer != null, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] Failed to create the _GalleryRenderer.");
161 pPresenter = _GalleryPresenter::CreateGalleryPresenterN((_IGalleryRenderer&)*pRenderer, pGalleryItemProviderAdaptor, this);
162 SysTryCatch(NID_UI_CTRL, pPresenter != null, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] Failed to create the _GalleryPresenter.");
164 r = pRenderer->AddNotiListener(*pPresenter);
165 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
169 r = __flickGesture.AddGestureListener(*this);
170 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
172 r = _Control::AddGestureDetector(__flickGesture);
173 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
175 r = __oneTapGesture.AddGestureListener(*this);
176 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
178 __oneTapGesture.SetTapCount(1);
179 r = _Control::AddGestureDetector(__oneTapGesture);
180 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
182 r = __twoTapGesture.AddGestureListener(*this);
183 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
185 __twoTapGesture.SetTapCount(2);
186 r = _Control::AddGestureDetector(__twoTapGesture);
187 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
189 __oneTapGesture.StartOnFailureOf(__twoTapGesture);
191 SetMultiTouchEnabled(true);
192 r = _Control::AddGestureDetector(__pinchGesture);
193 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
195 r = __pinchGesture.AddGestureListener(*this);
196 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
198 r = _SettingInfoImpl::AddSettingEventListenerForInternal(*this);
199 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
201 SetRenderer((_GalleryRenderer &)*pRenderer);
202 SetPresenter((_GalleryPresenter &)*pPresenter);
215 _Gallery::SetTextOfEmptyGallery(const String& text)
217 return GetPresenter().SetTextOfEmptyGallery(text);
221 _Gallery::GetTextOfEmptyGallery(void) const
223 return GetPresenter().GetTextOfEmptyGallery();
227 _Gallery::SetBitmapOfEmptyGallery(const _GalleryBitmap* pBitmap)
229 return GetPresenter().SetBitmapOfEmptyGallery(pBitmap);
233 _Gallery::SetCoreEventListener(const _IGalleryCoreEventListener& coreEventListener)
235 return GetPresenter().SetCoreEventListener(coreEventListener);
239 _Gallery::RemoveCoreEventListener(const _IGalleryCoreEventListener& coreEventListener)
241 return GetPresenter().RemoveCoreEventListener(coreEventListener);
245 _Gallery::SetZoomingEnabled(bool enable)
247 return GetPresenter().SetZoomingEnabled(enable);
251 _Gallery::IsZoomingEnabled(void) const
253 return GetPresenter().IsZoomingEnabled();
257 _Gallery::SetSlideShowType(_GallerySlideShowType slideShowType)
259 return GetPresenter().SetSlideShowType(slideShowType);
262 _GallerySlideShowType
263 _Gallery::GetSlideShowType(void) const
265 return GetPresenter().GetSlideShowType();
269 _Gallery::SetSlideShowAnimationDuration(int duration)
271 return GetPresenter().SetSlideShowAnimationDuration(duration);
275 _Gallery::GetSlideShowAnimationDuration(void) const
277 return GetPresenter().GetSlideShowAnimationDuration();
281 _Gallery::SetSlideShowViewDuration(int duration)
283 return GetPresenter().SetSlideShowViewDuration(duration);
287 _Gallery::GetSlideShowViewDuration(void) const
289 return GetPresenter().GetSlideShowViewDuration();
293 _Gallery::StartSlideShow(bool repeat)
295 return GetPresenter().StartSlideShow(repeat);
299 _Gallery::StopSlideShow(void)
301 return GetPresenter().StopSlideShow();
305 _Gallery::IsSlideShowStarted(void) const
307 return GetPresenter().IsSlideShowStarted();
312 _Gallery::SetCurrentItemIndex(int itemIndex)
314 return GetPresenter().SetCurrentItem(itemIndex);
318 _Gallery::GetCurrentItemIndex(void) const
320 return GetPresenter().GetCurrentItemIndex();
324 _Gallery::GetItemCount(void) const
326 return GetPresenter().GetItemCount();
330 _Gallery::RequestToLoadItem(int itemIndex)
332 SysTryReturnResult(NID_UI_CTRL, __modelInitialized == true, E_INVALID_OPERATION, "Does not call to first draw.");
333 result r = GetPresenter().RequestToLoadItem(itemIndex);
334 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagation.", GetErrorMessage(r));
336 InitializeAccessibilityElement();
342 _Gallery::RequestToUnloadItem(int itemIndex)
344 SysTryReturnResult(NID_UI_CTRL, __modelInitialized == true, E_INVALID_OPERATION, "Does not call to first draw.");
345 result r = GetPresenter().RequestToUnloadItem(itemIndex);
346 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagation.", GetErrorMessage(r));
348 InitializeAccessibilityElement();
354 _Gallery::RequestToUnloadAllItems(void)
356 result r = GetPresenter().RequestToUnloadAllItems();
357 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagation.", GetErrorMessage(r));
359 InitializeAccessibilityElement();
365 _Gallery::RequestToUpdateItem(int itemIndex)
367 SysTryReturnResult(NID_UI_CTRL, __modelInitialized == true, E_INVALID_OPERATION, "Does not call to first draw.");
368 result r = GetPresenter().RequestToUpdateItem(itemIndex);
369 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagation.", GetErrorMessage(r));
371 InitializeAccessibilityElement();
377 _Gallery::RequestToUpdateAllItems(void)
379 result r = GetPresenter().RequestToUpdateAllItems();
380 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagation.", GetErrorMessage(r));
382 InitializeAccessibilityElement();
388 _Gallery::OnFlickGestureDetected(_TouchFlickGestureDetector& gesture)
390 _GalleryViewEventInfo viewEventInfo;
393 gesture.GetDistance(distanceX, distanceY);
394 Point flickPoint(distanceX, distanceY);
396 viewEventInfo.SetFlickPosition(flickPoint);
397 viewEventInfo.SetFlicked(true);
398 viewEventInfo.SetFlickTime(gesture.GetDuration());
399 _GalleryViewEvent viewEvent(GALLERY_VIEW_EVENT_TOUCH_FLICK, &viewEventInfo);
400 bool r = GetPresenter().PostEvent(viewEvent);
401 SysTryReturn(NID_UI_CTRL, r == true, true, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
407 _Gallery::OnFlickGestureCanceled(_TouchFlickGestureDetector& gesture)
413 _Gallery::OnTapGestureDetected(_TouchTapGestureDetector& gesture)
415 if (gesture.GetTapCount() == 1)
417 PLAY_FEEDBACK(_RESOURCE_FEEDBACK_PATTERN_TAP);
421 PLAY_FEEDBACK(_RESOURCE_FEEDBACK_PATTERN_MULTI_TAP);
423 Tizen::Ui::_TouchInfo touchInfo(0, _TOUCH_DOUBLE_PRESSED, pos, false, 0);
424 _GalleryViewEventInfo viewEventInfo(touchInfo);
425 _GalleryViewEvent viewEvent(GALLERY_VIEW_EVENT_TOUCH_DOUBLE_PRESSED, &viewEventInfo);
427 bool r = GetPresenter().PostEvent(viewEvent);
428 SysTryReturn(NID_UI_CTRL, r == true, true, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
435 _Gallery::OnTapGestureCanceled(_TouchTapGestureDetector& gesture)
441 _Gallery::OnPinchGestureStarted(_TouchPinchGestureDetector& gesture)
443 //return OnPinchGestureChanged(gesture);
448 _Gallery::OnPinchGestureChanged(_TouchPinchGestureDetector& gesture)
450 _GalleryViewEventInfo viewEventInfo;
451 viewEventInfo.SetPinchCenterPosition(_CoordinateSystemUtils::ConvertToFloat(gesture.GetCenterPoint()));
452 viewEventInfo.SetPinchArea(gesture.GetScale());
453 _GalleryViewEvent viewEvent(GALLERY_VIEW_EVENT_TOUCH_PINCH_ZOOM, &viewEventInfo);
454 bool r = GetPresenter().PostEvent(viewEvent);
455 SysTryReturn(NID_UI_CTRL, r == true, true, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
460 _Gallery::OnPinchGestureFinished(_TouchPinchGestureDetector& gesture)
462 //return OnPinchGestureChanged(gesture);
467 _Gallery::OnPinchGestureCanceled(_TouchPinchGestureDetector& gesture)
472 // Touch Event Callbacks
474 _Gallery::OnTouchPressed(const _Control& source, const _TouchInfo& touchinfo)
476 _GalleryViewEventInfo viewEventInfo(const_cast <_TouchInfo&>(touchinfo));
477 _GalleryViewEvent viewEvent(GALLERY_VIEW_EVENT_TOUCH_PRESSED, &viewEventInfo);
479 return GetPresenter().PostEvent(viewEvent);
483 _Gallery::OnTouchReleased(const _Control& source, const _TouchInfo& touchinfo)
485 _GalleryViewEventInfo viewEventInfo(const_cast <_TouchInfo&>(touchinfo));
486 _GalleryViewEvent viewEvent(GALLERY_VIEW_EVENT_TOUCH_RELEASED, &viewEventInfo);
488 return GetPresenter().PostEvent(viewEvent);
492 _Gallery::OnTouchMoved(const _Control& source, const _TouchInfo& touchinfo)
494 _GalleryViewEventInfo viewEventInfo(const_cast <_TouchInfo&>(touchinfo));
495 _GalleryViewEvent viewEvent(GALLERY_VIEW_EVENT_TOUCH_MOVED, &viewEventInfo);
497 bool r = GetPresenter().PostEvent(viewEvent);
498 SysTryReturn(NID_UI_CTRL, r == true, true, GetLastResult(), "[%s] Propagating.", GetErrorMessage(r));
500 SetLastResult(E_SUCCESS);
506 _Gallery::OnTouchCanceled(const _Control& source, const _TouchInfo& touchinfo)
511 // Windowing Event Callbacks
513 _Gallery::OnDraw(void)
515 if (__modelInitialized == false)
517 //GetPresenter().RequestToUpdateItemCount();
518 __modelInitialized = true;
521 GetPresenter().OnDraw();
525 _Gallery::OnBoundsChanged(void)
527 _GalleryViewEventInfo viewEventInfo;
528 _GalleryViewEvent viewEvent(GALLERY_VIEW_EVENT_BOUNDS_CHANGED, &viewEventInfo);
530 bool r = GetPresenter().PostEvent(viewEvent);
531 SysTryReturnVoidResult(NID_UI_CTRL, r == true, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
532 ResizeGalleryAccessibilityElement();
536 _Gallery::OnFontInfoRequested(unsigned long& style, int& size)
538 GetPresenter().OnFontInfoRequested(style, size);
542 _Gallery::OnFontChanged(Font* pFont)
544 GetPresenter().OnFontChanged();
548 _Gallery::SetEffect(Effect* pEffect)
550 GetRenderer().SetEffect(pEffect);
554 _Gallery::GetEffect(void)
556 return GetRenderer().GetEffect();
560 _Gallery::OnAttachedToMainTree(void)
562 InitializeAccessibilityElement();
568 _Gallery::InitializeAccessibilityElement(void)
570 if (_AccessibilityManager::IsActivated() != true)
575 if (GetItemCount() > 0)
577 AddGalleryAccessibilityElement();
581 RemoveGalleryAccessibilityElements();
588 _Gallery::ResizeGalleryAccessibilityElement(void)
590 if (_AccessibilityManager::IsActivated() == true && __pGalleryImageElement != null)
592 // TODO : need _AccessibilityElement::SetBoundsF()
593 FloatRectangle floatRect = __pRenderer->GetCanvasImageBounds(__pPresenter->SearchCanvasIndex(GetCurrentItemIndex()));
594 Rectangle rect(floatRect.x, floatRect.y, floatRect.width, floatRect.height);
595 __pGalleryImageElement->SetBounds(rect);
602 _Gallery::RemoveGalleryAccessibilityElements(void)
604 _AccessibilityContainer* pContainer = GetAccessibilityContainer();
606 if (pContainer != null && __pGalleryImageElement != null)
608 result r = pContainer->RemoveElement(*__pGalleryImageElement);
609 SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
610 __pGalleryImageElement = null;
615 _Gallery::AddGalleryAccessibilityElement(void)
617 _AccessibilityContainer* pContainer = GetAccessibilityContainer();
618 if(pContainer != null && __pGalleryImageElement == null)
620 _AccessibilityElement* pGalleryElement = new (std::nothrow) _AccessibilityElement(true);
621 SysTryReturnVoidResult(NID_UI_CTRL, pGalleryElement, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
623 FloatRectangle floatRect = __pRenderer->GetCanvasImageBounds(__pPresenter->SearchCanvasIndex(GetCurrentItemIndex()));
624 Rectangle rect(floatRect.x, floatRect.y, floatRect.width, floatRect.height);
625 pGalleryElement->SetBounds(rect);
626 pGalleryElement->SetTrait(L"Image");
627 pGalleryElement->SetName(L"GalleryImage");
629 pContainer->AddElement(*pGalleryElement);
630 __pGalleryImageElement = pGalleryElement;
637 _Gallery::OnSettingChanged(Tizen::Base::String& key)
639 const wchar_t* LOCALE_LANGUAGE = L"http://tizen.org/setting/locale.language";
640 if (key == LOCALE_LANGUAGE)
642 __pPresenter->UpdateEmptyString();
646 }}} // Tizen::Ui::Controls