1 #ifndef __DALI_CSHARP_BINDER_WEB_VIEW_SIGNAL_CONVERTER_H__
2 #define __DALI_CSHARP_BINDER_WEB_VIEW_SIGNAL_CONVERTER_H__
4 * Copyright (c) 2019 Samsung Electronics Co., Ltd.
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
21 #include <dali/public-api/signals/connection-tracker.h>
22 #include <dali-toolkit/devel-api/controls/web-view/web-view.h>
24 namespace SignalConverter
27 // Proxy class of WebViewPageLoadSignal.
28 // WebViewPageLoadSignal has an argument of std::string type which is not supported at C# side.
29 // The purpose of this class is to convert signal argument of string type safely.
30 class WebViewPageLoadSignal : public Dali::ConnectionTracker
34 typedef Dali::Signal< void(Dali::Toolkit::WebView, const std::string&) > NativeSignalType;
35 typedef Dali::Signal< void(Dali::Toolkit::WebView, char*) > ProxySignalType;
36 typedef void (*CallbackType)(Dali::Toolkit::WebView, char*);
38 WebViewPageLoadSignal( NativeSignalType* signal )
39 : mNativeSignalPtr( signal )
43 ~WebViewPageLoadSignal()
45 if( !mProxySignal.Empty() )
47 mNativeSignalPtr->Disconnect( this, &SignalConverter::WebViewPageLoadSignal::OnEmit );
51 void Connect( CallbackType csharpCallback )
53 if( mNativeSignalPtr->Empty())
55 mNativeSignalPtr->Connect( this, &SignalConverter::WebViewPageLoadSignal::OnEmit );
57 mProxySignal.Connect( csharpCallback );
60 void Disconnect( CallbackType csharpCallback )
62 mProxySignal.Disconnect( csharpCallback );
63 if( mProxySignal.Empty() )
65 mNativeSignalPtr->Disconnect( this, &SignalConverter::WebViewPageLoadSignal::OnEmit );
69 void OnEmit( Dali::Toolkit::WebView webview, const std::string& url )
71 // Safe string conversion
72 mProxySignal.Emit( webview, SWIG_csharp_string_callback( url.c_str() ) );
77 NativeSignalType* mNativeSignalPtr;
78 ProxySignalType mProxySignal;
81 // Proxy class of WebViewPageLoadErrorSignal.
82 // WebViewPageLoadSignal has an argument of std::string type which is not supported at C# side.
83 // The purpose of this class is to convert signal argument of string type safely.
84 class WebViewPageLoadErrorSignal : public Dali::ConnectionTracker
87 typedef Dali::Signal< void(Dali::Toolkit::WebView, const std::string&, Dali::Toolkit::WebView::LoadErrorCode) > NativeSignalType;
88 typedef Dali::Signal< void(Dali::Toolkit::WebView, char*, int) > ProxySignalType;
89 typedef void (*CallbackType)(Dali::Toolkit::WebView, char*, int);
91 WebViewPageLoadErrorSignal( NativeSignalType* signal )
92 : mNativeSignalPtr( signal )
96 ~WebViewPageLoadErrorSignal()
98 if( !mProxySignal.Empty() )
100 mNativeSignalPtr->Disconnect( this, &SignalConverter::WebViewPageLoadErrorSignal::OnEmit );
104 void Connect( CallbackType csharpCallback )
106 if( mNativeSignalPtr->Empty() )
108 mNativeSignalPtr->Connect( this, &SignalConverter::WebViewPageLoadErrorSignal::OnEmit );
110 mProxySignal.Connect( csharpCallback );
113 void Disconnect( CallbackType csharpCallback )
115 mProxySignal.Disconnect( csharpCallback );
116 if( mProxySignal.Empty() )
118 mNativeSignalPtr->Disconnect( this, &SignalConverter::WebViewPageLoadErrorSignal::OnEmit );
122 void OnEmit( Dali::Toolkit::WebView webview, const std::string& url, Dali::Toolkit::WebView::LoadErrorCode code )
124 // Safe string conversion
125 mProxySignal.Emit( webview, SWIG_csharp_string_callback( url.c_str() ), static_cast<int>( code ) );
130 NativeSignalType* mNativeSignalPtr;
131 ProxySignalType mProxySignal;
134 } // namespace SignalConverter
136 #endif // __DALI_CSHARP_BINDER_WEB_VIEW_SIGNAL_CONVERTER_H__