DALi C# binding - EventHandler Support
[platform/core/uifw/dali-toolkit.git] / plugins / dali-swig / SWIG / events / videoview-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 VIDEOVIEW_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 VIDEOVIEW_EVENTHANDLER_TYPEMAP_HELPER(NameSpace, ClassName)
27 %typemap(cscode) NameSpace::ClassName %{
28
29 /**
30   * @brief Event arguments that passed via Finished signal
31   *
32   */
33 public class FinishedEventArgs : EventArgs
34 {
35    private VideoView _videoView;
36
37    /**
38      * @brief VideoView - VideoView is a control for video playback and display.
39      *
40      */
41    public VideoView VideoView
42    {
43       get
44       {
45          return _videoView;
46       }
47       set
48       {
49          _videoView = value;
50       }
51    }
52 }
53
54
55   [UnmanagedFunctionPointer(CallingConvention.StdCall)]
56   public delegate void FinishedEventHandler(object source, FinishedEventArgs e);
57
58   [UnmanagedFunctionPointer(CallingConvention.StdCall)]
59   private delegate void FinishedCallbackDelegate(IntPtr data);
60   private FinishedEventHandler _videoViewFinishedEventHandler;
61   private FinishedCallbackDelegate _videoViewFinishedCallbackDelegate;
62
63   /**
64     * @brief Event for Finished signal which can be used to subscribe/unsubscribe the event handler
65     * (in the type of FinishedEventHandler) provided by the user.
66     * Finished signal is emitted when a video playback have finished.
67     */
68   public event FinishedEventHandler Finished
69   {
70      add
71      {
72         lock(this)
73         {
74            // Restricted to only one listener
75            if (_videoViewFinishedEventHandler == null)
76            {
77               _videoViewFinishedEventHandler += value;
78
79               _videoViewFinishedCallbackDelegate = new FinishedCallbackDelegate(OnFinished);
80               this.FinishedSignal().Connect(_videoViewFinishedCallbackDelegate);
81            }
82         }
83      }
84
85      remove
86      {
87         lock(this)
88         {
89            if (_videoViewFinishedEventHandler != null)
90            {
91               this.FinishedSignal().Disconnect(_videoViewFinishedCallbackDelegate);
92            }
93
94            _videoViewFinishedEventHandler -= value;
95         }
96      }
97   }
98
99   // Callback for VideoView Finished signal
100   private void OnFinished(IntPtr data)
101   {
102      FinishedEventArgs e = new FinishedEventArgs();
103
104      // Populate all members of "e" (FinishedEventArgs) with real data
105      e.VideoView = VideoView.GetVideoViewFromPtr( data );
106
107      if (_videoViewFinishedEventHandler != null)
108      {
109         //here we send all data to user event handlers
110         _videoViewFinishedEventHandler(this, e);
111      }
112   }
113
114   public static ClassName Get ## ClassName ## FromPtr(global::System.IntPtr cPtr) {
115     ClassName ret = new ClassName(cPtr, false);
116    if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
117     return ret;
118   }
119
120 %}
121
122 %enddef
123
124
125 %define DALI_VIDEOVIEW_EVENTHANDLER_PARAM( NameSpace, ClassName)
126
127   VIDEOVIEW_EVENTHANDLER_TYPEMAP_EVENTARG( NameSpace, ClassName);
128   VIDEOVIEW_EVENTHANDLER_TYPEMAP_HELPER( NameSpace, ClassName);
129
130 %enddef
131
132 namespace Dali
133 {
134   DALI_VIDEOVIEW_EVENTHANDLER_PARAM( Dali::Toolkit, VideoView);
135 }