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()15WRadioButton::WRadioButton() 16 : buttonGroup_(nullptr) 17 { 18 setFormObject(true); 19 } 20 WRadioButton(const WString & text)21WRadioButton::WRadioButton(const WString& text) 22 : WAbstractToggleButton(text), 23 buttonGroup_(nullptr) 24 { 25 setFormObject(true); 26 } 27 ~WRadioButton()28WRadioButton::~WRadioButton() 29 { 30 if (buttonGroup_) 31 buttonGroup_->removeButton(this); 32 } 33 updateInput(DomElement & input,bool all)34void 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)46void 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)54void WRadioButton::setGroup(std::shared_ptr<WButtonGroup> group) 55 { 56 buttonGroup_ = group; 57 } 58 setFormData(const FormData & formData)59void 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