diff -r 63d53ce4dd67 -r 0412c4c1048e ui/qt/button.cpp --- a/ui/qt/button.cpp Fri Apr 04 22:08:34 2025 +0200 +++ b/ui/qt/button.cpp Fri Apr 04 22:16:29 2025 +0200 @@ -163,3 +163,53 @@ button->setChecked(true); } } + + +UIWIDGET ui_radiobutton_create(UiObject *obj, UiToggleArgs args) { + UiContainerPrivate *ctn = ui_obj_container(obj); + UI_APPLY_LAYOUT(ctn->layout, args); + + QString str = QString::fromUtf8(args.label); + QRadioButton *button = new QRadioButton(str); + button->setAutoExclusive(false); + + UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_INTEGER); + if(var) { + UiInteger *value = (UiInteger*)var->value; + QButtonGroup *buttonGroup = (QButtonGroup*)value->obj; + if(!buttonGroup) { + buttonGroup = new QButtonGroup(); + value->obj = buttonGroup; + } + int id = buttonGroup->buttons().size()+1; + buttonGroup->addButton(button, id); + if(value->value == id) { + button->setChecked(true); + } + value->get = ui_radiobutton_get; + value->set = ui_radiobutton_set; + } + + // TODO: unbind var/remove button from buttongroup when the button is destroyed + // TODO: implement callback + // TODO: implement value observer + + ctn->add(button, false); + + return button; +} + +int64_t ui_radiobutton_get(UiInteger *value) { + QButtonGroup *buttonGroup = (QButtonGroup*)value->obj; + value->value = buttonGroup->checkedId(); + return value->value; +} + +void ui_radiobutton_set(UiInteger *value, int64_t i) { + QButtonGroup *buttonGroup = (QButtonGroup*)value->obj; + QAbstractButton *button = buttonGroup->button(i); + if(button) { + button->setChecked(true); + value->value = i; + } +}