textfield.monkey2 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  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. ContentView.Style=New Style
  22. Layout="fill-x"
  23. Gravity=New Vec2f( .5 )
  24. ScrollBarsVisible=False
  25. MaxSize=New Vec2i( 320,0 )
  26. Document.TextChanged+=Lambda()
  27. TextChanged()
  28. End
  29. End
  30. Method New( maxLength:Int )
  31. Self.New()
  32. MaxLength=maxLength
  33. End
  34. Method New( text:String,maxLength:Int=80 )
  35. Self.New( maxLength )
  36. Text=text
  37. End
  38. #rem monkeydoc Maximum text length.
  39. #end
  40. Property MaxLength:Int()
  41. Return _maxLength
  42. Setter( maxLength:Int )
  43. _maxLength=maxLength
  44. RequestRender()
  45. End
  46. Protected
  47. Method OnKeyViewChanged( oldKeyView:View,newKeyView:View ) Override
  48. If newKeyView=Self
  49. SelectAll()
  50. Else
  51. SelectText( 0,0 )
  52. Endif
  53. End
  54. Method OnKeyEvent( event:KeyEvent ) Override
  55. Select event.Type
  56. Case EventType.KeyDown
  57. Select event.Key
  58. Case Key.Enter
  59. Entered()
  60. Return
  61. Case Key.Escape
  62. Escaped()
  63. Return
  64. Case Key.Tab
  65. Tabbed()
  66. Return
  67. End
  68. Case EventType.KeyUp
  69. Select event.Key
  70. Case Key.Enter,Key.Escape,Key.Tab
  71. Return
  72. End
  73. End
  74. Super.OnKeyEvent( event )
  75. If _maxLength>=Document.TextLength Return
  76. Local anchor:=Anchor,cursor:=Cursor
  77. SelectText( _maxLength,Document.TextLength )
  78. ReplaceText( "" )
  79. SelectText( anchor,cursor )
  80. End
  81. Method OnMeasureContent:Vec2i() Override
  82. Return New Vec2i( CharWidth*_maxLength,CharHeight )
  83. End
  84. Private
  85. Field _maxLength:Int=80
  86. End