#include "toolkit.h"
#include "container.h"
#include "webview.h"
#include "widget.h"
#ifdef UI_WEBVIEW
UIWIDGET ui_webview_create(UiObject *obj, UiWebviewArgs *args) {
GtkWidget *webview = webkit_web_view_new();
ui_set_name_and_style(webview, args->name, args->style_class);
ui_widget_size_request(webview, args->width, args->height);
UiVar *var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname,
UI_VAR_GENERIC);
if(var) {
WebViewData *data = malloc(
sizeof(WebViewData));
memset(data,
0,
sizeof(WebViewData));
data->webview =
WEBKIT_WEB_VIEW(webview);
WebKitSettings *settings = webkit_web_view_get_settings(data->webview);
data->javascript = webkit_settings_get_enable_javascript(settings);
data->zoom = webkit_web_view_get_zoom_level(data->webview);
UiGeneric *value = var->value;
value->get = ui_webview_get;
value->get_type = ui_webview_get_type;
value->set = ui_webview_set;
value->obj = data;
if(value->value && value->type && !strcmp(value->type,
UI_WEBVIEW_OBJECT_TYPE)) {
ui_webview_set(value, value->value,
UI_WEBVIEW_OBJECT_TYPE);
}
}
ui_set_widget_states(obj->ctx, webview, args->states);
UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end;
UiLayout layout =
UI_ARGS2LAYOUT(args);
ct->add(ct, webview, &layout);
return webview;
}
void* ui_webview_get(UiGeneric *g) {
return g->value;
}
const char* ui_webview_get_type(UiGeneric *g) {
return UI_WEBVIEW_OBJECT_TYPE;
}
int ui_webview_set(UiGeneric *g,
void *value,
const char *type) {
if(!type || strcmp(type,
UI_WEBVIEW_OBJECT_TYPE)) {
return 1;
}
WebViewData *obj = g->obj;
if(!obj->webview) {
return 1;
}
WebViewData *data = value;
if(data->type ==
WEBVIEW_CONTENT_URL) {
webkit_web_view_load_uri(obj->webview, data->uri);
}
else {
if(!data->content) {
return 1;
}
GBytes *bytes = g_bytes_new(data->content, data->contentlength);
webkit_web_view_load_bytes(obj->webview, bytes, data->mimetype, data->encoding, data->uri);
}
ui_webview_enable_javascript(g, data->javascript);
ui_webview_set_zoom(g, data->zoom);
return 0;
}
void ui_webview_load_url(UiGeneric *g,
const char *url) {
WebViewData data = { .uri = (
char*)url, .type =
WEBVIEW_CONTENT_URL, .javascript =
TRUE, .zoom =
1 };
g->set(g, &data,
UI_WEBVIEW_OBJECT_TYPE);
}
void ui_webview_load_content(
UiGeneric *g,
const char *uri,
const char *content,
size_t contentlength,
const char *mimetype,
const char *encoding)
{
WebViewData *data0 = g->obj;
if(!data0) {
return;
}
WebViewData data;
memset(&data,
0,
sizeof(WebViewData));
data.webview = data0->webview;
data.uri = (
char*)uri;
data.content = (
char*)content;
data.contentlength = contentlength;
data.mimetype = (
char*)mimetype;
data.encoding = (
char*)encoding;
data.type =
WEBVIEW_CONTENT_CONTENT;
data.javascript =
FALSE;
data.zoom =
1;
g->set(g, &data,
UI_WEBVIEW_OBJECT_TYPE);
}
void ui_webview_reload(UiGeneric *g) {
WebViewData *webview = g->obj;
webkit_web_view_reload(webview->webview);
}
UiBool ui_webview_can_go_back(UiGeneric *g) {
WebViewData *webview = g->obj;
return webkit_web_view_can_go_back(webview->webview);
}
UiBool ui_webview_can_go_forward(UiGeneric *g) {
WebViewData *webview = g->obj;
return webkit_web_view_can_go_forward(webview->webview);
}
void ui_webview_go_back(UiGeneric *g) {
WebViewData *webview = g->obj;
webkit_web_view_go_back(webview->webview);
}
void ui_webview_go_forward(UiGeneric *g) {
WebViewData *webview = g->obj;
webkit_web_view_go_forward(webview->webview);
}
const char* ui_webview_get_uri(UiGeneric *g) {
WebViewData *webview = g->obj;
return webkit_web_view_get_uri(webview->webview);
}
void ui_webview_enable_javascript(UiGeneric *g, UiBool enable) {
WebViewData *webview = g->obj;
WebKitSettings *settings = webkit_web_view_get_settings(webview->webview);
webkit_settings_set_enable_javascript(settings, enable);
}
void ui_webview_set_zoom(UiGeneric *g,
double zoom) {
WebViewData *webview = g->obj;
webkit_web_view_set_zoom_level(webview->webview, zoom);
webview->zoom = zoom;
}
double ui_webview_get_zoom(UiGeneric *g) {
WebViewData *webview = g->obj;
webview->zoom = webkit_web_view_get_zoom_level(webview->webview);
return webview->zoom;
}
#endif