_DateTimeBarPresenter::ChangeFocusStatus(void)
{
_DateTimeBarItem* pItem = null;
+
+ if (__focusedIndex == -1)
+ {
+ __focusedIndex = GetSelectedItemIndex() - 1;
+ }
pItem = GetItemAt(__focusedIndex);
if (pItem != null)
}
void
-_DateTimeBarPresenter::RefreshDateTimeBar()
+_DateTimeBarPresenter::SetFocusedItemBounds()
{
- __initialAnimationValue = 0.0f;
- __isInitialAnimation = false;
_DateTimeBarItem* pItem = null;
- ResetFlickAnimationTimer();
- RemoveAllItems();
- __pDateTimeBar->SetInitialValue(GetMinimumValue(), GetMaximumValue(), __focusedValue, __pDateTimeBar->GetSelectedBoxId());
- __distance = (GetItemWidth() * (-1.0f));
-
- LoadItems();
- AdjustItemPosition(__distance);
- ValidateAndAdjustStartPosition();
- pItem = GetItemAt(__focusedIndex);
- __focusBounds = pItem->GetBounds();
+ if (__focusedIndex > 0)
+ {
+ pItem = GetItemAt(__focusedIndex);
+ SysTryReturnVoidResult(NID_UI, pItem != NULL, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+ __focusBounds = pItem->GetBounds();
+ }
}
void
bool
_DateTimeBarPresenter::OnKeyPressed(const _Control& source, const _KeyInfo& keyInfo)
{
- if (!__isFocused)
- {
- return false;
- }
-
_KeyCode keyCode = keyInfo.GetKeyCode();
switch (keyCode)
{
+ case KEY_UP:
+ //fall through
+ case KEY_DOWN:
+ //fall through:
+ case KEY_TAB:
+ {
+ __pDateTimeBar->CloseDateTimeBar();
+ ResetFlickAnimationTimer();
+
+ if (__pDateTimeBar->GetSelectedBoxId() >= DATETIME_ID_YEAR && __pDateTimeBar->GetSelectedBoxId() <= DATETIME_ID_DAY)
+ {
+ __pDateTimeBar->FireDateTimeChangeEvent(DATE_INTERNAL_CHANGE_CANCELED);
+ }
+ else if (__pDateTimeBar->GetSelectedBoxId() >= DATETIME_ID_HOUR && __pDateTimeBar->GetSelectedBoxId() <= DATETIME_ID_MINUTE)
+ {
+ __pDateTimeBar->FireDateTimeChangeEvent(TIME_INTERNAL_CHANGE_CANCELED);
+ }
+
+ break;
+ }
case KEY_RIGHT:
{
if ((__focusBounds.x + __focusBounds.width) > (GetWindowBounds().width - __focusBounds.width))
else
{
__focusBounds.x = __focusBounds.x + __focusBounds.width + GetItemMargin();
-
}
__focusedIndex = GetItemIndexFromPosition(FloatPoint(__focusBounds.x, __focusBounds.y));
__pDateTimeBar->Invalidate();
if (pItem != null)
{
__pDateTimeBar->SetVisibleState(false);
- __pDateTimeBar->Close();
+ __pDateTimeBar->CloseDateTimeBar();
__pDateTimeBar->FireActionEvent(pItem->GetActionId());
return pItem->GetActionId();
}
-result
-_OptionMenuPresenter::SetItem(int index, const String& text, int actionId, const Bitmap* normalBitmap, const Bitmap* pPressedBitmap, const Bitmap* pHighlightedBitmap)
+FloatDimension
+_OptionMenuPresenter::GetMainItemMaximumWidth(void)
{
- SysTryReturn(NID_UI_CTRL, index >=0 && index < __pModel->GetItemCount(), E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid mainIndex %d.", index);
-
- result r = __pModel->SetItemAt(index, text, actionId, normalBitmap, pPressedBitmap, pHighlightedBitmap, __itemFontSize);
- SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+ float labelLeftMargin = 0.0f;
+ FloatDimension itemSize(0.0f, 0.0f);
+ FloatDimension maxItemTextArea(0.0f, 0.0f);
- _OptionMenuItem* pItem = __pModel->GetItem(index);
+ GET_SHAPE_CONFIG(LABEL::LEFT_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, labelLeftMargin);
- if (pItem == null)
+ for (int i = 0; i < __pModel->GetItemCount() - 1; i++)
{
- SysLog(NID_UI_CTRL, "Item is null.");
- return r;
- }
-
- float bitmapWidth = 0.0f;
- FloatDimension textArea(0.0f, 0.0f);
- FloatDimension itemSize(0.0f, 0.0f);
+ FloatDimension currentItemTextArea(0.0f, 0.0f);
+ _OptionMenuItem* pItem = null;
- __pFont->GetTextExtent(text, text.GetLength(), textArea);
+ pItem = __pModel->GetItem(i);
+ SysTryReturn(NID_UI_CTRL, pItem != null, FloatDimension(0.0f, 0.0f), E_SYSTEM, "[E_SYSTEM] A system error occurred. Unable to get the item.");
- float labelLeftMargin = 0.0f;
+ String itemText = pItem->GetText();
- GET_SHAPE_CONFIG(LABEL::LEFT_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, labelLeftMargin);
+ __pFont->GetTextExtent(itemText, itemText.GetLength(), currentItemTextArea);
- textArea.width += 2.0f * labelLeftMargin;
- itemSize.width = __leftMargin + textArea.width + __rightMargin;
+ if (currentItemTextArea.width > maxItemTextArea.width)
+ {
+ maxItemTextArea = currentItemTextArea;
+ }
- if (pItem->GetType() == OPTION_MENU_ITEM_DRAWING_TYPE_BITMAP)
- {
- bitmapWidth = __itemBitmapWidth;
- itemSize.width = itemSize.width + bitmapWidth;
+ if (pItem->GetType() == OPTION_MENU_ITEM_DRAWING_TYPE_BITMAP)
+ {
+ itemSize.width = itemSize.width + __itemBitmapWidth;
+ }
}
+ maxItemTextArea.width += 2.0f * labelLeftMargin;
+ itemSize.width += __leftMargin + maxItemTextArea.width + __rightMargin;
+
itemSize.width = itemSize.width < __itemMinWidth ? __itemMinWidth : itemSize.width;
if (itemSize.width > __itemMaxWidth)
{
- textArea.width -= itemSize.width - __itemMaxWidth;
itemSize.width = __itemMaxWidth;
}
- pItem->SetSize(itemSize);
+ return itemSize;
+}
+
+result
+_OptionMenuPresenter::SetItem(int index, const String& text, int actionId, const Bitmap* normalBitmap, const Bitmap* pPressedBitmap, const Bitmap* pHighlightedBitmap)
+{
+ SysTryReturn(NID_UI_CTRL, index >=0 && index < __pModel->GetItemCount(), E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid mainIndex %d.", index);
- __itemWidth = __itemWidth < itemSize.width ? itemSize.width : __itemWidth;
+ result r = __pModel->SetItemAt(index, text, actionId, normalBitmap, pPressedBitmap, pHighlightedBitmap, __itemFontSize);
+ SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+
+ _OptionMenuItem* pItem = __pModel->GetItem(index);
+
+ if (pItem == null)
+ {
+ SysLog(NID_UI_CTRL, "Item is null.");
+ return r;
+ }
+
+ FloatDimension maxItemTextArea = GetMainItemMaximumWidth();
+ pItem->SetSize(maxItemTextArea);
+
+ __itemWidth = maxItemTextArea.width;
return r;
}
r = __pModel->RemoveItem(index);
SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "Failed to delete item.");
+ FloatDimension maxItemTextArea = GetMainItemMaximumWidth();
+
+ __itemWidth = maxItemTextArea.width;
+
return r;
}