Beispiel #1
0
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;
}