aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/elementary/src/edje_externals/elm_radio.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--libraries/elementary/src/edje_externals/elm_radio.c176
1 files changed, 176 insertions, 0 deletions
diff --git a/libraries/elementary/src/edje_externals/elm_radio.c b/libraries/elementary/src/edje_externals/elm_radio.c
new file mode 100644
index 0000000..6d5ee5d
--- /dev/null
+++ b/libraries/elementary/src/edje_externals/elm_radio.c
@@ -0,0 +1,176 @@
1#include "private.h"
2
3typedef struct _Elm_Params_Radio
4{
5 Elm_Params base;
6 const char *label;
7 Evas_Object *icon;
8 const char* group_name;
9 int value;
10 Eina_Bool value_exists:1;
11} Elm_Params_Radio;
12
13static void
14external_radio_state_set(void *data __UNUSED__, Evas_Object *obj, const void *from_params, const void *to_params, float pos __UNUSED__)
15{
16 const Elm_Params_Radio *p;
17
18 if (to_params) p = to_params;
19 else if (from_params) p = from_params;
20 else return;
21
22 if (p->label)
23 elm_object_text_set(obj, p->label);
24 if (p->icon)
25 elm_object_part_content_set(obj, "icon", p->icon);
26 if (p->value_exists)
27 elm_radio_state_value_set(obj, p->value);
28 if (p->group_name)
29 {
30 Evas_Object *ed = evas_object_smart_parent_get(obj);
31 Evas_Object *group = edje_object_part_swallow_get(ed, p->group_name);
32 elm_radio_group_add(obj, group);
33 }
34}
35
36static Eina_Bool
37external_radio_param_set(void *data __UNUSED__, Evas_Object *obj, const Edje_External_Param *param)
38{
39 if (!strcmp(param->name, "label"))
40 {
41 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
42 {
43 elm_object_text_set(obj, param->s);
44 return EINA_TRUE;
45 }
46 }
47 else if (!strcmp(param->name, "icon"))
48 {
49 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
50 {
51 Evas_Object *icon = external_common_param_icon_get(obj, param);
52 if ((strcmp(param->s, "")) && (!icon)) return EINA_FALSE;
53 elm_object_part_content_set(obj, "icon", icon);
54 return EINA_TRUE;
55 }
56 }
57 else if (!strcmp(param->name, "value"))
58 {
59 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_INT)
60 {
61 elm_radio_value_set(obj, param->i);
62 return EINA_TRUE;
63 }
64 }
65 else if (!strcmp(param->name, "group"))
66 {
67 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
68 {
69 Evas_Object *ed = evas_object_smart_parent_get(obj);
70 Evas_Object *group = edje_object_part_swallow_get(ed, param->s);
71 elm_radio_group_add(obj, group);
72 return EINA_TRUE;
73 }
74 }
75
76 ERR("unknown parameter '%s' of type '%s'",
77 param->name, edje_external_param_type_str(param->type));
78
79 return EINA_FALSE;
80}
81
82static Eina_Bool
83external_radio_param_get(void *data __UNUSED__, const Evas_Object *obj, Edje_External_Param *param)
84{
85 if (!strcmp(param->name, "label"))
86 {
87 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
88 {
89 param->s = elm_object_text_get(obj);
90 return EINA_TRUE;
91 }
92 }
93 else if (!strcmp(param->name, "icon"))
94 {
95 /* not easy to get icon name back from live object */
96 return EINA_FALSE;
97 }
98 else if (!strcmp(param->name, "value"))
99 {
100 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_INT)
101 {
102 param->i = elm_radio_value_get(obj);
103 return EINA_TRUE;
104 }
105 }
106 else if (!strcmp(param->name, "group"))
107 {
108 /* not easy to get group name back from live object */
109 return EINA_FALSE;
110 }
111
112 ERR("unknown parameter '%s' of type '%s'",
113 param->name, edje_external_param_type_str(param->type));
114
115 return EINA_FALSE;
116}
117
118static void *
119external_radio_params_parse(void *data __UNUSED__, Evas_Object *obj, const Eina_List *params)
120{
121 Elm_Params_Radio *mem;
122 Edje_External_Param *param;
123 const Eina_List *l;
124
125 mem = calloc(1, sizeof(Elm_Params_Radio));
126 if (!mem)
127 return NULL;
128
129 external_common_icon_param_parse(&mem->icon, obj, params);
130
131 EINA_LIST_FOREACH(params, l, param)
132 {
133 if (!strcmp(param->name, "group"))
134 mem->group_name = eina_stringshare_add(param->s);
135 else if (!strcmp(param->name, "value"))
136 {
137 mem->value = param->i;
138 mem->value_exists = EINA_TRUE;
139 }
140 else if (!strcmp(param->name, "label"))
141 mem->label = eina_stringshare_add(param->s);
142 }
143
144 return mem;
145}
146
147static Evas_Object *external_radio_content_get(void *data __UNUSED__,
148 const Evas_Object *obj __UNUSED__, const char *content __UNUSED__)
149{
150 ERR("No content.");
151 return NULL;
152}
153
154static void
155external_radio_params_free(void *params)
156{
157 Elm_Params_Radio *mem = params;
158
159 if (mem->group_name)
160 eina_stringshare_del(mem->group_name);
161 if (mem->label)
162 eina_stringshare_del(mem->label);
163 free(params);
164}
165
166static Edje_External_Param_Info external_radio_params[] = {
167 DEFINE_EXTERNAL_COMMON_PARAMS,
168 EDJE_EXTERNAL_PARAM_INFO_STRING("label"),
169 EDJE_EXTERNAL_PARAM_INFO_STRING("icon"),
170 EDJE_EXTERNAL_PARAM_INFO_STRING("group"),
171 EDJE_EXTERNAL_PARAM_INFO_INT("value"),
172 EDJE_EXTERNAL_PARAM_INFO_SENTINEL
173};
174
175DEFINE_EXTERNAL_ICON_ADD(radio, "radio")
176DEFINE_EXTERNAL_TYPE_SIMPLE(radio, "Radio")