tizen 2.4 release
[framework/uifw/elementary.git] / src / edje_externals / elm_fileselector_button.c
1 #include "private.h"
2
3 typedef struct _Elm_Params_fileselector_button
4 {
5    Elm_Params base;
6    const char *label;
7    Evas_Object *icon;
8
9    struct {
10       const char *path;
11       Eina_Bool is_save:1;
12       Eina_Bool is_save_set:1;
13       Eina_Bool folder_only:1;
14       Eina_Bool folder_only_set:1;
15       Eina_Bool expandable:1;
16       Eina_Bool expandable_set:1;
17       Eina_Bool inwin_mode:1;
18       Eina_Bool inwin_mode_set:1;
19    } fs;
20 } Elm_Params_fileselector_button;
21
22 static void
23 external_fileselector_button_state_set(void *data EINA_UNUSED, Evas_Object *obj,
24                                        const void *from_params,
25                                        const void *to_params,
26                                        float pos EINA_UNUSED)
27 {
28    const Elm_Params_fileselector_button *p;
29
30    if (to_params) p = to_params;
31    else if (from_params) p = from_params;
32    else return;
33
34    if (p->label)
35      elm_object_text_set(obj, p->label);
36    if (p->icon) elm_object_part_content_set(obj, "icon", p->icon);
37    if (p->fs.path) elm_fileselector_path_set(obj, p->fs.path);
38    if (p->fs.is_save_set)
39      elm_fileselector_is_save_set(obj, p->fs.is_save);
40    if (p->fs.folder_only_set)
41      elm_fileselector_folder_only_set(obj, p->fs.folder_only);
42    if (p->fs.expandable_set)
43      elm_fileselector_expandable_set(obj, p->fs.expandable);
44    if (p->fs.inwin_mode_set)
45      elm_fileselector_button_inwin_mode_set(obj, p->fs.inwin_mode);
46 }
47
48 static Eina_Bool
49 external_fileselector_button_param_set(void *data EINA_UNUSED, Evas_Object *obj,
50                                        const Edje_External_Param *param)
51 {
52    if (!strcmp(param->name, "label"))
53      {
54         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
55           {
56              elm_object_text_set(obj, param->s);
57              return EINA_TRUE;
58           }
59      }
60    else if (!strcmp(param->name, "icon"))
61      {
62         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
63           {
64              Evas_Object *icon = external_common_param_icon_get(obj, param);
65              if ((strcmp(param->s, "")) && (!icon)) return EINA_FALSE;
66              elm_object_part_content_set(obj, "icon", icon);
67              return EINA_TRUE;
68           }
69      }
70    else if (!strcmp(param->name, "path"))
71      {
72         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
73           {
74              elm_fileselector_path_set(obj, param->s);
75              return EINA_TRUE;
76           }
77      }
78    else if (!strcmp(param->name, "save"))
79      {
80         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
81           {
82              elm_fileselector_is_save_set(obj, param->i);
83              return EINA_TRUE;
84           }
85      }
86    else if (!strcmp(param->name, "folder only"))
87      {
88         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
89           {
90              elm_fileselector_folder_only_set(obj, param->i);
91              return EINA_TRUE;
92           }
93      }
94    else if (!strcmp(param->name, "expandable"))
95      {
96         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
97           {
98              elm_fileselector_expandable_set(obj, param->i);
99              return EINA_TRUE;
100           }
101      }
102    else if (!strcmp(param->name, "inwin mode"))
103      {
104         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
105           {
106              elm_fileselector_button_inwin_mode_set(obj, param->i);
107              return EINA_TRUE;
108           }
109      }
110
111    ERR("unknown parameter '%s' of type '%s'",
112        param->name, edje_external_param_type_str(param->type));
113
114    return EINA_FALSE;
115 }
116
117 static Eina_Bool
118 external_fileselector_button_param_get(void *data EINA_UNUSED,
119                                        const Evas_Object *obj,
120                                        Edje_External_Param *param)
121 {
122    if (!strcmp(param->name, "label"))
123      {
124         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
125           {
126              param->s = elm_object_text_get(obj);
127              return EINA_TRUE;
128           }
129      }
130    else if (!strcmp(param->name, "icon"))
131      {
132         /* not easy to get icon name back from live object */
133         return EINA_FALSE;
134      }
135    else if (!strcmp(param->name, "path"))
136      {
137         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
138           {
139              param->s = elm_fileselector_path_get(obj);
140              return EINA_TRUE;
141           }
142      }
143    else if (!strcmp(param->name, "save"))
144      {
145         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
146           {
147              param->i = elm_fileselector_is_save_get(obj);
148              return EINA_TRUE;
149           }
150      }
151    else if (!strcmp(param->name, "folder only"))
152      {
153         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
154           {
155              param->i = elm_fileselector_folder_only_get(obj);
156              return EINA_TRUE;
157           }
158      }
159    else if (!strcmp(param->name, "expandable"))
160      {
161         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
162           {
163              param->i = elm_fileselector_expandable_get(obj);
164              return EINA_TRUE;
165           }
166      }
167    else if (!strcmp(param->name, "inwin mode"))
168      {
169         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
170           {
171              param->i = elm_fileselector_button_inwin_mode_get(obj);
172              return EINA_TRUE;
173           }
174      }
175
176    ERR("unknown parameter '%s' of type '%s'",
177        param->name, edje_external_param_type_str(param->type));
178
179    return EINA_FALSE;
180 }
181
182 static void *
183 external_fileselector_button_params_parse(void *data EINA_UNUSED,
184                                           Evas_Object *obj,
185                                           const Eina_List *params)
186 {
187    Elm_Params_fileselector_button *mem;
188    Edje_External_Param *param;
189    const Eina_List *l;
190
191    mem = calloc(1, sizeof(Elm_Params_fileselector_button));
192    if (!mem)
193      return NULL;
194
195    external_common_icon_param_parse(&mem->icon, obj, params);
196
197    EINA_LIST_FOREACH(params, l, param)
198      {
199         if (!strcmp(param->name, "path"))
200           mem->fs.path = eina_stringshare_add(param->s);
201         else if (!strcmp(param->name, "save"))
202           {
203              mem->fs.is_save = !!param->i;
204              mem->fs.is_save_set = EINA_TRUE;
205           }
206         else if (!strcmp(param->name, "folder only"))
207           {
208              mem->fs.folder_only = !!param->i;
209              mem->fs.folder_only_set = EINA_TRUE;
210           }
211         else if (!strcmp(param->name, "expandable"))
212           {
213              mem->fs.expandable = !!param->i;
214              mem->fs.expandable_set = EINA_TRUE;
215           }
216         else if (!strcmp(param->name, "inwin mode"))
217           {
218              mem->fs.inwin_mode = !!param->i;
219              mem->fs.inwin_mode_set = EINA_TRUE;
220           }
221         else if (!strcmp(param->name, "label"))
222           mem->label = eina_stringshare_add(param->s);
223      }
224
225    return mem;
226 }
227
228 static Evas_Object *external_fileselector_button_content_get(void *data EINA_UNUSED,
229                                                              const Evas_Object *obj EINA_UNUSED,
230                                                              const char *content EINA_UNUSED)
231 {
232    ERR("No content.");
233    return NULL;
234 }
235
236  static void
237 external_fileselector_button_params_free(void *params)
238 {
239    Elm_Params_fileselector_button *mem = params;
240
241    if (mem->fs.path)
242      eina_stringshare_del(mem->fs.path);
243    if (mem->label)
244       eina_stringshare_del(mem->label);
245    free(params);
246 }
247
248 static Edje_External_Param_Info external_fileselector_button_params[] = {
249    DEFINE_EXTERNAL_COMMON_PARAMS,
250    EDJE_EXTERNAL_PARAM_INFO_STRING("label"),
251    EDJE_EXTERNAL_PARAM_INFO_STRING("icon"),
252    EDJE_EXTERNAL_PARAM_INFO_STRING("path"),
253    EDJE_EXTERNAL_PARAM_INFO_BOOL("save"),
254    EDJE_EXTERNAL_PARAM_INFO_BOOL("folder only"),
255    EDJE_EXTERNAL_PARAM_INFO_BOOL("expandable"),
256    EDJE_EXTERNAL_PARAM_INFO_BOOL("inwin mode"),
257    EDJE_EXTERNAL_PARAM_INFO_SENTINEL
258 };
259
260 DEFINE_EXTERNAL_ICON_ADD(fileselector_button, "fileselector_button");
261 DEFINE_EXTERNAL_TYPE_SIMPLE(fileselector_button, "File Selector Button");