123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- /*
- 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();
- }
|