Merge "DALi C# binding - Generic Delegates support for EventHandlers" into devel...
[platform/core/uifw/dali-toolkit.git] / plugins / dali-swig / SWIG / events / builder-event.i
1 /*
2  * Copyright (c) 2016 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17
18 %define BUILDER_EVENTHANDLER_TYPEMAP_EVENTARG(NameSpace, ClassName)
19 %typemap(csimports) NameSpace::ClassName %{
20     using System;
21     using System.Runtime.InteropServices;
22
23 %}
24
25 %enddef
26
27
28 %define BUILDER_EVENTHANDLER_TYPEMAP_HELPER(NameSpace, ClassName)
29   %typemap(cscode) NameSpace::ClassName %{
30
31     public class QuitEventArgs : EventArgs
32     {
33     }
34
35     [UnmanagedFunctionPointer(CallingConvention.StdCall)]
36     private delegate void QuitEventCallbackDelegate();
37     private DaliEventHandler<object,QuitEventArgs> _builderQuitEventHandler;
38     private QuitEventCallbackDelegate _builderQuitEventCallbackDelegate;
39
40     public event DaliEventHandler<object,QuitEventArgs> Quit
41     {
42       add
43       {
44         lock(this)
45         {
46           // Restricted to only one listener
47           if (_builderQuitEventHandler == null)
48           {
49             _builderQuitEventHandler += value;
50
51             _builderQuitEventCallbackDelegate = new QuitEventCallbackDelegate(OnQuit);
52             this.QuitSignal().Connect(_builderQuitEventCallbackDelegate);
53           }
54         }
55       }
56
57       remove
58       {
59         lock(this)
60         {
61           if (_builderQuitEventHandler != null)
62           {
63             this.QuitSignal().Disconnect(_builderQuitEventCallbackDelegate);
64           }
65
66           _builderQuitEventHandler -= value;
67         }
68       }
69     }
70
71     // Callback for Builder QuitSignal
72     private void OnQuit()
73     {
74       QuitEventArgs e = new QuitEventArgs();
75
76       if (_builderQuitEventHandler != null)
77       {
78         //here we send all data to user event handlers
79         _builderQuitEventHandler(this, e);
80       }
81     }
82
83     %}
84     %enddef
85
86 %define DALI_BUILDER_EVENTHANDLER_PARAM( NameSpace, ClassName)
87   BUILDER_EVENTHANDLER_TYPEMAP_EVENTARG( NameSpace, ClassName);
88   BUILDER_EVENTHANDLER_TYPEMAP_HELPER( NameSpace, ClassName);
89   %enddef
90
91   namespace Dali
92 {
93   DALI_BUILDER_EVENTHANDLER_PARAM( Dali::Toolkit, Builder);
94 }
95