00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef _CEGUIEditbox_h_
00031 #define _CEGUIEditbox_h_
00032
00033 #include "../CEGUIBase.h"
00034 #include "../CEGUIWindow.h"
00035 #include "CEGUIEditboxProperties.h"
00036
00037 #if defined(_MSC_VER)
00038 # pragma warning(push)
00039 # pragma warning(disable : 4251)
00040 #endif
00041
00042
00043 namespace CEGUI
00044 {
00046 class CEGUIEXPORT EditboxWindowRenderer : public WindowRenderer
00047 {
00048 public:
00050 EditboxWindowRenderer(const String& name);
00051
00064 virtual size_t getTextIndexFromPosition(const Point& pt) const = 0;
00065 };
00066
00067
00068
00070 class CEGUIEXPORT Editbox : public Window
00071 {
00072 public:
00074 static const String EventNamespace;
00076 static const String WidgetTypeName;
00078 static const String EventReadOnlyModeChanged;
00080 static const String EventMaskedRenderingModeChanged;
00082 static const String EventMaskCodePointChanged;
00084 static const String EventValidationStringChanged;
00086 static const String EventMaximumTextLengthChanged;
00088 static const String EventTextInvalidated;
00090 static const String EventInvalidEntryAttempted;
00092 static const String EventCaratMoved;
00094 static const String EventTextSelectionChanged;
00096 static const String EventEditboxFull;
00098 static const String EventTextAccepted;
00099
00108 bool hasInputFocus(void) const;
00109
00118 bool isReadOnly(void) const
00119 {return d_readOnly;}
00120
00130 bool isTextMasked(void) const
00131 {return d_maskText;}
00132
00153 bool isTextValid(void) const;
00154
00167 const String& getValidationString(void) const
00168 {return d_validationString;}
00169
00177 size_t getCaratIndex(void) const;
00178
00188 size_t getSelectionStartIndex(void) const;
00189
00198 size_t getSelectionEndIndex(void) const;
00199
00209 size_t getSelectionLength(void) const;
00210
00219 utf32 getMaskCodePoint(void) const
00220 {return d_maskCodePoint;}
00221
00235 size_t getMaxTextLength(void) const
00236 {return d_maxTextLen;}
00237
00249 void setReadOnly(bool setting);
00250
00263 void setTextMasked(bool setting);
00264
00280 void setValidationString(const String& validation_string);
00281
00294 void setCaratIndex(size_t carat_pos);
00295
00313 void setSelection(size_t start_pos, size_t end_pos);
00314
00326 void setMaskCodePoint(utf32 code_point);
00327
00344 void setMaxTextLength(size_t max_len);
00345
00347 Editbox(const String& type, const String& name);
00348
00350 virtual ~Editbox(void);
00351
00352 protected:
00365 size_t getTextIndexFromPosition(const Point& pt) const;
00366
00368 void clearSelection(void);
00369
00378 void eraseSelectedText(bool modify_text = true);
00379
00385 bool isStringValid(const String& str) const;
00386
00388 void handleBackspace(void);
00389
00391 void handleDelete(void);
00392
00394 void handleCharLeft(uint sysKeys);
00395
00397 void handleWordLeft(uint sysKeys);
00398
00400 void handleCharRight(uint sysKeys);
00401
00403 void handleWordRight(uint sysKeys);
00404
00406 void handleHome(uint sysKeys);
00407
00409 void handleEnd(uint sysKeys);
00410
00423 virtual bool testClassName_impl(const String& class_name) const
00424 {
00425 if (class_name=="Editbox") return true;
00426 return Window::testClassName_impl(class_name);
00427 }
00428
00430 virtual bool validateWindowRenderer(const String& name) const
00431 {
00432 return (name == "Editbox");
00433 }
00434
00439 virtual void onReadOnlyChanged(WindowEventArgs& e);
00440
00446 virtual void onMaskedRenderingModeChanged(WindowEventArgs& e);
00447
00453 virtual void onMaskCodePointChanged(WindowEventArgs& e);
00454
00459 virtual void onValidationStringChanged(WindowEventArgs& e);
00460
00465 virtual void onMaximumTextLengthChanged(WindowEventArgs& e);
00466
00475 virtual void onTextInvalidatedEvent(WindowEventArgs& e);
00476
00482 virtual void onInvalidEntryAttempted(WindowEventArgs& e);
00483
00488 virtual void onCaratMoved(WindowEventArgs& e);
00489
00494 virtual void onTextSelectionChanged(WindowEventArgs& e);
00495
00501 virtual void onEditboxFullEvent(WindowEventArgs& e);
00502
00508 virtual void onTextAcceptedEvent(WindowEventArgs& e);
00509
00510
00511 void onMouseButtonDown(MouseEventArgs& e);
00512 void onMouseButtonUp(MouseEventArgs& e);
00513 void onMouseDoubleClicked(MouseEventArgs& e);
00514 void onMouseTripleClicked(MouseEventArgs& e);
00515 void onMouseMove(MouseEventArgs& e);
00516 void onCaptureLost(WindowEventArgs& e);
00517 void onCharacter(KeyEventArgs& e);
00518 void onKeyDown(KeyEventArgs& e);
00519 void onTextChanged(WindowEventArgs& e);
00520
00522 bool d_readOnly;
00524 bool d_maskText;
00526 utf32 d_maskCodePoint;
00528 size_t d_maxTextLen;
00530 size_t d_caratPos;
00532 size_t d_selectionStart;
00534 size_t d_selectionEnd;
00536 String d_validationString;
00538 RegexMatcher* d_validator;
00540 bool d_dragging;
00542 size_t d_dragAnchorIdx;
00543
00544 private:
00545 static EditboxProperties::ReadOnly d_readOnlyProperty;
00546 static EditboxProperties::MaskText d_maskTextProperty;
00547 static EditboxProperties::MaskCodepoint d_maskCodepointProperty;
00548 static EditboxProperties::ValidationString d_validationStringProperty;
00549 static EditboxProperties::CaratIndex d_caratIndexProperty;
00550 static EditboxProperties::SelectionStart d_selectionStartProperty;
00551 static EditboxProperties::SelectionLength d_selectionLengthProperty;
00552 static EditboxProperties::MaxTextLength d_maxTextLengthProperty;
00553
00554 void addEditboxProperties(void);
00555 };
00556
00557 }
00558
00559 #if defined(_MSC_VER)
00560 # pragma warning(pop)
00561 #endif
00562
00563 #endif // end of guard _CEGUIEditbox_h_