efl
215 строк · 5.9 Кб
1#include <assert.h>2#include "private.h"3
4typedef struct _Elm_Params_Photocam5{
6Elm_Params base;7const char *file;8double zoom;9const char *zoom_mode;10Eina_Bool paused:1;11Eina_Bool paused_exists:1;12Eina_Bool zoom_exists:1;13} Elm_Params_Photocam;14
15static const char* choices[] = { "manual", "auto fit", "auto fill", NULL };16
17static Elm_Photocam_Zoom_Mode18_zoom_mode_setting_get(const char *zoom_mode_str)19{
20unsigned int i;21
22assert(sizeof(choices)/sizeof(choices[0]) == ELM_PHOTOCAM_ZOOM_MODE_LAST + 1);23
24for (i = 0; i < ELM_PHOTOCAM_ZOOM_MODE_LAST; i++)25{26if (!strcmp(zoom_mode_str, choices[i]))27return i;28}29return ELM_PHOTOCAM_ZOOM_MODE_LAST;30}
31
32static void33external_photocam_state_set(void *data EINA_UNUSED, Evas_Object *obj,34const void *from_params, const void *to_params,35float pos EINA_UNUSED)36{
37const Elm_Params_Photocam *p;38
39if (to_params) p = to_params;40else if (from_params) p = from_params;41else return;42
43if (p->file)44elm_photocam_file_set(obj, p->file);45if (p->zoom_exists)46elm_photocam_zoom_set(obj, p->zoom);47if (p->zoom_mode)48{49Elm_Photocam_Zoom_Mode set = _zoom_mode_setting_get(p->zoom_mode);50if (set == ELM_PHOTOCAM_ZOOM_MODE_LAST) return;51elm_photocam_zoom_mode_set(obj, set);52}53if (p->paused_exists)54elm_photocam_paused_set(obj, p->paused);55}
56
57static Eina_Bool58external_photocam_param_set(void *data EINA_UNUSED, Evas_Object *obj,59const Edje_External_Param *param)60{
61if (!strcmp(param->name, "file"))62{63if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)64{65elm_photocam_file_set(obj, param->s);66return EINA_TRUE;67}68}69else if (!strcmp(param->name, "zoom"))70{71if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE)72{73elm_photocam_zoom_set(obj, param->d);74return EINA_TRUE;75}76}77else if (!strcmp(param->name, "zoom mode"))78{79if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)80{81Elm_Photocam_Zoom_Mode set = _zoom_mode_setting_get(param->s);82if (set == ELM_PHOTOCAM_ZOOM_MODE_LAST) return EINA_FALSE;83elm_photocam_zoom_mode_set(obj, set);84return EINA_TRUE;85}86}87else if (!strcmp(param->name, "paused"))88{89if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)90{91elm_photocam_paused_set(obj, param->i);92return EINA_TRUE;93}94}95
96ERR("unknown parameter '%s' of type '%s'",97param->name, edje_external_param_type_str(param->type));98
99return EINA_FALSE;100}
101
102static Eina_Bool103external_photocam_param_get(void *data EINA_UNUSED, const Evas_Object *obj,104Edje_External_Param *param)105{
106if (!strcmp(param->name, "file"))107{108if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)109{110param->s = elm_photocam_file_get(obj);111return EINA_TRUE;112}113}114else if (!strcmp(param->name, "zoom"))115{116if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE)117{118param->d = elm_photocam_zoom_get(obj);119return EINA_TRUE;120}121}122else if (!strcmp(param->name, "zoom mode"))123{124if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)125{126Elm_Photocam_Zoom_Mode zoom_mode_set =127elm_photocam_zoom_mode_get(obj);128
129if (zoom_mode_set == ELM_PHOTOCAM_ZOOM_MODE_LAST)130return EINA_FALSE;131
132param->s = choices[zoom_mode_set];133return EINA_TRUE;134}135}136else if (!strcmp(param->name, "paused"))137{138if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)139{140param->i = elm_photocam_paused_get(obj);141return EINA_TRUE;142}143}144
145ERR("unknown parameter '%s' of type '%s'",146param->name, edje_external_param_type_str(param->type));147
148return EINA_FALSE;149}
150
151static void *152external_photocam_params_parse(void *data EINA_UNUSED,153Evas_Object *obj EINA_UNUSED,154const Eina_List *params)155{
156Elm_Params_Photocam *mem;157Edje_External_Param *param;158const Eina_List *l;159
160mem = calloc(1, sizeof(Elm_Params_Photocam));161if (!mem)162return NULL;163
164EINA_LIST_FOREACH(params, l, param)165{166if (!strcmp(param->name, "file"))167mem->file = eina_stringshare_add(param->s);168else if (!strcmp(param->name, "zoom"))169{170mem->zoom = param->d;171mem->zoom_exists = EINA_TRUE;172}173else if (!strcmp(param->name, "zoom mode"))174mem->zoom_mode = eina_stringshare_add(param->s);175else if (!strcmp(param->name, "paused"))176{177mem->paused = !!param->i;178mem->paused_exists = EINA_TRUE;179}180}181
182return mem;183}
184
185static Evas_Object *external_photocam_content_get(void *data EINA_UNUSED,186const Evas_Object *obj EINA_UNUSED,187const char *content EINA_UNUSED)188{
189ERR("No content.");190return NULL;191}
192
193static void194external_photocam_params_free(void *params)195{
196Elm_Params_Photocam *mem = params;197
198if (mem->file)199eina_stringshare_del(mem->file);200if (mem->zoom_mode)201eina_stringshare_del(mem->zoom_mode);202free(mem);203}
204
205static Edje_External_Param_Info external_photocam_params[] = {206DEFINE_EXTERNAL_COMMON_PARAMS,207EDJE_EXTERNAL_PARAM_INFO_STRING("file"),208EDJE_EXTERNAL_PARAM_INFO_DOUBLE("zoom"),209EDJE_EXTERNAL_PARAM_INFO_CHOICE_FULL("zoom mode", "manual", choices),210EDJE_EXTERNAL_PARAM_INFO_BOOL("paused"),211EDJE_EXTERNAL_PARAM_INFO_SENTINEL
212};213
214DEFINE_EXTERNAL_ICON_ADD(photocam, "photocam");215DEFINE_EXTERNAL_TYPE_SIMPLE(photocam, "Photocam");216