Merge "DALi C# binding - Generic Delegates support for EventHandlers" into devel...
[platform/core/uifw/dali-toolkit.git] / plugins / dali-swig / SWIG / events / resourceimage-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 ResourceImage_EVENTHANDLER_TYPEMAP_EVENTARG(NameSpace, ClassName)
19 %typemap(csimports) NameSpace::ClassName %{
20 using System;
21 using System.Runtime.InteropServices;
22
23 %}
24 %enddef
25
26 %define ResourceImage_EVENTHANDLER_TYPEMAP_HELPER(NameSpace, ClassName)
27 %typemap(cscode) NameSpace::ClassName %{
28
29 public class LoadingFinishedEventArgs : EventArgs
30 {
31    private ResourceImage _resourceImage;
32
33    public ResourceImage ResourceImage
34    {
35       get
36       {
37          return _resourceImage;
38       }
39       set
40       {
41          _resourceImage = value;
42       }
43    }
44 }
45
46   [UnmanagedFunctionPointer(CallingConvention.StdCall)]
47   private delegate void LoadingFinishedEventCallbackDelegate(IntPtr ResourceImage);
48   private DaliEventHandler<object,LoadingFinishedEventArgs> _resourceImageLoadingFinishedEventHandler;
49   private LoadingFinishedEventCallbackDelegate _resourceImageLoadingFinishedEventCallbackDelegate;
50
51   public event DaliEventHandler<object,LoadingFinishedEventArgs> LoadingFinished
52   {
53      add
54      {
55         lock(this)
56         {
57            // Restricted to only one listener
58            if (_resourceImageLoadingFinishedEventHandler == null)
59            {
60               _resourceImageLoadingFinishedEventHandler += value;
61
62               _resourceImageLoadingFinishedEventCallbackDelegate = new LoadingFinishedEventCallbackDelegate(OnLoadingFinished);
63               this.LoadingFinishedSignal().Connect(_resourceImageLoadingFinishedEventCallbackDelegate);
64            }
65         }
66      }
67
68      remove
69      {
70         lock(this)
71         {
72            if (_resourceImageLoadingFinishedEventHandler != null)
73            {
74               this.LoadingFinishedSignal().Disconnect(_resourceImageLoadingFinishedEventCallbackDelegate);
75            }
76
77            _resourceImageLoadingFinishedEventHandler -= value;
78         }
79      }
80   }
81
82   // Callback for ResourceImage LoadingFinishedSignal
83   private void OnLoadingFinished(IntPtr data)
84   {
85      LoadingFinishedEventArgs e = new LoadingFinishedEventArgs();
86
87      // Populate all members of "e" (LoadingFinishedEventArgs) with real data
88      e.ResourceImage = ResourceImage.GetResourceImageFromPtr(data);
89
90      if (_resourceImageLoadingFinishedEventHandler != null)
91      {
92         //here we send all data to user event handlers
93         _resourceImageLoadingFinishedEventHandler(this, e);
94      }
95   }
96
97
98 public static ClassName Get ## ClassName ## FromPtr(global::System.IntPtr cPtr) {
99     ClassName ret = new ClassName(cPtr, false);
100    if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
101     return ret;
102   }
103
104 %}
105
106 %enddef
107
108
109 %define DALI_resourceImage_EVENTHANDLER_PARAM( NameSpace, ClassName)
110   ResourceImage_EVENTHANDLER_TYPEMAP_EVENTARG( NameSpace, ClassName);
111   ResourceImage_EVENTHANDLER_TYPEMAP_HELPER( NameSpace, ClassName);
112 %enddef
113
114 namespace Dali
115 {
116   DALI_resourceImage_EVENTHANDLER_PARAM( Dali, ResourceImage);
117 }