checkbutton.monkey2 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  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. Local clicked:=Lambda()
  31. If _group And Checked Return
  32. Checked=Not Checked
  33. Clicked()
  34. If _group _group.CheckedChanged()
  35. End
  36. _checkBox.Clicked+=clicked
  37. Super.Clicked+=clicked
  38. AddView( _checkBox )
  39. If group Group=group
  40. End
  41. #rem monkeydoc The CheckGroup the button belongs to.
  42. #end
  43. Property Group:CheckGroup()
  44. Return _group
  45. Setter( group:CheckGroup )
  46. Assert( group And Not _group )
  47. _group=group
  48. _group._views.Add( Self )
  49. If _group._views.Length=1
  50. group._checked=Self
  51. SetChecked( True )
  52. Endif
  53. End
  54. #rem monkeydoc The button's checked state.
  55. #end
  56. Property Checked:Bool()
  57. Return _checked
  58. Setter( checked:Bool )
  59. If checked=_checked Return
  60. If _group
  61. If Not checked Return
  62. If _group._checked _group._checked.SetChecked( False )
  63. _group._checked=Self
  64. Endif
  65. SetChecked( checked )
  66. End
  67. Protected
  68. Method OnValidateStyle() Override
  69. _checkBox.Icon=_checkBox.RenderStyle.Icons[ _checked ]
  70. End
  71. Private
  72. Field _checked:Bool
  73. Field _checkBox:Button
  74. Field _group:CheckGroup
  75. Method SetChecked( checked:Bool )
  76. _checked=checked
  77. InvalidateStyle()
  78. End
  79. End