ui/gtk/button.c

changeset 108
fcf6d5fac8f5
parent 107
9aff1dc3990d
child 140
c03c338a7dcf
--- 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;
+}
+

mercurial