diff -r 9aff1dc3990d -r fcf6d5fac8f5 ui/gtk/button.c --- a/ui/gtk/button.c Sat Jan 23 23:44:41 2016 +0100 +++ b/ui/gtk/button.c Sun Jan 24 11:59:58 2016 +0100 @@ -151,48 +151,21 @@ } -UiRadioButtonGroup ui_radiobuttongroup() { - UiRadioButtonGroup rgroup; - rgroup.group = NULL; - rgroup.ref = 0; - return rgroup; -} -void ui_radiobuttongroup_select(UiRadioButtonGroup *rgroup, int index) { - GSList *ls = rgroup->group; - int s = g_slist_length(rgroup->group) - 1 - index; - int i = 0; - while(ls) { - if(i == s) { - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ls->data), TRUE); - break; +UIWIDGET ui_radiobutton(UiObject *obj, char *label, UiInteger *rgroup) { + GSList *rg = rgroup ? rgroup->obj : NULL; + + GtkWidget *rbutton = gtk_radio_button_new_with_label(rg, label); + rg = gtk_radio_button_get_group(GTK_RADIO_BUTTON(rbutton)); + + if(rgroup) { + rgroup->obj = rg; + rgroup->get = ui_radiobutton_get; + rgroup->set = ui_radiobutton_set; + if(rgroup->value > 0) { + ui_radiobutton_set(rgroup, rgroup->value); } - ls = ls->next; - i++; } -} - -int ui_radiobuttongroup_selection(UiRadioButtonGroup *rgroup) { - GSList *ls = rgroup->group; - int i = 0; - while(ls) { - if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ls->data))) { - return g_slist_length(rgroup->group) - i - 1; - } - ls = ls->next; - i++; - } - return -1; -} - -int io_radiobuttongroup_count(UiRadioButtonGroup *rgroup) { - return g_slist_length(rgroup->group); -} - -UIWIDGET ui_radiobutton(UiObject *obj, char *label, UiRadioButtonGroup *rgroup) { - GtkWidget *rbutton = gtk_radio_button_new_with_label(rgroup->group, label); - rgroup->group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(rbutton)); - rgroup->ref++; UiContainer *ct = uic_get_current_container(obj); ct->add(ct, rbutton, FALSE); @@ -200,3 +173,36 @@ return rbutton; } +int ui_radiobutton_get(UiInteger *value) { + int selection = 0; + GSList *ls = value->obj; + int i = 0; + while(ls) { + if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ls->data))) { + selection = g_slist_length(value->obj) - i - 1; + break; + } + ls = ls->next; + i++; + } + + value->value = selection; + return selection; +} + +void ui_radiobutton_set(UiInteger *value, int i) { + GSList *ls = value->obj; + int s = g_slist_length(ls) - 1 - i; + int j = 0; + while(ls) { + if(j == s) { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ls->data), TRUE); + break; + } + ls = ls->next; + j++; + } + + value->value = j; +} +