ad55258f77a1199fc9ae2788578471fed32d0708
[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     public delegate void QuitEventHandler(object source, QuitEventArgs e);
37
38     [UnmanagedFunctionPointer(CallingConvention.StdCall)]
39     private delegate void QuitEventCallbackDelegate();
40     private QuitEventHandler _builderQuitEventHandler;
41     private QuitEventCallbackDelegate _builderQuitEventCallbackDelegate;
42
43     public event QuitEventHandler Quit
44     {
45       add
46       {
47         lock(this)
48         {
49           // Restricted to only one listener
50           if (_builderQuitEventHandler == null)
51           {
52             _builderQuitEventHandler += value;
53
54             _builderQuitEventCallbackDelegate = new QuitEventCallbackDelegate(OnQuit);
55             this.QuitSignal().Connect(_builderQuitEventCallbackDelegate);
56           }
57         }
58       }
59
60       remove
61       {
62         lock(this)
63         {
64           if (_builderQuitEventHandler != null)
65           {
66             this.QuitSignal().Disconnect(_builderQuitEventCallbackDelegate);
67           }
68
69           _builderQuitEventHandler -= value;
70         }
71       }
72     }
73
74     // Callback for Builder QuitSignal
75     private void OnQuit()
76     {
77       QuitEventArgs e = new QuitEventArgs();
78
79       if (_builderQuitEventHandler != null)
80       {
81         //here we send all data to user event handlers
82         _builderQuitEventHandler(this, e);
83       }
84     }
85
86     %}
87     %enddef
88
89 %define DALI_BUILDER_EVENTHANDLER_PARAM( NameSpace, ClassName)
90   BUILDER_EVENTHANDLER_TYPEMAP_EVENTARG( NameSpace, ClassName);
91   BUILDER_EVENTHANDLER_TYPEMAP_HELPER( NameSpace, ClassName);
92   %enddef
93
94   namespace Dali
95 {
96   DALI_BUILDER_EVENTHANDLER_PARAM( Dali::Toolkit, Builder);
97 }
98