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