checkbutton.monkey2 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. Namespace mojox
  2. #rem monkeydoc The CheckGroup class.
  3. #end
  4. Class CheckGroup
  5. Field CheckedChanged:Void()
  6. Property Checked:CheckButton()
  7. Return _checked
  8. End
  9. Private
  10. Field _views:=New Stack<CheckButton>
  11. Field _checked:CheckButton
  12. End
  13. #rem monkeydoc The CheckButton class.
  14. #end
  15. Class CheckButton Extends Label
  16. #rem monkeydoc Invoked when the button's [[Checked]] state changes.
  17. Note: This is only invoked as the result of user interaction.
  18. #end
  19. Field Clicked:Void()
  20. #rem monkeydoc Creates a new CheckButton.
  21. #end
  22. Method New( text:String="",icon:Image=Null,group:CheckGroup=Null )
  23. Super.New( text,icon )
  24. Style=GetStyle( "CheckButton" )
  25. AcceptsKeyEvents=False
  26. AcceptsMouseEvents=False
  27. _checkBox=New Button
  28. _checkBox.Style=GetStyle( "CheckBox" )
  29. _checkBox.Icon=_checkBox.RenderStyle.Icons[0]
  30. _checkBox.Layout="float"
  31. _checkBox.Gravity=New Vec2f( 1,.5 )
  32. Local clicked:=Lambda()
  33. If _group And Checked Return
  34. Checked=Not Checked
  35. Clicked()
  36. If _group _group.CheckedChanged()
  37. End
  38. _checkBox.Clicked+=clicked
  39. Super.Clicked+=clicked
  40. AddView( _checkBox )
  41. If group Group=group
  42. End
  43. #rem monkeydoc The CheckGroup the button belongs to.
  44. #end
  45. Property Group:CheckGroup()
  46. Return _group
  47. Setter( group:CheckGroup )
  48. Assert( group And Not _group )
  49. _group=group
  50. _group._views.Add( Self )
  51. If _group._views.Length=1
  52. group._checked=Self
  53. SetChecked( True )
  54. Endif
  55. End
  56. #rem monkeydoc The button's checked state.
  57. #end
  58. Property Checked:Bool()
  59. Return _checked
  60. Setter( checked:Bool )
  61. If checked=_checked Return
  62. If _group
  63. If Not checked Return
  64. If _group._checked _group._checked.SetChecked( False )
  65. _group._checked=Self
  66. Endif
  67. SetChecked( checked )
  68. End
  69. Protected
  70. Method OnValidateStyle() Override
  71. _checkBox.Icon=_checkBox.RenderStyle.Icons[ _checked ]
  72. End
  73. Private
  74. Field _checked:Bool
  75. Field _checkBox:Button
  76. Field _group:CheckGroup
  77. Method SetChecked( checked:Bool )
  78. _checked=checked
  79. InvalidateStyle()
  80. End
  81. End