Number type for text fields, addresses some of issue #39
This commit is contained in:
parent
418373a3cd
commit
d138b2de54
@ -253,21 +253,29 @@ GameView::GameView():
|
||||
colourRSlider->SetActionCallback(new ColourChange(this));
|
||||
colourRValue = new ui::Textbox(ui::Point(60, Size.Y-41), ui::Point(25, 17), "255");
|
||||
colourRValue->SetActionCallback(new ColourChange(this));
|
||||
colourRValue->SetLimit(3);
|
||||
colourRValue->SetInputType(ui::Textbox::Number);
|
||||
|
||||
colourGSlider = new ui::Slider(ui::Point(95, Size.Y-39), ui::Point(50, 14), 255);
|
||||
colourGSlider->SetActionCallback(new ColourChange(this));
|
||||
colourGValue = new ui::Textbox(ui::Point(150, Size.Y-41), ui::Point(25, 17), "255");
|
||||
colourGValue->SetActionCallback(new ColourChange(this));
|
||||
colourGValue->SetLimit(3);
|
||||
colourGValue->SetInputType(ui::Textbox::Number);
|
||||
|
||||
colourBSlider = new ui::Slider(ui::Point(185, Size.Y-39), ui::Point(50, 14), 255);
|
||||
colourBSlider->SetActionCallback(new ColourChange(this));
|
||||
colourBValue = new ui::Textbox(ui::Point(240, Size.Y-41), ui::Point(25, 17), "255");
|
||||
colourBValue->SetActionCallback(new ColourChange(this));
|
||||
colourBValue->SetLimit(3);
|
||||
colourBValue->SetInputType(ui::Textbox::Number);
|
||||
|
||||
colourASlider = new ui::Slider(ui::Point(275, Size.Y-39), ui::Point(50, 14), 255);
|
||||
colourASlider->SetActionCallback(new ColourChange(this));
|
||||
colourAValue = new ui::Textbox(ui::Point(330, Size.Y-41), ui::Point(25, 17), "255");
|
||||
colourAValue->SetActionCallback(new ColourChange(this));
|
||||
colourAValue->SetLimit(3);
|
||||
colourAValue->SetInputType(ui::Textbox::Number);
|
||||
|
||||
class ElementSearchAction : public ui::ButtonAction
|
||||
{
|
||||
|
@ -15,7 +15,8 @@ Textbox::Textbox(Point position, Point size, std::string textboxText, std::strin
|
||||
masked(false),
|
||||
border(true),
|
||||
mouseDown(false),
|
||||
limit(0)
|
||||
limit(std::string::npos),
|
||||
inputType(All)
|
||||
{
|
||||
placeHolder = textboxPlaceholder;
|
||||
|
||||
@ -74,6 +75,26 @@ void Textbox::SetText(std::string newText)
|
||||
}
|
||||
}
|
||||
|
||||
Textbox::ValidInput Textbox::GetInputType()
|
||||
{
|
||||
return inputType;
|
||||
}
|
||||
|
||||
void Textbox::SetInputType(ValidInput input)
|
||||
{
|
||||
inputType = input;
|
||||
}
|
||||
|
||||
void Textbox::SetLimit(size_t limit)
|
||||
{
|
||||
this->limit = limit;
|
||||
}
|
||||
|
||||
size_t Textbox::GetLimit()
|
||||
{
|
||||
return limit;
|
||||
}
|
||||
|
||||
void Textbox::SetDisplayText(std::string newText)
|
||||
{
|
||||
Label::SetText(text);
|
||||
@ -194,6 +215,20 @@ void Textbox::pasteIntoSelection()
|
||||
}
|
||||
}
|
||||
|
||||
bool Textbox::CharacterValid(Uint16 character)
|
||||
{
|
||||
switch(inputType)
|
||||
{
|
||||
case Number:
|
||||
case Numeric:
|
||||
return (character >= '0' && character <= '9');
|
||||
case All:
|
||||
default:
|
||||
return (character >= ' ' && character < 127);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void Textbox::OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool alt)
|
||||
{
|
||||
bool changed = false;
|
||||
@ -274,7 +309,7 @@ void Textbox::OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool
|
||||
}
|
||||
break;
|
||||
}
|
||||
if(character >= ' ' && character < 127)
|
||||
if(CharacterValid(character))
|
||||
{
|
||||
if(HasSelection())
|
||||
{
|
||||
@ -284,13 +319,16 @@ void Textbox::OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool
|
||||
cursor = getLowerSelectionBound();
|
||||
}
|
||||
|
||||
if(cursor == backingText.length())
|
||||
if(limit==std::string::npos || backingText.length() < limit)
|
||||
{
|
||||
backingText += character;
|
||||
}
|
||||
else
|
||||
{
|
||||
backingText.insert(cursor, 1, (char)character);
|
||||
if(cursor == backingText.length())
|
||||
{
|
||||
backingText += character;
|
||||
}
|
||||
else
|
||||
{
|
||||
backingText.insert(cursor, 1, (char)character);
|
||||
}
|
||||
}
|
||||
cursor++;
|
||||
changed = true;
|
||||
@ -302,6 +340,18 @@ void Textbox::OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool
|
||||
cursor = 0;
|
||||
backingText = "";
|
||||
}
|
||||
if(inputType == Number)
|
||||
{
|
||||
if(backingText.length()>1)
|
||||
{
|
||||
while(backingText[0] == '0')
|
||||
backingText.erase(backingText.begin());
|
||||
}
|
||||
if(!backingText.length())
|
||||
backingText = "0";
|
||||
}
|
||||
if(cursor >= backingText.length())
|
||||
cursor = backingText.length()-1;
|
||||
if(changed)
|
||||
{
|
||||
if(masked)
|
||||
|
@ -19,18 +19,8 @@ public:
|
||||
class Textbox : public Label
|
||||
{
|
||||
friend class TextboxAction;
|
||||
protected:
|
||||
size_t limit;
|
||||
bool mouseDown;
|
||||
bool masked, border;
|
||||
int cursor, cursorPositionX, cursorPositionY;
|
||||
TextboxAction *actionCallback;
|
||||
std::string backingText;
|
||||
std::string placeHolder;
|
||||
|
||||
virtual void cutSelection();
|
||||
virtual void pasteIntoSelection();
|
||||
public:
|
||||
enum ValidInput { All, Numeric, Number };
|
||||
Textbox(Point position, Point size, std::string textboxText = "", std::string textboxPlaceholder = "");
|
||||
virtual ~Textbox();
|
||||
|
||||
@ -45,12 +35,34 @@ public:
|
||||
bool GetHidden() { return masked; }
|
||||
void SetActionCallback(TextboxAction * action) { actionCallback = action; }
|
||||
|
||||
void SetLimit(size_t limit);
|
||||
size_t GetLimit();
|
||||
|
||||
ValidInput GetInputType();
|
||||
void SetInputType(ValidInput input);
|
||||
|
||||
//Determines if the given character is valid given the input type
|
||||
bool CharacterValid(Uint16 character);
|
||||
|
||||
virtual void OnContextMenuAction(int item);
|
||||
virtual void OnMouseClick(int x, int y, unsigned button);
|
||||
virtual void OnMouseUp(int x, int y, unsigned button);
|
||||
virtual void OnMouseMoved(int localx, int localy, int dx, int dy);
|
||||
virtual void OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool alt);
|
||||
virtual void Draw(const Point& screenPos);
|
||||
|
||||
protected:
|
||||
ValidInput inputType;
|
||||
size_t limit;
|
||||
bool mouseDown;
|
||||
bool masked, border;
|
||||
int cursor, cursorPositionX, cursorPositionY;
|
||||
TextboxAction *actionCallback;
|
||||
std::string backingText;
|
||||
std::string placeHolder;
|
||||
|
||||
virtual void cutSelection();
|
||||
virtual void pasteIntoSelection();
|
||||
};
|
||||
|
||||
/*class Textbox : public Component
|
||||
|
Loading…
Reference in New Issue
Block a user