/gui/radiogroup.d
http://github.com/wilkie/djehuty · D · 77 lines · 61 code · 13 blank · 3 comment · 11 complexity · 18b3e26918c947267f75626d892589e3 MD5 · raw file
- module gui.radiogroup;
- import gui.widget;
- import gui.togglefield;
- import core.string;
- import core.event;
- // Description: This control provides a method of grouping together toggle fields to form a collection of mutually exclusive 'radio' fields.
- class RadioGroup : Widget
- {
- public:
- this() {
- super(0,0,0,0);
- }
- override void onAdd()
- {
- for (uint i = 0; i<_count; i++)
- {
- _window.push(_toggleFields[i]);
- }
- }
- override bool onSignal(Dispatcher dsp, uint signal) {
- if (signal == ToggleField.Signal.Selected) {
- for (uint i = 0; i<_count; i++) {
- if (_toggleFields[i] !is dsp) {
- _toggleFields[i].unselect();
- }
- }
- }
- return false;
- }
- // Description: This function will add a toggle field control to the group.
- override void push(Dispatcher dsp) {
- if (cast(ToggleField)dsp !is null) {
- }
- else {
- // error
- }
- }
- private:
- ToggleField _toggleFields[] = null;
- uint _capacity = 10;
- uint _count = 0;
- void addControl(ToggleField inctrl)
- {
- if (_toggleFields is null)
- {
- _toggleFields = new ToggleField[_capacity];
- _count = 0;
- }
- if (_capacity == _count)
- {
- ToggleField[] _tmp = _toggleFields;
- _capacity *= 2;
- _toggleFields = new ToggleField[_capacity];
- _toggleFields[0.._count] = _tmp[0.._count];
- }
- _toggleFields[_count] = inctrl;
- _count++;
- inctrl._is_grouped = true;
- if (_window !is null)
- {
- _window.push(inctrl);
- }
- }
- }