You.i Engine
YiTextEditView.h
Go to the documentation of this file.
1 // © You i Labs Inc. 2000-2017. All rights reserved.
2 #ifndef _YI_TEXT_EDIT_VIEW_H_
3 #define _YI_TEXT_EDIT_VIEW_H_
4 
6 #include "utility/YiColor.h"
7 #include "utility/YiTimer.h"
8 #include "view/YiSceneView.h"
9 
10 class CYIAssetTexture;
11 class CYIKeyEvent;
12 class CYIPushButtonView;
13 class CYITextSceneNode;
14 class CYITimelineLoop;
15 
51 {
52 public:
53 
55  virtual ~CYITextEditView();
56 
57  virtual bool Init() override;
58 
62  virtual void Clear();
63 
67  virtual void SetValue(CYIString text);
68 
72  virtual CYIString GetValue() const;
73 
77  void SetDefaultText(const CYIString & defaultText);
78 
83  const CYIString &GetDefaultText() const;
84 
90  void SetDefaultTextColor(const CYIColor &defaultTextColor);
91 
97  const CYIColor &GetDefaultTextColor() const;
98 
104  void SetTextColor(const CYIColor &textColor);
105 
111  const CYIColor &GetTextColor() const;
112 
120  void SetCaretColor(const CYIColor &clrCaret);
121 
127  const CYIColor &GetCaretColor() const;
128 
132  void DeactivateCaret();
133 
137  void ActivateCaret();
138 
142  void SetMaximumCharacterCount(uint32_t uMaximumCharacterCount);
143 
151  void Activate();
152 
160  void Deactivate();
161 
168  bool IsActivated() const;
169 
173  uint32_t GetMaximumCharacterCount() const;
174 
180  bool SetTextEntryBoxWidth(float fBoxWidth);
181 
187  float GetTextEntryBoxWidth() const;
188 
192  float GetInitialTextEntryBoxWidth() const;
193 
194  virtual bool OnTextEntered(const CYIString &pText, int32_t nCaret) override;
195 
196  virtual bool OnTextDeleted(int32_t nBeforeCaret, int32_t nAfterCaret) override;
197  virtual void OnTextReplaced(const CYIString &text, int32_t nCursor) override;
198  virtual void OnCursorPositionChanged(int32_t nCursor) override;
199 
203  virtual bool OnKeyboardHidden() override;
204 
208  virtual void OnSynchronizeKeyboard(Receiver::Description &receiverDescription) override;
209 
214  virtual void SetInputType(CYIKeyboardInputBridge::INPUT_TYPE eInputType);
215 
216  virtual CYIKeyboardInputBridge::INPUT_TYPE GetInputType() const override;
217 
218  virtual bool OnSetComposingText(const CYIString &pText, int32_t nCaret) override;
219 
220  virtual bool OnFinishComposingText() override;
221 
222  virtual bool OnSetComposingRegion(int32_t nStart, int32_t nEnd) override;
223  virtual bool OnTextPasted(const CYIString &pText) override;
224 
225  virtual const CYISceneView::AssetRequirement *GetAssetRequirements(uint32_t *pRequirementCount) override;
226 
231  virtual bool HandleEvent(const std::shared_ptr<CYIEventDispatcher> &pDispatcher, CYIEvent *pEvent) override;
232 
236  CYISignal<const CYIString & /*currentText*/, const CYIString & /*previousText*/> TextChanged;
237 
242 
247 
248 protected:
252  virtual void UpdateTextView();
253 
257  void UpdateTextView(const CYIString &currentText);
258 
262  bool OnKeyDownWhenActive(CYIKeyEvent *pEvent);
263 
267  bool OnKeyInputWhenActive(CYIKeyEvent *pEvent);
268 
272  virtual bool OnCharWhenActive(CYIKeyEvent *pEvent);
273 
277  void OnCaretBlink();
278 
284  void OnActivated();
285 
289  void OnDeactivated();
290 
294  void ShowKeyboard();
295 
301  void OnTextChanged(bool bNotifyKeyboard);
302 
307 
311  void ResetCaretBlinkTimer();
312 
317  void SetCaretPositionInString(float fLocalSpaceX, float fLocalSpaceY, int8_t nCaretOffset = 0);
318 
324  void RemoveComposingText(bool bEmitChangedSignal = true);
325 
329  bool HasComposingText();
330 
334  void OnClearButtonClicked();
335 
340  void UpdateClearButton();
341 
347  bool InitInputType();
348 
355 
359  float GetTextWidth(uint32_t nPosition);
360 
365  void OnScrollTimerEvent();
366 
371  void StartScrolling();
372 
376  void StopScrolling();
377 
382 
387 
391  virtual void WorldSurfaceScaleUpdated() override;
392 
393  virtual void UpdateEnd() override;
394 
401  CYIString m_CurrentText;
402  CYIString m_PreviousText;
403  CYIString m_DefaultText;
412  int32_t m_nPosInString;
417 
420 
423 
424  std::shared_ptr<CYIAssetTexture> m_DefaultCaretTexture;
425 
426 private:
427  bool HandleEventWhenActive(const std::shared_ptr<CYIEventDispatcher> &pDispatcher, CYIEvent *pEvent);
428  bool HandleEventWhenInactive(const std::shared_ptr<CYIEventDispatcher> &pDispatcher, CYIEvent *pEvent);
429 
430  bool TabKeyPressed(const CYIKeyEvent *pKeyEvent);
431 
432  void DoScrolling(bool bIsMouseEvent);
433  void NotifyKeyboardOnTextChange();
434  void NotifyKeyboardOnCursorPositionWillChange();
435  void NotifyKeyboardOnCursorPositionChanged();
436 
439 };
440 
443 #endif // _YI_TEXT_EDIT_VIEW_H_
void ActivateCaret()
void DoScrollingForTimerEvent()
bool m_bCaretActive
Definition: YiTextEditView.h:409
bool IsActivated() const
CYISignal< CYITextEditView * > Activated
Definition: YiTextEditView.h:241
CYIColor m_DefaultTextColor
Definition: YiTextEditView.h:404
virtual void OnSynchronizeKeyboard(Receiver::Description &receiverDescription) override
#define YI_DISALLOW_COPY_AND_ASSIGN(TypeName)
Delete the copy constructor and assignment operator (and consequently the move constructor as well) ...
Definition: YiPredef.h:114
CYIColor m_CaretColor
Definition: YiTextEditView.h:406
int32_t m_nComposingStartPos
Definition: YiTextEditView.h:414
Class for key events.
Definition: YiKeyEvent.h:15
void OnTextChanged(bool bNotifyKeyboard)
Provides an interface to interact with the system software keyboard.
Definition: YiKeyboardInputBridge.h:95
std::shared_ptr< CYIAssetTexture > m_DefaultCaretTexture
Definition: YiTextEditView.h:424
virtual bool OnTextPasted(const CYIString &pText) override
Base class for events.
Definition: YiEvent.h:489
The base class for all view types. Views are containers of renderable elements that often define inte...
Definition: YiSceneView.h:47
virtual void Clear()
bool OnKeyDownWhenActive(CYIKeyEvent *pEvent)
virtual const CYISceneView::AssetRequirement * GetAssetRequirements(uint32_t *pRequirementCount) override
Container class for Unicode strings. Conceptually, a CYIString object is a sequence of Unicode charac...
Definition: YiString.h:35
void SetTextColor(const CYIColor &textColor)
virtual bool OnSetComposingText(const CYIString &pText, int32_t nCaret) override
virtual void OnCursorPositionChanged(int32_t nCursor) override
CYISignal< const CYIString &, const CYIString & > TextChanged
Definition: YiTextEditView.h:236
bool InitInputType()
A texture asset representing an image which will be loaded into the GPU.
Definition: YiAssetTexture.h:23
INPUT_TYPE
The preferred input type.
Definition: YiKeyboardInputBridge.h:39
CYITextSceneNode * m_pTextNode
Definition: YiTextEditView.h:398
virtual bool Init() override
void DoScrollingForMouseEvent()
#define YI_TYPE_BASES(...)
Definition: YiRtti.h:350
void OnDeactivated()
float m_fCaretMaxX
Definition: YiTextEditView.h:421
void StartScrolling()
void SetCaretPositionInString(float fLocalSpaceX, float fLocalSpaceY, int8_t nCaretOffset=0)
int32_t m_nComposingEndPos
Definition: YiTextEditView.h:415
virtual void SetInputType(CYIKeyboardInputBridge::INPUT_TYPE eInputType)
void ResetCaretBlinkTimer()
bool SetTextEntryBoxWidth(float fBoxWidth)
Definition: YiSceneView.h:86
virtual CYIString GetValue() const
CYIKeyboardInputBridge::INPUT_TYPE m_eInputType
Definition: YiTextEditView.h:416
void SetDefaultText(const CYIString &defaultText)
CYITimer * m_pScrollTimer
Definition: YiTextEditView.h:400
uint32_t m_uMaximumCharacterCount
Definition: YiTextEditView.h:413
void OnClearButtonClicked()
CYISceneNode * m_pCaretNode
Definition: YiTextEditView.h:397
bool HasComposingText()
CYIString m_PreviousText
Definition: YiTextEditView.h:402
int32_t m_nPosInString
Definition: YiTextEditView.h:412
CYIPushButtonView * m_pClearBtn
Definition: YiTextEditView.h:399
float GetTextWidth(uint32_t nPosition)
void UpdateClearButton()
CYITimelineLoop * m_pCaretBlinkTimelineLoop
Definition: YiTextEditView.h:396
float m_fInitialCaretMaxX
Definition: YiTextEditView.h:422
const CYIColor & GetCaretColor() const
bool m_bUpdateText
Definition: YiTextEditView.h:407
glm::vec2 m_vScrollMouseLocationDown
Definition: YiTextEditView.h:418
A low-precision timer driven by the update loop.
Definition: YiTimer.h:29
CYITimer m_CaretTimer
Definition: YiTextEditView.h:395
bool OnKeyInputWhenActive(CYIKeyEvent *pEvent)
const CYIColor & GetTextColor() const
float GetTextEntryBoxWidth() const
virtual bool HandleEvent(const std::shared_ptr< CYIEventDispatcher > &pDispatcher, CYIEvent *pEvent) override
A scene node is the base type for all nodes which are used by the scene manager; it is an integral pa...
Definition: YiSceneNode.h:114
void DeactivateCaret()
A scene node type that renders text.
Definition: YiTextSceneNode.h:77
int32_t m_nLengthOfValueString
Definition: YiTextEditView.h:411
virtual ~CYITextEditView()
virtual void SetValue(CYIString text)
bool m_bPlaceholderTextMode
Definition: YiTextEditView.h:410
virtual void WorldSurfaceScaleUpdated() override
void RemoveComposingText(bool bEmitChangedSignal=true)
virtual bool OnKeyboardHidden() override
const CYIString & GetDefaultText() const
Displays text to the user and allows them to edit it.
Definition: YiTextEditView.h:50
virtual void UpdateTextView()
virtual bool OnTextDeleted(int32_t nBeforeCaret, int32_t nAfterCaret) override
bool InitDefaultTextFromProperty()
virtual bool OnSetComposingRegion(int32_t nStart, int32_t nEnd) override
glm::vec3 m_vScrollMouseLocalSpaceLocation
Definition: YiTextEditView.h:419
CYIString m_CurrentText
Definition: YiTextEditView.h:401
void UpdateCaretNodePositionAndTextOffset()
virtual bool OnTextEntered(const CYIString &pText, int32_t nCaret) override
float GetInitialTextEntryBoxWidth() const
virtual bool OnFinishComposingText() override
uint32_t GetMaximumCharacterCount() const
void OnScrollTimerEvent()
virtual CYIKeyboardInputBridge::INPUT_TYPE GetInputType() const override
Repeats a timeline.
Definition: YiTimelineLoop.h:18
virtual void UpdateEnd() override
A class used to represent a color value.
Definition: YiColor.h:31
const CYIColor & GetDefaultTextColor() const
Provides an implementation of a button which accepts user interaction in the form of a press and rele...
Definition: YiPushButtonView.h:35
virtual bool OnCharWhenActive(CYIKeyEvent *pEvent)
Signals and slots are a thread-safe and flexible communication framework that will allow various obje...
Definition: YiSignal.h:164
CYIString m_DefaultText
Definition: YiTextEditView.h:403
virtual void OnTextReplaced(const CYIString &text, int32_t nCursor) override
bool m_bActivated
Definition: YiTextEditView.h:408
CYISignal< CYITextEditView * > Deactivated
Definition: YiTextEditView.h:246
void SetDefaultTextColor(const CYIColor &defaultTextColor)
void SetMaximumCharacterCount(uint32_t uMaximumCharacterCount)
void SetCaretColor(const CYIColor &clrCaret)
CYIColor m_TextColor
Definition: YiTextEditView.h:405
void StopScrolling()