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