Rose
TextField.h
1 
8 #pragma once
9 
10 #include "Manager.h"
11 #include "Button.h"
12 #include "Animation.h"
13 #include <regex>
14 #include <utility>
15 
16 namespace rose {
17 
18  struct RegexPattern {
19  std::string regexPattern{};
20  explicit RegexPattern(std::string regex) : regexPattern(std::move(regex)) {}
21  explicit RegexPattern(const std::string_view& regex) : RegexPattern(std::string{regex}) {}
22  };
23 
28  class TextField : public TextLabel {
29  protected:
31  void eraseChar(int location);
32 
33  public:
34  TextField() noexcept: TextLabel() {}
35 
36  ~TextField() override = default;
37 
38  TextField(const TextField &) = delete;
39 
40  TextField(TextField &&) = delete;
41 
42  TextField &operator=(const TextField &) = delete;
43 
44  TextField &operator=(TextField &&) = delete;
45 
53  explicit TextField(int maxLength, PointSize pointSize = PointSize(), const std::string &fontName = "");
54 
64  TextField(int maxLength, const std::string &text, const std::string &suffix = "",
65  PointSize pointSize = PointSize(), const std::string &fontName = "");
66 
74  explicit TextField(Id id, int maxLength, const std::string &suffix = "",
75  PointSize pointSize = PointSize(), const std::string &fontName = "");
76 
77  void draw(gm::Context &context, const Position<int> &containerPosition) override {
78  if (mActionCurve && mAnimationEnableState == AnimationEnable::Enable)
79  setAnimation(getWindow(), getNode<Animation>(), containerPosition);
80  TextLabel::draw(context,containerPosition);
81  }
82 
83  void addedToContainer() override;
84 
85  void keyboardFocusReceive(bool hasFocus);
86 
87  void textInputEvent(const std::string& text);
88 
89  void keyboardInput(const SDL_KeyboardEvent &keyEvent);
90 
91  bool toUpperCase{false};
92  };
93 
94  struct TextFieldRegex {
95  std::string regex;
96  };
97 
98  struct ToUpperCase {
99  bool toUpperCase;
100  explicit ToUpperCase(bool upperCase) : toUpperCase(upperCase) {}
101  };
102 }
103 
104 inline std::shared_ptr<rose::TextField> operator<<(std::shared_ptr<rose::TextField> textField, const rose::RegexPattern& pattern) {
105  textField->setTextValidationPattern(pattern.regexPattern);
106  return textField;
107 }
108 
109 inline std::shared_ptr<rose::TextField> operator<<(std::shared_ptr<rose::TextField> textField, const rose::ToUpperCase &upperCase) {
110  textField->toUpperCase = upperCase.toUpperCase;
111  return textField;
112 }
An Widget to edit a small amount of text.
Definition: TextField.h:28
Definition: Button.h:137
void draw(gm::Context &context, const Position< int > &containerPosition) override
Draw the visual.
Definition: TextField.h:77
Definition: TextField.h:94
Definition: Text.h:22
void draw(gm::Context &context, const Position< int > &containerPosition) override
Draw the text button.
Definition: Button.cpp:69
Context
Definition: GraphicsModel.h:76
A type to specify an Id value.
Definition: StructuredTypes.h:148
Definition: TextField.h:18
Definition: TextField.h:98
ToDo: There is an issue that the initial scroll interaction is lost if the click/press lands on a Wid...
Definition: CelestialOverlay.cpp:13