1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
|
#include <stdexcept>
#include "numericeditbox.hpp"
namespace Gui
{
void NumericEditBox::initialiseOverride()
{
Base::initialiseOverride();
eventEditTextChange += MyGUI::newDelegate(this, &NumericEditBox::onEditTextChange);
mValue = 0;
setCaption("0");
}
void NumericEditBox::shutdownOverride()
{
Base::shutdownOverride();
eventEditTextChange -= MyGUI::newDelegate(this, &NumericEditBox::onEditTextChange);
}
void NumericEditBox::onEditTextChange(MyGUI::EditBox *sender)
{
std::string newCaption = sender->getCaption();
if (newCaption.empty())
{
return;
}
try
{
mValue = std::stoi(newCaption);
int capped = std::min(mMaxValue, std::max(mValue, mMinValue));
if (capped != mValue)
{
mValue = capped;
setCaption(MyGUI::utility::toString(mValue));
}
}
catch (const std::invalid_argument&)
{
setCaption(MyGUI::utility::toString(mValue));
}
catch (const std::out_of_range&)
{
setCaption(MyGUI::utility::toString(mValue));
}
eventValueChanged(mValue);
}
void NumericEditBox::setValue(int value)
{
if (value != mValue)
{
setCaption(MyGUI::utility::toString(value));
mValue = value;
}
}
int NumericEditBox::getValue()
{
return mValue;
}
void NumericEditBox::setMinValue(int minValue)
{
mMinValue = minValue;
}
void NumericEditBox::setMaxValue(int maxValue)
{
mMaxValue = maxValue;
}
void NumericEditBox::onKeyLostFocus(MyGUI::Widget* _new)
{
Base::onKeyLostFocus(_new);
setCaption(MyGUI::utility::toString(mValue));
}
void NumericEditBox::onKeyButtonPressed(MyGUI::KeyCode key, MyGUI::Char character)
{
if (key == MyGUI::KeyCode::ArrowUp)
{
setValue(std::min(mValue+1, mMaxValue));
eventValueChanged(mValue);
}
else if (key == MyGUI::KeyCode::ArrowDown)
{
setValue(std::max(mValue-1, mMinValue));
eventValueChanged(mValue);
}
else if (character == 0 || (character >= '0' && character <= '9'))
Base::onKeyButtonPressed(key, character);
}
}
|