2.0 alpha
[apps/home/calendar.git] / common / radio-group.c
1 #include "cld.h"
2 #include "radio-group.h"
3
4 struct _Cal_Radio_Group {
5         unsigned int count;
6         unsigned int selected;
7         Evas_Object** objects;
8 };
9
10 Cal_Radio_Group* cal_radio_group_create(unsigned int count)
11 {
12         c_retv_if(count == 0, NULL);
13         Cal_Radio_Group* rg = (Cal_Radio_Group*)malloc(sizeof(Cal_Radio_Group));
14         rg->count = count;
15         rg->selected = 0;
16         rg->objects = (Evas_Object**)malloc(count * sizeof(Evas_Object*));
17         int i;
18         for (i = 0; i < count; i++)
19                 rg->objects[i] = NULL;
20         return rg;
21 }
22
23 void cal_radio_group_set_radio_object(Cal_Radio_Group* rg, unsigned int index, Evas_Object* obj)
24 {
25         c_ret_if(rg == NULL);
26         c_ret_if(index >= rg->count);
27         c_ret_if(obj == NULL);
28
29         rg->objects[index] = obj;
30
31 //      DBG("%d %d", index, rg->objects[0]);
32
33         if (index == 0) {       // The Head of Group has been replaced!
34                 int i;
35                 for (i = 1; i < rg->count; i++)
36                         if (rg->objects[i] != NULL)
37                                 elm_radio_group_add(rg->objects[i], obj);       // Reassign each member
38                 elm_radio_value_set(obj, rg->selected);
39         } else {        // A Member of Group has been replaced...
40                 if (rg->objects[0] != NULL) {
41                         elm_radio_group_add(obj, rg->objects[0]);               // Reassign the member
42                         if (index == rg->selected)
43                                 elm_radio_value_set(rg->objects[0], index);
44                 }
45         }
46 }
47
48 void cal_radio_group_remove_radio_object(Cal_Radio_Group* rg, unsigned int index)
49 {
50         c_ret_if(rg == NULL);
51         c_ret_if(index >= rg->count);
52
53         rg->objects[index] = NULL;
54 }
55
56 void cal_radio_group_select_radio(Cal_Radio_Group* rg, unsigned int index)
57 {
58         c_ret_if(rg == NULL);
59         c_ret_if(index >= rg->count);
60
61         rg->selected = index;
62
63 //      DBG("%d %d", index, rg->objects[0]);
64
65         if (rg->objects[0] != NULL)
66                 elm_radio_value_set(rg->objects[0], index);
67 }
68
69 int cal_radio_group_get_selected_radio(Cal_Radio_Group* rg)
70 {
71         return rg->selected;
72 }
73