bool Dialog::OnKeyPressed(Key key) { switch( key ) { case Key::Up: if( GetManager().GetFocusWnd() && this != GetManager().GetFocusWnd() ) { // try to pass focus to previous siblings UIWindow *r = GetManager().GetFocusWnd()->GetPrevSibling(); for( ; r; r = r->GetPrevSibling() ) { if( r->GetVisibleCombined() && r->GetEnabledCombined() && GetManager().SetFocusWnd(r) ) break; } } break; case Key::Down: if( GetManager().GetFocusWnd() && this != GetManager().GetFocusWnd() ) { // try to pass focus to next siblings UIWindow *r = GetManager().GetFocusWnd()->GetNextSibling(); for( ; r; r = r->GetNextSibling() ) { if( r->GetVisibleCombined() && r->GetEnabledCombined() && GetManager().SetFocusWnd(r) ) break; } } break; case Key::Tab: if( GetManager().GetFocusWnd() && this != GetManager().GetFocusWnd() ) { // try to pass focus to next siblings ... UIWindow *r = GetManager().GetFocusWnd()->GetNextSibling(); for( ; r; r = r->GetNextSibling() ) { if( r->GetVisibleCombined() && r->GetEnabledCombined() && GetManager().SetFocusWnd(r) ) break; } if( r ) break; // ... and then start from first one r = GetFirstChild(); for( ; r; r = r->GetNextSibling() ) { if( r->GetVisibleCombined() && r->GetEnabledCombined() && GetManager().SetFocusWnd(r) ) break; } } break; case Key::Enter: case Key::NumEnter: Close(_resultOK); break; case Key::Escape: Close(_resultCancel); break; default: return false; } return true; }