1 /*
2  * Copyright (C) 2008 Emweb bv, Herent, Belgium.
3  *
4  * See the LICENSE file for terms of use.
5  */
6 
7 #include "Wt/WRadioButton.h"
8 #include "Wt/WButtonGroup.h"
9 
10 #include "WebUtils.h"
11 #include "DomElement.h"
12 
13 namespace Wt {
14 
WRadioButton()15 WRadioButton::WRadioButton()
16   : buttonGroup_(nullptr)
17 {
18   setFormObject(true);
19 }
20 
WRadioButton(const WString & text)21 WRadioButton::WRadioButton(const WString& text)
22   : WAbstractToggleButton(text),
23     buttonGroup_(nullptr)
24 {
25   setFormObject(true);
26 }
27 
~WRadioButton()28 WRadioButton::~WRadioButton()
29 {
30   if (buttonGroup_)
31     buttonGroup_->removeButton(this);
32 }
33 
updateInput(DomElement & input,bool all)34 void WRadioButton::updateInput(DomElement& input, bool all)
35 {
36   if (all) {
37     input.setAttribute("type", "radio");
38 
39     if (buttonGroup_) {
40       input.setAttribute("name", buttonGroup_->id());
41       input.setAttribute("value", id());
42     }
43   }
44 }
45 
getFormObjects(FormObjectsMap & formObjects)46 void WRadioButton::getFormObjects(FormObjectsMap& formObjects)
47 {
48   if (buttonGroup_)
49     formObjects[buttonGroup_->id()] = buttonGroup_.get();
50 
51   WAbstractToggleButton::getFormObjects(formObjects);
52 }
53 
setGroup(std::shared_ptr<WButtonGroup> group)54 void WRadioButton::setGroup(std::shared_ptr<WButtonGroup> group)
55 {
56   buttonGroup_ = group;
57 }
58 
setFormData(const FormData & formData)59 void WRadioButton::setFormData(const FormData& formData)
60 {
61   if (flags_.test(BIT_STATE_CHANGED) || isReadOnly())
62     return;
63 
64   if (!Utils::isEmpty(formData.values)) {
65     const std::string& value = formData.values[0];
66 
67     if (value == id()) {
68       if (buttonGroup_) {
69 	buttonGroup_->uncheckOthers(this);
70 	state_ = CheckState::Checked;
71       }
72     } else
73       if (!buttonGroup_)
74 	WAbstractToggleButton::setFormData(formData);
75   } else
76     if (!buttonGroup_)
77       WAbstractToggleButton::setFormData(formData);
78 }
79 
80 }
81