[genlist] no scale at theme_hook
[framework/uifw/elementary.git] / src / edje_externals / elm_searchbar.c
1 #include "private.h"
2
3 typedef struct _Elm_Params_Searchbar
4 {
5    Elm_Params base;
6    Eina_Bool cancel_button_exists:1;
7    Eina_Bool cancel_button_visible:1;
8    Eina_Bool cancel_button_animation:1;
9    Eina_Bool cancel_button_animation_exists:1;
10    Eina_Bool boundary_rect_exists:1;
11    Eina_Bool boundary_rect:1;
12    const char *text;
13 } Elm_Params_Searchbar;
14
15 static void
16 external_searchbar_state_set(void *data __UNUSED__, Evas_Object *obj, const void *from_params, const void *to_params, float pos __UNUSED__)
17 {
18    const Elm_Params_Searchbar *p;
19
20    if (to_params) p = to_params;
21    else if (from_params) p = from_params;
22    else return;
23
24    if (p->cancel_button_exists)
25       elm_searchbar_cancel_button_set(obj, p->cancel_button_visible);
26    if (p->cancel_button_animation_exists)
27       elm_searchbar_cancel_button_animation_set(obj, p->cancel_button_animation);
28    if (p->boundary_rect_exists)
29       elm_searchbar_boundary_rect_set(obj, p->boundary_rect);
30    if (p->text)
31      elm_object_text_set(obj, p->text);
32 }
33
34 static Eina_Bool
35 external_searchbar_param_set(void *data __UNUSED__, Evas_Object *obj, const Edje_External_Param *param)
36 {
37    if (!strcmp(param->name, "cancel_button_visible"))
38      {
39         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
40           {
41              elm_searchbar_cancel_button_set(obj, param->i);
42              return EINA_TRUE;
43           }
44      }
45    else if (!strcmp(param->name, "cancel_button_animation"))
46      {
47         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
48           {
49              elm_searchbar_cancel_button_animation_set(obj, param->i);
50              return EINA_TRUE;
51           }
52      }
53    else if (!strcmp(param->name, "boundary_rect"))
54      {
55         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
56           {
57              elm_searchbar_boundary_rect_set(obj, param->i);
58              return EINA_TRUE;
59           }
60      }
61    else if (!strcmp(param->name, "text"))
62      {
63         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
64           {
65              elm_object_text_set(obj, param->s);
66              return EINA_TRUE;
67           }
68      }
69
70    ERR("unknown parameter '%s' of type '%s'",
71        param->name, edje_external_param_type_str(param->type));
72
73    return EINA_FALSE;
74 }
75
76 static Eina_Bool
77 external_searchbar_param_get(void *data __UNUSED__, const Evas_Object *obj __UNUSED__, Edje_External_Param *param)
78 {
79    if (!strcmp(param->name, "cancel_button_visible"))
80      {
81         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
82           {
83              return param->i;
84           }
85      }
86    else if (!strcmp(param->name, "cancel_button_animation"))
87      {
88         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
89           {
90              return param->i;
91           }
92      }
93    else if (!strcmp(param->name, "boundary_rect"))
94      {
95         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
96           {
97              return param->i;
98           }
99      }
100    else if (!strcmp(param->name, "text"))
101      {
102         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
103           {
104              param->s = elm_object_text_get(obj);
105              return EINA_TRUE;
106           }
107      }
108
109    ERR("unknown parameter '%s' of type '%s'",
110        param->name, edje_external_param_type_str(param->type));
111
112    return EINA_FALSE;
113 }
114
115 static void *
116 external_searchbar_params_parse(void *data __UNUSED__,
117                                 Evas_Object *obj __UNUSED__,
118                                 const Eina_List *params)
119 {
120    Elm_Params_Searchbar *mem = NULL;
121    Edje_External_Param *param;
122    const Eina_List *l;
123
124    mem = calloc(1, sizeof(Elm_Params_Searchbar));
125    if (!mem)
126       return NULL;
127
128    EINA_LIST_FOREACH(params, l, param)
129      {
130         if (!strcmp(param->name, "cancel_button_visible"))
131          {
132             mem->cancel_button_visible = !!param->i;
133             mem->cancel_button_exists = EINA_TRUE;
134          }
135         if (!strcmp(param->name, "cancel_button_animation"))
136           {
137              mem->cancel_button_animation = !!param->i;
138              mem->cancel_button_animation_exists = EINA_TRUE;
139           }
140         if (!strcmp(param->name, "boundary_rect"))
141           {
142              mem->boundary_rect = !!param->i;
143              mem->boundary_rect_exists = EINA_TRUE;
144           }
145         else if (!strcmp(param->name, "text"))
146           {
147              mem->text = eina_stringshare_add(param->s);
148           }
149      }
150
151    return mem;
152 }
153
154 static Evas_Object *external_searchbar_content_get(void *data __UNUSED__,
155                 const Evas_Object *obj __UNUSED__,
156                 const char *content __UNUSED__)
157 {
158         ERR("so content");
159         return NULL;
160 }
161
162 static void
163 external_searchbar_params_free(void *params)
164 {
165    Elm_Params_Searchbar *mem = params;
166    if (mem->text)
167      eina_stringshare_del(mem->text);
168    free(params);
169 }
170
171 static Edje_External_Param_Info external_searchbar_params[] = {
172    DEFINE_EXTERNAL_COMMON_PARAMS,
173    EDJE_EXTERNAL_PARAM_INFO_BOOL("cancel_button_visible"),
174    EDJE_EXTERNAL_PARAM_INFO_BOOL("cancel_button_animation"),
175    EDJE_EXTERNAL_PARAM_INFO_BOOL("boundary_rect"),
176    EDJE_EXTERNAL_PARAM_INFO_STRING("text"),
177    EDJE_EXTERNAL_PARAM_INFO_SENTINEL
178 };
179
180 DEFINE_EXTERNAL_ICON_ADD(searchbar, "searchbar");
181 DEFINE_EXTERNAL_TYPE_SIMPLE(searchbar, "Searchbar");