3 typedef struct _Elm_Params_Web
8 Elm_Web_Zoom_Mode zoom_mode;
11 Eina_Bool inwin_mode_set:1;
14 static const char *zoom_choices[] = {"manual", "auto fit", "auto fill", NULL};
16 static Elm_Web_Zoom_Mode
17 _zoom_mode_get(const char *zoom)
21 for (i = 0; i < ELM_WEB_ZOOM_MODE_LAST; i++)
22 if (!strcmp(zoom, zoom_choices[i])) return i;
24 return ELM_WEB_ZOOM_MODE_LAST;
28 external_web_state_set(void *data __UNUSED__, Evas_Object *obj, const void *from_params, const void *to_params, float pos __UNUSED__)
30 const Elm_Params_Web *p;
32 if (to_params) p = to_params;
33 else if (from_params) p = from_params;
37 elm_web_uri_set(obj, p->uri);
38 if (p->zoom_mode < ELM_WEB_ZOOM_MODE_LAST)
39 elm_web_zoom_mode_set(obj, p->zoom_mode);
41 elm_web_zoom_set(obj, p->zoom);
42 if (p->inwin_mode_set)
43 elm_web_inwin_mode_set(obj, p->inwin_mode);
47 external_web_param_set(void *data __UNUSED__, Evas_Object *obj, const Edje_External_Param *param)
49 if (!strcmp(param->name, "uri"))
51 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
53 elm_web_uri_set(obj, param->s);
57 else if (!strcmp(param->name, "zoom level"))
59 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE)
61 elm_web_zoom_set(obj, param->d);
65 else if (!strcmp(param->name, "zoom mode"))
67 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_CHOICE)
69 Elm_Web_Zoom_Mode mode = _zoom_mode_get(param->s);
70 if (mode == ELM_WEB_ZOOM_MODE_LAST)
72 elm_web_zoom_mode_set(obj, mode);
76 else if (!strcmp(param->name, "inwin mode"))
78 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
80 elm_web_inwin_mode_set(obj, !!param->i);
85 ERR("unknown parameter '%s' of type '%s'",
86 param->name, edje_external_param_type_str(param->type));
92 external_web_param_get(void *data __UNUSED__, const Evas_Object *obj, Edje_External_Param *param)
94 if (!strcmp(param->name, "uri"))
96 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
98 param->s = elm_web_uri_get(obj);
102 else if (!strcmp(param->name, "zoom level"))
104 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE)
106 param->d = elm_web_zoom_get(obj);
110 else if (!strcmp(param->name, "zoom mode"))
112 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_CHOICE)
114 Elm_Web_Zoom_Mode mode = elm_web_zoom_mode_get(obj);
115 if (mode == ELM_WEB_ZOOM_MODE_LAST)
117 param->s = zoom_choices[mode];
121 else if (!strcmp(param->name, "inwin mode"))
123 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
125 param->i = elm_web_inwin_mode_get(obj);
130 ERR("unknown parameter '%s' of type '%s'",
131 param->name, edje_external_param_type_str(param->type));
137 external_web_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const Eina_List *params)
140 Edje_External_Param *param;
143 mem = calloc(1, sizeof(Elm_Params_Web));
144 if (!mem) return NULL;
146 mem->zoom_mode = ELM_WEB_ZOOM_MODE_LAST;
148 EINA_LIST_FOREACH(params, l, param)
150 if (!strcmp(param->name, "zoom level"))
152 mem->zoom = param->d;
153 mem->zoom_set = EINA_TRUE;
155 else if (!strcmp(param->name, "zoom mode"))
156 mem->zoom_mode = _zoom_mode_get(param->s);
157 else if (!strcmp(param->name, "uri"))
158 mem->uri = eina_stringshare_add(param->s);
159 else if (!strcmp(param->name, "inwin mode"))
161 mem->inwin_mode = !!param->i;
162 mem->inwin_mode_set = EINA_TRUE;
170 external_web_params_free(void *params)
172 Elm_Params_Web *mem = params;
175 eina_stringshare_del(mem->uri);
180 external_web_content_get(void *data __UNUSED__, const Evas_Object *obj __UNUSED__, const char *content __UNUSED__)
185 static Edje_External_Param_Info external_web_params[] =
187 EDJE_EXTERNAL_PARAM_INFO_STRING("uri"),
188 EDJE_EXTERNAL_PARAM_INFO_DOUBLE_DEFAULT("zoom level", 1.0),
189 EDJE_EXTERNAL_PARAM_INFO_CHOICE_FULL("zoom mode", "manual", zoom_choices),
190 EDJE_EXTERNAL_PARAM_INFO_BOOL_DEFAULT("inwin mode", EINA_FALSE),
191 EDJE_EXTERNAL_PARAM_INFO_SENTINEL
195 external_web_add(void *data __UNUSED__, Evas *evas __UNUSED__, Evas_Object *edje, const Eina_List *params __UNUSED__, const char *part_name)
197 Evas_Object *parent, *obj;
199 parent = elm_widget_parent_widget_get(edje);
200 if (!parent) parent = edje;
201 elm_need_web(); /* extra command needed */
202 obj = elm_web_add(parent);
203 external_signals_proxy(obj, edje, part_name);
207 DEFINE_EXTERNAL_ICON_ADD(web, "web")
208 DEFINE_EXTERNAL_TYPE(web, "Web")