/* GWEN Copyright (c) 2010 Facepunch Studios See license in Gwen.h */ #include "Gwen/Gwen.h" #include "Gwen/Skin.h" #include "Gwen/Controls/TabButton.h" #include "Gwen/Controls/TabControl.h" #include "Gwen/Controls/Highlight.h" #include "Gwen/DragAndDrop.h" using namespace Gwen; using namespace Gwen::Controls; GWEN_CONTROL_CONSTRUCTOR( TabButton ) { m_Page = NULL; m_Control = NULL; SetPadding( Padding( 2, 2, 2, 2 ) ); DragAndDrop_SetPackage( true, "TabButtonMove" ); SetAlignment( Pos::Top | Pos::Left ); SetTextPadding( Padding( 5, 3, 3, 3 ) ); } void TabButton::Render( Skin::Base* skin ) { skin->DrawTabButton( this, m_Page && m_Page->Visible() ); } void TabButton::SetTabControl( TabControl* ctrl ) { if ( m_Control == ctrl ) return; if ( m_Control ) { m_Control->OnLoseTab( this ); } m_Control = ctrl; } bool TabButton::DragAndDrop_ShouldStartDrag() { return m_Control->DoesAllowDrag(); } bool TabButton::OnKeyUp( bool bDown ) { OnKeyLeft( bDown ); return true; } bool TabButton::OnKeyDown( bool bDown ) { OnKeyRight( bDown ); return true; } bool TabButton::OnKeyLeft( bool bDown ) { if ( bDown ) { Base::List::reverse_iterator it = std::find( m_Parent->Children.rbegin(), m_Parent->Children.rend(), this ); if ( it != m_Parent->Children.rend() && (++it != m_Parent->Children.rend()) ) { Base* pNextTab = *it; GetTabControl()->OnTabPressed( pNextTab ); Gwen::KeyboardFocus = pNextTab; } } return true; } bool TabButton::OnKeyRight( bool bDown ) { if ( bDown ) { Base::List::iterator it = std::find( m_Parent->Children.begin(), m_Parent->Children.end(), this ); if ( it != m_Parent->Children.end() && (++it != m_Parent->Children.end()) ) { Base* pNextTab = *it; GetTabControl()->OnTabPressed( pNextTab ); Gwen::KeyboardFocus = pNextTab; } } return true; }