void GridView::MoveFocus(Direction direction) { signed focusPos = GetIndexOfItemInFocus(); if (focusPos == -1) // We are on a page without enabled items. // We should show the next page if exists ShowNextPage(direction); else { signed newFocusPos = GetNextItemIndex(focusPos, direction); if (newFocusPos != -1) { // we are on the same page items[newFocusPos]->SetFocus(); if (!items[newFocusPos]->HasFocus()) { /* unable to set the focus, let's try simple Tab/Shift-Tab behavior instead */ newFocusPos = GetNextEnabledItemIndex(focusPos, direction); if (newFocusPos != -1) items[newFocusPos]->SetFocus(); } RefreshLayout(); } else ShowNextPage(direction); } }
fresult ItemsListFormBase::SetActiveItem( sbyte_t index ) { fresult fres; _currentItemIndex = index; sbyte_t prevIndex = GetPrevItemIndex(index); if (prevIndex == -1) { fres = _mnuBack->SetVisible(FALSE); ENSURESUCCESS(fres); fres = _mnuBack->SetEnabled(FALSE); ENSURESUCCESS(fres); } else { fres = _mnuBack->SetVisible(TRUE); ENSURESUCCESS(fres); fres = _mnuBack->SetEnabled(TRUE); ENSURESUCCESS(fres); } sbyte_t nextIndex = GetNextItemIndex(index); if (nextIndex == -1) { fres = _mnuNext->SetVisible(FALSE); ENSURESUCCESS(fres); fres = _mnuNext->SetEnabled(FALSE); ENSURESUCCESS(fres); } else { fres = _mnuNext->SetVisible(TRUE); ENSURESUCCESS(fres); fres = _mnuNext->SetEnabled(TRUE); ENSURESUCCESS(fres); } return SUCCESS; }
fresult ItemsListFormBase::OnMenuR( IMenuItem* mi ) { fresult fres; sbyte_t index; index = GetNextItemIndex(_currentItemIndex); if (index != -1) { fres = SetActiveItem(index); ENSURESUCCESS(fres); } else { //should't be here fres = SetActiveItem(_currentItemIndex); ENSURESUCCESS(fres); } return SUCCESS; }