[access] support elm_access_action(); with ELM_ACCESS_ACTION_UNHIGHLIGHT
[framework/uifw/elementary.git] / src / edje_externals / elm_fileselector.c
1 #include <assert.h>
2
3 #include "private.h"
4
5 typedef struct _Elm_Params_Fileselector
6 {
7    Elm_Params base;
8    Eina_Bool is_save:1;
9    Eina_Bool is_save_set:1;
10    Eina_Bool folder_only:1;
11    Eina_Bool folder_only_set:1;
12    Eina_Bool show_buttons:1;
13    Eina_Bool show_buttons_set:1;
14    Eina_Bool expandable:1;
15    Eina_Bool expandable_set:1;
16 } Elm_Params_Fileselector;
17
18 static void
19 external_fileselector_state_set(void *data __UNUSED__, Evas_Object *obj, const void *from_params, const void *to_params, float pos __UNUSED__)
20 {
21    const Elm_Params_Fileselector *p;
22
23    if (to_params) p = to_params;
24    else if (from_params) p = from_params;
25    else return;
26
27    if ((p->is_save_set) && (p->is_save))
28      elm_fileselector_is_save_set(obj, p->is_save);
29    if (p->folder_only_set)
30      elm_fileselector_folder_only_set(obj, p->folder_only);
31    if (p->show_buttons_set)
32      elm_fileselector_buttons_ok_cancel_set(obj, p->show_buttons);
33    if (p->expandable_set)
34      elm_fileselector_expandable_set(obj, p->expandable);
35 }
36
37 static Eina_Bool
38 external_fileselector_param_set(void *data __UNUSED__, Evas_Object *obj, const Edje_External_Param *param)
39 {
40    if (!strcmp(param->name, "save"))
41      {
42         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
43           {
44              elm_fileselector_is_save_set(obj, param->i);
45              return EINA_TRUE;
46           }
47      }
48    else if (!strcmp(param->name, "folder only"))
49      {
50         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
51           {
52              elm_fileselector_folder_only_set(obj, param->i);
53              return EINA_TRUE;
54           }
55      }
56    else if (!strcmp(param->name, "show buttons"))
57      {
58         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
59           {
60              elm_fileselector_buttons_ok_cancel_set(obj, param->i);
61              return EINA_TRUE;
62           }
63      }
64    else if (!strcmp(param->name, "expandable"))
65      {
66         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
67           {
68              elm_fileselector_expandable_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_fileselector_param_get(void *data __UNUSED__, const Evas_Object *obj, Edje_External_Param *param)
81 {
82    if (!strcmp(param->name, "save"))
83      {
84         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
85           {
86              param->i = elm_fileselector_is_save_get(obj);
87              return EINA_TRUE;
88           }
89      }
90    else if (!strcmp(param->name, "folder only"))
91      {
92         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
93           {
94              param->i = elm_fileselector_folder_only_get(obj);
95              return EINA_TRUE;
96           }
97      }
98    else if (!strcmp(param->name, "show buttons"))
99      {
100         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
101           {
102              param->i = elm_fileselector_buttons_ok_cancel_get(obj);
103              return EINA_TRUE;
104           }
105      }
106    else if (!strcmp(param->name, "expandable"))
107      {
108         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
109           {
110              param->i = elm_fileselector_expandable_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_fileselector_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const Eina_List *params)
123 {
124    Elm_Params_Fileselector *mem;
125    Edje_External_Param *param;
126    const Eina_List *l;
127
128    mem = calloc(1, sizeof(Elm_Params_Fileselector));
129    if (!mem)
130      return NULL;
131
132    EINA_LIST_FOREACH(params, l, param)
133      {
134         if (!strcmp(param->name, "save"))
135           {
136              mem->is_save = !!param->i;
137              mem->is_save_set = EINA_TRUE;
138           }
139         else if (!strcmp(param->name, "folder only"))
140           {
141              mem->folder_only = !!param->i;
142              mem->folder_only_set = EINA_TRUE;
143           }
144         else if (!strcmp(param->name, "show buttons"))
145           {
146              mem->show_buttons = !!param->i;
147              mem->show_buttons_set = EINA_TRUE;
148           }
149         else if (!strcmp(param->name, "expandable"))
150           {
151              mem->expandable = !!param->i;
152              mem->expandable_set = EINA_TRUE;
153           }
154      }
155
156    return mem;
157 }
158
159 static Evas_Object *external_fileselector_content_get(void *data __UNUSED__,
160                 const Evas_Object *obj __UNUSED__, const char *content __UNUSED__)
161 {
162    ERR("No content.");
163    return NULL;
164 }
165
166 static void
167 external_fileselector_params_free(void *params)
168 {
169    Elm_Params_Fileselector *mem = params;
170    free(mem);
171 }
172
173 static Edje_External_Param_Info external_fileselector_params[] =
174   {
175     DEFINE_EXTERNAL_COMMON_PARAMS,
176     EDJE_EXTERNAL_PARAM_INFO_BOOL("save"),
177     EDJE_EXTERNAL_PARAM_INFO_BOOL("folder only"),
178     EDJE_EXTERNAL_PARAM_INFO_BOOL("show buttons"),
179     EDJE_EXTERNAL_PARAM_INFO_BOOL("expandable"),
180     EDJE_EXTERNAL_PARAM_INFO_SENTINEL
181   };
182
183 DEFINE_EXTERNAL_ICON_ADD(fileselector, "fileselector")
184 DEFINE_EXTERNAL_TYPE_SIMPLE(fileselector, "File Selector")
185