Support legacy way to create InputMethodContext
[platform/core/uifw/dali-csharp-binder.git] / dali-csharp-binder / src / web-view-signal-converter.h
1 #ifndef __DALI_CSHARP_BINDER_WEB_VIEW_SIGNAL_CONVERTER_H__
2 #define __DALI_CSHARP_BINDER_WEB_VIEW_SIGNAL_CONVERTER_H__
3 /*
4  * Copyright (c) 2019 Samsung Electronics Co., Ltd.
5  *
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
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
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.
17  *
18  */
19
20 // EXTERNAL INCLUDES
21 #include <dali/public-api/signals/connection-tracker.h>
22 #include <dali-toolkit/devel-api/controls/web-view/web-view.h>
23
24 namespace SignalConverter
25 {
26
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
31 {
32
33 public:
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*);
37
38   WebViewPageLoadSignal( NativeSignalType* signal )
39     : mNativeSignalPtr( signal )
40   {
41   }
42
43   ~WebViewPageLoadSignal()
44   {
45     if( !mProxySignal.Empty() )
46     {
47       mNativeSignalPtr->Disconnect( this, &SignalConverter::WebViewPageLoadSignal::OnEmit );
48     }
49   }
50
51   void Connect( CallbackType csharpCallback )
52   {
53     if( mNativeSignalPtr->Empty())
54     {
55       mNativeSignalPtr->Connect( this, &SignalConverter::WebViewPageLoadSignal::OnEmit );
56     }
57     mProxySignal.Connect( csharpCallback );
58   }
59
60   void Disconnect( CallbackType csharpCallback )
61   {
62     mProxySignal.Disconnect( csharpCallback );
63     if( mProxySignal.Empty() )
64     {
65       mNativeSignalPtr->Disconnect( this, &SignalConverter::WebViewPageLoadSignal::OnEmit );
66     }
67   }
68
69   void OnEmit( Dali::Toolkit::WebView webview, const std::string& url )
70   {
71     // Safe string conversion
72     mProxySignal.Emit( webview, SWIG_csharp_string_callback( url.c_str() ) );
73   }
74
75 private:
76
77   NativeSignalType* mNativeSignalPtr;
78   ProxySignalType   mProxySignal;
79 };
80
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
85 {
86 public:
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);
90
91   WebViewPageLoadErrorSignal( NativeSignalType* signal )
92     : mNativeSignalPtr( signal )
93   {
94   }
95
96   ~WebViewPageLoadErrorSignal()
97   {
98     if( !mProxySignal.Empty() )
99     {
100       mNativeSignalPtr->Disconnect( this, &SignalConverter::WebViewPageLoadErrorSignal::OnEmit );
101     }
102   }
103
104   void Connect( CallbackType csharpCallback )
105   {
106     if( mNativeSignalPtr->Empty() )
107     {
108       mNativeSignalPtr->Connect( this, &SignalConverter::WebViewPageLoadErrorSignal::OnEmit );
109     }
110     mProxySignal.Connect( csharpCallback );
111   }
112
113   void Disconnect( CallbackType csharpCallback )
114   {
115     mProxySignal.Disconnect( csharpCallback );
116     if( mProxySignal.Empty() )
117     {
118       mNativeSignalPtr->Disconnect( this, &SignalConverter::WebViewPageLoadErrorSignal::OnEmit );
119     }
120   }
121
122   void OnEmit( Dali::Toolkit::WebView webview, const std::string& url, Dali::Toolkit::WebView::LoadErrorCode code )
123   {
124     // Safe string conversion
125     mProxySignal.Emit( webview, SWIG_csharp_string_callback( url.c_str() ), static_cast<int>( code ) );
126   }
127
128 private:
129
130   NativeSignalType* mNativeSignalPtr;
131   ProxySignalType   mProxySignal;
132 };
133
134 } // namespace SignalConverter
135
136 #endif // __DALI_CSHARP_BINDER_WEB_VIEW_SIGNAL_CONVERTER_H__