diff options
| author | Simon Robertshaw <simon@hardwired.org.uk> | 2012-07-29 19:17:51 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2012-07-29 19:17:51 (GMT) |
| commit | d138b2de544ab6ccdd7ec72bb5051e0bc437a1a9 (patch) | |
| tree | 05792ec51751bbe3ad62a124500738b0bb6381ea /src/interface/Textbox.cpp | |
| parent | 418373a3cd6cf93ee1e41ffa502b8f4754831349 (diff) | |
| download | powder-d138b2de544ab6ccdd7ec72bb5051e0bc437a1a9.zip powder-d138b2de544ab6ccdd7ec72bb5051e0bc437a1a9.tar.gz | |
Number type for text fields, addresses some of issue #39
Diffstat (limited to 'src/interface/Textbox.cpp')
| -rw-r--r-- | src/interface/Textbox.cpp | 66 |
1 files changed, 58 insertions, 8 deletions
diff --git a/src/interface/Textbox.cpp b/src/interface/Textbox.cpp index ad5597f..f190322 100644 --- a/src/interface/Textbox.cpp +++ b/src/interface/Textbox.cpp @@ -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()) - { - backingText += character; - } - else + if(limit==std::string::npos || backingText.length() < limit) { - 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) |
