/* GWEN Copyright (c) 2010 Facepunch Studios See license in Gwen.h */ #include "Gwen/Gwen.h" #include "Gwen/Utility.h" #include "Gwen/Skin.h" #include "Gwen/Controls/NumericUpDown.h" #include "Gwen/Controls/Layout/Splitter.h" using namespace Gwen; using namespace Gwen::Controls; GWEN_CONTROL_CONSTRUCTOR( NumericUpDown ) { SetSize( 100, 20 ); Layout::Splitter* pSplitter = new Layout::Splitter( this ); pSplitter->Dock( Pos::Right ); pSplitter->SetSize( 13, 13 ); NumericUpDownButton_Up* pButtonUp = new NumericUpDownButton_Up( pSplitter ); pButtonUp->onPress.Add( this, &NumericUpDown::OnButtonUp ); pButtonUp->SetTabable( false ); pSplitter->SetPanel( 0, pButtonUp ); NumericUpDownButton_Down* pButtonDown = new NumericUpDownButton_Down( pSplitter ); pButtonDown->onPress.Add( this, &NumericUpDown::OnButtonDown ); pButtonDown->SetTabable( false ); pButtonUp->SetPadding( Padding( 0, 1, 1, 0 ) ); pSplitter->SetPanel( 1, pButtonDown ); m_iMax = 100; m_iMin = 0; m_iNumber = 0; SetText( "0" ); } void NumericUpDown::OnButtonUp( Base* /*control*/ ) { SyncNumberFromText(); SetValue( m_iNumber + 1 ); } void NumericUpDown::OnButtonDown( Base* /*control*/ ) { SyncNumberFromText(); SetValue( m_iNumber - 1 ); } void NumericUpDown::SyncTextFromNumber() { SetText( Utility::ToString( m_iNumber ) ); } void NumericUpDown::SyncNumberFromText() { SetValue( (int) GetFloatFromText() ); } void NumericUpDown::SetMin( int i ) { m_iMin = i; } void NumericUpDown::SetMax( int i ) { m_iMax = i; } void NumericUpDown::SetValue( int i ) { if ( i > m_iMax ) i = m_iMax; if ( i < m_iMin ) i = m_iMin; if ( m_iNumber == i ) { return; } m_iNumber = i; // Don't update the text if we're typing in it.. if ( !HasFocus() ) { SyncTextFromNumber(); } OnChange(); } void NumericUpDown::OnChange() { onChanged.Call( this ); } void NumericUpDown::OnTextChanged() { BaseClass::OnTextChanged(); SyncNumberFromText(); } void NumericUpDown::OnEnter() { SyncNumberFromText(); SyncTextFromNumber(); }