textfield.monkey2 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. Namespace mojox
  2. #rem monkeydoc The TextField class.
  3. #end
  4. Class TextField Extends TextView
  5. #rem monkeydoc Invoked when the user hits 'Enter'.
  6. #end
  7. Field Entered:Void()
  8. #rem monkeydoc Invoked when the user hits 'Escape'
  9. #end
  10. Field Escaped:Void()
  11. #rem monkeydoc Invoked when the user hits 'Tab'.
  12. #end
  13. Field Tabbed:Void()
  14. #rem monkeydoc Creates a new TextField.
  15. #end
  16. Method New()
  17. Style=GetStyle( "TextField" )
  18. Layout="fill-x"
  19. Gravity=New Vec2f( 0,.5 )
  20. ScrollBarsVisible=False
  21. End
  22. Method New( maxLength:Int )
  23. Self.New()
  24. MaxLength=maxLength
  25. End
  26. Method New( text:String,maxLength:Int=80 )
  27. Self.New( maxLength )
  28. Text=text
  29. End
  30. #rem monkeydoc Maximum text length.
  31. #end
  32. Property MaxLength:Int()
  33. Return _maxLength
  34. Setter( maxLength:Int )
  35. _maxLength=maxLength
  36. App.RequestRender()
  37. End
  38. Protected
  39. Method OnKeyViewChanged( oldKeyView:View,newKeyView:View ) Override
  40. If newKeyView=Self
  41. SelectAll()
  42. Else
  43. SelectText( 0,0 )
  44. Endif
  45. End
  46. Method OnKeyEvent( event:KeyEvent ) Override
  47. Select event.Type
  48. Case EventType.KeyDown
  49. Select event.Key
  50. Case Key.Enter
  51. Entered()
  52. Return
  53. Case Key.Escape
  54. Escaped()
  55. Return
  56. Case Key.Tab
  57. Tabbed()
  58. Return
  59. End
  60. Case EventType.KeyUp
  61. Select event.Key
  62. Case Key.Enter,Key.Escape,Key.Tab
  63. Return
  64. End
  65. End
  66. Super.OnKeyEvent( event )
  67. If _maxLength>=Document.TextLength Return
  68. Local anchor:=Anchor,cursor:=Cursor
  69. SelectText( _maxLength,Document.TextLength )
  70. ReplaceText( "" )
  71. SelectText( anchor,cursor )
  72. End
  73. Method OnMeasureContent:Vec2i() Override
  74. Return New Vec2i( CharWidth*_maxLength,LineHeight )
  75. End
  76. Private
  77. Field _maxLength:Int=80
  78. End