3 * Copyright 2012 Samsung Electronics Co., Ltd
5 * Licensed under the Flora License, Version 1.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://floralicense.org/license/
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
19 #include "radio-group.h"
23 unsigned int selected;
25 Evas_Object** objects;
26 cal_radio_group_changed_callback* changed_cb;
27 void** changed_cb_data;
30 cal_radio_group_h cal_radio_group_create(unsigned int count, Evas_Object* parent)
32 c_retv_if(count == 0, NULL);
34 cal_radio_group_s* p = (cal_radio_group_s*)calloc(1, sizeof(cal_radio_group_s));
38 p->head = elm_radio_add(parent);
39 c_retv_if(!p->head, p);
41 p->objects = (Evas_Object**)calloc(count, sizeof(Evas_Object*));
42 c_retv_if(!p->objects, p);
44 p->changed_cb = (cal_radio_group_changed_callback*)calloc(count, sizeof(cal_radio_group_changed_callback));
45 c_retv_if(!p->changed_cb, p);
47 p->changed_cb_data = (void**)calloc(count, sizeof(void*));
48 c_retv_if(!p->changed_cb_data, p);
53 void cal_radio_group_destroy(cal_radio_group_h rg)
55 cal_radio_group_s* p = (cal_radio_group_s*)rg;
58 evas_object_del(p->head);
61 free(p->changed_cb_data);
65 void cal_radio_group_set_radio_object(cal_radio_group_h rg, unsigned int index, Evas_Object* obj)
67 cal_radio_group_s* p = (cal_radio_group_s*)rg;
69 c_ret_if(index >= p->count);
70 c_ret_if(obj == NULL);
72 p->objects[index] = obj;
74 DBG("%d %d", index, p->head);
76 elm_radio_state_value_set(obj, index);
78 elm_radio_group_add(obj, p->head);
80 if (index == p->selected) {
81 elm_radio_value_set(p->head, index);
82 DBG("recovered selection %d", index);
86 void cal_radio_group_set_changed_callback(cal_radio_group_h rg, unsigned int index,
87 cal_radio_group_changed_callback func, void* data)
91 cal_radio_group_s* p = (cal_radio_group_s*)rg;
93 c_ret_if(index >= p->count);
95 p->changed_cb[index] = func;
96 p->changed_cb_data[index] = data;
99 void cal_radio_group_remove_radio_object(cal_radio_group_h rg, unsigned int index)
101 cal_radio_group_s* p = (cal_radio_group_s*)rg;
103 c_ret_if(index >= p->count);
105 p->objects[index] = NULL;
108 void cal_radio_group_select_radio(cal_radio_group_h rg, unsigned int index)
110 cal_radio_group_s* p = (cal_radio_group_s*)rg;
112 c_ret_if(index >= p->count);
114 DBG("%d %d", index, p->head);
116 int old = p->selected;
118 if (p->changed_cb[old] != NULL)
119 p->changed_cb[old](old, false, p->changed_cb_data[old]);
123 elm_radio_value_set(p->head, index);
125 if (p->changed_cb[index] != NULL)
126 p->changed_cb[index](index, true, p->changed_cb_data[index]);
129 int cal_radio_group_get_selected_radio(cal_radio_group_h rg)
131 cal_radio_group_s* p = (cal_radio_group_s*)rg;
132 c_retv_if(p == NULL, -1);