From b8bdfef8c2912abe86bbc2cc99532d7bbe29c964 Mon Sep 17 00:00:00 2001 From: Jiyun Yang Date: Tue, 7 May 2019 18:37:06 +0900 Subject: [PATCH] Add bindings for new WebView APIs Add Properties * CACHE_MODEL * COOKIE_ACCEPT_POLICY * USER_AGENT * JAVASCRIPT_ENABLED * LOAD_IMAGE_AUTOMATICALLY * DEFAULT_TEXT_ENCODING_NAME * DEFAULT_FONT_SIZE Add Signals * PageLoadErrorSignal Add Methods * Suspend * Resume * ClearCookies Modify Methods * EvaluateJavaScript Change-Id: I8ebc688a071263af3dbac1771500a7a277fbca62 Signed-off-by: Jiyun Yang --- dali-csharp-binder/src/dali_wrap.cpp | 301 ++++++++++++--------- dali-csharp-binder/src/web-view-signal-converter.h | 136 ++++++++++ 2 files changed, 305 insertions(+), 132 deletions(-) create mode 100644 dali-csharp-binder/src/web-view-signal-converter.h diff --git a/dali-csharp-binder/src/dali_wrap.cpp b/dali-csharp-binder/src/dali_wrap.cpp index 39e89be..6c56001 100755 --- a/dali-csharp-binder/src/dali_wrap.cpp +++ b/dali-csharp-binder/src/dali_wrap.cpp @@ -472,6 +472,7 @@ void SWIG_CSharpException(int code, const char *msg) { #include #include +#include "web-view-signal-converter.h" // add here SWIG version check @@ -103047,6 +103048,38 @@ SWIGEXPORT void * SWIGSTDCALL CSharp_Dali_WebView_DownCast(void * jarg1) { return jresult; } +SWIGEXPORT int SWIGSTDCALL CSharp_Dali_WebView_Property_URL_get() { + return (int) Dali::Toolkit::WebView::Property::URL; +} + +SWIGEXPORT int SWIGSTDCALL CSharp_Dali_WebView_Property_CACHE_MODEL_get() { + return (int) Dali::Toolkit::WebView::Property::CACHE_MODEL; +} + +SWIGEXPORT int SWIGSTDCALL CSharp_Dali_WebView_Property_COOKIE_ACCEPT_POLICY_get() { + return (int) Dali::Toolkit::WebView::Property::COOKIE_ACCEPT_POLICY; +} + +SWIGEXPORT int SWIGSTDCALL CSharp_Dali_WebView_Property_USER_AGENT_get() { + return (int) Dali::Toolkit::WebView::Property::USER_AGENT; +} + +SWIGEXPORT int SWIGSTDCALL CSharp_Dali_WebView_Property_ENABLE_JAVASCRIPT_get() { + return (int) Dali::Toolkit::WebView::Property::ENABLE_JAVASCRIPT; +} + +SWIGEXPORT int SWIGSTDCALL CSharp_Dali_WebView_Property_LOAD_IMAGES_AUTOMATICALLY_get() { + return (int) Dali::Toolkit::WebView::Property::LOAD_IMAGES_AUTOMATICALLY; +} + +SWIGEXPORT int SWIGSTDCALL CSharp_Dali_WebView_Property_DEFAULT_TEXT_ENCODING_NAME_get() { + return (int) Dali::Toolkit::WebView::Property::DEFAULT_TEXT_ENCODING_NAME; +} + +SWIGEXPORT int SWIGSTDCALL CSharp_Dali_WebView_Property_DEFAULT_FONT_SIZE_get() { + return (int) Dali::Toolkit::WebView::Property::DEFAULT_FONT_SIZE; +} + SWIGEXPORT void SWIGSTDCALL CSharp_Dali_WebView_LoadUrl(void * jarg1, char * jarg2) { Dali::Toolkit::WebView *arg1 = (Dali::Toolkit::WebView *) 0 ; std::string *arg2; @@ -103083,53 +103116,74 @@ SWIGEXPORT void SWIGSTDCALL CSharp_Dali_WebView_LoadUrl(void * jarg1, char * jar } } -SWIGEXPORT char * SWIGSTDCALL CSharp_Dali_WebView_GetUrl(void * jarg1) { - char * jresult ; - std::string result; - +SWIGEXPORT void SWIGSTDCALL CSharp_Dali_WebView_LoadHTMLString(void * jarg1, char * jarg2) { Dali::Toolkit::WebView *arg1 = (Dali::Toolkit::WebView *) 0 ; + std::string *arg2; arg1 = (Dali::Toolkit::WebView *)jarg1; + if (!jarg2) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "null string", 0); + return; + } + std::string jarg2str = std::string(jarg2); + arg2 = &jarg2str; { try { - result = arg1->GetUrl(); + (arg1)->LoadHTMLString((std::string const &)*arg2); } catch (std::out_of_range& e) { { - SWIG_CSharpException(SWIG_IndexError, const_cast(e.what())); return 0; + SWIG_CSharpException(SWIG_IndexError, const_cast(e.what())); return ; }; } catch (std::exception& e) { { - SWIG_CSharpException(SWIG_RuntimeError, const_cast(e.what())); return 0; + SWIG_CSharpException(SWIG_RuntimeError, const_cast(e.what())); return ; }; } catch (Dali::DaliException e) { { - SWIG_CSharpException(SWIG_UnknownError, e.condition); return 0; + SWIG_CSharpException(SWIG_UnknownError, e.condition); return ; }; } catch (...) { { - SWIG_CSharpException(SWIG_UnknownError, "unknown error"); return 0; + SWIG_CSharpException(SWIG_UnknownError, "unknown error"); return ; }; } } - - jresult = SWIG_csharp_string_callback((&result)->c_str()); - return jresult; } -SWIGEXPORT void SWIGSTDCALL CSharp_Dali_WebView_LoadHTMLString(void * jarg1, char * jarg2) { +SWIGEXPORT void SWIGSTDCALL CSharp_Dali_WebView_Reload(void * jarg1) { Dali::Toolkit::WebView *arg1 = (Dali::Toolkit::WebView *) 0 ; - std::string *arg2; arg1 = (Dali::Toolkit::WebView *)jarg1; - if (!jarg2) { - SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "null string", 0); - return; + { + try { + (arg1)->Reload(); + } catch (std::out_of_range& e) { + { + SWIG_CSharpException(SWIG_IndexError, const_cast(e.what())); return ; + }; + } catch (std::exception& e) { + { + SWIG_CSharpException(SWIG_RuntimeError, const_cast(e.what())); return ; + }; + } catch (Dali::DaliException e) { + { + SWIG_CSharpException(SWIG_UnknownError, e.condition); return ; + }; + } catch (...) { + { + SWIG_CSharpException(SWIG_UnknownError, "unknown error"); return ; + }; + } } - std::string jarg2str = std::string(jarg2); - arg2 = &jarg2str; +} + +SWIGEXPORT void SWIGSTDCALL CSharp_Dali_WebView_StopLoading(void * jarg1) { + Dali::Toolkit::WebView *arg1 = (Dali::Toolkit::WebView *) 0 ; + + arg1 = (Dali::Toolkit::WebView *)jarg1; { try { - (arg1)->LoadHTMLString((std::string const &)*arg2); + (arg1)->StopLoading(); } catch (std::out_of_range& e) { { SWIG_CSharpException(SWIG_IndexError, const_cast(e.what())); return ; @@ -103150,13 +103204,13 @@ SWIGEXPORT void SWIGSTDCALL CSharp_Dali_WebView_LoadHTMLString(void * jarg1, cha } } -SWIGEXPORT void SWIGSTDCALL CSharp_Dali_WebView_Reload(void * jarg1) { +SWIGEXPORT void SWIGSTDCALL CSharp_Dali_WebView_Suspend(void * jarg1) { Dali::Toolkit::WebView *arg1 = (Dali::Toolkit::WebView *) 0 ; arg1 = (Dali::Toolkit::WebView *)jarg1; { try { - (arg1)->Reload(); + (arg1)->Suspend(); } catch (std::out_of_range& e) { { SWIG_CSharpException(SWIG_IndexError, const_cast(e.what())); return ; @@ -103177,13 +103231,13 @@ SWIGEXPORT void SWIGSTDCALL CSharp_Dali_WebView_Reload(void * jarg1) { } } -SWIGEXPORT void SWIGSTDCALL CSharp_Dali_WebView_StopLoading(void * jarg1) { +SWIGEXPORT void SWIGSTDCALL CSharp_Dali_WebView_Resume(void * jarg1) { Dali::Toolkit::WebView *arg1 = (Dali::Toolkit::WebView *) 0 ; arg1 = (Dali::Toolkit::WebView *)jarg1; { try { - (arg1)->StopLoading(); + (arg1)->Resume(); } catch (std::out_of_range& e) { { SWIG_CSharpException(SWIG_IndexError, const_cast(e.what())); return ; @@ -103316,7 +103370,7 @@ SWIGEXPORT bool SWIGSTDCALL CSharp_Dali_WebView_CanGoForward(void * jarg1) { return ret; } -SWIGEXPORT void SWIGSTDCALL CSharp_Dali_WebView_EvaluateJavaScript(void * jarg1, char * jarg2) { +SWIGEXPORT void SWIGSTDCALL CSharp_Dali_WebView_EvaluateJavaScript(void * jarg1, char * jarg2, void* jarg3) { Dali::Toolkit::WebView *arg1 = (Dali::Toolkit::WebView *) 0 ; std::string *arg2; @@ -103327,9 +103381,14 @@ SWIGEXPORT void SWIGSTDCALL CSharp_Dali_WebView_EvaluateJavaScript(void * jarg1, } std::string jarg2_str = std::string(jarg2); arg2 = &jarg2_str; + + void (*handler)(char*) = (void (*)(char*)) jarg3; + { try { - (arg1)->EvaluateJavaScript((std::string const &)*arg2); + (arg1)->EvaluateJavaScript((std::string const &)*arg2, [handler](const std::string& result) { + handler(SWIG_csharp_string_callback(result.c_str())); + }); } catch (std::out_of_range& e) { { SWIG_CSharpException(SWIG_IndexError, const_cast(e.what())); return ; @@ -103440,79 +103499,43 @@ SWIGEXPORT void SWIGSTDCALL CSharp_Dali_WebView_ClearCache(void * jarg1) { } } -SWIGEXPORT Dali::Toolkit::Control * SWIGSTDCALL CSharp_Dali_WebView_SWIGUpcast(Dali::Toolkit::WebView *jarg1) { - return (Dali::Toolkit::Control *)jarg1; -} - - -// Proxy class of WebViewSignal. -// WebViewSignal has an argument of std::string type which is not supported at C# side. -// The purpose of this class is to convert signal argument of string type safely. -class WebViewSignalProxy : public ConnectionTracker -{ -public: - typedef Dali::Signal< void(Dali::Toolkit::WebView, const std::string&) > OriginalSignalType; - typedef Dali::Signal< void(Dali::Toolkit::WebView, char*) > ProxySignalType; - typedef void (*CallbackType)(Dali::Toolkit::WebView, char *); - - WebViewSignalProxy(OriginalSignalType* signal) - : mSignalPtr(signal) - { - } - - void Connect(CallbackType csharpCallback) - { - if (mSignalPtr->Empty()) - { - mSignalPtr->Connect(this, &WebViewSignalProxy::OnEmit); - } - mProxySignal.Connect(csharpCallback); - } - - void Disconnect(CallbackType csharpCallback) - { - mProxySignal.Disconnect(csharpCallback); - if (mProxySignal.Empty()) - { - mSignalPtr->Disconnect(this, &WebViewSignalProxy::OnEmit); - } - } - - bool Empty() - { - return mProxySignal.Empty(); - } - - std::size_t GetConnectionCount() - { - return mProxySignal.GetConnectionCount(); - } +SWIGEXPORT void SWIGSTDCALL CSharp_Dali_WebView_ClearCookies(void * jarg1) { + Dali::Toolkit::WebView *arg1 = (Dali::Toolkit::WebView *) 0 ; - void Emit(Dali::Toolkit::WebView& webview, char* url) + arg1 = (Dali::Toolkit::WebView *)jarg1; { - if (!mProxySignal.Empty()) - { - mProxySignal.Emit(webview, url); + try { + (arg1)->ClearCookies(); + } catch (std::out_of_range& e) { + { + SWIG_CSharpException(SWIG_IndexError, const_cast(e.what())); return ; + }; + } catch (std::exception& e) { + { + SWIG_CSharpException(SWIG_RuntimeError, const_cast(e.what())); return ; + }; + } catch (Dali::DaliException e) { + { + SWIG_CSharpException(SWIG_UnknownError, e.condition); return ; + }; + } catch (...) { + { + SWIG_CSharpException(SWIG_UnknownError, "unknown error"); return ; + }; } } +} - void OnEmit(Dali::Toolkit::WebView webview, const std::string& url) - { - // Safe string conversion - mProxySignal.Emit(webview, SWIG_csharp_string_callback(url.c_str())); - } - -private: - OriginalSignalType* mSignalPtr; - ProxySignalType mProxySignal; -}; +SWIGEXPORT Dali::Toolkit::Control * SWIGSTDCALL CSharp_Dali_WebView_SWIGUpcast(Dali::Toolkit::WebView *jarg1) { + return (Dali::Toolkit::Control *)jarg1; +} -SWIGEXPORT void * SWIGSTDCALL CSharp_Dali_new_WebViewSignalProxy_PageLoadStarted(void * jarg1) { +SWIGEXPORT void * SWIGSTDCALL CSharp_Dali_new_WebViewPageLoadSignal_PageLoadStarted(void * jarg1) { Dali::Toolkit::WebView* webview = (Dali::Toolkit::WebView *) jarg1; - WebViewSignalProxy* result = NULL; + SignalConverter::WebViewPageLoadSignal* result = NULL; { try { - result = new WebViewSignalProxy(&webview->PageLoadStartedSignal()); + result = new SignalConverter::WebViewPageLoadSignal(&webview->PageLoadStartedSignal()); } catch (std::out_of_range& e) { { SWIG_CSharpException(SWIG_IndexError, const_cast(e.what())); return 0; @@ -103534,12 +103557,12 @@ SWIGEXPORT void * SWIGSTDCALL CSharp_Dali_new_WebViewSignalProxy_PageLoadStarted return (void*) result; } -SWIGEXPORT void * SWIGSTDCALL CSharp_Dali_new_WebViewSignalProxy_PageLoadFinished(void * jarg1) { +SWIGEXPORT void * SWIGSTDCALL CSharp_Dali_new_WebViewPageLoadSignal_PageLoadFinished(void * jarg1) { Dali::Toolkit::WebView* webview = (Dali::Toolkit::WebView *) jarg1; - WebViewSignalProxy* result = NULL; + SignalConverter::WebViewPageLoadSignal* result = NULL; { try { - result = new WebViewSignalProxy(&webview->PageLoadFinishedSignal()); + result = new SignalConverter::WebViewPageLoadSignal(&webview->PageLoadFinishedSignal()); } catch (std::out_of_range& e) { { SWIG_CSharpException(SWIG_IndexError, const_cast(e.what())); return 0; @@ -103561,9 +103584,9 @@ SWIGEXPORT void * SWIGSTDCALL CSharp_Dali_new_WebViewSignalProxy_PageLoadFinishe return (void*) result; } -SWIGEXPORT void SWIGSTDCALL CSharp_Dali_delete_WebViewSignalProxy(void * jarg1) +SWIGEXPORT void SWIGSTDCALL CSharp_Dali_delete_WebViewPageLoadSignal(void * jarg1) { - WebViewSignalProxy* object = (WebViewSignalProxy*) jarg1; + SignalConverter::WebViewPageLoadSignal* object = (SignalConverter::WebViewPageLoadSignal*) jarg1; { try { delete object; @@ -103587,42 +103610,66 @@ SWIGEXPORT void SWIGSTDCALL CSharp_Dali_delete_WebViewSignalProxy(void * jarg1) } } -SWIGEXPORT unsigned int SWIGSTDCALL CSharp_Dali_WebViewSignalProxy_Empty(void * jarg1) +SWIGEXPORT void SWIGSTDCALL CSharp_Dali_WebViewPageLoadSignal_Connect(void * jarg1, void * jarg2) { - bool result; - WebViewSignalProxy* proxy = (WebViewSignalProxy*) jarg1; + SignalConverter::WebViewPageLoadSignal* proxy = (SignalConverter::WebViewPageLoadSignal*) jarg1; + SignalConverter::WebViewPageLoadSignal::CallbackType callback = (SignalConverter::WebViewPageLoadSignal::CallbackType) jarg2; { try { - result = (bool)proxy->Empty(); + proxy->Connect(callback); } catch (std::out_of_range& e) { { - SWIG_CSharpException(SWIG_IndexError, const_cast(e.what())); return 0; + SWIG_CSharpException(SWIG_IndexError, const_cast(e.what())); return ; }; } catch (std::exception& e) { { - SWIG_CSharpException(SWIG_RuntimeError, const_cast(e.what())); return 0; + SWIG_CSharpException(SWIG_RuntimeError, const_cast(e.what())); return ; }; } catch (Dali::DaliException e) { { - SWIG_CSharpException(SWIG_UnknownError, e.condition); return 0; + SWIG_CSharpException(SWIG_UnknownError, e.condition); return ; }; } catch (...) { { - SWIG_CSharpException(SWIG_UnknownError, "unknown error"); return 0; + SWIG_CSharpException(SWIG_UnknownError, "unknown error"); return ; }; } } - return (unsigned int) result; } -SWIGEXPORT unsigned long SWIGSTDCALL CSharp_Dali_WebViewSignalProxy_GetConnectionCount(void * jarg1) -{ - std::size_t result; - WebViewSignalProxy* arg1 = (WebViewSignalProxy*) jarg1; +SWIGEXPORT void SWIGSTDCALL CSharp_Dali_WebViewPageLoadSignal_Disconnect(void * jarg1, void * jarg2) { + SignalConverter::WebViewPageLoadSignal* proxy = (SignalConverter::WebViewPageLoadSignal*) jarg1; + SignalConverter::WebViewPageLoadSignal::CallbackType callback = (SignalConverter::WebViewPageLoadSignal::CallbackType) jarg2; { try { - result = arg1->GetConnectionCount(); + proxy->Disconnect(callback); + } catch (std::out_of_range& e) { + { + SWIG_CSharpException(SWIG_IndexError, const_cast(e.what())); return ; + }; + } catch (std::exception& e) { + { + SWIG_CSharpException(SWIG_RuntimeError, const_cast(e.what())); return ; + }; + } catch (Dali::DaliException e) { + { + SWIG_CSharpException(SWIG_UnknownError, e.condition); return ; + }; + } catch (...) { + { + SWIG_CSharpException(SWIG_UnknownError, "unknown error"); return ; + }; + } + } +} + +SWIGEXPORT void * SWIGSTDCALL CSharp_Dali_new_WebViewPageLoadErrorSignal_PageLoadError(void * jarg1) { + Dali::Toolkit::WebView* webview = (Dali::Toolkit::WebView *) jarg1; + SignalConverter::WebViewPageLoadErrorSignal* result = NULL; + { + try { + result = new SignalConverter::WebViewPageLoadErrorSignal(&webview->PageLoadErrorSignal()); } catch (std::out_of_range& e) { { SWIG_CSharpException(SWIG_IndexError, const_cast(e.what())); return 0; @@ -103641,16 +103688,15 @@ SWIGEXPORT unsigned long SWIGSTDCALL CSharp_Dali_WebViewSignalProxy_GetConnectio }; } } - return (unsigned long) result; + return (void*) result; } -SWIGEXPORT void SWIGSTDCALL CSharp_Dali_WebViewSignalProxy_Connect(void * jarg1, void * jarg2) +SWIGEXPORT void SWIGSTDCALL CSharp_Dali_delete_WebViewPageLoadErrorSignal(void * jarg1) { - WebViewSignalProxy* proxy = (WebViewSignalProxy*) jarg1; - WebViewSignalProxy::CallbackType callback = (WebViewSignalProxy::CallbackType) jarg2; + SignalConverter::WebViewPageLoadErrorSignal* object = (SignalConverter::WebViewPageLoadErrorSignal*) jarg1; { try { - proxy->Connect(callback); + delete object; } catch (std::out_of_range& e) { { SWIG_CSharpException(SWIG_IndexError, const_cast(e.what())); return ; @@ -103671,13 +103717,13 @@ SWIGEXPORT void SWIGSTDCALL CSharp_Dali_WebViewSignalProxy_Connect(void * jarg1, } } - -SWIGEXPORT void SWIGSTDCALL CSharp_Dali_WebViewSignalProxy_Disconnect(void * jarg1, void * jarg2) { - WebViewSignalProxy* proxy = (WebViewSignalProxy*) jarg1; - WebViewSignalProxy::CallbackType callback = (WebViewSignalProxy::CallbackType) jarg2; +SWIGEXPORT void SWIGSTDCALL CSharp_Dali_WebViewPageLoadErrorSignal_Connect(void * jarg1, void * jarg2) +{ + SignalConverter::WebViewPageLoadErrorSignal* proxy = (SignalConverter::WebViewPageLoadErrorSignal*) jarg1; + SignalConverter::WebViewPageLoadErrorSignal::CallbackType callback = (SignalConverter::WebViewPageLoadErrorSignal::CallbackType) jarg2; { try { - proxy->Disconnect(callback); + proxy->Connect(callback); } catch (std::out_of_range& e) { { SWIG_CSharpException(SWIG_IndexError, const_cast(e.what())); return ; @@ -103699,21 +103745,12 @@ SWIGEXPORT void SWIGSTDCALL CSharp_Dali_WebViewSignalProxy_Disconnect(void * jar } -SWIGEXPORT void SWIGSTDCALL CSharp_Dali_WebViewSignalProxy_Emit(void * jarg1, void * jarg2, char * jarg3) { - if (!jarg2) { - SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Dali::Toolkit::WebView & type is null", 0); - return ; - } - if (!jarg3) { - SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "jarg3 is null string", 0); - return ; - } - - WebViewSignalProxy* proxy = (WebViewSignalProxy*) jarg1; - Dali::Toolkit::WebView* webview = (Dali::Toolkit::WebView*) jarg2; +SWIGEXPORT void SWIGSTDCALL CSharp_Dali_WebViewPageLoadErrorSignal_Disconnect(void * jarg1, void * jarg2) { + SignalConverter::WebViewPageLoadErrorSignal* proxy = (SignalConverter::WebViewPageLoadErrorSignal*) jarg1; + SignalConverter::WebViewPageLoadErrorSignal::CallbackType callback = (SignalConverter::WebViewPageLoadErrorSignal::CallbackType) jarg2; { try { - proxy->Emit(*webview, jarg3); + proxy->Disconnect(callback); } catch (std::out_of_range& e) { { SWIG_CSharpException(SWIG_IndexError, const_cast(e.what())); return ; diff --git a/dali-csharp-binder/src/web-view-signal-converter.h b/dali-csharp-binder/src/web-view-signal-converter.h new file mode 100644 index 0000000..e200522 --- /dev/null +++ b/dali-csharp-binder/src/web-view-signal-converter.h @@ -0,0 +1,136 @@ +#ifndef __DALI_CSHARP_BINDER_WEB_VIEW_SIGNAL_CONVERTER_H__ +#define __DALI_CSHARP_BINDER_WEB_VIEW_SIGNAL_CONVERTER_H__ +/* + * Copyright (c) 2019 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// EXTERNAL INCLUDES +#include +#include + +namespace SignalConverter +{ + +// Proxy class of WebViewPageLoadSignal. +// WebViewPageLoadSignal has an argument of std::string type which is not supported at C# side. +// The purpose of this class is to convert signal argument of string type safely. +class WebViewPageLoadSignal : public Dali::ConnectionTracker +{ + +public: + typedef Dali::Signal< void(Dali::Toolkit::WebView, const std::string&) > NativeSignalType; + typedef Dali::Signal< void(Dali::Toolkit::WebView, char*) > ProxySignalType; + typedef void (*CallbackType)(Dali::Toolkit::WebView, char*); + + WebViewPageLoadSignal( NativeSignalType* signal ) + : mNativeSignalPtr( signal ) + { + } + + ~WebViewPageLoadSignal() + { + if( !mProxySignal.Empty() ) + { + mNativeSignalPtr->Disconnect( this, &SignalConverter::WebViewPageLoadSignal::OnEmit ); + } + } + + void Connect( CallbackType csharpCallback ) + { + if( mNativeSignalPtr->Empty()) + { + mNativeSignalPtr->Connect( this, &SignalConverter::WebViewPageLoadSignal::OnEmit ); + } + mProxySignal.Connect( csharpCallback ); + } + + void Disconnect( CallbackType csharpCallback ) + { + mProxySignal.Disconnect( csharpCallback ); + if( mProxySignal.Empty() ) + { + mNativeSignalPtr->Disconnect( this, &SignalConverter::WebViewPageLoadSignal::OnEmit ); + } + } + + void OnEmit( Dali::Toolkit::WebView webview, const std::string& url ) + { + // Safe string conversion + mProxySignal.Emit( webview, SWIG_csharp_string_callback( url.c_str() ) ); + } + +private: + + NativeSignalType* mNativeSignalPtr; + ProxySignalType mProxySignal; +}; + +// Proxy class of WebViewPageLoadErrorSignal. +// WebViewPageLoadSignal has an argument of std::string type which is not supported at C# side. +// The purpose of this class is to convert signal argument of string type safely. +class WebViewPageLoadErrorSignal : public Dali::ConnectionTracker +{ +public: + typedef Dali::Signal< void(Dali::Toolkit::WebView, const std::string&, Dali::Toolkit::WebView::LoadErrorCode) > NativeSignalType; + typedef Dali::Signal< void(Dali::Toolkit::WebView, char*, int) > ProxySignalType; + typedef void (*CallbackType)(Dali::Toolkit::WebView, char*, int); + + WebViewPageLoadErrorSignal( NativeSignalType* signal ) + : mNativeSignalPtr( signal ) + { + } + + ~WebViewPageLoadErrorSignal() + { + if( !mProxySignal.Empty() ) + { + mNativeSignalPtr->Disconnect( this, &SignalConverter::WebViewPageLoadErrorSignal::OnEmit ); + } + } + + void Connect( CallbackType csharpCallback ) + { + if( mNativeSignalPtr->Empty() ) + { + mNativeSignalPtr->Connect( this, &SignalConverter::WebViewPageLoadErrorSignal::OnEmit ); + } + mProxySignal.Connect( csharpCallback ); + } + + void Disconnect( CallbackType csharpCallback ) + { + mProxySignal.Disconnect( csharpCallback ); + if( mProxySignal.Empty() ) + { + mNativeSignalPtr->Disconnect( this, &SignalConverter::WebViewPageLoadErrorSignal::OnEmit ); + } + } + + void OnEmit( Dali::Toolkit::WebView webview, const std::string& url, Dali::Toolkit::WebView::LoadErrorCode code ) + { + // Safe string conversion + mProxySignal.Emit( webview, SWIG_csharp_string_callback( url.c_str() ), static_cast( code ) ); + } + +private: + + NativeSignalType* mNativeSignalPtr; + ProxySignalType mProxySignal; +}; + +} // namespace SignalConverter + +#endif // __DALI_CSHARP_BINDER_WEB_VIEW_SIGNAL_CONVERTER_H__ \ No newline at end of file -- 2.7.4