/gui/radiogroup.d

http://github.com/wilkie/djehuty · D · 77 lines · 61 code · 13 blank · 3 comment · 11 complexity · 18b3e26918c947267f75626d892589e3 MD5 · raw file

  1. module gui.radiogroup;
  2. import gui.widget;
  3. import gui.togglefield;
  4. import core.string;
  5. import core.event;
  6. // Description: This control provides a method of grouping together toggle fields to form a collection of mutually exclusive 'radio' fields.
  7. class RadioGroup : Widget
  8. {
  9. public:
  10. this() {
  11. super(0,0,0,0);
  12. }
  13. override void onAdd()
  14. {
  15. for (uint i = 0; i<_count; i++)
  16. {
  17. _window.push(_toggleFields[i]);
  18. }
  19. }
  20. override bool onSignal(Dispatcher dsp, uint signal) {
  21. if (signal == ToggleField.Signal.Selected) {
  22. for (uint i = 0; i<_count; i++) {
  23. if (_toggleFields[i] !is dsp) {
  24. _toggleFields[i].unselect();
  25. }
  26. }
  27. }
  28. return false;
  29. }
  30. // Description: This function will add a toggle field control to the group.
  31. override void push(Dispatcher dsp) {
  32. if (cast(ToggleField)dsp !is null) {
  33. }
  34. else {
  35. // error
  36. }
  37. }
  38. private:
  39. ToggleField _toggleFields[] = null;
  40. uint _capacity = 10;
  41. uint _count = 0;
  42. void addControl(ToggleField inctrl)
  43. {
  44. if (_toggleFields is null)
  45. {
  46. _toggleFields = new ToggleField[_capacity];
  47. _count = 0;
  48. }
  49. if (_capacity == _count)
  50. {
  51. ToggleField[] _tmp = _toggleFields;
  52. _capacity *= 2;
  53. _toggleFields = new ToggleField[_capacity];
  54. _toggleFields[0.._count] = _tmp[0.._count];
  55. }
  56. _toggleFields[_count] = inctrl;
  57. _count++;
  58. inctrl._is_grouped = true;
  59. if (_window !is null)
  60. {
  61. _window.push(inctrl);
  62. }
  63. }
  64. }