bool
_DateTimeBar::OnFocusGained(const _Control& control)
{
+ __pDateTimeBarPresenter->ChangeFocusStatus();
+ __pDateTimeBarPresenter->SetFocusedItemBounds();
+ __pDateTimeBarPresenter->SetItemFocused(true);
+
return true;
}
void
_DateTimeBar::OnDrawFocus(void)
{
- __pDateTimeBarPresenter->RefreshDateTimeBar();
- __pDateTimeBarPresenter->SetItemFocused(true);
- __pDateTimeBarPresenter->ChangeFocusStatus();
return;
}
_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());
if ((__pEditDate->GetDateTimeBar() != null) && (GetLastSelectedId() != DATETIME_ID_NONE))
{
__pEditDate->SetFocused(true);
-
FloatRectangle bounds(0.0f, 0.0f, 0.0f, 0.0f);
bounds = GetDateAreaBounds(GetLastSelectedId());
FloatRectangle absoluteBounds(0.0f, 0.0f, 0.0f, 0.0f);
if (__pEditDate->GetDateTimeBar()->IsActivated())
{
- __pEditDate->GetDateTimeBar()->RefreshItems();
+ __pEditDate->GetDateTimeBar()->Close();
+ __pEditDate->GetDateTimeBar()->Open();
}
else
{