textfield.monkey2 1.9 KB

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