Initialize Tizen 2.3
[framework/uifw/elementary.git] / mobile / src / edje_externals / elm_check.c
1 #include "private.h"
2
3 typedef struct _Elm_Params_Check
4 {
5    Elm_Params base;
6    const char *label;
7    Evas_Object *icon;
8    Eina_Bool state:1;
9    Eina_Bool state_exists:1;
10 } Elm_Params_Check;
11
12 static void
13 external_check_state_set(void *data __UNUSED__, Evas_Object *obj, const void *from_params, const void *to_params, float pos __UNUSED__)
14 {
15    const Elm_Params_Check *p;
16
17    if (to_params) p = to_params;
18    else if (from_params) p = from_params;
19    else return;
20
21    if (p->label)
22      elm_object_text_set(obj, p->label);
23    if (p->icon)
24      elm_object_part_content_set(obj, "icon", p->icon);
25    if (p->state_exists)
26      elm_check_state_set(obj, p->state);
27 }
28
29 static Eina_Bool
30 external_check_param_set(void *data __UNUSED__, Evas_Object *obj, const Edje_External_Param *param)
31 {
32    if (!strcmp(param->name, "label"))
33      {
34         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
35           {
36              elm_object_text_set(obj, param->s);
37              return EINA_TRUE;
38           }
39      }
40    else if (!strcmp(param->name, "icon"))
41      {
42         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
43           {
44              Evas_Object *icon = external_common_param_icon_get(obj, param);
45              if ((strcmp(param->s, "")) && (!icon)) return EINA_FALSE;
46              elm_object_part_content_set(obj, "icon", icon);
47              return EINA_TRUE;
48           }
49      }
50    else if (!strcmp(param->name, "state"))
51      {
52         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
53           {
54              elm_check_state_set(obj, param->i);
55              return EINA_TRUE;
56           }
57      }
58
59    ERR("unknown parameter '%s' of type '%s'",
60        param->name, edje_external_param_type_str(param->type));
61
62    return EINA_FALSE;
63 }
64
65 static Eina_Bool
66 external_check_param_get(void *data __UNUSED__, const Evas_Object *obj, Edje_External_Param *param)
67 {
68    if (!strcmp(param->name, "label"))
69      {
70         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
71           {
72              param->s = elm_object_text_get(obj);
73              return EINA_TRUE;
74           }
75      }
76    else if (!strcmp(param->name, "icon"))
77      {
78         /* not easy to get icon name back from live object */
79         return EINA_FALSE;
80      }
81    else if (!strcmp(param->name, "state"))
82      {
83         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
84           {
85              param->i = elm_check_state_get(obj);
86              return EINA_TRUE;
87           }
88      }
89
90    ERR("unknown parameter '%s' of type '%s'",
91        param->name, edje_external_param_type_str(param->type));
92
93    return EINA_FALSE;
94 }
95
96 static void *
97 external_check_params_parse(void *data __UNUSED__, Evas_Object *obj, const Eina_List *params)
98 {
99    Elm_Params_Check *mem;
100    Edje_External_Param *param;
101    const Eina_List *l;
102
103    mem = calloc(1, sizeof(Elm_Params_Check));
104    if (!mem)
105      return NULL;
106
107    external_common_icon_param_parse(&mem->icon, obj, params);
108
109    EINA_LIST_FOREACH(params, l, param)
110      {
111         if (!strcmp(param->name, "state"))
112           {
113              mem->state = !!param->i;
114              mem->state_exists = EINA_TRUE;
115           }
116         else if (!strcmp(param->name, "label"))
117            mem->label = eina_stringshare_add(param->s);
118      }
119
120    return mem;
121 }
122
123 static Evas_Object *external_check_content_get(void *data __UNUSED__,
124                 const Evas_Object *obj __UNUSED__, const char *content __UNUSED__)
125 {
126         ERR("No content.");
127         return NULL;
128 }
129
130 static void
131 external_check_params_free(void *params)
132 {
133    Elm_Params_Check *mem = params;
134    if (mem->label)
135       eina_stringshare_del(mem->label);
136    free(params);
137 }
138
139 static Edje_External_Param_Info external_check_params[] = {
140    DEFINE_EXTERNAL_COMMON_PARAMS,
141    EDJE_EXTERNAL_PARAM_INFO_STRING("label"),
142    EDJE_EXTERNAL_PARAM_INFO_STRING("icon"),
143    EDJE_EXTERNAL_PARAM_INFO_BOOL_FULL("state", 0, "unchecked", "checked"),
144    EDJE_EXTERNAL_PARAM_INFO_SENTINEL
145 };
146
147 DEFINE_EXTERNAL_ICON_ADD(check, "check")
148 DEFINE_EXTERNAL_TYPE_SIMPLE(check, "Check")