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.
19 * @file FUiCtrl_DateTimeBarPresenter.cpp
20 * @brief This is the implementation file for the _DateTimeBarPresenter class.
23 #include <FGrp_BitmapImpl.h>
24 #include <FGrp_FontImpl.h>
25 #include <FGrp_TextTextSimple.h>
26 #include "FUi_CoordinateSystemUtils.h"
27 #include "FUi_ResourceManager.h"
28 #include "FUiAnim_VisualElement.h"
29 #include "FUiCtrl_DateTimeUtils.h"
30 #include "FUiCtrl_DateTimeBar.h"
31 #include "FUiCtrl_DateTimeBarPresenter.h"
33 using namespace Tizen::Graphics;
34 using namespace Tizen::Ui;
35 using namespace Tizen::Base;
36 using namespace Tizen::Base::Runtime;
37 using namespace Tizen::Graphics::_Text;
38 using namespace Tizen::Ui::Animations;
40 namespace Tizen { namespace Ui { namespace Controls
43 _DateTimeBarPresenter::_DateTimeBarPresenter(_DateTimeBar* pDateTimeBar)
44 : __pDateTimeBar(pDateTimeBar)
45 , __pDateTimeBarModel(null)
46 , __currentPoint(FloatPoint(0.0f, 0.0f))
47 , __isTouchMoved(false)
48 , __touchMoveHandled(false)
49 , __isFlickEnabled(true)
50 , __isFlickInProgress(false)
52 , __pFlickAnimationTimer(null)
56 , __bodyAreaBounds(FloatRectangle())
57 , __arrowAreaBounds(FloatRectangle())
58 , __windowAreaBounds(FloatRectangle())
59 , __pBgColorReplacementBitmap(null)
60 , __pFocusBitmap(null)
61 , __pArrowColorReplacementBitmap(null)
62 , __isInitialAnimation(false)
63 , __initialAnimationValue(0.0f)
67 , __focusBounds(FloatRectangle())
68 , __isFlickCanceled(false)
72 _DateTimeBarPresenter::~_DateTimeBarPresenter(void)
74 delete __pDateTimeBarModel;
75 __pDateTimeBarModel = 0;
77 delete __pBgColorReplacementBitmap;
78 __pBgColorReplacementBitmap = null;
80 delete __pFocusBitmap;
81 __pFocusBitmap = null;
83 delete __pArrowColorReplacementBitmap;
84 __pArrowColorReplacementBitmap = null;
86 delete __pFlickAnimationTimer;
87 __pFlickAnimationTimer = null;
93 _DateTimeBarPresenter*
94 _DateTimeBarPresenter::CreateInstanceN(_DateTimeBar& dateTimeBar)
98 _DateTimeBarPresenter* pDateTimeBarPresenter = new (std::nothrow) _DateTimeBarPresenter(&dateTimeBar);
99 SysTryReturn(NID_UI_CTRL, pDateTimeBarPresenter, null, E_OUT_OF_MEMORY,
100 "[E_OUT_OF_MEMORY] Memory allocation failed.");
102 pDateTimeBarPresenter->__pDateTimeBarModel = _DateTimeBarModel::CreateInstanceN();
104 SysTryCatch(NID_UI_CTRL, pDateTimeBarPresenter->__pDateTimeBarModel, , r,
105 "[%s] Propagating.", GetErrorMessage(r));
107 r = GET_SHAPE_CONFIG(DATETIMEBAR::ARROW_WIDTH, dateTimeBar.GetOrientation(), pDateTimeBarPresenter->__arrowAreaBounds.width);
108 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Failed to get arrow width from resource.", GetErrorMessage(r));
110 r = GET_SHAPE_CONFIG(DATETIMEBAR::ARROW_HEIGHT, dateTimeBar.GetOrientation(), pDateTimeBarPresenter->__arrowAreaBounds.height);
111 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Failed to get arrow height from resource.", GetErrorMessage(r));
113 r = pDateTimeBarPresenter->LoadResource();
114 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Failed to load the resources.", GetErrorMessage(r));
116 return pDateTimeBarPresenter;
119 delete pDateTimeBarPresenter;
125 _DateTimeBarPresenter::AddFlickAnimationInfo()
127 __flickAnimation.SetSensitivity(FLICK_ANIMATION_FPS_DATE_TIME_BAR, FLICK_ANIMATION_SENSITIVITY_DATE_TIME_BAR);
128 __flickAnimation.SetDirection(FD_HORIZONTAL);
132 _DateTimeBarPresenter::LoadResource(void)
134 result r = E_SUCCESS;
136 Bitmap* pBackgroundNormalBitmap = null;
138 r = GET_BITMAP_CONFIG_N(DATETIMEBAR::TIMEPICKERBAR_BG_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, pBackgroundNormalBitmap);
139 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), r, r, "[%s] Propagating.", GetErrorMessage(r));
141 GET_COLOR_CONFIG(DATETIMEBAR::BG_NORMAL, bgBitmapColor);
142 __pBgColorReplacementBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pBackgroundNormalBitmap,
143 Color::GetColor(COLOR_ID_MAGENTA), bgBitmapColor);
144 SysTryCatch(NID_UI_CTRL, __pBgColorReplacementBitmap != null, r = GetLastResult(), GetLastResult(), "[%s] Propagating.",
145 GetErrorMessage(GetLastResult()));
147 r = GET_BITMAP_CONFIG_N(FOCUSUI::FOCUS, BITMAP_PIXEL_FORMAT_ARGB8888, __pFocusBitmap);
148 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS), , r, "[%s] Propagating.", GetErrorMessage(r));
150 r = LoadArrowBitmap();
151 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Failed to load resources.", GetErrorMessage(r));
153 delete pBackgroundNormalBitmap;
154 pBackgroundNormalBitmap = null;
156 AddFlickAnimationInfo();
162 delete pBackgroundNormalBitmap;
163 pBackgroundNormalBitmap = null;
165 delete __pBgColorReplacementBitmap;
166 __pBgColorReplacementBitmap = null;
168 delete __pFocusBitmap;
169 __pFocusBitmap = null;
175 _DateTimeBarPresenter::LoadArrowBitmap(void)
177 result r = E_SUCCESS;
179 Bitmap* pArrowNormalBitmap = null;
181 GET_COLOR_CONFIG(DATETIMEBAR::BG_NORMAL, arrowColor);
183 if (__pDateTimeBar->GetAlignment() == DATETIME_BAR_ALIGN_DOWN)
185 r = GET_BITMAP_CONFIG_N(DATETIMEBAR::TAIL_DOWN, BITMAP_PIXEL_FORMAT_ARGB8888, pArrowNormalBitmap);
186 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), r, r, "[%s] Propagating.", GetErrorMessage(r));
190 r = GET_BITMAP_CONFIG_N(DATETIMEBAR::TAIL_UP, BITMAP_PIXEL_FORMAT_ARGB8888, pArrowNormalBitmap);
191 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), r, r, "[%s] Propagating.", GetErrorMessage(r));
194 if (__pArrowColorReplacementBitmap != null)
196 delete __pArrowColorReplacementBitmap;
197 __pArrowColorReplacementBitmap = null;
200 __pArrowColorReplacementBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pArrowNormalBitmap,
201 Color::GetColor(COLOR_ID_MAGENTA), arrowColor);
202 SysTryCatch(NID_UI_CTRL, __pArrowColorReplacementBitmap != null, r = GetLastResult(), GetLastResult(), "[%s] Propagating.",
203 GetErrorMessage(GetLastResult()));
205 delete pArrowNormalBitmap;
206 pArrowNormalBitmap = null;
212 delete pArrowNormalBitmap;
213 pArrowNormalBitmap = null;
215 delete __pArrowColorReplacementBitmap;
216 __pArrowColorReplacementBitmap = null;
222 _DateTimeBarPresenter::Draw(void)
224 result r = E_SUCCESS;
226 Canvas* pCanvas = __pDateTimeBar->GetCanvasN();
227 SysAssertf((pCanvas != null), "Failed to get canvas.");
229 pCanvas->SetBackgroundColor(Color(0, 0, 0, 0));
231 r = pCanvas->Clear();
232 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
234 r = DrawBackground(*pCanvas);
235 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
242 r = DrawItem(*pCanvas);
243 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
245 r = DrawArrow(*pCanvas);
246 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
255 _DateTimeBarPresenter::ChangeFocusStatus(void)
257 _DateTimeBarItem* pItem = null;
259 if (__focusedIndex == -1)
261 __focusedIndex = GetSelectedItemIndex() - 1;
263 pItem = GetItemAt(__focusedIndex);
267 __focusedText.Clear();
268 __focusedText.Append(pItem->GetText().GetPointer());
270 SetItemStatus(__focusedIndex, DATETIMEBAR_ITEM_STATUS_HIGHLIGHTED);
274 _DateTimeBarPresenter::SetItemFocused(bool isFocused)
276 __isFocused = isFocused;
285 _DateTimeBarPresenter::SetFocusedItemBounds()
287 _DateTimeBarItem* pItem = null;
289 if (__focusedIndex > 0)
291 pItem = GetItemAt(__focusedIndex);
292 SysTryReturnVoidResult(NID_UI, pItem != NULL, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
293 __focusBounds = pItem->GetBounds();
298 _DateTimeBarPresenter::FocusModeChanged(void)
301 SetItemStatus(__focusedIndex, DATETIMEBAR_ITEM_STATUS_NORMAL);
306 _DateTimeBarPresenter::DrawItem(Canvas& canvas)
308 result r = E_SUCCESS;
310 FloatRectangle clientBounds = canvas.GetBoundsF();
312 _DateTimeBarItem* pDrawItem = null;
313 FloatRectangle itemBounds(0.0f, 0.0f, 0.0f, 0.0f);
318 GET_COLOR_CONFIG(DATETIMEBAR::TEXT_NORMAL, textColor);
320 Color textPressedColor;
321 GET_COLOR_CONFIG(DATETIMEBAR::TEXT_PRESSED, textPressedColor);
323 _DateTimeBarItemStatus itemStatus = DATETIMEBAR_ITEM_STATUS_NORMAL;
325 int itemCount = GetItemCount();
327 for (int i = __pDateTimeBarModel->GetFirstDrawnItemIndex(); i < itemCount; i++)
329 pDrawItem = __pDateTimeBarModel->GetItemAt(i);
330 if (pDrawItem == null)
335 itemBounds = pDrawItem->GetBounds();
337 if (itemBounds.x + itemBounds.width <= 0)
342 drawText = pDrawItem->GetText();
345 if (drawText.CompareTo(__focusedText) == 0)
347 pDrawItem->SetStatus(DATETIMEBAR_ITEM_STATUS_HIGHLIGHTED);
351 pDrawItem->SetStatus(DATETIMEBAR_ITEM_STATUS_NORMAL);
356 if (drawText.CompareTo(__selectedText) == 0)
358 pDrawItem->SetStatus(DATETIMEBAR_ITEM_STATUS_SELECTED);
362 itemStatus = pDrawItem->GetStatus();
364 float fontSize = GetFontSize();
366 TextSimple* pSimpleText = null;
367 TextObject* pTextObject = new (std::nothrow) TextObject;
368 SysTryReturn(NID_UI_CTRL, (pTextObject != null), E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
370 pTextObject->Construct();
371 pSimpleText = new (std::nothrow)TextSimple((const_cast <wchar_t*>(drawText.GetPointer())), drawText.GetLength(), TEXT_ELEMENT_SOURCE_TYPE_EXTERNAL);
372 pTextObject->AppendElement(*pSimpleText);
374 pTextObject->SetAlignment(TEXT_OBJECT_ALIGNMENT_CENTER | TEXT_OBJECT_ALIGNMENT_MIDDLE);
375 pTextObject->SetWrap(TEXT_OBJECT_WRAP_TYPE_NONE);
376 pTextObject->SetAction(TEXT_OBJECT_ACTION_TYPE_ABBREV);
378 SysAssertf(__pFont != null, "Font instance is null");
380 if (itemStatus == DATETIMEBAR_ITEM_STATUS_SELECTED || itemStatus == DATETIMEBAR_ITEM_STATUS_HIGHLIGHTED)
382 (_FontImpl::GetInstance(*__pFont))->SetSize(fontSize);
383 (_FontImpl::GetInstance(*__pFont))->SetStyle(FONT_STYLE_BOLD);
384 pTextObject->SetFont(__pFont, 0, pTextObject->GetTextLength());
385 pTextObject->SetForegroundColor(textPressedColor, 0, pTextObject->GetTextLength());
389 (_FontImpl::GetInstance(*__pFont))->SetSize(fontSize);
390 (_FontImpl::GetInstance(*__pFont))->SetStyle(FONT_STYLE_PLAIN);
391 pTextObject->SetFont(__pFont, 0, pTextObject->GetTextLength());
392 pTextObject->SetForegroundColor(textColor, 0, pTextObject->GetTextLength());
395 pTextObject->SetBounds(itemBounds);
396 pTextObject->Draw(*_CanvasImpl::GetInstance(canvas));
400 if ((itemBounds.x + itemBounds.width + GetLeftRightMargin()) >= clientBounds.width)
410 _DateTimeBarPresenter::DrawBackground(Canvas& canvas)
412 result r = E_SUCCESS;
414 FloatRectangle bodyAreaBounds = GetBodyBounds();
416 if (__pBgColorReplacementBitmap != null)
418 if (_BitmapImpl::CheckNinePatchedBitmapStrictly(*__pBgColorReplacementBitmap))
420 r = canvas.DrawNinePatchedBitmap(bodyAreaBounds, *__pBgColorReplacementBitmap);
421 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
425 r = canvas.DrawBitmap(bodyAreaBounds, *__pBgColorReplacementBitmap);
426 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
432 r = canvas.DrawRectangle(bodyAreaBounds);
433 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
440 _DateTimeBarPresenter::DrawArrow(Canvas& canvas)
442 result r = E_SUCCESS;
443 FloatRectangle arrowAreaBounds = GetArrowBounds();
445 if (__pArrowColorReplacementBitmap != null)
447 if (_BitmapImpl::CheckNinePatchedBitmapStrictly(*__pArrowColorReplacementBitmap))
449 r = canvas.DrawNinePatchedBitmap(arrowAreaBounds, *__pArrowColorReplacementBitmap);
450 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
454 r = canvas.DrawBitmap(arrowAreaBounds, *__pArrowColorReplacementBitmap);
455 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
463 _DateTimeBarPresenter::SetItemSelected(int index)
465 __pDateTimeBarModel->SetSelectedItemIndex(index);
470 _DateTimeBarPresenter::GetSelectedItemIndex(void) const
472 return __pDateTimeBarModel->GetSelectedItemIndex();
476 _DateTimeBarPresenter::GetItemIndexFromPosition(const FloatPoint& point) const
478 FloatRectangle clientBounds = __pDateTimeBar->GetBoundsF();
480 if (point.x > clientBounds.width
481 || point.y > clientBounds.height)
486 int itemIndex = __pDateTimeBarModel->GetFirstDrawnItemIndex();
487 _DateTimeBarItem* pItem = __pDateTimeBarModel->GetItemAt(itemIndex);
489 float itemMargin = 0.0f;
490 itemMargin = GetItemMargin();
492 while (pItem != null)
494 FloatRectangle itemBounds = pItem->GetBounds();
496 if (itemBounds.x > clientBounds.x)
498 if (itemIndex == __pDateTimeBarModel->GetFirstDrawnItemIndex())
500 startX = itemBounds.x;
503 itemBounds.x -= startX;
506 itemBounds.x = itemBounds.x - (itemMargin / 2.0f);
507 itemBounds.width = itemBounds.width + itemMargin;
509 if (itemBounds.Contains(point) == true)
516 if (itemIndex == GetItemCount())
521 pItem = __pDateTimeBarModel->GetItemAt(itemIndex);
528 _DateTimeBarPresenter::SetItemStatus(int index, _DateTimeBarItemStatus status)
530 _DateTimeBarItem* pItem = __pDateTimeBarModel->GetItemAt(index);
531 SysTryReturn(NID_UI_CTRL, pItem, E_SYSTEM, E_SYSTEM,
532 "[E_SYSTEM] A system error has occurred. Failed to get _DateTimeBarItem at index (%d).", index);
534 if (status == DATETIMEBAR_ITEM_STATUS_SELECTED)
536 __pDateTimeBarModel->SetSelectedItemIndex(index);
538 pItem->SetStatus(status);
543 _DateTimeBarItemStatus
544 _DateTimeBarPresenter::GetItemStatus(int index) const
546 _DateTimeBarItem* pItem = __pDateTimeBarModel->GetItemAt(index);
547 SysTryReturn(NID_UI_CTRL, pItem, DATETIMEBAR_ITEM_STATUS_NORMAL, E_SYSTEM,
548 "[E_SYSTEM] A system error has occurred. Failed to get _DateTimeBarItem at index (%d).", index);
550 return pItem->GetStatus();
554 _DateTimeBarPresenter::GetFirstDrawnItemIndex(void) const
556 return __pDateTimeBarModel->GetFirstDrawnItemIndex();
560 _DateTimeBarPresenter::SetFirstDrawnItemIndex(int index)
562 __pDateTimeBarModel->SetFirstDrawnItemIndex(index);
567 _DateTimeBarPresenter::GetMinimumValue(void) const
569 return __pDateTimeBarModel->GetMinimumValue();
573 _DateTimeBarPresenter::SetMinimumValue(int minValue)
575 __pDateTimeBarModel->SetMinimumValue(minValue);
580 _DateTimeBarPresenter::GetMaximumValue(void) const
582 return __pDateTimeBarModel->GetMaximumValue();
586 _DateTimeBarPresenter::SetMaximumValue(int maxValue)
588 __pDateTimeBarModel->SetMaximumValue(maxValue);
593 _DateTimeBarPresenter::GetItemWidth(void) const
595 result r = E_SUCCESS;
597 _DateTimeId boxId = __pDateTimeBar->GetSelectedBoxId();
599 float itemWidth = 0.0f;
601 if (boxId == DATETIME_ID_YEAR)
603 GET_SHAPE_CONFIG(DATETIMEBAR::YEAR_ITEM_WIDTH, _ControlManager::GetInstance()->GetOrientation(), itemWidth);
605 else if (boxId == DATETIME_ID_DAY || boxId == DATETIME_ID_HOUR || boxId == DATETIME_ID_MINUTE)
607 GET_SHAPE_CONFIG(DATETIMEBAR::DAY_ITEM_WIDTH, _ControlManager::GetInstance()->GetOrientation(), itemWidth);
609 else if (boxId == DATETIME_ID_MONTH)
611 GET_SHAPE_CONFIG(DATETIMEBAR::MONTH_ITEM_WIDTH, _ControlManager::GetInstance()->GetOrientation(), itemWidth);
613 FloatDimension textArea;
616 GET_SHAPE_CONFIG(DATETIMEBAR::MONTH_FONT_SIZE, __pDateTimeBar->GetOrientation(), fontSize);
618 SysAssertf(__pFont != null, "Font instance is null");
620 (_FontImpl::GetInstance(*__pFont))->SetSize(fontSize);
621 (_FontImpl::GetInstance(*__pFont))->SetStyle(FONT_STYLE_PLAIN);
623 for (int i = DATETIME_MONTH_MIN; i <= DATETIME_MONTH_MAX; i++)
626 _DateTimeUtils dateTimeUtils;
627 string = dateTimeUtils.GetMonthString(i);
629 r = __pFont->GetTextExtent(string, string.GetLength(), textArea);
630 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
632 if (textArea.width > itemWidth)
634 itemWidth = textArea.width;
643 _DateTimeBarPresenter::GetFontSize(void) const
645 float fontSize = 0.0f;
646 _DateTimeId boxId = __pDateTimeBar->GetSelectedBoxId();
648 if (boxId == DATETIME_ID_YEAR)
650 GET_SHAPE_CONFIG(DATETIMEBAR::YEAR_FONT_SIZE, _ControlManager::GetInstance()->GetOrientation(), fontSize);
652 else if (boxId == DATETIME_ID_DAY || boxId == DATETIME_ID_HOUR || boxId == DATETIME_ID_MINUTE)
654 GET_SHAPE_CONFIG(DATETIMEBAR::DAY_FONT_SIZE, _ControlManager::GetInstance()->GetOrientation(), fontSize);
656 else if (boxId == DATETIME_ID_MONTH)
658 GET_SHAPE_CONFIG(DATETIMEBAR::MONTH_FONT_SIZE, _ControlManager::GetInstance()->GetOrientation(), fontSize);
665 _DateTimeBarPresenter::GetLeftRightMargin(void) const
667 float leftRightMargin = 0.0f;
668 _DateTimeId boxId = __pDateTimeBar->GetSelectedBoxId();
670 if (boxId == DATETIME_ID_YEAR)
672 GET_SHAPE_CONFIG(DATETIMEBAR::YEAR_LEFT_RIGHT_MARGIN, _ControlManager::GetInstance()->GetOrientation(), leftRightMargin);
674 else if (boxId == DATETIME_ID_DAY || boxId == DATETIME_ID_HOUR || boxId == DATETIME_ID_MINUTE)
676 GET_SHAPE_CONFIG(DATETIMEBAR::DAY_LEFT_RIGHT_MARGIN, _ControlManager::GetInstance()->GetOrientation(), leftRightMargin);
678 else if (boxId == DATETIME_ID_MONTH)
680 GET_SHAPE_CONFIG(DATETIMEBAR::MONTH_LEFT_RIGHT_MARGIN, _ControlManager::GetInstance()->GetOrientation(), leftRightMargin);
683 return leftRightMargin;
687 _DateTimeBarPresenter::GetItemMargin(void) const
690 _DateTimeId boxId = __pDateTimeBar->GetSelectedBoxId();
692 if (boxId == DATETIME_ID_YEAR)
694 GET_SHAPE_CONFIG(DATETIMEBAR::YEAR_ITEM_MARGIN, _ControlManager::GetInstance()->GetOrientation(), margin);
696 else if (boxId == DATETIME_ID_DAY || boxId == DATETIME_ID_HOUR || boxId == DATETIME_ID_MINUTE)
698 GET_SHAPE_CONFIG(DATETIMEBAR::DAY_ITEM_MARGIN, _ControlManager::GetInstance()->GetOrientation(), margin);
700 else if (boxId == DATETIME_ID_MONTH)
702 GET_SHAPE_CONFIG(DATETIMEBAR::MONTH_ITEM_MARGIN, _ControlManager::GetInstance()->GetOrientation(), margin);
709 _DateTimeBarPresenter::AdjustItemPosition(float distance)
713 _DateTimeBarItem* pItem = null;
715 pItem = __pDateTimeBarModel->GetItemAt(index);
717 while (pItem != null)
719 FloatRectangle bounds = pItem->GetBounds();
720 bounds.x += distance;
721 pItem->SetBounds(bounds);
724 if (index == GetItemCount())
729 pItem = __pDateTimeBarModel->GetItemAt(index);
732 return AdjustAccessibilityElementPosition(distance);
736 _DateTimeBarPresenter::AdjustAccessibilityElementPosition(float distance)
738 _AccessibilityElement* pAccessibilityElement = null;
742 pAccessibilityElement = __pDateTimeBar->GetAccessibilityElementAt(index);
744 while (pAccessibilityElement != null)
746 FloatRectangle bounds = pAccessibilityElement->GetBounds();
747 bounds.x += distance;
748 pAccessibilityElement->SetBounds(bounds);
751 if (index == GetItemCount())
756 pAccessibilityElement = __pDateTimeBar->GetAccessibilityElementAt(index);
763 _DateTimeBarPresenter::GetDisplayedText(int value) const
767 if (__pDateTimeBar->GetSelectedBoxId() == DATETIME_ID_MONTH)
770 _DateTimeUtils dateTimeUtils;
771 monthString = dateTimeUtils.GetMonthString(value);
772 string.Append(monthString);
774 else if (__pDateTimeBar->GetSelectedBoxId() == DATETIME_ID_YEAR)
776 string.Format(10, L"%04d", value);
780 string.Format(10, L"%02d", value);
787 _DateTimeBarPresenter::AddItems(int actionId)
789 result r = E_SUCCESS;
790 int cachingSize = __pDateTimeBarModel->GetMaxCachingSize() / 2;
792 int firstDrawItemIndex = cachingSize;
794 int value = actionId;
795 float startPosition = 0.0f;
796 float itemWidth = GetItemWidth();
797 float itemMargin = GetItemMargin();
799 startPosition = (GetWindowBounds().width) / 2.0f;
800 startPosition = startPosition + (itemWidth / 2.0f) + itemMargin;
801 __pDateTimeBarModel->SetItemStartPosition(startPosition);
803 while (cachingSize > 0)
807 string = GetDisplayedText(value);
809 r = __pDateTimeBarModel->AddItem(string, value, __pDateTimeBar->GetAlignment(), itemWidth, itemMargin);
810 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
812 AddAccessibilityElement();
817 if (__pDateTimeBarModel->GetMaximumValue() < value)
819 value = __pDateTimeBarModel->GetMinimumValue();
823 r = InsertItems(actionId -1);
824 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
826 _DateTimeBarItem* pItem = null;
827 pItem = GetItemAt(firstDrawItemIndex);
831 __selectedText.Clear();
832 __selectedText.Append(pItem->GetText().GetPointer());
833 __focusedIndex = (firstDrawItemIndex - 1);
834 __focusedValue = pItem->GetActionId();
837 SetItemStatus(firstDrawItemIndex, DATETIMEBAR_ITEM_STATUS_SELECTED);
843 _DateTimeBarPresenter::InsertItems(int actionId)
845 result r = E_SUCCESS;
847 int cachingSize = __pDateTimeBarModel->GetMaxCachingSize() / 2;
849 int value = actionId;
850 float itemWidth = GetItemWidth();
851 float itemMargin = GetItemMargin();
853 while (cachingSize > 0)
857 if (value < __pDateTimeBarModel->GetMinimumValue())
859 value = __pDateTimeBarModel->GetMaximumValue();
862 string = GetDisplayedText(value);
863 r = __pDateTimeBarModel->InsertItemAt(0, string, value, __pDateTimeBar->GetAlignment(), itemWidth, itemMargin);
864 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
865 InsertAccessibilityElementAt(0);
875 _DateTimeBarPresenter::InsertItem(int index, int actionId)
877 result r = E_SUCCESS;
881 string = GetDisplayedText(actionId);
883 r = __pDateTimeBarModel->InsertItemAt(index, string, actionId, __pDateTimeBar->GetAlignment(), GetItemWidth(), GetItemMargin());
884 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
885 InsertAccessibilityElementAt(index);
890 _DateTimeBarPresenter::AddItem(int actionId)
892 result r = E_SUCCESS;
896 string = GetDisplayedText(actionId);
898 r = __pDateTimeBarModel->AddItem(string, actionId, __pDateTimeBar->GetAlignment(), GetItemWidth(), GetItemMargin());
899 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
901 AddAccessibilityElement();
906 _DateTimeBarPresenter::DeleteItem(int index)
908 int itemCount = GetItemCount();
910 SysTryReturn(NID_UI_CTRL, itemCount > 0, E_INVALID_ARG, E_INVALID_ARG,
911 "[E_INVALID_ARG] Invalid argument is used. index = %d", index);
913 SysTryReturn(NID_UI_CTRL, index < itemCount, E_INVALID_ARG, E_INVALID_ARG,
914 "[E_INVALID_ARG] Invalid argument is used. index = %d", index);
916 SysTryReturn(NID_UI_CTRL, index >= 0, E_INVALID_ARG, E_INVALID_ARG,
917 "[E_INVALID_ARG] Invalid argument is used. index = %d", index);
919 result r = E_SUCCESS;
921 r = __pDateTimeBarModel->RemoveItemAt(index);
922 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
924 __pDateTimeBar->RemoveAccessibilityElementAt(index);
930 _DateTimeBarPresenter::RemoveAllItems(void)
932 SysTryReturn(NID_UI_CTRL, GetItemCount() > 0, E_INVALID_OPERATION, E_INVALID_OPERATION,
933 "[E_INVALID_OPERATION] Items count is zero.");
935 result r = E_SUCCESS;
937 __pDateTimeBarModel->RemoveAllItems();
939 __pDateTimeBar->RemoveAllAccessibilityElement();
945 _DateTimeBarPresenter::GetItemCount(void) const
947 return __pDateTimeBarModel->GetItemCount();
951 _DateTimeBarPresenter::GetItemAt(int index) const
953 return __pDateTimeBarModel->GetItemAt(index);
957 _DateTimeBarPresenter::CalculateWindowBounds(void)
959 _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
960 FloatRectangle windowAreaBounds = FloatRectangle(0.0f, 0.0f, 0.0f, 0.0f);
961 FloatRectangle bodyAreaBounds = FloatRectangle(0.0f, 0.0f, 0.0f, 0.0f);
962 FloatRectangle arrowAreaBounds = FloatRectangle(0.0f, 0.0f, 0.0f, 0.0f);
964 FloatRectangle parentWindowBounds = __pDateTimeBar->GetParentWindowBounds();
966 arrowAreaBounds = GetArrowBounds();
970 GET_SHAPE_CONFIG(DATETIMEBAR::ARROW_HEIGHT, orientation, arrowAreaBounds.height);
971 GET_SHAPE_CONFIG(DATETIMEBAR::ARROW_WIDTH, orientation, arrowAreaBounds.width);
972 GET_SHAPE_CONFIG(DATETIMEBAR::ITEM_HEIGHT, orientation, bodyAreaBounds.height);
974 bodyAreaBounds.width = parentWindowBounds.width;
976 bodyAreaBounds.x = 0.0f;
977 FloatPoint tempPoint = __pDateTimeBar->GetPositionF();
978 windowAreaBounds.x = tempPoint.x;
980 if (__pDateTimeBar->GetAlignment() == DATETIME_BAR_ALIGN_DOWN)
982 bodyAreaBounds.y = arrowAreaBounds.height;
983 arrowAreaBounds.y = 0.0f;
984 windowAreaBounds.y = tempPoint.y - arrowAreaBounds.height;
988 arrowAreaBounds.y = bodyAreaBounds.height;
989 bodyAreaBounds.y = 0.0f;
990 windowAreaBounds.y = tempPoint.y;
993 windowAreaBounds.width = bodyAreaBounds.width;
994 windowAreaBounds.height = bodyAreaBounds.height + arrowAreaBounds.height;
996 SetBodyBounds(bodyAreaBounds);
997 SetArrowBounds(arrowAreaBounds);
998 SetWindowBounds(windowAreaBounds);
999 __pDateTimeBar->SetMovable(true);
1000 __pDateTimeBar->SetResizable(true);
1001 __pDateTimeBar->SetBounds(windowAreaBounds);
1002 __pDateTimeBar->SetMovable(false);
1003 __pDateTimeBar->SetResizable(false);
1009 _DateTimeBarPresenter::SetBodyBounds(const FloatRectangle& bounds)
1011 __bodyAreaBounds = bounds;
1016 _DateTimeBarPresenter::GetBodyBounds(void) const
1018 return __bodyAreaBounds;
1022 _DateTimeBarPresenter::SetArrowBounds(const FloatRectangle& bounds)
1024 __arrowAreaBounds = bounds;
1029 _DateTimeBarPresenter::GetArrowBounds(void) const
1031 return __arrowAreaBounds;
1035 _DateTimeBarPresenter::SetWindowBounds(const FloatRectangle& bounds)
1037 __windowAreaBounds = bounds;
1042 _DateTimeBarPresenter::GetWindowBounds(void) const
1044 return __windowAreaBounds;
1048 _DateTimeBarPresenter::OnKeyPressed(const _Control& source, const _KeyInfo& keyInfo)
1050 _KeyCode keyCode = keyInfo.GetKeyCode();
1052 if (!__isFocused && keyCode == _KEY_ENTER)
1059 ResetFlickAnimationTimer();
1061 __pDateTimeBar->SetInitialValue(GetMinimumValue(), GetMaximumValue(), __focusedValue, __pDateTimeBar->GetSelectedBoxId());
1062 __distance = (GetItemWidth() * (-1.0f));
1064 AdjustItemPosition(__distance);
1065 ValidateAndAdjustStartPosition();
1066 SetFocusedItemBounds();
1078 __pDateTimeBar->CloseDateTimeBar();
1079 ResetFlickAnimationTimer();
1081 if (__pDateTimeBar->GetSelectedBoxId() >= DATETIME_ID_YEAR && __pDateTimeBar->GetSelectedBoxId() <= DATETIME_ID_DAY)
1083 __pDateTimeBar->FireDateTimeChangeEvent(DATE_INTERNAL_CHANGE_CANCELED);
1085 else if (__pDateTimeBar->GetSelectedBoxId() >= DATETIME_ID_HOUR && __pDateTimeBar->GetSelectedBoxId() <= DATETIME_ID_MINUTE)
1087 __pDateTimeBar->FireDateTimeChangeEvent(TIME_INTERNAL_CHANGE_CANCELED);
1094 if ((__focusBounds.x + __focusBounds.width) > (GetWindowBounds().width - __focusBounds.width))
1100 __focusBounds.x = __focusBounds.x + __focusBounds.width + GetItemMargin();
1102 __focusedIndex = GetItemIndexFromPosition(FloatPoint(__focusBounds.x, __focusBounds.y));
1103 __pDateTimeBar->Invalidate();
1110 if ((__focusBounds.x - __focusBounds.width) < 0)
1116 __focusBounds.x = __focusBounds.x - __focusBounds.width - GetItemMargin();
1118 __focusedIndex = GetItemIndexFromPosition(FloatPoint(__focusBounds.x, __focusBounds.y));
1119 __pDateTimeBar->Invalidate();
1125 _DateTimeBarItem* pItem = null;
1127 SetItemSelected(__focusedIndex);
1128 __pDateTimeBarModel->SetFirstDrawnItemIndex((__focusedIndex));
1130 if (__focusedIndex >= 0)
1132 pItem = GetItemAt(__focusedIndex);
1137 __pDateTimeBar->SetVisibleState(false);
1138 __pDateTimeBar->CloseDateTimeBar();
1140 __pDateTimeBar->FireActionEvent(pItem->GetActionId());
1142 if (__pDateTimeBar->GetSelectedBoxId() >= DATETIME_ID_YEAR && __pDateTimeBar->GetSelectedBoxId() <= DATETIME_ID_DAY)
1144 __pDateTimeBar->FireDateTimeChangeEvent(DATE_INTERNAL_CHANGE_SAVED);
1146 else if (__pDateTimeBar->GetSelectedBoxId() >= DATETIME_ID_HOUR && __pDateTimeBar->GetSelectedBoxId() <= DATETIME_ID_MINUTE)
1148 __pDateTimeBar->FireDateTimeChangeEvent(TIME_INTERNAL_CHANGE_SAVED);
1151 __isFocused = false;
1165 _DateTimeBarPresenter::OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo)
1167 _KeyCode keyCode = keyInfo.GetKeyCode();
1169 if (keyCode == _KEY_ESC || keyCode == _KEY_BACK)
1171 __pDateTimeBar->CloseDateTimeBar();
1172 ResetFlickAnimationTimer();
1174 if (__pDateTimeBar->GetSelectedBoxId() >= DATETIME_ID_YEAR && __pDateTimeBar->GetSelectedBoxId() <= DATETIME_ID_DAY)
1176 __pDateTimeBar->FireDateTimeChangeEvent(DATE_INTERNAL_CHANGE_CANCELED);
1178 else if (__pDateTimeBar->GetSelectedBoxId() >= DATETIME_ID_HOUR && __pDateTimeBar->GetSelectedBoxId() <= DATETIME_ID_MINUTE)
1180 __pDateTimeBar->FireDateTimeChangeEvent(TIME_INTERNAL_CHANGE_CANCELED);
1190 _DateTimeBarPresenter::OnTouchPressed(const _Control& source, const _TouchInfo& touchinfo)
1197 if (&source != __pDateTimeBar)
1202 __isFlickEnabled = true;
1204 if (GetBodyBounds().Contains(touchinfo.GetCurrentPosition()) == false)
1206 __isFlickEnabled = false;
1210 if (__isFlickInProgress)
1212 ResetFlickAnimationTimer();
1213 __isFlickCanceled = true;
1216 __touchMoveHandled = false;
1218 __currentPoint = touchinfo.GetCurrentPosition();
1220 int index = GetItemIndexFromPosition(touchinfo.GetCurrentPosition());
1227 __pDateTimeBar->Invalidate();
1233 _DateTimeBarPresenter::OnTouchReleased(const _Control& source, const _TouchInfo& touchinfo)
1235 if (&source != __pDateTimeBar)
1240 if (GetBodyBounds().Contains(touchinfo.GetCurrentPosition()) == false && !__isFlickInProgress && !__isTouchMoved)
1242 __isTouchMoved = false;
1243 PLAY_FEEDBACK(_RESOURCE_FEEDBACK_PATTERN_TAP, __pDateTimeBar);
1244 __pDateTimeBar->CloseDateTimeBar();
1245 ResetFlickAnimationTimer();
1247 if (__pDateTimeBar->GetSelectedBoxId() >= DATETIME_ID_YEAR && __pDateTimeBar->GetSelectedBoxId() <= DATETIME_ID_DAY)
1249 __pDateTimeBar->FireDateTimeChangeEvent(DATE_INTERNAL_CHANGE_CANCELED);
1251 else if (__pDateTimeBar->GetSelectedBoxId() >= DATETIME_ID_HOUR && __pDateTimeBar->GetSelectedBoxId() <= DATETIME_ID_MINUTE)
1253 __pDateTimeBar->FireDateTimeChangeEvent(TIME_INTERNAL_CHANGE_CANCELED);
1259 int index = GetItemIndexFromPosition(touchinfo.GetCurrentPosition());
1260 bool isEventFire = true;
1262 if (index != -1 && !__isTouchMoved && !__isFlickInProgress && !__isFlickCanceled)
1264 PLAY_FEEDBACK(_RESOURCE_FEEDBACK_PATTERN_TAP, __pDateTimeBar);
1265 SetItemStatus(index, DATETIMEBAR_ITEM_STATUS_SELECTED);
1266 __pDateTimeBarModel->SetFirstDrawnItemIndex(index);
1270 isEventFire = false;
1271 __isFlickCanceled = false;
1274 __isTouchMoved = false;
1277 __pDateTimeBar->Invalidate();
1279 if (isEventFire == true)
1281 int index = GetFirstDrawnItemIndex();
1283 _DateTimeBarItem* pItem = null;
1287 pItem = GetItemAt(index);
1292 __pDateTimeBar->CloseDateTimeBar();
1293 __pDateTimeBar->FireActionEvent(pItem->GetActionId());
1295 if (__pDateTimeBar->GetSelectedBoxId() >= DATETIME_ID_YEAR && __pDateTimeBar->GetSelectedBoxId() <= DATETIME_ID_DAY)
1297 __pDateTimeBar->FireDateTimeChangeEvent(DATE_INTERNAL_CHANGE_SAVED);
1299 else if (__pDateTimeBar->GetSelectedBoxId() >= DATETIME_ID_HOUR && __pDateTimeBar->GetSelectedBoxId() <= DATETIME_ID_MINUTE)
1301 __pDateTimeBar->FireDateTimeChangeEvent(TIME_INTERNAL_CHANGE_SAVED);
1310 _DateTimeBarPresenter::OnTouchMoved(const _Control& source, const _TouchInfo& touchinfo)
1312 if (&source != __pDateTimeBar)
1317 if (GetBodyBounds().Contains(touchinfo.GetCurrentPosition()) == false || __touchMoveHandled == true)
1322 _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
1324 __isTouchMoved = true;
1326 FloatDimension screen(0.0f, 0.0f);
1327 GET_DIMENSION_CONFIG(DATETIMEBAR::DEFAULT_SIZE, orientation, screen);
1329 const float _BOUNDARY_X_POSITION = screen.width * 2.0f;
1330 float distance = touchinfo.GetCurrentPosition().x - __currentPoint.x;
1332 _DateTimeBarItem* pItem = null;
1334 FloatRectangle itemBounds;
1336 bool needItem = false;
1337 int updateItemCount = 1;
1339 if (distance > 0.0f)
1341 pItem = __pDateTimeBarModel->GetItemAt(GetFirstDrawnItemIndex());
1348 itemBounds = pItem->GetBounds();
1350 __distance += distance;
1352 if (__distance > itemBounds.width / 2.0f)
1355 if (__distance > itemBounds.width)
1357 updateItemCount = UPDATE_ITEM_COUNT;
1360 if (needItem == true)
1362 while (updateItemCount > 0)
1364 pItem = __pDateTimeBarModel->GetItemAt(GetFirstDrawnItemIndex());
1370 int actionId = pItem->GetActionId() - 1;
1372 if (__pDateTimeBarModel->GetMinimumValue() > actionId)
1374 actionId = __pDateTimeBarModel->GetMaximumValue();
1377 if (pItem->GetBounds().x > _BOUNDARY_X_POSITION * -1.0f)
1379 if (InsertItem(0, actionId) == E_SUCCESS)
1381 SetFirstDrawnItemIndex(0);
1385 if (GetItemCount() >= __pDateTimeBarModel->GetMaxCachingSize())
1387 DeleteItem(GetItemCount() - 1);
1397 pItem = __pDateTimeBarModel->GetItemAt(GetItemCount() - 1);
1403 itemBounds = pItem->GetBounds();
1405 __distance += distance;
1407 if (__distance * -1.0f > itemBounds.width / 2.0f)
1410 if (__distance * -1.0f > itemBounds.width)
1412 updateItemCount = UPDATE_ITEM_COUNT;
1417 if (needItem == true)
1419 while (updateItemCount > 0)
1421 pItem = __pDateTimeBarModel->GetItemAt(GetItemCount() - 1);
1427 int actionId = pItem->GetActionId() + 1;
1429 if (__pDateTimeBarModel->GetMaximumValue() < actionId)
1431 actionId = __pDateTimeBarModel->GetMinimumValue();
1434 if (pItem->GetBounds().x < _BOUNDARY_X_POSITION)
1439 if (GetItemCount() >= __pDateTimeBarModel->GetMaxCachingSize())
1442 SetFirstDrawnItemIndex(0);
1449 __currentPoint = touchinfo.GetCurrentPosition();
1451 AdjustItemPosition(distance);
1453 __pDateTimeBar->Invalidate();
1459 _DateTimeBarPresenter::OnTouchCanceled(const _Control& source, const _TouchInfo& touchinfo)
1461 if (&source != __pDateTimeBar)
1466 __isTouchMoved = false;
1469 __pDateTimeBar->Invalidate();
1475 _DateTimeBarPresenter::LoadItems()
1477 _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
1479 FloatDimension screen(0.0f, 0.0f);
1480 GET_DIMENSION_CONFIG(DATETIMEBAR::DEFAULT_SIZE, orientation, screen);
1482 const float _BOUNDARY_X_POSITION = screen.width * 2.0f;
1484 _DateTimeBarItem* pItem = null;
1486 int updateItemCount = UPDATE_ITEM_COUNT;
1488 if (__distance > 0.0f)
1490 pItem = __pDateTimeBarModel->GetItemAt(GetFirstDrawnItemIndex());
1498 while (updateItemCount > 0)
1500 pItem = __pDateTimeBarModel->GetItemAt(GetFirstDrawnItemIndex());
1506 int actionId = pItem->GetActionId() - 1;
1508 if (__pDateTimeBarModel->GetMinimumValue() > actionId)
1510 actionId = __pDateTimeBarModel->GetMaximumValue();
1513 if (pItem->GetBounds().x > _BOUNDARY_X_POSITION * -1)
1515 if (InsertItem(0, actionId) == E_SUCCESS)
1517 SetFirstDrawnItemIndex(0);
1521 if (GetItemCount() >= __pDateTimeBarModel->GetMaxCachingSize())
1523 DeleteItem(GetItemCount() - 1);
1531 pItem = __pDateTimeBarModel->GetItemAt(GetItemCount() - 1);
1538 while (updateItemCount > 0)
1540 pItem = __pDateTimeBarModel->GetItemAt(GetItemCount() - 1);
1546 int actionId = pItem->GetActionId() + 1;
1548 if (__pDateTimeBarModel->GetMaximumValue() < actionId)
1550 actionId = __pDateTimeBarModel->GetMinimumValue();
1553 if (pItem->GetBounds().x < _BOUNDARY_X_POSITION)
1558 if (GetItemCount() >= __pDateTimeBarModel->GetMaxCachingSize())
1561 SetFirstDrawnItemIndex(0);
1571 _DateTimeBarPresenter::OnFlickGestureDetected(int distanceX,int distanceY,int duration)
1573 if (!__isFlickEnabled)
1578 __isFlickInProgress = true;
1579 __isInitialAnimation = false;
1584 __flickAnimation.CalculateInitializeVelocity(distanceX, 0, duration, &velX, &velY);
1585 __flickAnimation.InitializeFlickAmount(velX * FLICK_ANIMATION_VELOCITY_FACTOR_DATE_TIME_BAR);
1587 StartFlickAnimationTimer();
1592 _DateTimeBarPresenter::StartFlickAnimation(void)
1597 __flickAnimation.CalculateNextMove(&moveX, &moveY);
1599 __distance = _CoordinateSystemUtils::ConvertToFloat(moveX);
1602 StartFlickAnimationTimer();
1606 AdjustItemPosition(__distance);
1612 _DateTimeBarPresenter::StartAnimationEffect(void)
1614 __isInitialAnimation = true;
1615 __distance = -10.0f;
1617 if (__initialAnimationValue >= 0.0f)
1619 __initialAnimationValue = __initialAnimationValue + __distance;
1620 StartFlickAnimationTimer();
1623 AdjustItemPosition(__distance);
1628 __initialAnimationValue = 0.0f;
1629 __isInitialAnimation = false;
1630 ResetFlickAnimationTimer();
1631 ValidateAndAdjustStartPosition();
1638 _DateTimeBarPresenter::StartFlickAnimationTimer(void)
1640 result r = E_SUCCESS;
1641 __isFlickInProgress = true;
1643 if (__pFlickAnimationTimer == null)
1645 __pFlickAnimationTimer = new (std::nothrow) Timer;
1646 SysTryReturn(NID_UI_CTRL, (__pFlickAnimationTimer != null), E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Unable to create timer.");
1648 r = __pFlickAnimationTimer->Construct(*this);
1649 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1653 __pFlickAnimationTimer->Cancel();
1656 r = __pFlickAnimationTimer->Start(FLICK_ANIMATION_TIMER_PERIOD);
1657 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1662 ResetFlickAnimationTimer();
1667 _DateTimeBarPresenter::ResetFlickAnimationTimer(void)
1669 if (__pFlickAnimationTimer)
1671 delete __pFlickAnimationTimer;
1672 __pFlickAnimationTimer = null;
1675 __isFlickInProgress = false;
1680 _DateTimeBarPresenter::OnTimerExpired(Timer& timer)
1682 __isFlickInProgress = false;
1683 if (&timer == __pFlickAnimationTimer)
1685 if (__isInitialAnimation)
1687 StartAnimationEffect();
1691 StartFlickAnimation();
1698 _DateTimeBarPresenter::ValidateAndAdjustStartPosition(void)
1701 float adjustPosition = 0.0f;
1702 float leftMargin = GetLeftRightMargin();
1703 FloatRectangle bodyBounds = GetBodyBounds();
1705 index = GetItemIndexFromPosition(FloatPoint(GetLeftRightMargin() + GetItemMargin(), bodyBounds.y + (bodyBounds.height / 2.0f)));
1712 _DateTimeBarItem* pDrawItem = null;
1713 pDrawItem = __pDateTimeBarModel->GetItemAt(index);
1715 if (pDrawItem == null)
1720 if (pDrawItem->GetBounds().x > 0.0f && pDrawItem->GetBounds().x < leftMargin)
1722 adjustPosition = leftMargin - pDrawItem->GetBounds().x;
1724 else if (pDrawItem->GetBounds().x < 0.0f)
1726 pDrawItem = __pDateTimeBarModel->GetItemAt(index + 1);
1727 if (pDrawItem == null)
1731 adjustPosition = leftMargin - pDrawItem->GetBounds().x;
1733 else if (pDrawItem->GetBounds().x > leftMargin)
1735 adjustPosition = leftMargin - pDrawItem->GetBounds().x;
1738 AdjustItemPosition(adjustPosition);
1744 _DateTimeBarPresenter::SetInitialAnimationValue(float animationValue)
1746 __initialAnimationValue = animationValue;
1751 _DateTimeBarPresenter::SetFont(Font& pFont)
1756 __pFont = _FontImpl::CloneN(pFont);
1757 SysTryReturnVoidResult(NID_UI_CTRL, (__pFont != null), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1763 _DateTimeBarPresenter::OnAccessibilityFocusMovedNext(const _AccessibilityContainer& control, const _AccessibilityElement& element)
1769 _DateTimeBarPresenter::OnAccessibilityFocusMovedPrevious(const _AccessibilityContainer& control, const _AccessibilityElement& element)
1775 _DateTimeBarPresenter::OnTouchMoveHandled(const Tizen::Ui::_Control& control)
1777 __touchMoveHandled = true;
1779 __isTouchMoved = false;
1782 __pDateTimeBar->Invalidate();
1788 _DateTimeBarPresenter::AddAccessibilityElement(void)
1790 _DateTimeBarItem* pItem = null;
1791 pItem = __pDateTimeBarModel->GetItemAt(__pDateTimeBarModel->GetItemCount() - 1);
1798 if (__pDateTimeBar->GetSelectedBoxId() == DATETIME_ID_MONTH)
1800 __pDateTimeBar->AddAccessibilityElement(pItem->GetBounds(), __pDateTimeBar->GetMonthValue(pItem->GetActionId()));
1804 __pDateTimeBar->AddAccessibilityElement(pItem->GetBounds(), pItem->GetText());
1811 _DateTimeBarPresenter::InsertAccessibilityElementAt(int index)
1813 _DateTimeBarItem* pItem = null;
1814 pItem = __pDateTimeBarModel->GetItemAt(index);
1821 if (__pDateTimeBar->GetSelectedBoxId() == DATETIME_ID_MONTH)
1823 __pDateTimeBar->InsertAccessibilityElementAt(index, pItem->GetBounds(), __pDateTimeBar->GetMonthValue(pItem->GetActionId()));
1827 __pDateTimeBar->InsertAccessibilityElementAt(index, pItem->GetBounds(), pItem->GetText());
1834 _DateTimeBarPresenter::MoveNext(void)
1836 __distance = (GetItemWidth() + GetItemMargin()) * (-1.0f);
1838 AdjustItemPosition(__distance);
1844 _DateTimeBarPresenter::MovePrevious(void)
1846 __distance = (GetItemWidth() + GetItemMargin());
1848 AdjustItemPosition(__distance);
1853 }}} // Tizen::Ui::Controls