forked from teamnwah/openmw-tes3coop
Add NumericEditBox widget
parent
e4c097b4f7
commit
0bc840aadd
@ -0,0 +1,74 @@
|
|||||||
|
#include "numericeditbox.hpp"
|
||||||
|
|
||||||
|
#include <boost/lexical_cast.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 = boost::lexical_cast<int>(newCaption);
|
||||||
|
int capped = std::min(mMaxValue, std::max(mValue, mMinValue));
|
||||||
|
if (capped != mValue)
|
||||||
|
{
|
||||||
|
mValue = capped;
|
||||||
|
setCaption(MyGUI::utility::toString(mValue));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (boost::bad_lexical_cast&)
|
||||||
|
{
|
||||||
|
setCaption(MyGUI::utility::toString(mValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
eventValueChanged(mValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
void NumericEditBox::setValue(int value)
|
||||||
|
{
|
||||||
|
if (value != mValue)
|
||||||
|
{
|
||||||
|
setCaption(MyGUI::utility::toString(value));
|
||||||
|
mValue = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,45 @@
|
|||||||
|
#ifndef OPENMW_NUMERIC_EDIT_BOX_H
|
||||||
|
#define OPENMW_NUMERIC_EDIT_BOX_H
|
||||||
|
|
||||||
|
#include <MyGUI_EditBox.h>
|
||||||
|
|
||||||
|
namespace Gui
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief A variant of the EditBox that only allows integer inputs
|
||||||
|
*/
|
||||||
|
class NumericEditBox : public MyGUI::EditBox
|
||||||
|
{
|
||||||
|
MYGUI_RTTI_DERIVED(NumericEditBox)
|
||||||
|
|
||||||
|
public:
|
||||||
|
NumericEditBox()
|
||||||
|
: mValue(0), mMinValue(std::numeric_limits<int>().min()),
|
||||||
|
mMaxValue(std::numeric_limits<int>().max())
|
||||||
|
{}
|
||||||
|
|
||||||
|
void initialiseOverride();
|
||||||
|
void shutdownOverride();
|
||||||
|
|
||||||
|
typedef MyGUI::delegates::CMultiDelegate1<int> EventHandle_ValueChanged;
|
||||||
|
EventHandle_ValueChanged eventValueChanged;
|
||||||
|
|
||||||
|
/// @note Does not trigger eventValueChanged
|
||||||
|
void setValue (int value);
|
||||||
|
|
||||||
|
void setMinValue(int minValue);
|
||||||
|
void setMaxValue(int maxValue);
|
||||||
|
private:
|
||||||
|
void onEditTextChange(MyGUI::EditBox* sender);
|
||||||
|
void onKeyLostFocus(MyGUI::Widget* _new);
|
||||||
|
|
||||||
|
int mValue;
|
||||||
|
|
||||||
|
int mMinValue;
|
||||||
|
int mMaxValue;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,25 @@
|
|||||||
|
#include "widgets.hpp"
|
||||||
|
|
||||||
|
#include <MyGUI_FactoryManager.h>
|
||||||
|
|
||||||
|
#include "list.hpp"
|
||||||
|
#include "numericeditbox.hpp"
|
||||||
|
#include "box.hpp"
|
||||||
|
#include "imagebutton.hpp"
|
||||||
|
|
||||||
|
namespace Gui
|
||||||
|
{
|
||||||
|
|
||||||
|
void registerAllWidgets()
|
||||||
|
{
|
||||||
|
MyGUI::FactoryManager::getInstance().registerFactory<Gui::MWList>("Widget");
|
||||||
|
MyGUI::FactoryManager::getInstance().registerFactory<Gui::HBox>("Widget");
|
||||||
|
MyGUI::FactoryManager::getInstance().registerFactory<Gui::VBox>("Widget");
|
||||||
|
MyGUI::FactoryManager::getInstance().registerFactory<Gui::AutoSizedTextBox>("Widget");
|
||||||
|
MyGUI::FactoryManager::getInstance().registerFactory<Gui::AutoSizedEditBox>("Widget");
|
||||||
|
MyGUI::FactoryManager::getInstance().registerFactory<Gui::AutoSizedButton>("Widget");
|
||||||
|
MyGUI::FactoryManager::getInstance().registerFactory<Gui::ImageButton>("Widget");
|
||||||
|
MyGUI::FactoryManager::getInstance().registerFactory<Gui::NumericEditBox>("Widget");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
#ifndef OPENMW_COMPONENTS_WIDGETS_H
|
||||||
|
#define OPENMW_COMPONENTS_WIDGETS_H
|
||||||
|
|
||||||
|
namespace Gui
|
||||||
|
{
|
||||||
|
|
||||||
|
/// Register all widgets from this component with MyGUI's factory manager.
|
||||||
|
void registerAllWidgets();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue