7 days ago
implement radiobutton (QT)
application/main.c | file | annotate | diff | comparison | revisions | |
ui/qt/button.cpp | file | annotate | diff | comparison | revisions |
--- a/application/main.c Fri Apr 04 22:08:34 2025 +0200 +++ b/application/main.c Fri Apr 04 22:16:29 2025 +0200 @@ -786,6 +786,14 @@ ui_button(obj, .label = "Button Y"); ui_checkbox(obj, .label = "Checkbox"); + ui_newline(obj); + + ui_hbox(obj, .colspan = 3) { + ui_radiobutton(obj, .label = "Radio 1", .varname = "radio"); + ui_radiobutton(obj, .label = "Radio 2", .varname = "radio"); + ui_radiobutton(obj, .label = "Radio 3", .varname = "radio"); + ui_radiobutton(obj, .label = "Radio 4", .varname = "radio"); + } } ui_show(obj); }
--- 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; + } +}